@customize-agent/server 4.59.0 → 4.59.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +15 -15
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/server/chunks/5547.js +23 -23
  5. package/.next/server/chunks/6321.js +1 -1
  6. package/.next/server/chunks/8204.js +1 -1
  7. package/.next/server/middleware-build-manifest.js +1 -1
  8. package/.next/server/pages/404.html +1 -1
  9. package/.next/server/pages/500.html +1 -1
  10. package/.next/server/pages/api/documents/generate/preview.js +1 -1
  11. package/.next/server/pages/api/documents/generate.js +1 -1
  12. package/.next/server/pages/api/documents/generated/[id]/repair/[rid]/confirm.js +1 -1
  13. package/.next/server/pages/api/documents/generated/[id]/repair.js +1 -1
  14. package/.next/server/pages/api/skills/[id].js +1 -1
  15. package/.next/server/pages/api/skills/validate.js +1 -1
  16. package/.next/server/pages/api/skills.js +1 -1
  17. package/.next/server/pages/canvas/[id].html +1 -1
  18. package/.next/server/pages/canvas.html +1 -1
  19. package/.next/server/pages/documents.html +1 -1
  20. package/.next/server/pages/guide.html +1 -1
  21. package/.next/server/pages/index.html +1 -1
  22. package/.next/server/pages/knowledge/file-detail.html +1 -1
  23. package/.next/server/pages/knowledge/files.html +1 -1
  24. package/.next/server/pages/knowledge/manage.html +1 -1
  25. package/.next/server/pages/knowledge.html +1 -1
  26. package/.next/server/pages/models.html +1 -1
  27. package/.next/server/pages/overview.html +1 -1
  28. package/.next/server/pages/prompt.html +1 -1
  29. package/.next/server/pages/settings.html +1 -1
  30. package/.next/server/pages/skills.html +1 -1
  31. package/.next/server/pages/system/logs.html +1 -1
  32. package/.next/server/pages-manifest.json +33 -33
  33. package/.next/static/{Z8psgNSpy4sSg2lIho8Uw → 4xQDkixSretJDM503EzIq}/_buildManifest.js +1 -1
  34. package/.next/static/chunks/{289-136ebb30e0f6723a.js → 289-0cccd8131332e041.js} +3 -3
  35. package/.next/static/chunks/{426-90638907336adcb8.js → 426-22c4cedb04b0d45d.js} +1 -1
  36. package/.next/static/chunks/530-6f3f5848c6f702ae.js +1 -0
  37. package/.next/static/chunks/pages/{_app-74fce107cacfaee7.js → _app-ebb535779b63fd5d.js} +15 -15
  38. package/.next/static/chunks/pages/canvas/[id]-515edd3e72acaf82.js +1 -0
  39. package/.next/static/chunks/pages/knowledge-09dde24cdce1b195.js +1 -0
  40. package/.next/static/chunks/pages/prompt-6a224562d194cb45.js +1 -0
  41. package/.next/static/chunks/pages/system/logs-70790bee46e5a08d.js +1 -0
  42. package/.next/static/css/85c434f8fd3a17ae.css +1 -0
  43. package/package.json +1 -1
  44. package/scripts/half-built-scan.mjs +150 -0
  45. package/.next/static/chunks/530-1b18bb11570dc44a.js +0 -1
  46. package/.next/static/chunks/pages/canvas/[id]-9f4e9f49e512418b.js +0 -1
  47. package/.next/static/chunks/pages/knowledge-ca8ad5501faed486.js +0 -1
  48. package/.next/static/chunks/pages/prompt-dd9a9f9105216e2b.js +0 -1
  49. package/.next/static/chunks/pages/system/logs-9deb1217739490af.js +0 -1
  50. package/.next/static/css/0e46e39b61e4e262.css +0 -1
  51. /package/.next/static/{Z8psgNSpy4sSg2lIho8Uw → 4xQDkixSretJDM503EzIq}/_ssgManifest.js +0 -0
@@ -36,7 +36,7 @@ ${c}`;if("delete"===d)return a.split(/\r?\n/u).filter(a=>!H(a).includes(e)).join
36
36
 
37
37
  `:"";return`${e}${d(b)}
38
38
  ${d(b.map(()=>"---"))}
39
- ${c.map(a=>d(a)).join("\n")}`}(a.spec);return M(b,"insert_table",c,a.at,d)}let S={name:"insert_table",description:(0,F.HG)("在锚点处插入一张 Markdown 表格(先过表块守卫:表头 + 分隔线 + ≥1 行数据,且各行列数与表头一致),再走与 patch 相同的事务与边界。",'正文需要以正式表格承载清单/参数/对照关系时(表格是评价规则里的加分承载面);或某处"应该有一张表"而目前只有一段罗列句时。','正文禁表场景(招标显式禁表)——那时表会被判为结构缺陷;也不要拿它插"见下表"式的空表或没有表头的表(守卫会直接拒绝);表格内容必须有资料依据,不得为了好看编数据。'),scope:"document-draft",inputSchema:F.wQ.object({nodeId:F.wQ.str("目标节点 id"),spec:F.wQ.obj("表格规格",{headers:F.wQ.arr("表头单元格(非空)",F.wQ.str("表头")),rows:F.wQ.arr("数据行(≥1 行,每行列数须与表头一致)",F.wQ.arr("一行单元格",F.wQ.str("单元格"))),caption:F.wQ.str("表名/表注(可选;有则作为表前一行输出)")},["headers","rows"]),at:F.wQ.obj("插入位置锚点",{text:F.wQ.str("锚点原文(逐字取自当前草稿)")},["text"])},["nodeId","spec","at"]),idempotent:!1,idempotentViaSnapshot:!0,handler:R};async function T(a,b){let c=String(a?.nodeId??"").trim();if(!c)throw(0,F.P9)("nodeId 不能为空");let d=b.document;if(!d)throw(0,F.mW)("文档事务能力(`ctx.document.commitSection`)","运行时注入:接 `chapterLoop` 的块推进/提交记账");let e=d.readSection(c);if("string"!=typeof e)throw(0,F.mX)(`节点「${c}」不存在或尚无草稿正文,不能提交`);if(!e.trim())throw(0,F.P9)(`节点「${c}」正文为空,不能提交(空块提交会把"没写"标成"写完")`);return"function"==typeof d.commitSection&&await d.commitSection(c),{nodeId:c,committed:!0,committedAt:Date.now(),note:d.commitSection?"已通过事务通道提交":'事务通道未提供 commitSection 钩子;本次仅返回提交回执(S1.3 的显式化目的:让画布能显示"这块定了")'}}async function U(a,b){let c=String(a?.nodeId??"").trim();if(!c)throw(0,F.P9)("nodeId 不能为空");if(!a?.anchor||"string"!=typeof a.anchor.text)throw(0,F.P9)("anchor.text 必填(要删的那句/那行的原文)");return M(b,"delete_span",c,a.anchor,"")}let V=[O,Q,S,{name:"commit_section",description:(0,F.HG)('显式提交一个小节的草稿(现在靠"不返回 toolCall"隐式表达;显式化以便画布显示与循环判定)。','这一块确实写完了、不再改时(提交是**块推进的信号**,也是"我认账"的声明)。','还想再改(提交后再改会走到重开路径,代价更高);正文为空时提交会被直接拒绝——也不要把它当"跳过这一块"的手段(跳过是 `skip_repair_round`/声明的活)。'),scope:"document-draft",inputSchema:F.wQ.object({nodeId:F.wQ.str("目标节点 id")},["nodeId"]),idempotent:!0,handler:T},{name:"delete_span",description:(0,F.HG)("删除锚点命中的整句/整行(`applyChapterPatch` 的空 replacement 删除语义),走同一套 4.4 边界与事务。","确定某句是污染内容时必须删(来源罗列句、内部术语句、元话语声明句、重复句)——**删得掉比改得像更重要**;`check` 报了某句类缺陷而改写无法消除时。",'只是"这句写得不好"(那是 `patch_section` 改写,删除会丢信息);一次删掉大段正文(净字数下限会直接拒绝,且删内容比补内容更容易伤到实质判据);也不要连着删多句——每删一句都要有独立的判据依据(`explain_defect` 可查)。'),scope:"document-draft",inputSchema:F.wQ.object({nodeId:F.wQ.str("目标节点 id"),anchor:F.wQ.obj("要删除的语句锚点(逐字取自当前草稿)",{text:F.wQ.str("锚点原文")},["text"])},["nodeId","anchor"]),idempotent:!1,idempotentViaSnapshot:!0,handler:U}];async function W(a){let b,{budget:c}=a,d=[...a.initialMessages],e=0,f=0,g="模型未产出可用正文";for(let h=1;h<=c.maxTurnsPerBlock;h+=1){if(f>=c.maxToolCallsPerBlock){g=`工具调用预算耗尽(${f}/${c.maxToolCallsPerBlock})`;break}let i=await a.runTurn({system:a.system,messages:d,turn:h});if(f+=i.toolCalls.length,i.refused){if(b)return a.onTurn?.({turn:h,residual:b.residual,toolCalls:f,action:"unfixable"}),{kind:"unfixable",content:b.content,turn:h,residual:b.residual,toolCalls:f,reason:`预算耗尽(${i.refused.kind})本轮调用未发起:提交当前最好草稿`,issues:[]};return a.onTurn?.({turn:h,residual:0,toolCalls:f,action:"unfixable"}),{kind:"budget_refused",turn:h,reason:i.refused.message,refused:i.refused}}let j=i.committed||i.text;if(j&&j.trim().length>0){let k=await a.check(j),l=k.issues.filter(a=>"error"===a.level||"blocker"===a.severity).length,m=0===k.degraded.length;if(k.degraded.length>0&&0===k.executed.length)return a.onTurn?.({turn:h,residual:l,toolCalls:f,action:"unfixable"}),{kind:"unfixable",content:j,turn:h,residual:l,toolCalls:f,reason:`自查维度全部降级(${k.degraded.join("、")}),本块未做自查,直接提交当前草稿`,issues:k.issues};if(0===l&&m)return a.onTurn?.({turn:h,residual:l,toolCalls:f,action:"commit"}),{kind:"passed",content:j,turn:h,residual:l,toolCalls:f};let n=b?.residual;if((void 0===b||l<b.residual)&&(b={content:j,residual:l}),a.onTurn?.({turn:h,residual:l,toolCalls:f,action:"regenerate"}),void 0===n||l<n-Math.max(1,Math.ceil(.1*n)))e=0;else if((e+=1)>=c.noImprovementRounds){g=`连续 ${e} 轮无改善(残余 ${l})`,a.onTurn?.({turn:h,residual:l,toolCalls:f,action:"unfixable"});break}h<c.maxTurnsPerBlock&&(d=[...d,...i.toolMessages??[],{role:"assistant",content:j},{role:"user",content:function(a){let b=a.filter(a=>"error"===a.level||"blocker"===a.severity),c=b.slice(0,12).map((a,b)=>`${b+1}. ${a.detectorId?`[${a.detectorId}] `:""}${a.message}`),d=b.slice(12),e=new Map;for(let a of d){let b=a.detectorId||"(未标注判据)";e.set(b,(e.get(b)||0)+1)}return["【自查裁决】本稿未通过判据,下列问题必须修正后重新输出完整本节正文:",...c,d.length>0?`${d.length} 条未逐条列出,按判据分布:${[...e.entries()].map(([a,b])=>`${a} ${b} 条`).join("、")}`:"","修正要求:直接输出修正后的**完整**本节正文(不要只输出改动片段、不要解说改动过程);保留原有事实、数值与结论,不得以删除内容的方式规避问题。"].filter(Boolean).join("\n")}(k.issues)}]);continue}let k=i.toolMessages??[];(k.length>0||i.text.trim().length>0)&&(d=[...d,...k,...i.text.trim().length>0?[{role:"assistant",content:i.text}]:[]]),g=h>=c.maxTurnsPerBlock?"轮次耗尽时模型仍未产出正文":g}return b?{kind:"unfixable",content:b.content,turn:c.maxTurnsPerBlock,residual:b.residual,toolCalls:f,reason:g,issues:[]}:{kind:"no_content",turn:c.maxTurnsPerBlock,reason:g}}var X=c(25018),Y=c(73024),Z=c(48161),$=c(15751),_=c(19898),aa=c(82437);function ab(a){try{let b=e.join((0,y.a2)(),"projects",(0,_.computeProjectId)(e.resolve(a.projectRoot)),"kb.db");if(!Y.existsSync(b))return;return new _.IndexStateStore(b)}catch{return}}function ac(a,b){let c=(a.scopeRoots??[]).filter(Boolean);if(0===c.length)return!1;let d=(0,x.LI)((0,y.NW)(a.projectRoot),b);return!!d.ok&&c.some(a=>(0,x.kq)(d.absolute,a))}function ad(a,b){if(0===(a.scopeRoots??[]).filter(Boolean).length)throw(0,F.JA)(`工具「${b}」被拒绝:本次运行未授予任何资料范围(fail-closed,见 4.6 域表)`)}let ae=new Set([".md",".markdown",".txt",".csv",".json",".tsv",".log"]),af=new Set([".dwg"]),ag=new Set([".xlsx",".xls"]),ah={name:"read_raw",description:(0,F.HG)("按白名单钳制读取原始资料的抽取全文,并可按页码 / 字符区间 / 工作表定位(S7)。","手上有疑点、需要回原文核对时(如正文引用的数值要确认原文怎么写、图纸说明里的参数在哪一页);检索结果看起来矛盾、或 `search_evidence` 给出的切片是派生内容而你要看原文上下文时。",'已经拿到的切片文本足够回答当前问题时(原文一次可能上万字符,是切片预算的数十倍);只是想知道"项目里有没有这个文件"(那是 `discover_files`);也不要拿它当通用读文件工具去读项目里与资料无关的文件——路径不在资料白名单内一律 PATH_DENIED。'),scope:"evidence-whitelist",inputSchema:F.wQ.object({path:F.wQ.str("资料文件路径(KB 相对路径或落在白名单根内的绝对路径)"),loc:F.wQ.obj("定位(可选;三者互斥,page 优先于 range)",{page:F.wQ.int("PDF 页码(依赖抽取器写下的「## PDF 第 N 页」标记)"),range:F.wQ.arr("抽取文本坐标系下的字符区间 [start, end)(**不是文件字节偏移**,见 S7.2 #1)",F.wQ.int("字符偏移")),sheet:F.wQ.str("XLSX 工作表名(仅 .xlsx/.xls 有效;缺省取第一个工作表)")})},["path"]),idempotent:!0,handler:function(a,b){let c,d,f,g=(0,F.vE)(a.path,b.scopeRoots,"read_raw 的 path"),h=e.extname(g.absolute).toLowerCase(),i=a.loc??{};if(af.has(h))throw(0,F.Lu)("NOT_IMPLEMENTED","read_raw(dwg) 一期不支持:仓库只做 DWG→DXF 文本实体解析,无 ODA/LibreDWG 转换器。需要图纸参数请改用结构化实体通道(见 S7.1 第 2 行:`ExtractionResult.structured.cad`)。");let j="kb-chunks";if(void 0!==i.sheet&&ag.has(h)&&(c=function(a,b){let c=$.readFile(a,{cellDates:!0,sheetStubs:!1}),d=b&&c.SheetNames.includes(b)?b:c.SheetNames[0];if(!d)throw(0,F.mX)(`工作表不存在:${b??"(第一个工作表)"};该工作簿共 ${c.SheetNames.length} 个工作表`);let e=c.Sheets[d];if(!e)throw(0,F.mX)(`工作表不存在:${d}`);let f=$.utils.sheet_to_json(e,{header:1,raw:!1,defval:""}).map(a=>a.map(a=>String(a).trim()).join(" | ")).join("\n");return{text:f,totalChars:f.length}}(g.absolute,i.sheet).text,j="xlsx-sheet"),void 0===c&&"function"==typeof b.rawText){let a=b.rawText(g.relative);"string"==typeof a&&(c=a,j="runtime-rawText")}if(void 0===c){let a=ab(b);if(a)try{let b=a.getDocumentChunk(g.relative);b?.content&&(c=b.content,j="kb-chunks")}finally{a.close()}}if(void 0===c&&ae.has(h)&&Y.existsSync(g.absolute)&&(c=Y.readFileSync(g.absolute,"utf8"),j="disk-text"),void 0===c)throw(0,F.mW)(`文件「${g.relative}」的抽取文本(KB 切片库里没有该路径的 document chunk,且它不是可直读的文本格式)`,"运行时注入 `ctx.rawText`(接 `IndexStateStore.getDocumentChunk`),或先让该文件过一遍抽取器落库");let k=c.length,l=c;if("number"==typeof i.page){let a=function(a,b){let c=RegExp(`^#{1,6}\\s*PDF\\s*第\\s*${b}\\s*页`,"mu").exec(a);if(!c)return{text:"",found:!1};let d=a.slice(c.index+c[0].length),e=/^#{1,6}\s*PDF\s*第\s*\d+\s*页/mu.exec(d);return{text:e?d.slice(0,e.index):d,found:!0}}(c,i.page);if(!a.found)throw(0,F.mX)(`在「${g.relative}」的抽取文本里找不到页码标记「## PDF 第 ${i.page} 页」(markdown 页标记通道)`);d=i.page,l=a.text}else if(Array.isArray(i.range)&&2===i.range.length){let[a,b]=i.range;if(!Number.isFinite(a)||!Number.isFinite(b)||a<0||b<=a)throw(0,F.P9)(`loc.range 必须是 [start, end] 且 0 <= start < end(当前 ${JSON.stringify(i.range)})`);if(f=[Math.trunc(a),Math.trunc(b)],!(l=c.slice(f[0],f[1])))throw(0,F.P9)(`loc.range ${JSON.stringify(f)} 落在文本长度 ${k} 之外`)}let m=l.length>F.Ec;return{text:m?l.slice(0,F.Ec):l,truncated:m,totalChars:k,channel:j,relativePath:g.relative,scopeRoot:g.root,...void 0===d?{}:{page:d},...void 0===f?{}:{range:f},...void 0===i.sheet?{}:{sheet:i.sheet}}}};async function ai(a,b){let d=(0,F.He)(a.query,"query");ad(b,"search_evidence");let e=(0,F.yr)(a.opts?.limit,8,1,40),{getMultiProjectManager:f}=await Promise.resolve().then(c.bind(c,44533)),g=f(),h=await g.search(b.projectRoot,d,{limit:3*e,...a.opts?.scope==="project"?{scope:"project"}:{}}),i=Array.isArray(h?.results)?h.results:[],j=[],k=0;for(let a of i){if(!ac(b,String(a.filePath??""))){k+=1;continue}if(j.push({filePath:a.filePath,score:a.score,...void 0===a.sectionTitle?{}:{sectionTitle:a.sectionTitle},content:a.content,...void 0===a.startChar?{}:{startChar:a.startChar},...void 0===a.endChar?{}:{endChar:a.endChar},scope:a.scope,...void 0===a.source?{}:{source:a.source}}),j.length>=e)break}return{query:d,items:j,droppedOutOfScope:k,queryTimeMs:Number(h?.queryTimeMs??0)}}let aj={name:"search_evidence",description:(0,F.HG)("在**本项目资料白名单内**按查询检索证据切片(走 `MultiProjectManager.search`;结果按资料范围过滤)。","需要为某个具体论点找资料依据、或要确认某个数值/规格/做法在资料里出现过时;写作前为本章做一次定向取证。",'每章无脑先调一次"拿一堆证据"(S1.3 点名的那种滥用:会引入与本章无关的证据并挤掉预算);也不是通用搜索——它只搜本项目资料,找工具/文件用 `discover_files`,看原文用 `read_raw`。同一 query 在同一轮里不要重复调(`idempotent`,重复结果只有噪声)。'),scope:"evidence-whitelist",inputSchema:F.wQ.object({query:F.wQ.str("检索查询(自然语言或关键短语;建议带项目实体词而非泛词)"),opts:F.wQ.obj("检索选项",{limit:F.wQ.int("返回条数上限(默认 8;1–40)"),scope:F.wQ.enumStr("检索面:project 仅本项目 / 缺省含全局库",["chapter","project"])})},["query"]),idempotent:!0,handler:ai},ak={name:"read_source",description:(0,F.HG)("按文件路径读取该文件在 KB 里的**切片序列 + 索引元数据**(格式/大小/切片数/索引状态)。",'已经知道要看的文件、想看它的切片结构(每片带 `startChar`/`endChar`,可据此决定 `read_raw` 的 range)时;或要确认某个文件的索引状态/切片数(例如检索没命中,先判断是"没索引"还是"真没有")。','只想知道"有哪些文件"(用 `discover_files`);想看连续原文(用 `read_raw`,切片是派生且可能被截断);路径不在资料白名单内时会被 PATH_DENIED,不要试图用别的写法绕过。'),scope:"evidence-whitelist",inputSchema:F.wQ.object({filePath:F.wQ.str("资料文件路径(KB 相对路径,须落在资料白名单内)"),opts:F.wQ.obj("读取选项",{maxChunks:F.wQ.int("返回切片数上限(默认 12;1–60)")})},["filePath"]),idempotent:!0,handler:function(a,b){let c=(0,F.vE)(a.filePath,b.scopeRoots,"read_source 的 filePath"),d=(0,F.yr)(a.opts?.maxChunks,12,1,60),f=(0,y.Yy)(b.projectRoot).find(a=>a.relativePath===c.relative),g=ab(b);if(!g)throw(0,F.mW)(`项目 KB 切片库(kb.db)不存在,无法读取「${c.relative}」的切片`,"先让本项目过一遍索引(kbService 的索引链路);或确认 projectRoot 指向的是已索引的项目");try{let a=g.countChunks({relativePath:c.relative}),b=g.listChunks({relativePath:c.relative,limit:d});if(0===b.length)throw(0,F.mX)(`「${c.relative}」在 KB 切片库里没有切片(可能尚未索引或索引失败)`);return{relativePath:c.relative,metadata:{format:f?.format??e.extname(c.relative).slice(1).toLowerCase(),category:f?.category??"other",fileSize:f?.fileSize??0,mtime:f?.mtime??0,chunkCount:f?.chunkCount??a,status:f?.status??"unknown",...f?.indexedAt===void 0?{}:{indexedAt:f.indexedAt},...b[0]?.materialRoot===void 0?{}:{materialRoot:b[0].materialRoot}},chunks:b.map(a=>({chunkIndex:a.chunkIndex,...void 0===a.sectionTitle?{}:{sectionTitle:a.sectionTitle},content:a.content,...void 0===a.startChar?{}:{startChar:a.startChar},...void 0===a.endChar?{}:{endChar:a.endChar},...void 0===a.chunkKind?{}:{chunkKind:a.chunkKind}})),totalChunks:a}}finally{g.close()}}},al={name:"discover_files",description:(0,F.HG)("列出本项目资料白名单内的文件清单(路径/分类/格式/大小/切片数/索引状态),可按 category 与路径关键词过滤。",'开工前先摸清"这次手上有什么资料"(定位阶段的第一步);或检索反复不命中时,先确认那份资料到底在不在、索引状态是不是 failed。',"已经知道文件路径时(直接 `read_source`/`read_raw`,列表信息帮不上);也不要指望它返回文件**内容**——只返回清单与元数据,内容是 `read_raw` 的事。"),scope:"evidence-whitelist",inputSchema:F.wQ.object({query:F.wQ.str("路径关键词(子串匹配 relativePath;缺省不过滤)"),opts:F.wQ.obj("过滤选项",{category:F.wQ.str("资料分类(spreadsheet / image / cad / document / other)"),limit:F.wQ.int("返回条数上限(默认 40;1–200)")})}),idempotent:!0,handler:function(a,b){ad(b,"discover_files");let c=(0,F.yr)(a.opts?.limit,40,1,200),d=a.opts?.category?.trim(),e="string"==typeof a.query?a.query.trim().toLowerCase():"",f=(0,y.Yy)(b.projectRoot,d?{category:d}:{}),g=0,h=[];for(let a of f){if(!ac(b,a.relativePath)){g+=1;continue}(!e||a.relativePath.toLowerCase().includes(e))&&h.push({relativePath:a.relativePath,category:a.category,format:a.format,fileSize:a.fileSize,chunkCount:a.chunkCount,status:a.status,matchedBy:a.matchedBy,...void 0===a.collectionName?{}:{collectionName:a.collectionName}})}let i=h.slice(0,c);return{items:i,total:h.length,returned:i.length,truncated:h.length>i.length,droppedOutOfScope:g}}};async function am(a,b){let c=(0,F.He)(a.attribute,"attribute"),d=b.authoritative;if(!d)throw(0,F.mW)("权威值选取的输入(facts / labeledValues / overrides)","运行时把 `buildAuthoritativeValues` 的入参挂到 `ctx.authoritative`(来源:事实池 + 原文口径标签 + 答疑覆盖)");let e=(0,aa.iC)(d),f=(0,aa.hf)(c),g=e.resolved.find(a=>a.attribute===c)??e.resolved.find(a=>(0,aa.hf)(a.attribute)===f)??e.resolved.find(a=>a.attribute.includes(c)||c.includes(a.attribute));return g?{attribute:g.attribute,value:g.value,rule:g.rule,evidence:g.evidence.map(a=>({source:a.source,snippet:a.snippet})),superseded:[...g.superseded],candidates:g.candidates.slice(0,12).map(a=>({subject:a.subject,value:a.value,source:a.source,priority:a.priority})),caliber:g.caliber}:{attribute:c,value:null,rule:null,evidence:[],superseded:[],candidates:[],caliber:!1}}let an={name:"lookup_authoritative",description:(0,F.HG)("按属性名查**现行权威值**及其裁决规则(R1..R7)、依据出处、被取代的历史值与全部候选(`buildAuthoritativeValues` 的 `ResolvedValue` 子集)。",'正文里要写某个数值/口径、需要先确认"以哪份资料为准"时(权威阶梯:clarification > 招标条款 > 评价规则 > 清单 > 图纸注记);或一个属性在资料里出现了多个值时,用它的 `superseded` / `candidates` 判断哪个是现行口径。','想检索资料原文(那是 `search_evidence`/`read_raw`);拿它当"事实查询"用来问与权威口径无关的内容(它只登记**口径型属性**,未命中会返回 `value: null`,那不是"资料里没有"而是"没有权威口径")。归**计划**阶段(S1.3)。'),scope:"evidence-whitelist",inputSchema:F.wQ.object({attribute:F.wQ.str("属性名(如「计划工期」「最高投标限价」「垫层做法」)")},["attribute"]),idempotent:!0,handler:am},ao=new Set([".png",".jpg",".jpeg",".gif",".bmp",".webp",".tif",".tiff"]);async function ap(a,b){var d;let f,g=(0,F.vE)(a.path,b.scopeRoots,"inspect_asset 的 path");if(!Y.existsSync(g.absolute))throw(0,F.mX)(`文件不存在:${g.relative}`);let h=Y.statSync(g.absolute);if(!h.isFile())throw(0,F.P9)(`不是文件:${g.relative}`);let i=".pdf"===(d=e.extname(g.absolute).toLowerCase())?"pdf":".docx"===d||".doc"===d?"docx":ag.has(d)?"xlsx":af.has(d)||".dxf"===d?"dwg":ao.has(d)?"image":ae.has(d)?"text":"other",j=[];if("image"===i)try{let{loadImage:a}=await Promise.resolve().then(c.t.bind(c,28183,23)),b=await a(g.absolute);f={width:b.width,height:b.height}}catch(a){j.push(`图像尺寸探测失败(@napi-rs/canvas):${a instanceof Error?a.message:String(a)}`)}let k=!1,l=ab(b);if(l)try{k=l.countChunks({relativePath:g.relative})>0}finally{l.close()}return k||"text"===i||j.push("KB 切片库里没有该文件的抽取文本;`read_raw` 会因缺少抽取结果而失败(先让它过一遍抽取器)"),"dwg"===i&&j.push("DWG 一期不支持 read_raw(无 ODA/LibreDWG 转换器);图纸参数只能走结构化实体通道(S7.2 #3)"),{relativePath:g.relative,absolutePath:g.absolute,kind:i,sizeBytes:h.size,extractable:"other"!==i&&"dwg"!==i,textExtracted:k,ocrAvailable:!0===b.ocrAvailable,...void 0===f?{}:{dimensions:f},notes:j}}async function aq(a,b){let c=(0,F.He)(a.reason,"reason");if(!Array.isArray(a.roots)||0===a.roots.length)throw(0,F.P9)("roots 必须是非空数组");let d=[],f=[];for(let c of a.roots){let a=String(c??"").trim();if(!a){d.push({root:String(c),reason:"空路径"});continue}if(!e.isAbsolute(a)){d.push({root:a,reason:"资料范围只能按绝对路径授予(相对路径的基准会随 cwd 漂移)"});continue}let g=function(a){let b=e.resolve(a),c=Z.homedir();if(["/",c,e.join(c,".customize-agent"),e.join(c,".ssh"),e.join(c,".aws")].includes(b))return"该根属于 4.6 域表中的禁止面(项目文件/系统/家目录)";let d=[e.join(c,".customize-agent"),e.join(c,".ssh"),e.join(c,".aws"),e.join(c,".config"),"/etc","/usr","/bin","/sbin","/var","/System","/Library",e.join("C:","Windows")].find(a=>b===a||b.startsWith(`${a}${e.sep}`));return d?`该根落在禁止面「${d}」之内(4.6:项目文件/系统/家目录一律禁止,含存放 API Key 的配置目录)`:void 0}(a);if(g){d.push({root:a,reason:g});continue}if(b.scopeRoots.some(b=>e.resolve(b)===e.resolve(a))){d.push({root:a,reason:"该根已在当前资料范围内,无需扩范围"});continue}f.push(e.resolve(a))}if(0===f.length)throw(0,F.P9)(`没有任何可提交的扩范围请求。逐根拒绝原因:${d.map(a=>`${a.root} → ${a.reason}`).join(";")}`);return{requestId:`expand-scope-${Date.now().toString(36)}-${Math.abs(function(a){let b=0;for(let c=0;c<a.length;c+=1)b=31*b+a.charCodeAt(c)|0;return b}(f.join("|"))).toString(36)}`,tool:"expand_scope",status:"pending",reason:c,requestedRoots:f,currentRoots:[...b.scopeRoots],risk:"资料范围是 4.6 的冻结域:扩大可达面会让后续取证读到此前不可见的数据,必须人工确认",rejected:d}}let ar=[ah,aj,ak,al,an,{name:"inspect_asset",description:(0,F.HG)("探测一个资料文件的可读性:类型、体积、是否可抽取、KB 里是否已有抽取文本、图像像素尺寸、OCR 是否可用。",'**在决定怎么读它之前**先探一次(PDF 要页码、图要替代表、表格要工作表名,三种读法完全不同);或 `read_raw` 失败后先用它判断是"文件不在"、"没索引"还是"格式一期不支持"。',"已经知道类型且要内容时(直接 `read_raw`/`read_source`);也不要拿它批量扫全库——清单类的批量信息用 `discover_files`(一次返回全部元数据)。"),scope:"evidence-whitelist",inputSchema:F.wQ.object({path:F.wQ.str("资料文件路径(须落在资料白名单内)")},["path"]),idempotent:!0,handler:ap},{name:"expand_scope",description:(0,F.HG)("提交一份**扩大资料范围**的审批请求(不自行生效:只生成 pending 的 ApprovalRequest,含逐根拒绝原因)。",'确信资料就在白名单之外、且不读它就写不下去时(例如招标正文没被纳入资料范围,而某条要求必须核对原文);先把 `reason` 写清"缺了它会导致什么后果",人工据此裁决。','常规取证(白名单内还有很多没看时,先把范围用尽);把"授权"当成能自己给自己开的门——本工具**永不返回已获批**,且会直接拒绝 4.6 的禁止面(家目录/系统/含 API Key 的配置目录);也不要为了绕过某次 PATH_DENIED 而调它(那次拒绝是判据在工作,不是范围不够)。⚠需审批。'),scope:"evidence-whitelist",inputSchema:F.wQ.object({reason:F.wQ.str("扩范围的理由与后果(人工裁决的依据,不得写空话)"),roots:F.wQ.arr("申请纳入资料范围的**绝对路径**根(逐个校验;禁止面内的会被直接拒绝)",F.wQ.str("绝对路径"))},["reason","roots"]),idempotent:!1,requiresApproval:!0,handler:aq}];var as=c(31530),at=c(47843),au=c(68977),av=c(15997);function aw(a){return"blocker"===a.severity||"error"===a.level}async function ax(a,b,c){var d,e,f;let g=[],h=[],i={},j=[],k=c.detectors?.run;for(let c of a){if(!(0,v.Xh)(c)){h.push(c),i[c]='该 id 未登记在检测器注册表(`detectorEntry(id)` 返回 undefined)——不能假设它"没有意见"';continue}if(!k){h.push(c),i[c]="本次运行未接入检测器执行能力(`ctx.detectors.run` 为空),该维度未执行";continue}try{let a=await k(c,b);if(!Array.isArray(a)){h.push(c),i[c]="检测器未返回 issue 数组(返回 undefined 不得等于通过——`chapterGeneration` 已踩过这个坑)";continue}j.push(...a),g.push(c)}catch(a){h.push(c),i[c]=`检测器抛出异常:${a instanceof Error?a.message:String(a)}`}}for(let a of h.slice(0,8))j.push({level:"warning",severity:"warning",category:"evidence_coverage",source:a,message:`该检测维度本次未执行(degraded):${i[a]??""}`});h.length>8&&j.push({level:"warning",severity:"warning",category:"evidence_coverage",source:"degraded-summary",message:`另有 ${h.length-8} 个降级维度未在此逐条列出(明细见 degraded/verdict.reason,共 ${h.length} 个未执行)。`});let l=(d=j,e=g,f=h,{issues:d,executed:[...new Set(e)].sort(),degraded:[...new Set(f)].sort()}),m=function(a){let b=Object.keys(a);if(b.length<=8)return{kept:a,dropped:0};let c={};for(let d of b.slice(0,8))c[d]=a[d];return{kept:c,dropped:b.length-8}}(i);return{verdict:function(a){let b=a.issues.filter(aw).length;if(a.degraded.length>0){let c=a.degraded.slice(0,6).join("、"),d=a.degraded.length>6?`…等共 ${a.degraded.length} 个`:"";return{verdict:"not-run",blockers:b,reason:`有 ${a.degraded.length} 个检测维度本次未执行(${c}${d})——降级的检测器与干净跑完的必须长得不一样,否则「通过」不可信(S3.1);`+(0===b?"本次 issue 列表为空不代表无缺陷,只代表没查。":`另有 ${b} 条阻断级 issue。`)}}return 0===a.executed.length?{verdict:"not-run",blockers:b,reason:"本次没有任何检测维度被执行(候选维度为 0)——零维度不得判通过:「没查」与「查了没问题」必须在结论层就长得不一样(S3.1)。"}:b>0?{verdict:"fail",blockers:b,reason:`${b} 条阻断级 issue。`}:{verdict:"pass",blockers:0,reason:`全部 ${a.executed.length} 个检测维度均实际执行且无阻断级 issue(${a.executed.join("、")})。`}}(l),issues:l.issues,executed:l.executed,degraded:l.degraded,degradedReasons:m.kept,degradedReasonsDropped:m.dropped,runnerAvailable:"function"==typeof k}}async function ay(a,b){let c=[...new Set((0,F.Fs)(a.detectorIds,"detectorIds").map(a=>String(a).trim()).filter(Boolean))];if(0===c.length)throw(0,F.P9)("detectorIds 必须至少包含一个非空 id");if("string"!=typeof a.text)throw(0,F.P9)("text 必须是字符串(空串合法:块产出为空正是要查的场景)");return ax(c,a.text,b)}let az={name:"check",description:(0,F.HG)("对给定文本跑指定的确定性检测器,返回三元 `{issues, executed, degraded}` 与红线裁决 `verdict`。",'写完之后自查时(块/节级);针对某条具体缺陷说"我改了"时,用原检测器复跑同源验证;`degraded` 非空即视为**未通过**——不要因为 `issues` 为空就宣布修好了。','想一次查一个族(用 `check_family`,不必手写 id 清单);想知道某条 id 到底是什么(用 `explain_defect`);也不要对同一段文本反复跑同一批 id 求"更确定"——检测器是确定性的,重跑同答案(`idempotent`)。'),scope:"readonly",inputSchema:F.wQ.object({detectorIds:F.wQ.arr("要执行的检测器 id 列表(须为注册表内已登记的 id;未登记的会进 `degraded`)",F.wQ.str("检测器 id")),text:F.wQ.str("被检查的 Markdown 文本(空串合法:块产出为空正是要查的场景)")},["detectorIds","text"]),idempotent:!0,handler:ay},aA={block:"chapter",section:"chapter",document:"full-document"};async function aB(a,b){let c=a.family;if("block"!==c&&"section"!==c&&"document"!==c)throw(0,F.P9)(`family 必须是 block / section / document 之一(收到 ${JSON.stringify(c)})`);if("string"!=typeof a.text)throw(0,F.P9)("text 必须是字符串(空串合法)");let d=aA[c],e="block"===c?[...B]:v.uM.filter(a=>a.scope===d).map(a=>a.id),f=await ax(e,a.text,b);return{verdict:f.verdict,family:c,matchedScope:d,candidateCount:e.length,issues:f.issues,executed:f.executed,degraded:f.degraded,degradedReasons:f.degradedReasons,degradedReasonsDropped:f.degradedReasonsDropped,runnerAvailable:f.runnerAvailable}}let aC={name:"check_family",description:(0,F.HG)("按族(block / section / document)聚合跑该族**全部**检测器,返回与 `check` 同形的三元 + 红线裁决。","不确定该查哪几条 id 时(按族扫一遍比手写 id 清单更不容易漏维度);计划阶段先按 `document` 族摸清全篇判据面。","已经知道要查具体哪几条 id 时(`check` 更省预算——按族跑会执行几十上百个检测器);也不要指望 block 与 section 给出不同结果:注册表 scope 只有 chapter/full-document 两级,两者同落 chapter(返回值 `matchedScope` 会显式告诉你)。"),scope:"readonly",inputSchema:F.wQ.object({family:F.wQ.enumStr("检测器族:block=块级 / section=节级 / document=全文级",["block","section","document"]),text:F.wQ.str("被检查的 Markdown 文本(空串合法)")},["family","text"]),idempotent:!0,handler:aB},aD={name:"explain_defect",description:(0,F.HG)("查一条检测器的元数据:作用域、类别、修复器处置(fixed/exempt/manual)与理由、写作期处置(constraint/self-check/terminal-only)、依赖的权威口径。",'`check` 报出一条 issue 而你不知道它意味着什么、能不能修、该在写作期还是终检期处理时;或要判断某条缺陷是不是"只能转人工"(`fixerDisposition: manual`)以免白改一轮。',"想知道当前文档**有哪些缺陷**(那是 `list_defects`,元动作类);也不要把它当检测器执行入口——它只返回声明,不跑判据(要跑用 `check`)。"),scope:"readonly",inputSchema:F.wQ.object({detectorId:F.wQ.str("检测器 id(注册表内已登记)")},["detectorId"]),idempotent:!0,handler:function(a){let b=String(a.detectorId??"").trim();if(!b)throw(0,F.P9)("detectorId 不能为空");let c=(0,v.Xh)(b);if(!c)throw(0,F.mX)(`检测器「${b}」未登记在注册表(可先跑 check_family 看该族有哪些 id)`);let d=[...c.authorities??[]],e=new Set(v.Id.map(a=>a.id));return{detectorId:c.id,scope:c.scope,category:c.category,fixerDisposition:c.fixerDisposition??"fixed",...void 0===c.fixerDispositionReason?{}:{fixerDispositionReason:c.fixerDispositionReason},writingTimeDisposition:v.Z8[b]??null,authority:d,authorityUnregistered:d.filter(a=>!e.has(a)),deterministicSafe:!0===c.deterministicSafe}}};async function aE(){d??=(0,av.e)();try{return await d}catch(a){throw d=void 0,a}}async function aF(a){if("string"!=typeof a.text||!a.text.trim())throw(0,F.P9)("text 不能为空(无内容可分析时不要调本工具)");let b=await aE(),c=await b.analyze(a.text);if(!c)throw(0,F.P9)("文本被判为无可分析内容(`analyze` 返回 undefined)——请确认传入的是正文而非空块");let d=Object.values(c.dimensions).filter(Boolean).length;return{...c,dimensionHits:d}}let aG={name:"assess_depth",description:(0,F.HG)("语义评估正文的专业深度:六维(factuality/structure/depth/executable/specificity/consistency)+ 五类内容要求 + 具体性 + 闭环。",'怀疑某段只是"正确的套话"(有格式没深度)时;块成稿后自查里判断"这一块够不够专业"这一维度时。',"判断合规/数值/结构类缺陷(那些是确定性检测器的活,走 `check`,更快也更准);也不要对空块或纯表格调用——它依赖本地嵌入模型,是**最贵**的判定工具之一,别当常规扫描用。"),scope:"readonly",inputSchema:F.wQ.object({text:F.wQ.str("待评估的正文(章节或段落)")},["text"]),idempotent:!0,handler:aF};async function aH(a){let b=(0,F.Fs)(a.items,"items").map(a=>String(a??"").trim()).filter(Boolean);if(0===b.length)throw(0,F.P9)("items 必须至少包含一条非空的评分条目文本");if("string"!=typeof a.markdown||!a.markdown.trim())throw(0,F.P9)("markdown 不能为空(无正文可模拟评审)");return(0,at.y)({items:b,markdown:a.markdown})}let aI={name:"simulate_reviewer",description:(0,F.HG)("以评标专家视角逐条核对评分条目的达成情况,给出 met/partial/missing 与相似度、命中锚点,以及模拟分。",'收口阶段想知道"按评分规则能拿多少分"、哪几条评分点根本没被正文承接时;或要判断某条 missing 是"真没写"还是"写了但用词对不上"。',"写正文之前就用它(没有正文可评,只会得到一片 missing);也不要用它替代 `check`——它评的是**语义承接**,不查合规/数值/结构缺陷,且依赖嵌入模型(贵)。"),scope:"readonly",inputSchema:F.wQ.object({items:F.wQ.arr("评分条目文本列表(来自评价规则资料原文,逐条原文,不要改写)",F.wQ.str("评分条目")),markdown:F.wQ.str("待评估的文档正文(Markdown)")},["items","markdown"]),idempotent:!0,handler:aH},aJ={name:"verify_numbers",description:(0,F.HG)("正文数值与证据侧对账:confirmed(逐字命中)/ mismatched(同位置不同值,确定性错误的强信号)/ unsourced(完全无源,弱信号只观测)。","正文里写了数值、要确认它们是不是都能在证据里找到出处时;收口阶段做数值溯源体检。",'把 `unsourced` 直接当成"编造"去删正文——它只是弱信号(证据侧表述差异很常见),要删要改先看 `mismatched`(同位置不同值才是强信号);也不要指望它判单位/量纲错误(那是 `convert_units` 的活)。'),scope:"readonly",inputSchema:F.wQ.object({text:F.wQ.str("待核对的正文(Markdown)"),evidenceText:F.wQ.str("注入给写手的证据文本(**当前上下文里那份**,与正文同源)"),evidencePoolText:F.wQ.str('完整证据池文本(可选;给了才能区分"证据没注入"与"证据里根本没有")')},["text","evidenceText"]),idempotent:!0,handler:function(a){if("string"!=typeof a.text||!a.text.trim())throw(0,F.P9)("text 不能为空");if("string"!=typeof a.evidenceText)throw(0,F.P9)("evidenceText 必须是字符串(可为空串,但那样全部数值都会落 unsourced,通常不是你想要的结果)");return(0,h.I)(a.text,a.evidenceText,"string"==typeof a.evidencePoolText?a.evidencePoolText:"")}},aK=[az,aC,aD,aG,aI,aJ,{name:"rewrite_verdict",description:(0,F.HG)('B 类改写统一闸门:裁决"用这条权威值改写正文这个位置"是否成立(对象限定 / 同量级 / 异义语境 / 形态合法 / 通用部位词充分性)。',"拿清单/图纸的权威值去替换正文里已有的值时**先问一次**;`allowed: false` 时正文保持不动、只保留检测(不要硬改)。",'常规的"缺词补写"(那不是改写既有值,不需要本闸门);也不要拿它当通用文本改写判断——它只认"权威值 ↔ 正文值"这一种关系。'),scope:"readonly",inputSchema:F.wQ.object({authorityOwner:F.wQ.str("权威所属条目名/部位名(清单条目名,如「基础垫层」;缺省表示权威无对象限定 → 直接不许改写)"),bodyLocation:F.wQ.str("正文命中处的部位词(如「垫层」)"),bodyWindow:F.wQ.str("正文命中处的上下文窗口(部位词 \xb1 命中值附近)"),found:F.wQ.str("正文现有值"),authority:F.wQ.str("权威值"),bindingKind:F.wQ.enumStr("绑定语义:location=按部位词定位(默认)/ sameName=按同名绑定",["location","sameName"])},["bodyLocation","bodyWindow","found","authority"]),idempotent:!0,handler:function(a){if("string"!=typeof a?.found||"string"!=typeof a?.authority)throw(0,F.P9)('found 与 authority 都是必填字符串(本工具裁决的是"这条权威值能不能改进这条正文")');let b=(0,as.Rd)(a);return{allowed:b.allowed,...void 0===b.reason?{}:{reason:b.reason},sameNameBinding:"sameName"===a.bindingKind}}},{name:"judge_hazard",description:(0,F.HG)("从资料证据(清单条目 / 图纸说明 / 招标正文)里抽取危大参数并逐条给出**三态结论**:属危大 / 属超过一定规模的危大 / 不属危大。",'正文要写危大分级、或要与已有分级结论比对时(分级写错是会扣在"越档升级/漏判"两个方向上的实质缺陷);`summary` 可直接与正文的分级清单对照。','资料里没有可比参数时(此时结论会缺依据,应改为 `declare_missing` 补料,而不是让模型"按惯例"填一个分级);也不要只传正文自身当 evidence——它判的是"资料里的参数",拿正文自证等于循环。'),scope:"readonly",inputSchema:F.wQ.object({evidence:F.wQ.arr("资料证据条目(清单/图纸说明/招标正文切片;**不要传正文自身**)",F.wQ.obj("证据条目",{content:F.wQ.str("切片原文"),filePath:F.wQ.str("来源文件路径(用于参数溯源)"),sectionTitle:F.wQ.str("所在小节标题")})),canonical:F.wQ.str("可选:canonical 事实值(如已知的基坑深度),作为参数候选之一参与最保守取值")},["evidence"]),idempotent:!0,handler:function(a){let b=(0,F.Fs)(a.evidence,"evidence"),c=a.canonical&&"object"==typeof a.canonical?a.canonical:void 0,d=(0,au.ym)(b,c);return{bindings:d,summary:{hazardous:d.filter(a=>"属危大"===a.conclusion).length,superHazardous:d.filter(a=>"属超过一定规模的危大"===a.conclusion).length,notHazardous:d.filter(a=>"不属危大"===a.conclusion).length}}}}];var aL=c(35547),aM=c(11248),aN=c(7148);let aO={sqrt:Math.sqrt,abs:Math.abs,round:Math.round,floor:Math.floor,ceil:Math.ceil,min:Math.min,max:Math.max,pow:Math.pow,log:Math.log,log10:Math.log10,exp:Math.exp,sin:Math.sin,cos:Math.cos,tan:Math.tan,hypot:Math.hypot};class aP{constructor(a){this.source=a,this.index=0,this.depth=0}parse(){let a=this.parseExpression();if(this.skipSpaces(),this.index<this.source.length)throw(0,F.P9)(`表达式在第 ${this.index+1} 个字符处无法解析:「${this.source.slice(this.index,this.index+16)}」`);return a}skipSpaces(){for(;this.index<this.source.length&&/\s/u.test(this.source[this.index]);)this.index+=1}peek(){return this.skipSpaces(),this.source[this.index]??""}parseExpression(){this.enter();let a=this.parseTerm();for(;;){let b=this.peek();if("+"!==b&&"-"!==b)break;this.index+=1;let c=this.parseTerm();a="+"===b?a+c:a-c}return this.exit(),a}parseTerm(){let a=this.parseUnary();for(;;){let b=this.peek();if("*"!==b&&"/"!==b&&"%"!==b)break;this.index+=1;let c=this.parseUnary();if(("/"===b||"%"===b)&&0===c)throw(0,F.P9)("表达式里出现除以 0");a="*"===b?a*c:"/"===b?a/c:a%c}return a}parseUnary(){let a=this.peek();return"-"===a?(this.index+=1,-this.parseUnary()):"+"===a?(this.index+=1,this.parseUnary()):this.parsePower()}parsePower(){let a=this.parsePrimary();return"*"!==this.peek()||"*"!==this.source[this.index+1]?a:(this.index+=2,Math.pow(a,this.parseUnary()))}parsePrimary(){this.skipSpaces();let a=this.source[this.index]??"";if("("===a){this.index+=1;let a=this.parseExpression();if(this.skipSpaces(),")"!==this.source[this.index])throw(0,F.P9)("括号不配对(缺少右括号)");return this.index+=1,a}if(/[0-9.]/u.test(a))return this.parseNumber();if(/[A-Za-z_]/u.test(a))return this.parseCall();throw(0,F.P9)(`表达式在第 ${this.index+1} 个字符处出现非法字符「${a}」`)}parseNumber(){let a=this.index;for(;this.index<this.source.length&&/[0-9._eE]/u.test(this.source[this.index]);)this.index+=1;let b=this.source.slice(a,this.index).replace(/_/gu,""),c=Number(b);if(!Number.isFinite(c))throw(0,F.P9)(`无法识别的数值字面量「${b}」`);return c}parseCall(){let a=this.index;for(;this.index<this.source.length&&/[A-Za-z_0-9]/u.test(this.source[this.index]);)this.index+=1;let b=this.source.slice(a,this.index),c=aO[b];if(!c)throw(0,F.P9)(`不支持的函数「${b}」(可用:${Object.keys(aO).join("、")})`);if(this.skipSpaces(),"("!==this.source[this.index])throw(0,F.P9)(`函数「${b}」后面必须是参数括号`);this.index+=1;let d=[];if(this.skipSpaces(),")"!==this.source[this.index])for(;;){if(d.push(this.parseExpression()),","===this.peek()){this.index+=1;continue}break}if(this.skipSpaces(),")"!==this.source[this.index])throw(0,F.P9)(`函数「${b}」的参数括号不配对`);return this.index+=1,c(...d)}enter(){if(this.depth+=1,this.depth>32)throw(0,F.P9)(`表达式嵌套超过 32 层`)}exit(){this.depth-=1}}function aQ(a){return`'${a.replace(/'/gu,"'\\''")}'`}async function aR(a,b){let c="string"==typeof a.expr?a.expr.trim():"",d="string"==typeof a.script?a.script:"";if(c&&d)throw(0,F.P9)("expr 与 script 互斥,只能给一个");if(!c&&!d)throw(0,F.P9)("必须给 expr(纯算术)或 script(受限沙箱脚本)之一");if(c)return{result:function(a){var b;let c=(b=(0,F.He)(a,"expr"),(0,aM.Hr)(b).replace(/[×✕✖]/gu,"*").replace(/[÷]/gu,"/").replace(/[()]/gu,a=>"("===a?"(":")"));if(c.length>2e3)throw(0,F.P9)(`表达式过长(>2000 字符)`);let d=new aP(c).parse();if(!Number.isFinite(d))throw(0,F.P9)("计算结果不是有限数(溢出或未定义)——请检查量级与运算符");return Number(d.toPrecision(12))}(c),stdout:"",mode:"expr",executed:c};let e="py"===a.lang?"py":"js",f=b.sandbox;if(!f)throw(0,F.mW)("受限沙箱执行能力(`ctx.sandbox.execute`)","运行时注入:接 `packages/tools/src/sandbox/sandbox-executor.ts` 的 `SandboxExecutor`(docker/bwrap/sandbox-exec/VFS-Guard)");let g="py"===e?`python3 -c ${aQ(d)}`:`node -e ${aQ(d)}`,h=await f.execute(g,{timeoutMs:1e4,lang:e});if(0!==h.code)throw(0,F.P9)(`沙箱脚本退出码 ${h.code}:${(h.stderr||h.stdout||"").slice(0,800)}`);let i=String(h.stdout??""),j=Number(i.trim().split("\n").pop());return{result:Number.isFinite(j)?j:null,stdout:i.slice(0,4e3),mode:"sandbox-script",executed:`[${e} script, ${d.length} chars]`,exitCode:h.code}}let aS={name:"compute",description:(0,F.HG)("算数:`expr` 走**纯算术求值器**(+ - * / % ** 与 sqrt/abs/round/min/max/pow/log/hypot 等白名单函数,不 eval);`script` 走**受限沙箱**。","合计对不上要复核、要把清单里的分项加一遍、要做量级估算或百分比换算时;正文里即将落一个推导出来的数值,落笔前先算一遍。",'**不要用它"算出一个看起来合理的值"来填空**——算出来的数不等于资料里的数,无源的数值仍然要 `declare_missing`;也不要拿它当通用代码执行器(`expr` 只认算术与白名单函数;`script` 没有沙箱能力时直接失败,不会退回进程内执行)。'),scope:"sandbox",inputSchema:F.wQ.object({expr:F.wQ.str("纯算术表达式(支持全角字符、括号、幂、白名单函数;与 script 互斥)"),script:F.wQ.str("受限沙箱脚本(与 expr 互斥;需运行时接入沙箱能力)"),lang:F.wQ.enumStr("脚本语言(仅 script 模式有效,缺省 js)",["js","py"])}),idempotent:!0,handler:aR},aT={长度:{m:1,km:1e3,cm:.01,mm:.001},面积:{m2:1,hm2:1e4},体积:{m3:1,l:.001,ml:1e-6},质量:{kg:1,g:.001,t:1e3},力:{kn:1,n:.001},压强:{mpa:1,kpa:.001,pa:1e-6},功率:{kw:1,mw:1e3,w:.001},电压:{kv:1,v:.001},电流:{a:1,ma:.001},频率:{hz:1},时间:{h:1,min:1/60},比率:{"%":1,permille:.1}};function aU(a){let b=(0,aM.Hr)(String(a??"")).trim();return(0,aN.Sn)(b||String(a??"").trim())}let aV={name:"convert_units",description:(0,F.HG)("单位换算:判定两单位是否同量纲(`unitAliases.unitsAreEquivalent`),同量纲则按固定倍率换算,否则返回 null 并说明。","正文/表格里的单位与资料不一致、需要核对是否等价或换算成同一单位再比较时;或要确认两个写法(「米」/「延长米」/「m」、「㎡」/「m2」)是不是同一单位。",'拿它做无关换算(座→个、套→台这类**计数单位**永远返回 null,见 `unitAliases` 的"不做量纲互换"口径);也不要拿换算结果去替换正文里的数值——换算会引入原文没有的值,那是改写而不是核对。'),scope:"sandbox",inputSchema:F.wQ.object({value:F.wQ.num("待换算的数值"),from:F.wQ.str("原单位(支持中文写法与符号形:米/m、㎡/m2、千牛/kN…)"),to:F.wQ.str("目标单位")},["value","from","to"]),idempotent:!0,handler:function(a){let b="number"==typeof a.value?a.value:Number(a.value);if(!Number.isFinite(b))throw(0,F.P9)("value 必须是有限数");let c=(0,F.He)(a.from,"from"),d=(0,F.He)(a.to,"to"),e=aU(c),f=aU(d);if(!(0,aN.Q0)(c,d))return{value:null,from:c,to:d,canonicalFrom:e,canonicalTo:f,equivalent:!1,reason:"两单位不同量纲(`unitsAreEquivalent` 判否)——计数单位之间尤其不可互认(座 ≠ 组 ≠ 个)"};if(e===f)return{value:b,from:c,to:d,canonicalFrom:e,canonicalTo:f,equivalent:!0};for(let[a,g]of Object.entries(aT)){let h=g[e],i=g[f];if(void 0!==h&&void 0!==i)return{value:Number((b*h/i).toPrecision(12)),from:c,to:d,canonicalFrom:e,canonicalTo:f,equivalent:!0,reason:`同量纲(${a})倍率换算`}}return{value:null,from:c,to:d,canonicalFrom:e,canonicalTo:f,equivalent:!0,reason:`两单位判为同量纲,但本工具的倍率表没有覆盖「${e} → ${f}」这一对——不猜倍率,宁可不给结果`}}},aW=/^(?:合\s*计|小\s*计|总\s*计|共\s*计|合\s*价)$/u;function aX(a){let b=String(a??"").replace(/\s+/gu,"").replace(/[,,]/gu,"");if(!b)return;let c=/^[-+]?\d+(?:\.\d+)?/u.exec(b.replace(/^[¥¥$]/u,""));if(!c)return;let d=Number(c[0]);return Number.isFinite(d)?d:void 0}let aY=[aS,aV,{name:"verify_table_arithmetic",description:(0,F.HG)("核验文档里的表内算术:既有判据(`tableArithmeticInconsistencyIssues` + `areaArithmeticIssues`)+ 显式「合计/小计」行列的确定性求和兜底。","表格里出现合计/小计时(分项和与合计不等是**阻断级**缺陷,改一个数字还是改合计需要先看清差异);或 `check` 报了表内算术类 issue、要定位到具体行列时。",'把 `defects` 为空读成"表内算术一定对"——兜底只覆盖显式合计形态,未覆盖的关系不在结论内(返回值 `note` 已写明);也不要拿它去改数字:先算出差异、再判断是分项错还是合计错,改动走 `patch_section` 且必须有资料依据。'),scope:"sandbox",inputSchema:F.wQ.object({markdown:F.wQ.str("含表格的 Markdown 文本(单章或全文)")},["markdown"]),idempotent:!0,handler:function(a){let b=(0,F.He)(a.markdown,"markdown"),c=[...(0,aL.qE)(b),...(0,aL.u2)(b)],d=function(a){let b=[],c=a.split(/\r?\n/u),d=-1,e=[],f=0,g=0,h=()=>{if(e.length<3){e=[];return}let[a,...c]=e,h=a.cells.length,i=c[c.length-1];if(aW.test(i.cells[0]??"")){f+=1;for(let a=1;a<h;a+=1){let e=aX(i.cells[a]??"");if(void 0===e)continue;let f=0,g=0;for(let b of c.slice(0,-1)){let c=aX(b.cells[a]??"");void 0!==c&&(f+=c,g+=1)}0!==g&&Math.abs(f-e)>Math.max(1e-6,1e-6*Math.abs(f))&&b.push({tableIndex:d,location:`第 ${i.line} 行「${i.cells[0]}」\xb7 第 ${a+1} 列`,expected:Number(f.toPrecision(12)),found:e,detail:`该列 ${g} 个数值分项之和为 ${Number(f.toPrecision(12))},但合计行写的是 ${e}`,source:"fallback"})}}let j=a.cells.findIndex(a=>aW.test(a));if(j>0)for(let a of(g+=1,c)){let c=aX(a.cells[j]??"");if(void 0===c)continue;let e=0,f=0;for(let b=0;b<h;b+=1){if(b===j)continue;let c=aX(a.cells[b]??"");void 0!==c&&(e+=c,f+=1)}!(f<2)&&Math.abs(e-c)>Math.max(1e-6,1e-6*Math.abs(e))&&b.push({tableIndex:d,location:`第 ${a.line} 行「合计」列`,expected:Number(e.toPrecision(12)),found:c,detail:`该行 ${f} 个数值分项之和为 ${Number(e.toPrecision(12))},但合计列写的是 ${c}`,source:"fallback"})}e=[]};return c.forEach((a,b)=>{if(/^\s*\|.*\|\s*$/u.test(a)){0===e.length&&(d+=1);let c=a.replace(/^\s*\|/u,"").replace(/\|\s*$/u,"").split("|").map(a=>a.trim());c.every(a=>/^:?-{2,}:?$/u.test(a)||""===a)||e.push({cells:c,line:b+1});return}h()}),h(),{defects:b,sumRows:f,sumColumns:g,tables:Math.max(0,d+1)}}(b);return{defects:[...c.map((a,b)=>({tableIndex:-1,location:a.sectionTitle??a.chapterId??`检测器命中 #${b+1}`,expected:NaN,found:NaN,detail:a.message,source:"detector"})),...d.defects],checked:{tables:d.tables,sumRows:d.sumRows,sumColumns:d.sumColumns,detectorIssues:c.length},note:"detector 条目来自既有判据(表内算术自洽 + 面积三元组),是权威;fallback 条目只覆盖显式「合计/小计」形态,未覆盖的表格关系(百分比/加权/取整)不在此工具结论内——**没有 fallback 命中不等于表内算术一定自洽**。"}}}];async function aZ(a,b){let c=String(a?.nodeId??"").trim();if(!c)throw(0,F.P9)("nodeId 不能为空");if(!a?.delta||"object"!=typeof a.delta)throw(0,F.P9)("delta 必填(至少要给出一个字数标量)");if(!String(a?.reason??"").trim())throw(0,F.P9)("reason 不能为空(改规划必须留下理由,否则预算漂移无法溯源)");let d=b.planRequests;if(!d)throw(0,F.mW)("规划变更请求通道(`ctx.planRequests`)","运行时把 `createPlanRequestCapability({ requests: session.planning.planRequests })` 挂到 `ctx.planRequests`(生产构造点:`stageChapterLoop` 的 agentToolWiring)");return d.request({kind:"target_change",nodeId:c,reason:String(a.reason).trim(),payload:{delta:a.delta}})}let a$={name:"request_target_change",description:(0,F.HG)("**申请**变更某节点的字数目标区间(受文档总量守恒约束)。请求转交调度中心,在**下一个决策点**裁决——本块内不生效。","该节点目标明显不合理时(目标远大于资料能支撑的量、或远小于章级最低预算 `CHAPTER_MIN_BUDGET:103`)。",'**先干活再请求**:申请不是"减压",它不会让这一块变短。请同时继续按现有目标写;真的写不动(资料确实缺)就 `declare_missing` 记账——**让"补不上"是可审计的,而不是靠改小目标**。同一目标同一理由重复申请会被去重;整轮生成的申请有上限(超限会被明确拒绝并告知替代手段)。'),scope:"document-plan",inputSchema:F.wQ.object({nodeId:F.wQ.str("目标节点 id"),delta:F.wQ.obj("目标变更量(至少给一个标量)",{minWords:F.wQ.int("新的下限字数"),targetWords:F.wQ.int("新的目标字数"),maxWords:F.wQ.int("新的上限字数")}),reason:F.wQ.str('变更理由(须可执行、可溯源;"写不完"这类不算理由,要说是资料不足还是目标定错)')},["nodeId","delta","reason"]),idempotent:!0,handler:aZ};async function a_(a,b){let c=Array.isArray(a?.from)?a.from.map(a=>String(a).trim()).filter(Boolean):[];if(0===c.length)throw(0,F.P9)('from 不能为空("从谁身上扣"必须点名,否则等于凭空加预算)');if(!String(a?.to??"").trim())throw(0,F.P9)("to 不能为空");if(c.includes(String(a.to).trim()))throw(0,F.P9)("from 与 to 不能是同一节点(自己给自己腾额度是空操作)");if(!String(a?.reason??"").trim())throw(0,F.P9)("reason 不能为空");let d=b.planRequests;if(!d)throw(0,F.mW)("规划变更请求通道(`ctx.planRequests`)","同 `request_target_change`:生产构造点 `stageChapterLoop` 的 agentToolWiring");return d.request({kind:"rebalance_budget",nodeId:String(a.to).trim(),reason:String(a.reason).trim(),payload:{from:c}})}async function a0(a,b){let c=String(a?.nodeId??"").trim();if(!c)throw(0,F.P9)("nodeId 不能为空");if(!String(a?.at??"").trim())throw(0,F.P9)("at 不能为空(拆分点必须落在正文里)");let d=Array.isArray(a?.titles)?a.titles.map(a=>String(a).trim()).filter(Boolean):[];if(2!==d.length)throw(0,F.P9)("titles 必须正好两个(拆分后两节的标题)");let e=b.planRequests;if(!e)throw(0,F.mW)("规划变更请求通道(`ctx.planRequests`)","同 `request_target_change`:生产构造点 `stageChapterLoop` 的 agentToolWiring");return e.request({kind:"split_section",nodeId:c,reason:`拆分点:${String(a.at).trim()}`,payload:{at:String(a.at).trim(),titles:d}})}let a1=[a$,{name:"rebalance_budget",description:(0,F.HG)("**申请**在节点之间结转字数额度(从 `from` 扣、给 `to` 加,Σ 守恒)。请求转交调度中心,在**下一个决策点**裁决——本块内不生效。","某个必须写足的节点目标明显高于其资料承载力、而同章另有节点有富余额度时。",'**不要拿它当"给写不出的节点减压"的手段**——减压不产生内容。请同时给 `to` 节点补实质内容(`patch_section`),或对确实缺料的部分 `declare_missing` 记账。'),scope:"document-plan",inputSchema:F.wQ.object({from:F.wQ.arr("被回收额度的节点 id 列表(须非空)",F.wQ.str("节点 id")),to:F.wQ.str("获得额度的节点 id"),reason:F.wQ.str("结转理由(须说明为什么 `to` 必须写足而 `from` 有富余)")},["from","to","reason"]),idempotent:!0,handler:a_},{name:"split_section",description:(0,F.HG)("**申请**把一个小节在 `at` 处拆成两个节点(触发门槛表重算 + 依赖边更新)。请求转交调度中心,在**下一个决策点**裁决。","单节承载了两种以上不同性质的内容、评标按两类分别看时。",'**当前不可用**(`retryable: false`);不要为了"分得更细"而拆分——节点数不是得分项。当前替代:在同一节内用 `###` 加子标题分层(这是 4.4 允许且鼓励的结构化动作)。'),scope:"document-plan",inputSchema:F.wQ.object({nodeId:F.wQ.str("要拆分的小节节点 id"),at:F.wQ.str("拆分点锚点(逐字取自当前草稿)"),titles:F.wQ.arr("拆分后两个小节的标题(正好 2 个)",F.wQ.str("小节标题"))},["nodeId","at","titles"]),idempotent:!1,handler:a0}];async function a2(a,b){let c=String(a?.item??"").trim(),d=String(a?.reason??"").trim();if(!c)throw(0,F.P9)('item 不能为空(要写清"缺的是什么",不能是"某些资料")');if(d.length<4)throw(0,F.P9)("reason 太短:必须说明**为什么缺**(招标未给/图纸未含/资料未上传),否则人手无法接续");let e=Array.isArray(a?.evidence)?a.evidence.map(a=>String(a??"").trim()).filter(Boolean):[];if(0===e.length)throw(0,F.P9)('evidence 不能为空:请列出**已经找过的地方**(`search_evidence` 的查询词 + 命中的文件/页,或 `discover_files` 的结果)。空证据的声明等价于"我没找,直接报缺"——那是拿声明当偷懒通道。');let f=b.audit;if(!f)throw(0,F.mW)("审计状态写入能力(`ctx.audit.declareMissing`)","运行时注入:接 `session.understanding.missingItems`(已有的只增数组)+ 节点 issue 写入");return await f.declareMissing({item:c,reason:d,evidence:e}),{declared:!0,item:c,recordedAt:Date.now(),recordedTo:"session.understanding.missingItems",evidenceCount:e.length,note:"声明已入账(只增数组)。注意:**声明不减少应写内容**——该节仍需按已有资料写足,缺料处由人在清单上补齐。"}}let a3={name:"declare_missing",description:(0,F.HG)('上报"资料确实缺失"的事实:把缺什么、为什么缺、**已经找过哪里**写进审计状态,供人补齐。这是**唯一**允许表达"这处我没有依据"的通道。',"把资料找穷了(`search_evidence` 多组查询词都无命中、`discover_files` 里也没有)而该处仍然必须有依据时;或招标/图纸本身就没给这个数据(此时正文**不得**用行业惯例值填补)。",'**还没认真找过就报缺**——先 `search_evidence`(换同义词、换工程术语)、`read_source` 翻资料清单、`lookup_authoritative` 查权威值,都落空再报;**也不要拿它换篇幅**:声明不会让"这节不用写"成立,缺料处照样要按已有资料写足,只是会被标成待补;句子写得不好、结构不理想不是"缺料"(那是 `patch_section` 的活);**更不要把缺口写进正文**("详见后续补充资料"这类后台话术一律视为缺陷,见 `:1753`)。'),scope:"audit-state",inputSchema:F.wQ.object({item:F.wQ.str("缺的是什么(具体到字段/参数/图名,如「基坑支护设计参数:锚索张拉锁定值」)"),reason:F.wQ.str("为什么缺(招标未给 / 图纸未含 / 资料未上传 / 与已有资料矛盾且无权威可裁)"),evidence:F.wQ.arr('已经找过的地方(≥1 条;写查询词与命中的文件/页,或说明"已遍历资料清单,无此文件")',F.wQ.str("一条搜寻记录"))},["item","reason","evidence"]),idempotent:!0,handler:a2};async function a4(a,b){let c=a?.issue;if(!c||"object"!=typeof c)throw(0,F.P9)("issue 必填(要声明的是**哪一条缺陷**,不能泛指)");let d=String(c.message??"").trim();if(!d)throw(0,F.P9)("issue.message 不能为空(缺陷必须有可读的说明)");let e=c.level;if("error"!==e&&"warning"!==e&&"info"!==e)throw(0,F.P9)("issue.level 必须是 error / warning / info 之一");let f=String(a?.reason??"").trim();if(f.length<8)throw(0,F.P9)('reason 太短:必须写清**已经试过哪些动作、为什么都不成立**(例如"已用 patch_section 三次改写该段,`check` 的 template-listing 仍在命中:该段无源可依")。只说"修不好"会让下一轮原样重试。');let g=b.audit;if(!g)throw(0,F.mW)("审计状态写入能力(`ctx.audit.declareUnfixable`)","运行时注入:接新增的 `unfixable` 通道 → `suspensionChecklist`(`suspensionChecklist.ts:40` 已有挂起通道)");await g.declareUnfixable({issue:c,reason:f});let h=c.severity;return{declared:!0,message:d,detectorId:c.provenance?.detectorId,recordedAt:Date.now(),recordedTo:"unfixable → suspensionChecklist",stillBlocker:"blocker"===h||"error"===e,note:'已报出并进入挂起清单。**声明不改变缺陷等级**——它仍是阻断级,只是从"我没修"变成"我修不动并已上报"。后续:块轮次/工具数耗尽时该节点置 `blocked`(**不是 `completed`**)。'}}async function a5(a,b){let c=String(a?.question??"").trim();if(c.length<8)throw(0,F.P9)('question 太短:必须写成**一个可回答的问题**(并列候选与各自来源,见 A5.2「让人选」),不写成"我判不了,你来看"');if("boolean"!=typeof a?.blocking)throw(0,F.P9)("blocking 必填且必须是布尔:它决定本次是**挂起等人**还是**记账继续**,不能靠默认值蒙混");if(!/[??]|是否|哪一|哪个|请确认|请裁定/u.test(c))throw(0,F.P9)("question 缺少疑问形态(未见 ?/? 或 是否/哪一/请确认 等):请写成一个**可回答**的问题,并列出候选与来源");let d=b.audit;if(!d)throw(0,F.mW)("审计状态写入能力(`ctx.audit.requestClarification`)",'运行时注入:**新建** `clarificationOverrides` 的**待答**槽(现有只有"已答"侧)');return await d.requestClarification({question:c,blocking:a.blocking}),{requested:!0,question:c,blocking:a.blocking,recordedAt:Date.now(),recordedTo:"clarificationOverrides.pending",note:a.blocking?"已挂起等人裁决(blocking=true)。挂起期间**不要**对同一处反复重问,也不要自己选一个口径先写下去。":"已记账但未挂起(blocking=false):先按**权威阶梯最高的候选**继续写,并在下次自查时复查。"}}let a6=[a3,{name:"declare_unfixable",description:(0,F.HG)('报出"这条缺陷我修不动":写进 `unfixable` 通道并进挂起清单,让节点从"未完成"变成"已上报的阻断"。**这是「无改善」的显式终止条件。**',"同一条缺陷**反复修仍无改善**(≥2 轮 `check` 命中不变)时——此时继续重试只会烧轮次;或该缺陷在原理上不是文本能解决的(缺依据、与权威值冲突但无权裁决、需要改规划)。",'**第一轮就报**——先真修过(`patch_section` / `delete_span`,并 `check` 验证过才算),修不动才报;**不要拿它跳过难点**:报出的每一条都会进人看的挂起清单,滥用会让真正卡住的项被淹掉;判不了(不是修不动)请用 `request_clarification`——两者区别是"我改不了"与"我不知道该按哪个口径改"。'),scope:"audit-state",inputSchema:F.wQ.object({issue:F.wQ.anyObj("要声明的缺陷对象(`check`/`list_defects` 返回的原样 issue,须含 level 与 message)"),reason:F.wQ.str("为什么修不动(须写:已试过哪些动作、`check` 结果如何、为什么都不成立)")},["issue","reason"]),idempotent:!0,handler:a4},{name:"request_clarification",description:(0,F.HG)("向人提出一个**可回答的口径裁决问题**(写进待答槽;`blocking=true` 时挂起等人,`false` 时记账继续)。A5.2 的要旨:把「要人找」变成「让人选」。","A5.1 的 **C 级**三类:**扩资料范围**(`expand_scope` 的连带)\xb7 **口径裁决**(同一事实多个候选值、权威阶梯也分不出高下,N9)\xb7 **改动超阈值**;以及规划本身不合理到影响得分(如小节顺序与评标习惯冲突)。写法:**列出候选值 + 各自来源 + 权威级 + 你的建议**,让人一次点选。",'**自己能查能判的不要问人**——先 `lookup_authoritative`(权威值)/ `search_evidence`(资料内可查)/ `verify_numbers`(算得出来的);把问题写成"我判不了,你来看"(无候选、无来源)等于把工作退回给人;**不要用 blocking=true 逃避写作**——挂起只用于真的没法继续的地方,其余靠 `declare_missing` 记账继续;扩资料范围本身走 `expand_scope`(它带审批通道),本工具只用于"该不该扩/扩到哪"的口径问题。'),scope:"audit-state",inputSchema:F.wQ.object({question:F.wQ.str("可回答的问题(须含疑问形态 + 候选值与各自来源 + 权威级;建议附上你的建议)"),blocking:F.wQ.bool("true = 挂起等人;false = 记账继续。**必填**(不给默认值:挂起与否是决策,不是格式)")},["question","blocking"]),idempotent:!0,handler:a5}],a7={error:0,warning:1,info:2},a8={blocker:0,warning:1,suggestion:2};function a9(a){return((a.severity?a8[a.severity]:void 0)??3)*10+(a7[a.level]??3)}async function ba(a,b){let c=b.audit;if(!c||"function"!=typeof c.listDefects)throw(0,F.mW)("缺陷清单读取能力(`ctx.audit.listDefects`)","运行时注入:读 `session.validationIssues` + `qualityBundle`(附录 A.8:可读但当前无接口,需补一个只读访问器)");let d=a?.scope;if(void 0!==d&&("object"!=typeof d||null===d||Array.isArray(d)))throw(0,F.P9)("scope 若要给,必须是对象 `{chapterId?}`");let e=await c.listDefects(d);if(!Array.isArray(e))throw(0,F.P9)("缺陷清单能力返回了非数组——返回形状是接口的一部分,不能含糊");return[...e].sort((a,b)=>{let c=a9(a)-a9(b);if(0!==c)return c;let d=String(a.source??"").localeCompare(String(b.source??""));return 0!==d?d:a.message.localeCompare(b.message)})}let bb=[{name:"list_defects",description:(0,F.HG)('读出当前文档的缺陷清单(阻断级优先排序,可带 `chapterId` 缩小范围)。这是"我现在还欠什么"的账本。','每轮收尾前对账;或不确定"还有什么没解决"时(比凭记忆列缺陷可靠得多——记忆里的缺陷清单总是偏乐观)。','**不要拿它当 `check` 的替代**:`check` 是对**指定文本**现跑判据(能看到"我刚改的这版有没有引入新问题"),`list_defects` 读的是**已入账**的历史清单(可能滞后于你刚做的改动)。改完正文必须 `check` 复验,不能靠 `list_defects` 变没变来确认。'),scope:"audit-state",inputSchema:F.wQ.object({scope:F.wQ.obj("范围(可选)",{chapterId:F.wQ.str("只看某一章的缺陷")})}),idempotent:!0,handler:ba}];var bc=c(13424),bd=c(67680),be=c(45304);function bf(a){if(Array.isArray(a.skills))return{skills:a.skills,invalidRecords:[],source:"ctx"};let b=(0,be.LU)();return{skills:b.skills,invalidRecords:b.invalid,source:"store"}}function bg(a,b){return{id:a.id,displayName:(0,bc.zg)(a),version:a.version,source:a.source,enabled:a.enabled,chapterDomain:a.match.chapterDomain,chapterDomainLabel:bc.tv[a.match.chapterDomain]??a.match.chapterDomain,projectTypes:[...a.match.projectTypes],projectTypeLabels:a.match.projectTypes.map(a=>bc.zK[a]??a),sectionKeywords:[...a.match.sectionKeywords],matchedBy:{domains:b?[...b.matchedDomains]:[],keywords:b?[...b.matchedKeywords]:[],regexHit:b?.regexHit??!1},contract:{sections:a.structure.map(a=>a.title),sectionCount:a.structure.length,forbiddenCount:a.forbidden.length,acceptanceCount:a.acceptance.length,acceptanceKinds:[...new Set(a.acceptance.map(a=>a.kind))],requires:a.requires.map(a=>a.key),knowledge:a.knowledge.map(a=>a.id?`${a.kind}:${a.id}`:a.kind)}}}function bh(a,b){let c=String(a??"").trim();if(!c)throw(0,F.P9)(`${b} 必填(${bc.Av.join(" / ")})。**刻意不给默认值**:传 general 会让只声明了 building/municipal 等类型的技能静默不命中,而"少加载了技能"是看不见的缺陷。工程类型取自项目设定或招标文件,不要猜。`);if(!bc.Av.includes(c))throw(0,F.P9)(`${b} 取值「${c}」不在闭集内(${bc.Av.join(" / ")})`);return c}async function bi(a,b){let c=String(a?.chapterTitle??"").trim();if(!c)throw(0,F.P9)("chapterTitle 不能为空(技能按章标题解析章域,空标题推不出任何域)");let d=bh(a?.projectType,"projectType"),e=Array.isArray(a?.sections)?a.sections.map(a=>String(a??"").trim()).filter(Boolean):[],f=bf(b);if(0===f.skills.length)throw(0,F.mW)("技能池(`ctx.skills` 或技能库)",'运行时注入 `ctx.skills`(`loadSkills()` 的内置 + 用户池)。技能池为空时**不得**当作"本章无技能契约"继续写:定位阶段的成功判据就是契约齐备,空池必须先查为什么空。');let g=(0,bd.mG)(c,e,d,f.skills),h=f.skills.filter(a=>!a.enabled).length;return{chapterTitle:c,projectType:d,matched:g.map(a=>bg(a,(0,bd.mJ)(a,c,e,d))),disabledCount:h,poolSize:f.skills.length,invalidRecords:f.invalidRecords,note:0===g.length?'没有命中任何技能(匹配是特异度降序的硬门:章域 + 工程类型 + 小节关键词任一不过即不命中)。**这不是"本章没有契约"**——请核对 projectType 是否传错、章标题是否为模板里的正式名。':`命中 ${g.length} 个(已按特异度降序);完整契约用 \`load_skill(skillId)\` 取,不要凭摘要里的节名自己编结构。`}}let bj={name:"match_skills",description:(0,F.HG)("按章标题 + 小节标题 + 工程类型匹配技能,返回**摘要**(结构节名、禁区条数、验收条数与命中依据)。","**本章开工前**的定位阶段(`:378`:「契约齐备」是定位阶段的成功判据);换章、改标题、改工程类型后要重跑。","**写完才调**——那时结构已定,看契约只剩事后辩解;也**不要凭摘要里的节名自己补全契约**(摘要是索引不是内容,用 `load_skill` 取全量);`projectType` 不要猜(猜错会让应命中的技能静默不加载,见工具参数说明)。"),scope:"skill-store",inputSchema:F.wQ.object({chapterTitle:F.wQ.str("章标题(用模板里的正式名;技能按它解析章域)"),sections:F.wQ.arr("本章的小节标题(用于小节关键词门;可空)",F.wQ.str("小节标题")),projectType:F.wQ.str(`工程类型(${bc.Av.join(" / ")};**必填,不给默认值**)`)},["chapterTitle","projectType"]),idempotent:!0,handler:bi};async function bk(a,b){let c=String(a?.skillId??"").trim();if(!c)throw(0,F.P9)("skillId 不能为空");let d=bf(b),e=d.skills.find(a=>a.id===c);if(!e){let a=d.skills.map(a=>a.id).sort().join("、");throw(0,F.mX)(`技能「${c}」不存在。当前池内可用技能:${a||"(池为空)"}`)}return{skill:e,contract:{sectionCount:e.structure.length,forbidden:e.forbidden.map(a=>"string"==typeof a?a:a.phrase),acceptanceSummary:e.acceptance.map(a=>"detector"===a.kind?`detector:${a.ids.join("+")}`:"threshold"===a.kind?`threshold:${a.id}${a.direction?`(${a.direction})`:""}=${a.value}`:`llm-checklist:${a.items.length} 条(非确定性,只提示不入门禁)`)}}}let bl={name:"load_skill",description:(0,F.HG)("取一个技能的**完整契约**(`structure` 结构规格 / `forbidden` 禁区 / `acceptance` 验收 / `requires` 事实需求 / `knowledge` 知识引用)。",'`match_skills` 命中后、**动笔写这一章之前**;也用于复核"我这章的节次是否与契约一致"。',"一次把池里所有技能全 load 进来(每个技能 1.5–2.2KB,几个就顶满工具结果上限,而且用不到的契约只会干扰判断)——只 load 本章真正命中的那几个;也不要在写作中途反复重 load(契约在本章内不变,重复取等于烧上下文)。"),scope:"skill-store",inputSchema:F.wQ.object({skillId:F.wQ.str("技能 id(取自 `match_skills` 或 `list_skills`)")},["skillId"]),idempotent:!0,handler:bk};async function bm(a,b){let c=a?.filter;if(void 0!==c&&("object"!=typeof c||null===c||Array.isArray(c)))throw(0,F.P9)("filter 若要给,必须是对象 `{source?, projectType?, chapterDomain?}`");if(c?.source!==void 0&&"builtin"!==c.source&&"user"!==c.source)throw(0,F.P9)("filter.source 只能是 builtin 或 user");if(c?.chapterDomain!==void 0&&!bc.ii.includes(String(c.chapterDomain)))throw(0,F.P9)(`filter.chapterDomain 取值「${String(c.chapterDomain)}」不在闭集内(${bc.ii.join(" / ")})`);let d=c?.projectType===void 0?void 0:bh(c.projectType,"filter.projectType"),e=bf(b),f=e.skills.filter(a=>(c?.source===void 0||a.source===c.source)&&(c?.chapterDomain===void 0||a.match.chapterDomain===c.chapterDomain)&&(void 0===d||!(a.match.projectTypes.length>0)||!!a.match.projectTypes.includes(d)));return{skills:f.map(a=>bg(a)),total:e.skills.length,filteredOut:e.skills.length-f.length,disabledCount:e.skills.filter(a=>!a.enabled).length,invalidRecords:e.invalidRecords,availableDomains:bc.ii.map(a=>({id:a,label:bc.tv[a]??a})),availableProjectTypes:bc.Av.map(a=>({id:a,label:bc.zK[a]??a})),note:`技能库共 ${e.skills.length} 个,过滤后 ${f.length} 个(含 disabled)。**\`disabled\` 的技能也列出来**:禁用是用户的显式决定,不报出来就没人知道"这条技能为什么没生效"。缺省工程类型为 ${bc.ij}(本工具只做过滤,不参与匹配,故给默认值无副作用)。`}}let bn={name:"list_skills",description:(0,F.HG)("列出技能库(可按 `source` / `projectType` / `chapterDomain` 过滤),返回摘要与可用枚举值(含 disabled 项)。",'需要知道"这个库到底有哪些技能"时:新项目立项、怀疑某个技能该在却没匹配上、或要看用户自定义技能(`source: "user"`)时。',"**不要拿它替代 `match_skills`**:本工具只做过滤、不做章标题匹配,列出来的不等于本章该用的;也不要在写作过程中反复列(技能库在一次运行内不变,重复列等于烧上下文)。"),scope:"skill-store",inputSchema:F.wQ.object({filter:F.wQ.obj("过滤条件(可选;都给即取交集)",{source:F.wQ.enumStr("技能来源",["builtin","user"]),projectType:F.wQ.enumStr("工程类型",bc.Av),chapterDomain:F.wQ.enumStr("章域(闭集)",bc.ii)})}),idempotent:!0,handler:bm},bo=["match_skills","load_skill","list_skills","discover_files","inspect_asset"],bp=["lookup_authoritative","request_target_change","rebalance_budget","check_family"],bq=a=>a.map(a=>a.name),br=(...a)=>[...new Set(a.flat())],bs={locate:bo,plan:br(bo,bp,bq(a1),["expand_scope"]),generate:br(bo,bp,bq(ar),bq(aK),bq(aY),bq(V),bq(a6)),finalize:br(bq(aK),bq(V),bq(a6),bq(bb),bq(X.ri))},bt=["locate","plan","generate","finalize"],bu=[{id:"A.1-evidence",tools:ar},{id:"A.2-verdict",tools:aK},{id:"A.3-compute",tools:aY},{id:"A.4-authoring",tools:V},{id:"A.5-planning",tools:a1},{id:"A.6-declare",tools:a6},{id:"A.8-meta",tools:bb},{id:"A.9-skills",tools:[bj,bl,bn]},{id:"A.10-repair-rounds",tools:X.ri}],bv=bu.flatMap(a=>a.tools.map(a=>{var b;return{...a,stages:(b=a.name,bt.filter(a=>bs[a].includes(b)))}})),bw=new Map(bv.map(a=>[a.name,a]));function bx(a){return bv.filter(b=>b.stages.includes(a))}async function by(a,b,c){let d=Date.now(),e=bw.get(a);if(!e)return(0,F.$b)(a,(0,F.mX)(`未注册的工具「${a}」。已注册 ${bv.length} 个:${bv.map(a=>a.name).join("、")}`),d);let f=function(a,b){if(0===a.inputSchema.required.length)return;if(!b||"object"!=typeof b||Array.isArray(b))return`工具「${a.name}」需要对象参数,缺少必填字段:${a.inputSchema.required.join("、")}`;let c=a.inputSchema.required.filter(a=>void 0===b[a]||null===b[a]);return c.length>0?`工具「${a.name}」缺少必填字段:${c.join("、")}`:void 0}(e,b);if(f)return(0,F.$b)(a,(0,F.P9)(f),d);try{let f=await e.handler(b,c,{tool:a,ctx:c});return(0,F.OY)(a,f,d)}catch(b){return(0,F.$b)(a,(0,F.y4)(b),d)}}async function bz(a,b){let c=b.targetWords,d=[],e=[],g=[];if(c>0){e.push("block-structure-contract");let b=(0,w.z4)(c),g=(0,f.V7)(a);g<b.min?d.push({detectorId:"block-structure-contract",level:"error",severity:"blocker",message:`篇幅欠产:当前 ${g} 字,本块区间 ${b.min}~${b.max} 字(目标 ${b.target} 字)`}):g>b.toleranceLine&&d.push({detectorId:"block-structure-contract",level:"error",severity:"blocker",message:`篇幅严重超产:当前 ${g} 字,超出容差线 ${b.toleranceLine} 字(目标 ${b.target} 字)`})}try{e.push("block-templating");let b=await (0,z.SA)(a);(0,z.mv)(b)&&d.push({detectorId:"block-templating",level:"error",severity:"blocker",message:"模板化套话超标:本块存在零信息前缀句/套话句堆叠"})}catch(a){g.push("block-templating"),d.push({detectorId:"block-templating",level:"warning",message:`模板化扫描失败,该维度本次未执行:${a instanceof Error?a.message:String(a)}`})}try{e.push("block-filler-phrase");let b=(0,z.lN)(a);b&&(0,z.gj)(b)&&d.push({detectorId:"block-filler-phrase",level:"error",severity:"blocker",message:`短语级套话 ${b.count} 处:本块存在零信息短语`})}catch(a){g.push("block-filler-phrase"),d.push({detectorId:"block-filler-phrase",level:"warning",message:`短语级套话扫描失败,该维度本次未执行:${a instanceof Error?a.message:String(a)}`})}if(b.materialText&&b.materialText.trim().length>0)try{e.push("block-fact-density");let c=(0,z.oM)(a,b.materialText);c.blocking&&d.push({detectorId:"block-fact-density",level:"error",severity:"blocker",message:`量化参数密度不足:${c.verdict.params}/${c.verdict.required}`})}catch(a){g.push("block-fact-density"),d.push({detectorId:"block-fact-density",level:"warning",message:`参数密度扫描失败,该维度本次未执行:${a instanceof Error?a.message:String(a)}`})}try{e.push("backstage-fallback");let b=(0,z.mY)(a);b.length>0&&d.push({detectorId:"block-format-constraints",level:"error",severity:"blocker",message:`正文出现后台话术 ${b.length} 行:缺口应走 declare_missing,不得写进正文`})}catch(a){g.push("backstage-fallback"),d.push({detectorId:"block-format-constraints",level:"warning",message:`后台话术扫描失败,该维度本次未执行:${a instanceof Error?a.message:String(a)}`})}if(b.requirementAnchors&&b.requirementAnchors.length>0){e.push("block-requirement-anchor");let c=a.replace(/\s+/gu,"").toLowerCase(),f=b.requirementAnchors.filter(a=>{let b=String(a).replace(/\s+/gu,"").toLowerCase();return b.length>0&&!c.includes(b)});f.length>0&&d.push({detectorId:"block-requirement-anchor",level:"error",severity:"blocker",message:`本节负责的招标要求锚点未落位 ${f.length} 处:${f.slice(0,6).join("、")}——招标文件的实质内容(数值/等级/具名项)必须逐字写入正文`})}return{issues:d,executed:e,degraded:g}}async function bA(a){let b=String(a.nodeId??"").trim()||"current",c=[],d=await W({system:a.system,initialMessages:[{role:"user",content:a.prompt}],budget:function(a=process.env){let b=(0,A.Tl)(a);return{maxTurnsPerBlock:b.maxTurnsPerBlock,maxToolCallsPerBlock:b.maxToolCallsPerBlock,noImprovementRounds:b.noImprovementRounds}}(),...a.onTurn?{onTurn:a.onTurn}:{},check:async b=>bz(b,{targetWords:a.targetWords,materialText:a.materialText,...a.requirementAnchors?{requirementAnchors:a.requirementAnchors}:{}}),runTurn:async({messages:d})=>{let e,f=(0,A.Iw)((0,A.Su)(a.diagnostics)),g=[...new Map((a.toolContext?[...bx("locate"),...bx("plan"),...bx("generate")]:[]).map(a=>[a.name,a])).values()].map(a=>({name:a.name,description:a.description,parameters:a.inputSchema})),h=a.toolContext&&d.length>0?[{role:d[0].role,content:`${d[0].content}
39
+ ${c.map(a=>d(a)).join("\n")}`}(a.spec);return M(b,"insert_table",c,a.at,d)}let S={name:"insert_table",description:(0,F.HG)("在锚点处插入一张 Markdown 表格(先过表块守卫:表头 + 分隔线 + ≥1 行数据,且各行列数与表头一致),再走与 patch 相同的事务与边界。",'正文需要以正式表格承载清单/参数/对照关系时(表格是评价规则里的加分承载面);或某处"应该有一张表"而目前只有一段罗列句时。','正文禁表场景(招标显式禁表)——那时表会被判为结构缺陷;也不要拿它插"见下表"式的空表或没有表头的表(守卫会直接拒绝);表格内容必须有资料依据,不得为了好看编数据。'),scope:"document-draft",inputSchema:F.wQ.object({nodeId:F.wQ.str("目标节点 id"),spec:F.wQ.obj("表格规格",{headers:F.wQ.arr("表头单元格(非空)",F.wQ.str("表头")),rows:F.wQ.arr("数据行(≥1 行,每行列数须与表头一致)",F.wQ.arr("一行单元格",F.wQ.str("单元格"))),caption:F.wQ.str("表名/表注(可选;有则作为表前一行输出)")},["headers","rows"]),at:F.wQ.obj("插入位置锚点",{text:F.wQ.str("锚点原文(逐字取自当前草稿)")},["text"])},["nodeId","spec","at"]),idempotent:!1,idempotentViaSnapshot:!0,handler:R};async function T(a,b){let c=String(a?.nodeId??"").trim();if(!c)throw(0,F.P9)("nodeId 不能为空");let d=b.document;if(!d)throw(0,F.mW)("文档事务能力(`ctx.document.commitSection`)","运行时注入:接 `chapterLoop` 的块推进/提交记账");let e=d.readSection(c);if("string"!=typeof e)throw(0,F.mX)(`节点「${c}」不存在或尚无草稿正文,不能提交`);if(!e.trim())throw(0,F.P9)(`节点「${c}」正文为空,不能提交(空块提交会把"没写"标成"写完")`);return"function"==typeof d.commitSection&&await d.commitSection(c),{nodeId:c,committed:!0,committedAt:Date.now(),note:d.commitSection?"已通过事务通道提交":'事务通道未提供 commitSection 钩子;本次仅返回提交回执(S1.3 的显式化目的:让画布能显示"这块定了")'}}async function U(a,b){let c=String(a?.nodeId??"").trim();if(!c)throw(0,F.P9)("nodeId 不能为空");if(!a?.anchor||"string"!=typeof a.anchor.text)throw(0,F.P9)("anchor.text 必填(要删的那句/那行的原文)");return M(b,"delete_span",c,a.anchor,"")}let V=[O,Q,S,{name:"commit_section",description:(0,F.HG)('显式提交一个小节的草稿(现在靠"不返回 toolCall"隐式表达;显式化以便画布显示与循环判定)。','这一块确实写完了、不再改时(提交是**块推进的信号**,也是"我认账"的声明)。','还想再改(提交后再改会走到重开路径,代价更高);正文为空时提交会被直接拒绝——也不要把它当"跳过这一块"的手段(跳过是 `skip_repair_round`/声明的活)。'),scope:"document-draft",inputSchema:F.wQ.object({nodeId:F.wQ.str("目标节点 id")},["nodeId"]),idempotent:!0,handler:T},{name:"delete_span",description:(0,F.HG)("删除锚点命中的整句/整行(`applyChapterPatch` 的空 replacement 删除语义),走同一套 4.4 边界与事务。","确定某句是污染内容时必须删(来源罗列句、内部术语句、元话语声明句、重复句)——**删得掉比改得像更重要**;`check` 报了某句类缺陷而改写无法消除时。",'只是"这句写得不好"(那是 `patch_section` 改写,删除会丢信息);一次删掉大段正文(净字数下限会直接拒绝,且删内容比补内容更容易伤到实质判据);也不要连着删多句——每删一句都要有独立的判据依据(`explain_defect` 可查)。'),scope:"document-draft",inputSchema:F.wQ.object({nodeId:F.wQ.str("目标节点 id"),anchor:F.wQ.obj("要删除的语句锚点(逐字取自当前草稿)",{text:F.wQ.str("锚点原文")},["text"])},["nodeId","anchor"]),idempotent:!1,idempotentViaSnapshot:!0,handler:U}];async function W(a){let b,{budget:c}=a,d=[...a.initialMessages],e=0,f=0,g="模型未产出可用正文";for(let h=1;h<=c.maxTurnsPerBlock;h+=1){if(f>=c.maxToolCallsPerBlock){g=`工具调用预算耗尽(${f}/${c.maxToolCallsPerBlock})`;break}let i=await a.runTurn({system:a.system,messages:d,turn:h});if(f+=i.toolCalls.length,i.refused){if(b)return a.onTurn?.({turn:h,residual:b.residual,toolCalls:f,action:"unfixable"}),{kind:"unfixable",content:b.content,turn:h,residual:b.residual,toolCalls:f,reason:`预算耗尽(${i.refused.kind})本轮调用未发起:提交当前最好草稿`,issues:[]};return a.onTurn?.({turn:h,residual:0,toolCalls:f,action:"unfixable"}),{kind:"budget_refused",turn:h,reason:i.refused.message,refused:i.refused}}let j=i.committed||i.text;if(j&&j.trim().length>0){let k=await a.check(j),l=k.issues.filter(a=>"error"===a.level||"blocker"===a.severity).length,m=0===k.degraded.length;if(k.degraded.length>0&&0===k.executed.length)return a.onTurn?.({turn:h,residual:l,toolCalls:f,action:"unfixable"}),{kind:"unfixable",content:j,turn:h,residual:l,toolCalls:f,reason:`自查维度全部降级(${k.degraded.join("、")}),本块未做自查,直接提交当前草稿`,issues:k.issues};if(0===l&&m)return a.onTurn?.({turn:h,residual:l,toolCalls:f,action:"commit"}),{kind:"passed",content:j,turn:h,residual:l,toolCalls:f};let n=b?.residual;if((void 0===b||l<b.residual)&&(b={content:j,residual:l}),a.onTurn?.({turn:h,residual:l,toolCalls:f,action:"regenerate"}),void 0===n||l<n-Math.max(1,Math.ceil(.1*n)))e=0;else if((e+=1)>=c.noImprovementRounds){g=`连续 ${e} 轮无改善(残余 ${l})`,a.onTurn?.({turn:h,residual:l,toolCalls:f,action:"unfixable"});break}h<c.maxTurnsPerBlock&&(d=[...d,...i.toolMessages??[],{role:"assistant",content:j},{role:"user",content:function(a){let b=a.filter(a=>"error"===a.level||"blocker"===a.severity),c=b.slice(0,12).map((a,b)=>`${b+1}. ${a.detectorId?`[${a.detectorId}] `:""}${a.message}`),d=b.slice(12),e=new Map;for(let a of d){let b=a.detectorId||"(未标注判据)";e.set(b,(e.get(b)||0)+1)}return["【自查裁决】本稿未通过判据,下列问题必须修正后重新输出完整本节正文:",...c,d.length>0?`${d.length} 条未逐条列出,按判据分布:${[...e.entries()].map(([a,b])=>`${a} ${b} 条`).join("、")}`:"","修正要求:直接输出修正后的**完整**本节正文(不要只输出改动片段、不要解说改动过程);保留原有事实、数值与结论,不得以删除内容的方式规避问题。"].filter(Boolean).join("\n")}(k.issues)}]);continue}let k=i.toolMessages??[];(k.length>0||i.text.trim().length>0)&&(d=[...d,...k,...i.text.trim().length>0?[{role:"assistant",content:i.text}]:[]]),g=h>=c.maxTurnsPerBlock?"轮次耗尽时模型仍未产出正文":g}return b?{kind:"unfixable",content:b.content,turn:c.maxTurnsPerBlock,residual:b.residual,toolCalls:f,reason:g,issues:[]}:{kind:"no_content",turn:c.maxTurnsPerBlock,reason:g}}var X=c(25018),Y=c(73024),Z=c(48161),$=c(15751),_=c(19898),aa=c(82437);function ab(a){try{let b=e.join((0,y.a2)(),"projects",(0,_.computeProjectId)(e.resolve(a.projectRoot)),"kb.db");if(!Y.existsSync(b))return;return new _.IndexStateStore(b)}catch{return}}function ac(a,b){let c=(a.scopeRoots??[]).filter(Boolean);if(0===c.length)return!1;let d=(0,x.LI)((0,y.NW)(a.projectRoot),b);return!!d.ok&&c.some(a=>(0,x.kq)(d.absolute,a))}function ad(a,b){if(0===(a.scopeRoots??[]).filter(Boolean).length)throw(0,F.JA)(`工具「${b}」被拒绝:本次运行未授予任何资料范围(fail-closed,见 4.6 域表)`)}let ae=new Set([".md",".markdown",".txt",".csv",".json",".tsv",".log"]),af=new Set([".dwg"]),ag=new Set([".xlsx",".xls"]),ah={name:"read_raw",description:(0,F.HG)("按白名单钳制读取原始资料的抽取全文,并可按页码 / 字符区间 / 工作表定位(S7)。","手上有疑点、需要回原文核对时(如正文引用的数值要确认原文怎么写、图纸说明里的参数在哪一页);检索结果看起来矛盾、或 `search_evidence` 给出的切片是派生内容而你要看原文上下文时。",'已经拿到的切片文本足够回答当前问题时(原文一次可能上万字符,是切片预算的数十倍);只是想知道"项目里有没有这个文件"(那是 `discover_files`);也不要拿它当通用读文件工具去读项目里与资料无关的文件——路径不在资料白名单内一律 PATH_DENIED。'),scope:"evidence-whitelist",inputSchema:F.wQ.object({path:F.wQ.str("资料文件路径(KB 相对路径或落在白名单根内的绝对路径)"),loc:F.wQ.obj("定位(可选;三者互斥,page 优先于 range)",{page:F.wQ.int("PDF 页码(依赖抽取器写下的「## PDF 第 N 页」标记)"),range:F.wQ.arr("抽取文本坐标系下的字符区间 [start, end)(**不是文件字节偏移**,见 S7.2 #1)",F.wQ.int("字符偏移")),sheet:F.wQ.str("XLSX 工作表名(仅 .xlsx/.xls 有效;缺省取第一个工作表)")})},["path"]),idempotent:!0,handler:function(a,b){let c,d,f,g=(0,F.vE)(a.path,b.scopeRoots,"read_raw 的 path"),h=e.extname(g.absolute).toLowerCase(),i=a.loc??{};if(af.has(h))throw(0,F.Lu)("NOT_IMPLEMENTED","read_raw(dwg) 一期不支持:仓库只做 DWG→DXF 文本实体解析,无 ODA/LibreDWG 转换器。需要图纸参数请改用结构化实体通道(见 S7.1 第 2 行:`ExtractionResult.structured.cad`)。");let j="kb-chunks";if(void 0!==i.sheet&&ag.has(h)&&(c=function(a,b){let c=$.readFile(a,{cellDates:!0,sheetStubs:!1}),d=b&&c.SheetNames.includes(b)?b:c.SheetNames[0];if(!d)throw(0,F.mX)(`工作表不存在:${b??"(第一个工作表)"};该工作簿共 ${c.SheetNames.length} 个工作表`);let e=c.Sheets[d];if(!e)throw(0,F.mX)(`工作表不存在:${d}`);let f=$.utils.sheet_to_json(e,{header:1,raw:!1,defval:""}).map(a=>a.map(a=>String(a).trim()).join(" | ")).join("\n");return{text:f,totalChars:f.length}}(g.absolute,i.sheet).text,j="xlsx-sheet"),void 0===c&&"function"==typeof b.rawText){let a=b.rawText(g.relative);"string"==typeof a&&(c=a,j="runtime-rawText")}if(void 0===c){let a=ab(b);if(a)try{let b=a.getDocumentChunk(g.relative);b?.content&&(c=b.content,j="kb-chunks")}finally{a.close()}}if(void 0===c&&ae.has(h)&&Y.existsSync(g.absolute)&&(c=Y.readFileSync(g.absolute,"utf8"),j="disk-text"),void 0===c)throw(0,F.mW)(`文件「${g.relative}」的抽取文本(KB 切片库里没有该路径的 document chunk,且它不是可直读的文本格式)`,"运行时注入 `ctx.rawText`(接 `IndexStateStore.getDocumentChunk`),或先让该文件过一遍抽取器落库");let k=c.length,l=c;if("number"==typeof i.page){let a=function(a,b){let c=RegExp(`^#{1,6}\\s*PDF\\s*第\\s*${b}\\s*页`,"mu").exec(a);if(!c)return{text:"",found:!1};let d=a.slice(c.index+c[0].length),e=/^#{1,6}\s*PDF\s*第\s*\d+\s*页/mu.exec(d);return{text:e?d.slice(0,e.index):d,found:!0}}(c,i.page);if(!a.found)throw(0,F.mX)(`在「${g.relative}」的抽取文本里找不到页码标记「## PDF 第 ${i.page} 页」(markdown 页标记通道)`);d=i.page,l=a.text}else if(Array.isArray(i.range)&&2===i.range.length){let[a,b]=i.range;if(!Number.isFinite(a)||!Number.isFinite(b)||a<0||b<=a)throw(0,F.P9)(`loc.range 必须是 [start, end] 且 0 <= start < end(当前 ${JSON.stringify(i.range)})`);if(f=[Math.trunc(a),Math.trunc(b)],!(l=c.slice(f[0],f[1])))throw(0,F.P9)(`loc.range ${JSON.stringify(f)} 落在文本长度 ${k} 之外`)}let m=l.length>F.Ec;return{text:m?l.slice(0,F.Ec):l,truncated:m,totalChars:k,channel:j,relativePath:g.relative,scopeRoot:g.root,...void 0===d?{}:{page:d},...void 0===f?{}:{range:f},...void 0===i.sheet?{}:{sheet:i.sheet}}}};async function ai(a,b){let d=(0,F.He)(a.query,"query");ad(b,"search_evidence");let e=(0,F.yr)(a.opts?.limit,8,1,40),{getMultiProjectManager:f}=await Promise.resolve().then(c.bind(c,44533)),g=f(),h=await g.search(b.projectRoot,d,{limit:3*e,...a.opts?.scope==="project"?{scope:"project"}:{}}),i=Array.isArray(h?.results)?h.results:[],j=[],k=0;for(let a of i){if(!ac(b,String(a.filePath??""))){k+=1;continue}if(j.push({filePath:a.filePath,score:a.score,...void 0===a.sectionTitle?{}:{sectionTitle:a.sectionTitle},content:a.content,...void 0===a.startChar?{}:{startChar:a.startChar},...void 0===a.endChar?{}:{endChar:a.endChar},scope:a.scope,...void 0===a.source?{}:{source:a.source}}),j.length>=e)break}return{query:d,items:j,droppedOutOfScope:k,queryTimeMs:Number(h?.queryTimeMs??0)}}let aj={name:"search_evidence",description:(0,F.HG)("在**本项目资料白名单内**按查询检索证据切片(走 `MultiProjectManager.search`;结果按资料范围过滤)。","需要为某个具体论点找资料依据、或要确认某个数值/规格/做法在资料里出现过时;写作前为本章做一次定向取证。",'每章无脑先调一次"拿一堆证据"(S1.3 点名的那种滥用:会引入与本章无关的证据并挤掉预算);也不是通用搜索——它只搜本项目资料,找工具/文件用 `discover_files`,看原文用 `read_raw`。同一 query 在同一轮里不要重复调(`idempotent`,重复结果只有噪声)。'),scope:"evidence-whitelist",inputSchema:F.wQ.object({query:F.wQ.str("检索查询(自然语言或关键短语;建议带项目实体词而非泛词)"),opts:F.wQ.obj("检索选项",{limit:F.wQ.int("返回条数上限(默认 8;1–40)"),scope:F.wQ.enumStr("检索面:project 仅本项目 / 缺省含全局库",["chapter","project"])})},["query"]),idempotent:!0,handler:ai},ak={name:"read_source",description:(0,F.HG)("按文件路径读取该文件在 KB 里的**切片序列 + 索引元数据**(格式/大小/切片数/索引状态)。",'已经知道要看的文件、想看它的切片结构(每片带 `startChar`/`endChar`,可据此决定 `read_raw` 的 range)时;或要确认某个文件的索引状态/切片数(例如检索没命中,先判断是"没索引"还是"真没有")。','只想知道"有哪些文件"(用 `discover_files`);想看连续原文(用 `read_raw`,切片是派生且可能被截断);路径不在资料白名单内时会被 PATH_DENIED,不要试图用别的写法绕过。'),scope:"evidence-whitelist",inputSchema:F.wQ.object({filePath:F.wQ.str("资料文件路径(KB 相对路径,须落在资料白名单内)"),opts:F.wQ.obj("读取选项",{maxChunks:F.wQ.int("返回切片数上限(默认 12;1–60)")})},["filePath"]),idempotent:!0,handler:function(a,b){let c=(0,F.vE)(a.filePath,b.scopeRoots,"read_source 的 filePath"),d=(0,F.yr)(a.opts?.maxChunks,12,1,60),f=(0,y.Yy)(b.projectRoot).find(a=>a.relativePath===c.relative),g=ab(b);if(!g)throw(0,F.mW)(`项目 KB 切片库(kb.db)不存在,无法读取「${c.relative}」的切片`,"先让本项目过一遍索引(kbService 的索引链路);或确认 projectRoot 指向的是已索引的项目");try{let a=g.countChunks({relativePath:c.relative}),b=g.listChunks({relativePath:c.relative,limit:d});if(0===b.length)throw(0,F.mX)(`「${c.relative}」在 KB 切片库里没有切片(可能尚未索引或索引失败)`);return{relativePath:c.relative,metadata:{format:f?.format??e.extname(c.relative).slice(1).toLowerCase(),category:f?.category??"other",fileSize:f?.fileSize??0,mtime:f?.mtime??0,chunkCount:f?.chunkCount??a,status:f?.status??"unknown",...f?.indexedAt===void 0?{}:{indexedAt:f.indexedAt},...b[0]?.materialRoot===void 0?{}:{materialRoot:b[0].materialRoot}},chunks:b.map(a=>({chunkIndex:a.chunkIndex,...void 0===a.sectionTitle?{}:{sectionTitle:a.sectionTitle},content:a.content,...void 0===a.startChar?{}:{startChar:a.startChar},...void 0===a.endChar?{}:{endChar:a.endChar},...void 0===a.chunkKind?{}:{chunkKind:a.chunkKind}})),totalChunks:a}}finally{g.close()}}},al={name:"discover_files",description:(0,F.HG)("列出本项目资料白名单内的文件清单(路径/分类/格式/大小/切片数/索引状态),可按 category 与路径关键词过滤。",'开工前先摸清"这次手上有什么资料"(定位阶段的第一步);或检索反复不命中时,先确认那份资料到底在不在、索引状态是不是 failed。',"已经知道文件路径时(直接 `read_source`/`read_raw`,列表信息帮不上);也不要指望它返回文件**内容**——只返回清单与元数据,内容是 `read_raw` 的事。"),scope:"evidence-whitelist",inputSchema:F.wQ.object({query:F.wQ.str("路径关键词(子串匹配 relativePath;缺省不过滤)"),opts:F.wQ.obj("过滤选项",{category:F.wQ.str("资料分类(spreadsheet / image / cad / document / other)"),limit:F.wQ.int("返回条数上限(默认 40;1–200)")})}),idempotent:!0,handler:function(a,b){ad(b,"discover_files");let c=(0,F.yr)(a.opts?.limit,40,1,200),d=a.opts?.category?.trim(),e="string"==typeof a.query?a.query.trim().toLowerCase():"",f=(0,y.Yy)(b.projectRoot,d?{category:d}:{}),g=0,h=[];for(let a of f){if(!ac(b,a.relativePath)){g+=1;continue}(!e||a.relativePath.toLowerCase().includes(e))&&h.push({relativePath:a.relativePath,category:a.category,format:a.format,fileSize:a.fileSize,chunkCount:a.chunkCount,status:a.status,matchedBy:a.matchedBy,...void 0===a.collectionName?{}:{collectionName:a.collectionName}})}let i=h.slice(0,c);return{items:i,total:h.length,returned:i.length,truncated:h.length>i.length,droppedOutOfScope:g}}};async function am(a,b){let c=(0,F.He)(a.attribute,"attribute"),d=b.authoritative;if(!d)throw(0,F.mW)("权威值选取的输入(facts / labeledValues / overrides)","运行时把 `buildAuthoritativeValues` 的入参挂到 `ctx.authoritative`(来源:事实池 + 原文口径标签 + 答疑覆盖)");let e=(0,aa.iC)(d),f=(0,aa.hf)(c),g=e.resolved.find(a=>a.attribute===c)??e.resolved.find(a=>(0,aa.hf)(a.attribute)===f)??e.resolved.find(a=>a.attribute.includes(c)||c.includes(a.attribute));return g?{attribute:g.attribute,value:g.value,rule:g.rule,evidence:g.evidence.map(a=>({source:a.source,snippet:a.snippet})),superseded:[...g.superseded],candidates:g.candidates.slice(0,12).map(a=>({subject:a.subject,value:a.value,source:a.source,priority:a.priority})),caliber:g.caliber}:{attribute:c,value:null,rule:null,evidence:[],superseded:[],candidates:[],caliber:!1}}let an={name:"lookup_authoritative",description:(0,F.HG)("按属性名查**现行权威值**及其裁决规则(R1..R7)、依据出处、被取代的历史值与全部候选(`buildAuthoritativeValues` 的 `ResolvedValue` 子集)。",'正文里要写某个数值/口径、需要先确认"以哪份资料为准"时(权威阶梯:clarification > 招标条款 > 评价规则 > 清单 > 图纸注记);或一个属性在资料里出现了多个值时,用它的 `superseded` / `candidates` 判断哪个是现行口径。','想检索资料原文(那是 `search_evidence`/`read_raw`);拿它当"事实查询"用来问与权威口径无关的内容(它只登记**口径型属性**,未命中会返回 `value: null`,那不是"资料里没有"而是"没有权威口径")。归**计划**阶段(S1.3)。'),scope:"evidence-whitelist",inputSchema:F.wQ.object({attribute:F.wQ.str("属性名(如「计划工期」「最高投标限价」「垫层做法」)")},["attribute"]),idempotent:!0,handler:am},ao=new Set([".png",".jpg",".jpeg",".gif",".bmp",".webp",".tif",".tiff"]);async function ap(a,b){var d;let f,g=(0,F.vE)(a.path,b.scopeRoots,"inspect_asset 的 path");if(!Y.existsSync(g.absolute))throw(0,F.mX)(`文件不存在:${g.relative}`);let h=Y.statSync(g.absolute);if(!h.isFile())throw(0,F.P9)(`不是文件:${g.relative}`);let i=".pdf"===(d=e.extname(g.absolute).toLowerCase())?"pdf":".docx"===d||".doc"===d?"docx":ag.has(d)?"xlsx":af.has(d)||".dxf"===d?"dwg":ao.has(d)?"image":ae.has(d)?"text":"other",j=[];if("image"===i)try{let{loadImage:a}=await Promise.resolve().then(c.t.bind(c,28183,23)),b=await a(g.absolute);f={width:b.width,height:b.height}}catch(a){j.push(`图像尺寸探测失败(@napi-rs/canvas):${a instanceof Error?a.message:String(a)}`)}let k=!1,l=ab(b);if(l)try{k=l.countChunks({relativePath:g.relative})>0}finally{l.close()}return k||"text"===i||j.push("KB 切片库里没有该文件的抽取文本;`read_raw` 会因缺少抽取结果而失败(先让它过一遍抽取器)"),"dwg"===i&&j.push("DWG 一期不支持 read_raw(无 ODA/LibreDWG 转换器);图纸参数只能走结构化实体通道(S7.2 #3)"),{relativePath:g.relative,absolutePath:g.absolute,kind:i,sizeBytes:h.size,extractable:"other"!==i&&"dwg"!==i,textExtracted:k,ocrAvailable:!0===b.ocrAvailable,...void 0===f?{}:{dimensions:f},notes:j}}async function aq(a,b){let c=(0,F.He)(a.reason,"reason");if(!Array.isArray(a.roots)||0===a.roots.length)throw(0,F.P9)("roots 必须是非空数组");let d=[],f=[];for(let c of a.roots){let a=String(c??"").trim();if(!a){d.push({root:String(c),reason:"空路径"});continue}if(!e.isAbsolute(a)){d.push({root:a,reason:"资料范围只能按绝对路径授予(相对路径的基准会随 cwd 漂移)"});continue}let g=function(a){let b=e.resolve(a),c=Z.homedir();if(["/",c,e.join(c,".customize-agent"),e.join(c,".ssh"),e.join(c,".aws")].includes(b))return"该根属于 4.6 域表中的禁止面(项目文件/系统/家目录)";let d=[e.join(c,".customize-agent"),e.join(c,".ssh"),e.join(c,".aws"),e.join(c,".config"),"/etc","/usr","/bin","/sbin","/var","/System","/Library",e.join("C:","Windows")].find(a=>b===a||b.startsWith(`${a}${e.sep}`));return d?`该根落在禁止面「${d}」之内(4.6:项目文件/系统/家目录一律禁止,含存放 API Key 的配置目录)`:void 0}(a);if(g){d.push({root:a,reason:g});continue}if(b.scopeRoots.some(b=>e.resolve(b)===e.resolve(a))){d.push({root:a,reason:"该根已在当前资料范围内,无需扩范围"});continue}f.push(e.resolve(a))}if(0===f.length)throw(0,F.P9)(`没有任何可提交的扩范围请求。逐根拒绝原因:${d.map(a=>`${a.root} → ${a.reason}`).join(";")}`);return{requestId:`expand-scope-${Date.now().toString(36)}-${Math.abs(function(a){let b=0;for(let c=0;c<a.length;c+=1)b=31*b+a.charCodeAt(c)|0;return b}(f.join("|"))).toString(36)}`,tool:"expand_scope",status:"pending",reason:c,requestedRoots:f,currentRoots:[...b.scopeRoots],risk:"资料范围是 4.6 的冻结域:扩大可达面会让后续取证读到此前不可见的数据,必须人工确认",rejected:d}}let ar=[ah,aj,ak,al,an,{name:"inspect_asset",description:(0,F.HG)("探测一个资料文件的可读性:类型、体积、是否可抽取、KB 里是否已有抽取文本、图像像素尺寸、OCR 是否可用。",'**在决定怎么读它之前**先探一次(PDF 要页码、图要替代表、表格要工作表名,三种读法完全不同);或 `read_raw` 失败后先用它判断是"文件不在"、"没索引"还是"格式一期不支持"。',"已经知道类型且要内容时(直接 `read_raw`/`read_source`);也不要拿它批量扫全库——清单类的批量信息用 `discover_files`(一次返回全部元数据)。"),scope:"evidence-whitelist",inputSchema:F.wQ.object({path:F.wQ.str("资料文件路径(须落在资料白名单内)")},["path"]),idempotent:!0,handler:ap},{name:"expand_scope",description:(0,F.HG)("提交一份**扩大资料范围**的审批请求(不自行生效:只生成 pending 的 ApprovalRequest,含逐根拒绝原因)。",'确信资料就在白名单之外、且不读它就写不下去时(例如招标正文没被纳入资料范围,而某条要求必须核对原文);先把 `reason` 写清"缺了它会导致什么后果",人工据此裁决。','常规取证(白名单内还有很多没看时,先把范围用尽);把"授权"当成能自己给自己开的门——本工具**永不返回已获批**,且会直接拒绝 4.6 的禁止面(家目录/系统/含 API Key 的配置目录);也不要为了绕过某次 PATH_DENIED 而调它(那次拒绝是判据在工作,不是范围不够)。⚠需审批。'),scope:"evidence-whitelist",inputSchema:F.wQ.object({reason:F.wQ.str("扩范围的理由与后果(人工裁决的依据,不得写空话)"),roots:F.wQ.arr("申请纳入资料范围的**绝对路径**根(逐个校验;禁止面内的会被直接拒绝)",F.wQ.str("绝对路径"))},["reason","roots"]),idempotent:!1,requiresApproval:!0,handler:aq}];var as=c(31530),at=c(47843),au=c(68977),av=c(15997);function aw(a){return"blocker"===a.severity||"error"===a.level}async function ax(a,b,c){var d,e,f;let g=[],h=[],i={},j=[],k=c.detectors?.run;for(let c of a){if(!(0,v.Xh)(c)){h.push(c),i[c]='该 id 未登记在检测器注册表(`detectorEntry(id)` 返回 undefined)——不能假设它"没有意见"';continue}if(!k){h.push(c),i[c]="本次运行未接入检测器执行能力(`ctx.detectors.run` 为空),该维度未执行";continue}try{let a=await k(c,b);if(!Array.isArray(a)){h.push(c),i[c]="检测器未返回 issue 数组(返回 undefined 不得等于通过——`chapterGeneration` 已踩过这个坑)";continue}j.push(...a),g.push(c)}catch(a){h.push(c),i[c]=`检测器抛出异常:${a instanceof Error?a.message:String(a)}`}}for(let a of h.slice(0,8))j.push({level:"warning",severity:"warning",category:"evidence_coverage",source:a,message:`该检测维度本次未执行(degraded):${i[a]??""}`});h.length>8&&j.push({level:"warning",severity:"warning",category:"evidence_coverage",source:"degraded-summary",message:`另有 ${h.length-8} 个降级维度未在此逐条列出(明细见 degraded/verdict.reason,共 ${h.length} 个未执行)。`});let l=(d=j,e=g,f=h,{issues:d,executed:[...new Set(e)].sort(),degraded:[...new Set(f)].sort()}),m=function(a){let b=Object.keys(a);if(b.length<=8)return{kept:a,dropped:0};let c={};for(let d of b.slice(0,8))c[d]=a[d];return{kept:c,dropped:b.length-8}}(i);return{verdict:function(a){let b=a.issues.filter(aw).length;if(a.degraded.length>0){let c=a.degraded.slice(0,6).join("、"),d=a.degraded.length>6?`…等共 ${a.degraded.length} 个`:"";return{verdict:"not-run",blockers:b,reason:`有 ${a.degraded.length} 个检测维度本次未执行(${c}${d})——降级的检测器与干净跑完的必须长得不一样,否则「通过」不可信(S3.1);`+(0===b?"本次 issue 列表为空不代表无缺陷,只代表没查。":`另有 ${b} 条阻断级 issue。`)}}return 0===a.executed.length?{verdict:"not-run",blockers:b,reason:"本次没有任何检测维度被执行(候选维度为 0)——零维度不得判通过:「没查」与「查了没问题」必须在结论层就长得不一样(S3.1)。"}:b>0?{verdict:"fail",blockers:b,reason:`${b} 条阻断级 issue。`}:{verdict:"pass",blockers:0,reason:`全部 ${a.executed.length} 个检测维度均实际执行且无阻断级 issue(${a.executed.join("、")})。`}}(l),issues:l.issues,executed:l.executed,degraded:l.degraded,degradedReasons:m.kept,degradedReasonsDropped:m.dropped,runnerAvailable:"function"==typeof k}}async function ay(a,b){let c=[...new Set((0,F.Fs)(a.detectorIds,"detectorIds").map(a=>String(a).trim()).filter(Boolean))];if(0===c.length)throw(0,F.P9)("detectorIds 必须至少包含一个非空 id");if("string"!=typeof a.text)throw(0,F.P9)("text 必须是字符串(空串合法:块产出为空正是要查的场景)");return ax(c,a.text,b)}let az={name:"check",description:(0,F.HG)("对给定文本跑指定的确定性检测器,返回三元 `{issues, executed, degraded}` 与红线裁决 `verdict`。",'写完之后自查时(块/节级);针对某条具体缺陷说"我改了"时,用原检测器复跑同源验证;`degraded` 非空即视为**未通过**——不要因为 `issues` 为空就宣布修好了。','想一次查一个族(用 `check_family`,不必手写 id 清单);想知道某条 id 到底是什么(用 `explain_defect`);也不要对同一段文本反复跑同一批 id 求"更确定"——检测器是确定性的,重跑同答案(`idempotent`)。'),scope:"readonly",inputSchema:F.wQ.object({detectorIds:F.wQ.arr("要执行的检测器 id 列表(须为注册表内已登记的 id;未登记的会进 `degraded`)",F.wQ.str("检测器 id")),text:F.wQ.str("被检查的 Markdown 文本(空串合法:块产出为空正是要查的场景)")},["detectorIds","text"]),idempotent:!0,handler:ay},aA={block:"chapter",section:"chapter",document:"full-document"};async function aB(a,b){let c=a.family;if("block"!==c&&"section"!==c&&"document"!==c)throw(0,F.P9)(`family 必须是 block / section / document 之一(收到 ${JSON.stringify(c)})`);if("string"!=typeof a.text)throw(0,F.P9)("text 必须是字符串(空串合法)");let d=aA[c],e="block"===c?[...B]:v.uM.filter(a=>a.scope===d).map(a=>a.id),f=await ax(e,a.text,b);return{verdict:f.verdict,family:c,matchedScope:d,candidateCount:e.length,issues:f.issues,executed:f.executed,degraded:f.degraded,degradedReasons:f.degradedReasons,degradedReasonsDropped:f.degradedReasonsDropped,runnerAvailable:f.runnerAvailable}}let aC={name:"check_family",description:(0,F.HG)("按族(block / section / document)聚合跑该族**全部**检测器,返回与 `check` 同形的三元 + 红线裁决。","不确定该查哪几条 id 时(按族扫一遍比手写 id 清单更不容易漏维度);计划阶段先按 `document` 族摸清全篇判据面。","已经知道要查具体哪几条 id 时(`check` 更省预算——按族跑会执行几十上百个检测器);也不要指望 block 与 section 给出不同结果:注册表 scope 只有 chapter/full-document 两级,两者同落 chapter(返回值 `matchedScope` 会显式告诉你)。"),scope:"readonly",inputSchema:F.wQ.object({family:F.wQ.enumStr("检测器族:block=块级 / section=节级 / document=全文级",["block","section","document"]),text:F.wQ.str("被检查的 Markdown 文本(空串合法)")},["family","text"]),idempotent:!0,handler:aB},aD={name:"explain_defect",description:(0,F.HG)("查一条检测器的元数据:作用域、类别、修复器处置(fixed/exempt/manual)与理由、写作期处置(constraint/self-check/terminal-only)、依赖的权威口径。",'`check` 报出一条 issue 而你不知道它意味着什么、能不能修、该在写作期还是终检期处理时;或要判断某条缺陷是不是"只能转人工"(`fixerDisposition: manual`)以免白改一轮。',"想知道当前文档**有哪些缺陷**(那是 `list_defects`,元动作类);也不要把它当检测器执行入口——它只返回声明,不跑判据(要跑用 `check`)。"),scope:"readonly",inputSchema:F.wQ.object({detectorId:F.wQ.str("检测器 id(注册表内已登记)")},["detectorId"]),idempotent:!0,handler:function(a){let b=String(a.detectorId??"").trim();if(!b)throw(0,F.P9)("detectorId 不能为空");let c=(0,v.Xh)(b);if(!c)throw(0,F.mX)(`检测器「${b}」未登记在注册表(可先跑 check_family 看该族有哪些 id)`);let d=[...c.authorities??[]],e=new Set(v.Id.map(a=>a.id));return{detectorId:c.id,scope:c.scope,category:c.category,fixerDisposition:c.fixerDisposition??"fixed",...void 0===c.fixerDispositionReason?{}:{fixerDispositionReason:c.fixerDispositionReason},writingTimeDisposition:v.Z8[b]??null,authority:d,authorityUnregistered:d.filter(a=>!e.has(a)),deterministicSafe:!0===c.deterministicSafe}}};async function aE(){d??=(0,av.e)();try{return await d}catch(a){throw d=void 0,a}}async function aF(a){if("string"!=typeof a.text||!a.text.trim())throw(0,F.P9)("text 不能为空(无内容可分析时不要调本工具)");let b=await aE(),c=await b.analyze(a.text);if(!c)throw(0,F.P9)("文本被判为无可分析内容(`analyze` 返回 undefined)——请确认传入的是正文而非空块");let d=Object.values(c.dimensions).filter(Boolean).length;return{...c,dimensionHits:d}}let aG={name:"assess_depth",description:(0,F.HG)("语义评估正文的专业深度:六维(factuality/structure/depth/executable/specificity/consistency)+ 五类内容要求 + 具体性 + 闭环。",'怀疑某段只是"正确的套话"(有格式没深度)时;块成稿后自查里判断"这一块够不够专业"这一维度时。',"判断合规/数值/结构类缺陷(那些是确定性检测器的活,走 `check`,更快也更准);也不要对空块或纯表格调用——它依赖本地嵌入模型,是**最贵**的判定工具之一,别当常规扫描用。"),scope:"readonly",inputSchema:F.wQ.object({text:F.wQ.str("待评估的正文(章节或段落)")},["text"]),idempotent:!0,handler:aF};async function aH(a){let b=(0,F.Fs)(a.items,"items").map(a=>String(a??"").trim()).filter(Boolean);if(0===b.length)throw(0,F.P9)("items 必须至少包含一条非空的评分条目文本");if("string"!=typeof a.markdown||!a.markdown.trim())throw(0,F.P9)("markdown 不能为空(无正文可模拟评审)");return(0,at.y)({items:b,markdown:a.markdown})}let aI={name:"simulate_reviewer",description:(0,F.HG)("以评标专家视角逐条核对评分条目的达成情况,给出 met/partial/missing 与相似度、命中锚点,以及模拟分。",'收口阶段想知道"按评分规则能拿多少分"、哪几条评分点根本没被正文承接时;或要判断某条 missing 是"真没写"还是"写了但用词对不上"。',"写正文之前就用它(没有正文可评,只会得到一片 missing);也不要用它替代 `check`——它评的是**语义承接**,不查合规/数值/结构缺陷,且依赖嵌入模型(贵)。"),scope:"readonly",inputSchema:F.wQ.object({items:F.wQ.arr("评分条目文本列表(来自评价规则资料原文,逐条原文,不要改写)",F.wQ.str("评分条目")),markdown:F.wQ.str("待评估的文档正文(Markdown)")},["items","markdown"]),idempotent:!0,handler:aH},aJ={name:"verify_numbers",description:(0,F.HG)("正文数值与证据侧对账:confirmed(逐字命中)/ mismatched(同位置不同值,确定性错误的强信号)/ unsourced(完全无源,弱信号只观测)。","正文里写了数值、要确认它们是不是都能在证据里找到出处时;收口阶段做数值溯源体检。",'把 `unsourced` 直接当成"编造"去删正文——它只是弱信号(证据侧表述差异很常见),要删要改先看 `mismatched`(同位置不同值才是强信号);也不要指望它判单位/量纲错误(那是 `convert_units` 的活)。'),scope:"readonly",inputSchema:F.wQ.object({text:F.wQ.str("待核对的正文(Markdown)"),evidenceText:F.wQ.str("注入给写手的证据文本(**当前上下文里那份**,与正文同源)"),evidencePoolText:F.wQ.str('完整证据池文本(可选;给了才能区分"证据没注入"与"证据里根本没有")')},["text","evidenceText"]),idempotent:!0,handler:function(a){if("string"!=typeof a.text||!a.text.trim())throw(0,F.P9)("text 不能为空");if("string"!=typeof a.evidenceText)throw(0,F.P9)("evidenceText 必须是字符串(可为空串,但那样全部数值都会落 unsourced,通常不是你想要的结果)");return(0,h.I)(a.text,a.evidenceText,"string"==typeof a.evidencePoolText?a.evidencePoolText:"")}},aK=[az,aC,aD,aG,aI,aJ,{name:"rewrite_verdict",description:(0,F.HG)('B 类改写统一闸门:裁决"用这条权威值改写正文这个位置"是否成立(对象限定 / 同量级 / 异义语境 / 形态合法 / 通用部位词充分性)。',"拿清单/图纸的权威值去替换正文里已有的值时**先问一次**;`allowed: false` 时正文保持不动、只保留检测(不要硬改)。",'常规的"缺词补写"(那不是改写既有值,不需要本闸门);也不要拿它当通用文本改写判断——它只认"权威值 ↔ 正文值"这一种关系。'),scope:"readonly",inputSchema:F.wQ.object({authorityOwner:F.wQ.str("权威所属条目名/部位名(清单条目名,如「基础垫层」;缺省表示权威无对象限定 → 直接不许改写)"),bodyLocation:F.wQ.str("正文命中处的部位词(如「垫层」)"),bodyWindow:F.wQ.str("正文命中处的上下文窗口(部位词 \xb1 命中值附近)"),found:F.wQ.str("正文现有值"),authority:F.wQ.str("权威值"),bindingKind:F.wQ.enumStr("绑定语义:location=按部位词定位(默认)/ sameName=按同名绑定",["location","sameName"])},["bodyLocation","bodyWindow","found","authority"]),idempotent:!0,handler:function(a){if("string"!=typeof a?.found||"string"!=typeof a?.authority)throw(0,F.P9)('found 与 authority 都是必填字符串(本工具裁决的是"这条权威值能不能改进这条正文")');let b=(0,as.Rd)(a);return{allowed:b.allowed,...void 0===b.reason?{}:{reason:b.reason},sameNameBinding:"sameName"===a.bindingKind}}},{name:"judge_hazard",description:(0,F.HG)("从资料证据(清单条目 / 图纸说明 / 招标正文)里抽取危大参数并逐条给出**三态结论**:属危大 / 属超过一定规模的危大 / 不属危大。",'正文要写危大分级、或要与已有分级结论比对时(分级写错是会扣在"越档升级/漏判"两个方向上的实质缺陷);`summary` 可直接与正文的分级清单对照。','资料里没有可比参数时(此时结论会缺依据,应改为 `declare_missing` 补料,而不是让模型"按惯例"填一个分级);也不要只传正文自身当 evidence——它判的是"资料里的参数",拿正文自证等于循环。'),scope:"readonly",inputSchema:F.wQ.object({evidence:F.wQ.arr("资料证据条目(清单/图纸说明/招标正文切片;**不要传正文自身**)",F.wQ.obj("证据条目",{content:F.wQ.str("切片原文"),filePath:F.wQ.str("来源文件路径(用于参数溯源)"),sectionTitle:F.wQ.str("所在小节标题")})),canonical:F.wQ.str("可选:canonical 事实值(如已知的基坑深度),作为参数候选之一参与最保守取值")},["evidence"]),idempotent:!0,handler:function(a){let b=(0,F.Fs)(a.evidence,"evidence"),c=a.canonical&&"object"==typeof a.canonical?a.canonical:void 0,d=(0,au.ym)(b,c);return{bindings:d,summary:{hazardous:d.filter(a=>"属危大"===a.conclusion).length,superHazardous:d.filter(a=>"属超过一定规模的危大"===a.conclusion).length,notHazardous:d.filter(a=>"不属危大"===a.conclusion).length}}}}];var aL=c(35547),aM=c(11248),aN=c(7148);let aO={sqrt:Math.sqrt,abs:Math.abs,round:Math.round,floor:Math.floor,ceil:Math.ceil,min:Math.min,max:Math.max,pow:Math.pow,log:Math.log,log10:Math.log10,exp:Math.exp,sin:Math.sin,cos:Math.cos,tan:Math.tan,hypot:Math.hypot};class aP{constructor(a){this.source=a,this.index=0,this.depth=0}parse(){let a=this.parseExpression();if(this.skipSpaces(),this.index<this.source.length)throw(0,F.P9)(`表达式在第 ${this.index+1} 个字符处无法解析:「${this.source.slice(this.index,this.index+16)}」`);return a}skipSpaces(){for(;this.index<this.source.length&&/\s/u.test(this.source[this.index]);)this.index+=1}peek(){return this.skipSpaces(),this.source[this.index]??""}parseExpression(){this.enter();let a=this.parseTerm();for(;;){let b=this.peek();if("+"!==b&&"-"!==b)break;this.index+=1;let c=this.parseTerm();a="+"===b?a+c:a-c}return this.exit(),a}parseTerm(){let a=this.parseUnary();for(;;){let b=this.peek();if("*"!==b&&"/"!==b&&"%"!==b)break;this.index+=1;let c=this.parseUnary();if(("/"===b||"%"===b)&&0===c)throw(0,F.P9)("表达式里出现除以 0");a="*"===b?a*c:"/"===b?a/c:a%c}return a}parseUnary(){let a=this.peek();return"-"===a?(this.index+=1,-this.parseUnary()):"+"===a?(this.index+=1,this.parseUnary()):this.parsePower()}parsePower(){let a=this.parsePrimary();return"*"!==this.peek()||"*"!==this.source[this.index+1]?a:(this.index+=2,Math.pow(a,this.parseUnary()))}parsePrimary(){this.skipSpaces();let a=this.source[this.index]??"";if("("===a){this.index+=1;let a=this.parseExpression();if(this.skipSpaces(),")"!==this.source[this.index])throw(0,F.P9)("括号不配对(缺少右括号)");return this.index+=1,a}if(/[0-9.]/u.test(a))return this.parseNumber();if(/[A-Za-z_]/u.test(a))return this.parseCall();throw(0,F.P9)(`表达式在第 ${this.index+1} 个字符处出现非法字符「${a}」`)}parseNumber(){let a=this.index;for(;this.index<this.source.length&&/[0-9._eE]/u.test(this.source[this.index]);)this.index+=1;let b=this.source.slice(a,this.index).replace(/_/gu,""),c=Number(b);if(!Number.isFinite(c))throw(0,F.P9)(`无法识别的数值字面量「${b}」`);return c}parseCall(){let a=this.index;for(;this.index<this.source.length&&/[A-Za-z_0-9]/u.test(this.source[this.index]);)this.index+=1;let b=this.source.slice(a,this.index),c=aO[b];if(!c)throw(0,F.P9)(`不支持的函数「${b}」(可用:${Object.keys(aO).join("、")})`);if(this.skipSpaces(),"("!==this.source[this.index])throw(0,F.P9)(`函数「${b}」后面必须是参数括号`);this.index+=1;let d=[];if(this.skipSpaces(),")"!==this.source[this.index])for(;;){if(d.push(this.parseExpression()),","===this.peek()){this.index+=1;continue}break}if(this.skipSpaces(),")"!==this.source[this.index])throw(0,F.P9)(`函数「${b}」的参数括号不配对`);return this.index+=1,c(...d)}enter(){if(this.depth+=1,this.depth>32)throw(0,F.P9)(`表达式嵌套超过 32 层`)}exit(){this.depth-=1}}function aQ(a){return`'${a.replace(/'/gu,"'\\''")}'`}async function aR(a,b){let c="string"==typeof a.expr?a.expr.trim():"",d="string"==typeof a.script?a.script:"";if(c&&d)throw(0,F.P9)("expr 与 script 互斥,只能给一个");if(!c&&!d)throw(0,F.P9)("必须给 expr(纯算术)或 script(受限沙箱脚本)之一");if(c)return{result:function(a){var b;let c=(b=(0,F.He)(a,"expr"),(0,aM.Hr)(b).replace(/[×✕✖]/gu,"*").replace(/[÷]/gu,"/").replace(/[()]/gu,a=>"("===a?"(":")"));if(c.length>2e3)throw(0,F.P9)(`表达式过长(>2000 字符)`);let d=new aP(c).parse();if(!Number.isFinite(d))throw(0,F.P9)("计算结果不是有限数(溢出或未定义)——请检查量级与运算符");return Number(d.toPrecision(12))}(c),stdout:"",mode:"expr",executed:c};let e="py"===a.lang?"py":"js",f=b.sandbox;if(!f)throw(0,F.mW)("受限沙箱执行能力(`ctx.sandbox.execute`)","运行时注入:接 `packages/tools/src/sandbox/sandbox-executor.ts` 的 `SandboxExecutor`(docker/bwrap/sandbox-exec/VFS-Guard)");let g="py"===e?`python3 -c ${aQ(d)}`:`node -e ${aQ(d)}`,h=await f.execute(g,{timeoutMs:1e4,lang:e});if(0!==h.code)throw(0,F.P9)(`沙箱脚本退出码 ${h.code}:${(h.stderr||h.stdout||"").slice(0,800)}`);let i=String(h.stdout??""),j=Number(i.trim().split("\n").pop());return{result:Number.isFinite(j)?j:null,stdout:i.slice(0,4e3),mode:"sandbox-script",executed:`[${e} script, ${d.length} chars]`,exitCode:h.code}}let aS={name:"compute",description:(0,F.HG)("算数:`expr` 走**纯算术求值器**(+ - * / % ** 与 sqrt/abs/round/min/max/pow/log/hypot 等白名单函数,不 eval);`script` 走**受限沙箱**。","合计对不上要复核、要把清单里的分项加一遍、要做量级估算或百分比换算时;正文里即将落一个推导出来的数值,落笔前先算一遍。",'**不要用它"算出一个看起来合理的值"来填空**——算出来的数不等于资料里的数,无源的数值仍然要 `declare_missing`;也不要拿它当通用代码执行器(`expr` 只认算术与白名单函数;`script` 没有沙箱能力时直接失败,不会退回进程内执行)。'),scope:"sandbox",inputSchema:F.wQ.object({expr:F.wQ.str("纯算术表达式(支持全角字符、括号、幂、白名单函数;与 script 互斥)"),script:F.wQ.str("受限沙箱脚本(与 expr 互斥;需运行时接入沙箱能力)"),lang:F.wQ.enumStr("脚本语言(仅 script 模式有效,缺省 js)",["js","py"])}),idempotent:!0,handler:aR},aT={长度:{m:1,km:1e3,cm:.01,mm:.001},面积:{m2:1,hm2:1e4},体积:{m3:1,l:.001,ml:1e-6},质量:{kg:1,g:.001,t:1e3},力:{kn:1,n:.001},压强:{mpa:1,kpa:.001,pa:1e-6},功率:{kw:1,mw:1e3,w:.001},电压:{kv:1,v:.001},电流:{a:1,ma:.001},频率:{hz:1},时间:{h:1,min:1/60},比率:{"%":1,permille:.1}};function aU(a){let b=(0,aM.Hr)(String(a??"")).trim();return(0,aN.Sn)(b||String(a??"").trim())}let aV={name:"convert_units",description:(0,F.HG)("单位换算:判定两单位是否同量纲(`unitAliases.unitsAreEquivalent`),同量纲则按固定倍率换算,否则返回 null 并说明。","正文/表格里的单位与资料不一致、需要核对是否等价或换算成同一单位再比较时;或要确认两个写法(「米」/「延长米」/「m」、「㎡」/「m2」)是不是同一单位。",'拿它做无关换算(座→个、套→台这类**计数单位**永远返回 null,见 `unitAliases` 的"不做量纲互换"口径);也不要拿换算结果去替换正文里的数值——换算会引入原文没有的值,那是改写而不是核对。'),scope:"sandbox",inputSchema:F.wQ.object({value:F.wQ.num("待换算的数值"),from:F.wQ.str("原单位(支持中文写法与符号形:米/m、㎡/m2、千牛/kN…)"),to:F.wQ.str("目标单位")},["value","from","to"]),idempotent:!0,handler:function(a){let b="number"==typeof a.value?a.value:Number(a.value);if(!Number.isFinite(b))throw(0,F.P9)("value 必须是有限数");let c=(0,F.He)(a.from,"from"),d=(0,F.He)(a.to,"to"),e=aU(c),f=aU(d);if(!(0,aN.Q0)(c,d))return{value:null,from:c,to:d,canonicalFrom:e,canonicalTo:f,equivalent:!1,reason:"两单位不同量纲(`unitsAreEquivalent` 判否)——计数单位之间尤其不可互认(座 ≠ 组 ≠ 个)"};if(e===f)return{value:b,from:c,to:d,canonicalFrom:e,canonicalTo:f,equivalent:!0};for(let[a,g]of Object.entries(aT)){let h=g[e],i=g[f];if(void 0!==h&&void 0!==i)return{value:Number((b*h/i).toPrecision(12)),from:c,to:d,canonicalFrom:e,canonicalTo:f,equivalent:!0,reason:`同量纲(${a})倍率换算`}}return{value:null,from:c,to:d,canonicalFrom:e,canonicalTo:f,equivalent:!0,reason:`两单位判为同量纲,但本工具的倍率表没有覆盖「${e} → ${f}」这一对——不猜倍率,宁可不给结果`}}},aW=/^(?:合\s*计|小\s*计|总\s*计|共\s*计|合\s*价)$/u;function aX(a){let b=String(a??"").replace(/\s+/gu,"").replace(/[,,]/gu,"");if(!b)return;let c=/^[-+]?\d+(?:\.\d+)?/u.exec(b.replace(/^[¥¥$]/u,""));if(!c)return;let d=Number(c[0]);return Number.isFinite(d)?d:void 0}let aY=[aS,aV,{name:"verify_table_arithmetic",description:(0,F.HG)("核验文档里的表内算术:既有判据(`tableArithmeticInconsistencyIssues` + `areaArithmeticIssues`)+ 显式「合计/小计」行列的确定性求和兜底。","表格里出现合计/小计时(分项和与合计不等是**阻断级**缺陷,改一个数字还是改合计需要先看清差异);或 `check` 报了表内算术类 issue、要定位到具体行列时。",'把 `defects` 为空读成"表内算术一定对"——兜底只覆盖显式合计形态,未覆盖的关系不在结论内(返回值 `note` 已写明);也不要拿它去改数字:先算出差异、再判断是分项错还是合计错,改动走 `patch_section` 且必须有资料依据。'),scope:"sandbox",inputSchema:F.wQ.object({markdown:F.wQ.str("含表格的 Markdown 文本(单章或全文)")},["markdown"]),idempotent:!0,handler:function(a){let b=(0,F.He)(a.markdown,"markdown"),c=[...(0,aL.qE)(b),...(0,aL.u2)(b)],d=function(a){let b=[],c=a.split(/\r?\n/u),d=-1,e=[],f=0,g=0,h=()=>{if(e.length<3){e=[];return}let[a,...c]=e,h=a.cells.length,i=c[c.length-1];if(aW.test(i.cells[0]??"")){f+=1;for(let a=1;a<h;a+=1){let e=aX(i.cells[a]??"");if(void 0===e)continue;let f=0,g=0;for(let b of c.slice(0,-1)){let c=aX(b.cells[a]??"");void 0!==c&&(f+=c,g+=1)}0!==g&&Math.abs(f-e)>Math.max(1e-6,1e-6*Math.abs(f))&&b.push({tableIndex:d,location:`第 ${i.line} 行「${i.cells[0]}」\xb7 第 ${a+1} 列`,expected:Number(f.toPrecision(12)),found:e,detail:`该列 ${g} 个数值分项之和为 ${Number(f.toPrecision(12))},但合计行写的是 ${e}`,source:"fallback"})}}let j=a.cells.findIndex(a=>aW.test(a));if(j>0)for(let a of(g+=1,c)){let c=aX(a.cells[j]??"");if(void 0===c)continue;let e=0,f=0;for(let b=0;b<h;b+=1){if(b===j)continue;let c=aX(a.cells[b]??"");void 0!==c&&(e+=c,f+=1)}!(f<2)&&Math.abs(e-c)>Math.max(1e-6,1e-6*Math.abs(e))&&b.push({tableIndex:d,location:`第 ${a.line} 行「合计」列`,expected:Number(e.toPrecision(12)),found:c,detail:`该行 ${f} 个数值分项之和为 ${Number(e.toPrecision(12))},但合计列写的是 ${c}`,source:"fallback"})}e=[]};return c.forEach((a,b)=>{if(/^\s*\|.*\|\s*$/u.test(a)){0===e.length&&(d+=1);let c=a.replace(/^\s*\|/u,"").replace(/\|\s*$/u,"").split("|").map(a=>a.trim());c.every(a=>/^:?-{2,}:?$/u.test(a)||""===a)||e.push({cells:c,line:b+1});return}h()}),h(),{defects:b,sumRows:f,sumColumns:g,tables:Math.max(0,d+1)}}(b);return{defects:[...c.map((a,b)=>({tableIndex:-1,location:a.sectionTitle??a.chapterId??`检测器命中 #${b+1}`,expected:NaN,found:NaN,detail:a.message,source:"detector"})),...d.defects],checked:{tables:d.tables,sumRows:d.sumRows,sumColumns:d.sumColumns,detectorIssues:c.length},note:"detector 条目来自既有判据(表内算术自洽 + 面积三元组),是权威;fallback 条目只覆盖显式「合计/小计」形态,未覆盖的表格关系(百分比/加权/取整)不在此工具结论内——**没有 fallback 命中不等于表内算术一定自洽**。"}}}];async function aZ(a,b){let c=String(a?.nodeId??"").trim();if(!c)throw(0,F.P9)("nodeId 不能为空");if(!a?.delta||"object"!=typeof a.delta)throw(0,F.P9)("delta 必填(至少要给出一个字数标量)");if(!String(a?.reason??"").trim())throw(0,F.P9)("reason 不能为空(改规划必须留下理由,否则预算漂移无法溯源)");let d=b.planRequests;if(!d)throw(0,F.mW)("规划变更请求通道(`ctx.planRequests`)","运行时把 `createPlanRequestCapability({ requests: session.planning.planRequests })` 挂到 `ctx.planRequests`(生产构造点:`stageChapterLoop` 的 agentToolWiring)");return d.request({kind:"target_change",nodeId:c,reason:String(a.reason).trim(),payload:{delta:a.delta}})}let a$={name:"request_target_change",description:(0,F.HG)("**申请**变更某节点的字数目标区间(受文档总量守恒约束)。请求转交调度中心,在**下一个决策点**裁决——本块内不生效。","该节点目标明显不合理时(目标远大于资料能支撑的量、或远小于章级最低预算 `CHAPTER_MIN_BUDGET:103`)。",'**先干活再请求**:申请不是"减压",它不会让这一块变短。请同时继续按现有目标写;真的写不动(资料确实缺)就 `declare_missing` 记账——**让"补不上"是可审计的,而不是靠改小目标**。同一目标同一理由重复申请会被去重;整轮生成的申请有上限(超限会被明确拒绝并告知替代手段)。'),scope:"document-plan",inputSchema:F.wQ.object({nodeId:F.wQ.str("目标节点 id"),delta:F.wQ.obj("目标变更量(至少给一个标量)",{minWords:F.wQ.int("新的下限字数"),targetWords:F.wQ.int("新的目标字数"),maxWords:F.wQ.int("新的上限字数")}),reason:F.wQ.str('变更理由(须可执行、可溯源;"写不完"这类不算理由,要说是资料不足还是目标定错)')},["nodeId","delta","reason"]),idempotent:!0,handler:aZ};async function a_(a,b){let c=Array.isArray(a?.from)?a.from.map(a=>String(a).trim()).filter(Boolean):[];if(0===c.length)throw(0,F.P9)('from 不能为空("从谁身上扣"必须点名,否则等于凭空加预算)');if(!String(a?.to??"").trim())throw(0,F.P9)("to 不能为空");if(c.includes(String(a.to).trim()))throw(0,F.P9)("from 与 to 不能是同一节点(自己给自己腾额度是空操作)");if(!String(a?.reason??"").trim())throw(0,F.P9)("reason 不能为空");let d=b.planRequests;if(!d)throw(0,F.mW)("规划变更请求通道(`ctx.planRequests`)","同 `request_target_change`:生产构造点 `stageChapterLoop` 的 agentToolWiring");return d.request({kind:"rebalance_budget",nodeId:String(a.to).trim(),reason:String(a.reason).trim(),payload:{from:c}})}async function a0(a,b){let c=String(a?.nodeId??"").trim();if(!c)throw(0,F.P9)("nodeId 不能为空");if(!String(a?.at??"").trim())throw(0,F.P9)("at 不能为空(拆分点必须落在正文里)");let d=Array.isArray(a?.titles)?a.titles.map(a=>String(a).trim()).filter(Boolean):[];if(2!==d.length)throw(0,F.P9)("titles 必须正好两个(拆分后两节的标题)");let e=b.planRequests;if(!e)throw(0,F.mW)("规划变更请求通道(`ctx.planRequests`)","同 `request_target_change`:生产构造点 `stageChapterLoop` 的 agentToolWiring");return e.request({kind:"split_section",nodeId:c,reason:`拆分点:${String(a.at).trim()}`,payload:{at:String(a.at).trim(),titles:d}})}let a1=[a$,{name:"rebalance_budget",description:(0,F.HG)("**申请**在节点之间结转字数额度(从 `from` 扣、给 `to` 加,Σ 守恒)。请求转交调度中心,在**下一个决策点**裁决——本块内不生效。","某个必须写足的节点目标明显高于其资料承载力、而同章另有节点有富余额度时。",'**不要拿它当"给写不出的节点减压"的手段**——减压不产生内容。请同时给 `to` 节点补实质内容(`patch_section`),或对确实缺料的部分 `declare_missing` 记账。'),scope:"document-plan",inputSchema:F.wQ.object({from:F.wQ.arr("被回收额度的节点 id 列表(须非空)",F.wQ.str("节点 id")),to:F.wQ.str("获得额度的节点 id"),reason:F.wQ.str("结转理由(须说明为什么 `to` 必须写足而 `from` 有富余)")},["from","to","reason"]),idempotent:!0,handler:a_},{name:"split_section",description:(0,F.HG)("**申请**把一个小节在 `at` 处拆成两个节点(触发门槛表重算 + 依赖边更新)。请求转交调度中心,在**下一个决策点**裁决。","单节承载了两种以上不同性质的内容、评标按两类分别看时。",'**当前不可用**(`retryable: false`);不要为了"分得更细"而拆分——节点数不是得分项。当前替代:在同一节内用 `###` 加子标题分层(这是 4.4 允许且鼓励的结构化动作)。'),scope:"document-plan",inputSchema:F.wQ.object({nodeId:F.wQ.str("要拆分的小节节点 id"),at:F.wQ.str("拆分点锚点(逐字取自当前草稿)"),titles:F.wQ.arr("拆分后两个小节的标题(正好 2 个)",F.wQ.str("小节标题"))},["nodeId","at","titles"]),idempotent:!1,handler:a0}];async function a2(a,b){let c=String(a?.item??"").trim(),d=String(a?.reason??"").trim();if(!c)throw(0,F.P9)('item 不能为空(要写清"缺的是什么",不能是"某些资料")');if(d.length<4)throw(0,F.P9)("reason 太短:必须说明**为什么缺**(招标未给/图纸未含/资料未上传),否则人手无法接续");let e=Array.isArray(a?.evidence)?a.evidence.map(a=>String(a??"").trim()).filter(Boolean):[];if(0===e.length)throw(0,F.P9)('evidence 不能为空:请列出**已经找过的地方**(`search_evidence` 的查询词 + 命中的文件/页,或 `discover_files` 的结果)。空证据的声明等价于"我没找,直接报缺"——那是拿声明当偷懒通道。');let f=b.audit;if(!f)throw(0,F.mW)("审计状态写入能力(`ctx.audit.declareMissing`)","运行时注入:接 `session.understanding.missingItems`(已有的只增数组)+ 节点 issue 写入");return await f.declareMissing({item:c,reason:d,evidence:e}),{declared:!0,item:c,recordedAt:Date.now(),recordedTo:"session.understanding.missingItems",evidenceCount:e.length,note:"声明已入账(只增数组)。注意:**声明不减少应写内容**——该节仍需按已有资料写足,缺料处由人在清单上补齐。"}}let a3={name:"declare_missing",description:(0,F.HG)('上报"资料确实缺失"的事实:把缺什么、为什么缺、**已经找过哪里**写进审计状态,供人补齐。这是**唯一**允许表达"这处我没有依据"的通道。',"把资料找穷了(`search_evidence` 多组查询词都无命中、`discover_files` 里也没有)而该处仍然必须有依据时;或招标/图纸本身就没给这个数据(此时正文**不得**用行业惯例值填补)。",'**还没认真找过就报缺**——先 `search_evidence`(换同义词、换工程术语)、`read_source` 翻资料清单、`lookup_authoritative` 查权威值,都落空再报;**也不要拿它换篇幅**:声明不会让"这节不用写"成立,缺料处照样要按已有资料写足,只是会被标成待补;句子写得不好、结构不理想不是"缺料"(那是 `patch_section` 的活);**更不要把缺口写进正文**("详见后续补充资料"这类后台话术一律视为缺陷,见 `:1753`)。'),scope:"audit-state",inputSchema:F.wQ.object({item:F.wQ.str("缺的是什么(具体到字段/参数/图名,如「基坑支护设计参数:锚索张拉锁定值」)"),reason:F.wQ.str("为什么缺(招标未给 / 图纸未含 / 资料未上传 / 与已有资料矛盾且无权威可裁)"),evidence:F.wQ.arr('已经找过的地方(≥1 条;写查询词与命中的文件/页,或说明"已遍历资料清单,无此文件")',F.wQ.str("一条搜寻记录"))},["item","reason","evidence"]),idempotent:!0,handler:a2};async function a4(a,b){let c=a?.issue;if(!c||"object"!=typeof c)throw(0,F.P9)("issue 必填(要声明的是**哪一条缺陷**,不能泛指)");let d=String(c.message??"").trim();if(!d)throw(0,F.P9)("issue.message 不能为空(缺陷必须有可读的说明)");let e=c.level;if("error"!==e&&"warning"!==e&&"info"!==e)throw(0,F.P9)("issue.level 必须是 error / warning / info 之一");let f=String(a?.reason??"").trim();if(f.length<8)throw(0,F.P9)('reason 太短:必须写清**已经试过哪些动作、为什么都不成立**(例如"已用 patch_section 三次改写该段,`check` 的 template-listing 仍在命中:该段无源可依")。只说"修不好"会让下一轮原样重试。');let g=b.audit;if(!g)throw(0,F.mW)("审计状态写入能力(`ctx.audit.declareUnfixable`)","运行时注入:接新增的 `unfixable` 通道 → `suspensionChecklist`(`suspensionChecklist.ts:40` 已有挂起通道)");await g.declareUnfixable({issue:c,reason:f});let h=c.severity;return{declared:!0,message:d,detectorId:c.provenance?.detectorId,recordedAt:Date.now(),recordedTo:"unfixable → suspensionChecklist",stillBlocker:"blocker"===h||"error"===e,note:'已报出并进入挂起清单。**声明不改变缺陷等级**——它仍是阻断级,只是从"我没修"变成"我修不动并已上报"。后续:块轮次/工具数耗尽时该节点置 `blocked`(**不是 `completed`**)。'}}async function a5(a,b){let c=String(a?.question??"").trim();if(c.length<8)throw(0,F.P9)('question 太短:必须写成**一个可回答的问题**(并列候选与各自来源,见 A5.2「让人选」),不写成"我判不了,你来看"');if("boolean"!=typeof a?.blocking)throw(0,F.P9)("blocking 必填且必须是布尔:它决定本次是**挂起等人**还是**记账继续**,不能靠默认值蒙混");if(!/[??]|是否|哪一|哪个|请确认|请裁定/u.test(c))throw(0,F.P9)("question 缺少疑问形态(未见 ?/? 或 是否/哪一/请确认 等):请写成一个**可回答**的问题,并列出候选与来源");let d=b.audit;if(!d)throw(0,F.mW)("审计状态写入能力(`ctx.audit.requestClarification`)",'运行时注入:**新建** `clarificationOverrides` 的**待答**槽(现有只有"已答"侧)');return await d.requestClarification({question:c,blocking:a.blocking}),{requested:!0,question:c,blocking:a.blocking,recordedAt:Date.now(),recordedTo:"clarificationOverrides.pending",note:a.blocking?"已挂起等人裁决(blocking=true)。挂起期间**不要**对同一处反复重问,也不要自己选一个口径先写下去。":"已记账但未挂起(blocking=false):先按**权威阶梯最高的候选**继续写,并在下次自查时复查。"}}let a6=[a3,{name:"declare_unfixable",description:(0,F.HG)('报出"这条缺陷我修不动":写进 `unfixable` 通道并进挂起清单,让节点从"未完成"变成"已上报的阻断"。**这是「无改善」的显式终止条件。**',"同一条缺陷**反复修仍无改善**(≥2 轮 `check` 命中不变)时——此时继续重试只会烧轮次;或该缺陷在原理上不是文本能解决的(缺依据、与权威值冲突但无权裁决、需要改规划)。",'**第一轮就报**——先真修过(`patch_section` / `delete_span`,并 `check` 验证过才算),修不动才报;**不要拿它跳过难点**:报出的每一条都会进人看的挂起清单,滥用会让真正卡住的项被淹掉;判不了(不是修不动)请用 `request_clarification`——两者区别是"我改不了"与"我不知道该按哪个口径改"。'),scope:"audit-state",inputSchema:F.wQ.object({issue:F.wQ.anyObj("要声明的缺陷对象(`check`/`list_defects` 返回的原样 issue,须含 level 与 message)"),reason:F.wQ.str("为什么修不动(须写:已试过哪些动作、`check` 结果如何、为什么都不成立)")},["issue","reason"]),idempotent:!0,handler:a4},{name:"request_clarification",description:(0,F.HG)("向人提出一个**可回答的口径裁决问题**(写进待答槽;`blocking=true` 时挂起等人,`false` 时记账继续)。A5.2 的要旨:把「要人找」变成「让人选」。","A5.1 的 **C 级**三类:**扩资料范围**(`expand_scope` 的连带)\xb7 **口径裁决**(同一事实多个候选值、权威阶梯也分不出高下,N9)\xb7 **改动超阈值**;以及规划本身不合理到影响得分(如小节顺序与评标习惯冲突)。写法:**列出候选值 + 各自来源 + 权威级 + 你的建议**,让人一次点选。",'**自己能查能判的不要问人**——先 `lookup_authoritative`(权威值)/ `search_evidence`(资料内可查)/ `verify_numbers`(算得出来的);把问题写成"我判不了,你来看"(无候选、无来源)等于把工作退回给人;**不要用 blocking=true 逃避写作**——挂起只用于真的没法继续的地方,其余靠 `declare_missing` 记账继续;扩资料范围本身走 `expand_scope`(它带审批通道),本工具只用于"该不该扩/扩到哪"的口径问题。'),scope:"audit-state",inputSchema:F.wQ.object({question:F.wQ.str("可回答的问题(须含疑问形态 + 候选值与各自来源 + 权威级;建议附上你的建议)"),blocking:F.wQ.bool("true = 挂起等人;false = 记账继续。**必填**(不给默认值:挂起与否是决策,不是格式)")},["question","blocking"]),idempotent:!0,handler:a5}],a7={error:0,warning:1,info:2},a8={blocker:0,warning:1,suggestion:2};function a9(a){return((a.severity?a8[a.severity]:void 0)??3)*10+(a7[a.level]??3)}async function ba(a,b){let c=b.audit;if(!c||"function"!=typeof c.listDefects)throw(0,F.mW)("缺陷清单读取能力(`ctx.audit.listDefects`)","运行时注入:读 `session.validationIssues` + `qualityBundle`(附录 A.8:可读但当前无接口,需补一个只读访问器)");let d=a?.scope;if(void 0!==d&&("object"!=typeof d||null===d||Array.isArray(d)))throw(0,F.P9)("scope 若要给,必须是对象 `{chapterId?}`");let e=await c.listDefects(d);if(!Array.isArray(e))throw(0,F.P9)("缺陷清单能力返回了非数组——返回形状是接口的一部分,不能含糊");return[...e].sort((a,b)=>{let c=a9(a)-a9(b);if(0!==c)return c;let d=String(a.source??"").localeCompare(String(b.source??""));return 0!==d?d:a.message.localeCompare(b.message)})}let bb=[{name:"list_defects",description:(0,F.HG)('读出当前文档的缺陷清单(阻断级优先排序,可带 `chapterId` 缩小范围)。这是"我现在还欠什么"的账本。','每轮收尾前对账;或不确定"还有什么没解决"时(比凭记忆列缺陷可靠得多——记忆里的缺陷清单总是偏乐观)。','**不要拿它当 `check` 的替代**:`check` 是对**指定文本**现跑判据(能看到"我刚改的这版有没有引入新问题"),`list_defects` 读的是**已入账**的历史清单(可能滞后于你刚做的改动)。改完正文必须 `check` 复验,不能靠 `list_defects` 变没变来确认。'),scope:"audit-state",inputSchema:F.wQ.object({scope:F.wQ.obj("范围(可选)",{chapterId:F.wQ.str("只看某一章的缺陷")})}),idempotent:!0,handler:ba}];var bc=c(13424),bd=c(67680),be=c(45304);function bf(a){if(Array.isArray(a.skills))return{skills:a.skills,invalidRecords:[],source:"ctx"};let b=(0,be.loadSkillStore)();return{skills:b.skills,invalidRecords:b.invalid,source:"store"}}function bg(a,b){return{id:a.id,displayName:(0,bc.zg)(a),version:a.version,source:a.source,enabled:a.enabled,chapterDomain:a.match.chapterDomain,chapterDomainLabel:bc.tv[a.match.chapterDomain]??a.match.chapterDomain,projectTypes:[...a.match.projectTypes],projectTypeLabels:a.match.projectTypes.map(a=>bc.zK[a]??a),sectionKeywords:[...a.match.sectionKeywords],matchedBy:{domains:b?[...b.matchedDomains]:[],keywords:b?[...b.matchedKeywords]:[],regexHit:b?.regexHit??!1},contract:{sections:a.structure.map(a=>a.title),sectionCount:a.structure.length,forbiddenCount:a.forbidden.length,acceptanceCount:a.acceptance.length,acceptanceKinds:[...new Set(a.acceptance.map(a=>a.kind))],requires:a.requires.map(a=>a.key),knowledge:a.knowledge.map(a=>a.id?`${a.kind}:${a.id}`:a.kind)}}}function bh(a,b){let c=String(a??"").trim();if(!c)throw(0,F.P9)(`${b} 必填(${bc.Av.join(" / ")})。**刻意不给默认值**:传 general 会让只声明了 building/municipal 等类型的技能静默不命中,而"少加载了技能"是看不见的缺陷。工程类型取自项目设定或招标文件,不要猜。`);if(!bc.Av.includes(c))throw(0,F.P9)(`${b} 取值「${c}」不在闭集内(${bc.Av.join(" / ")})`);return c}async function bi(a,b){let c=String(a?.chapterTitle??"").trim();if(!c)throw(0,F.P9)("chapterTitle 不能为空(技能按章标题解析章域,空标题推不出任何域)");let d=bh(a?.projectType,"projectType"),e=Array.isArray(a?.sections)?a.sections.map(a=>String(a??"").trim()).filter(Boolean):[],f=bf(b);if(0===f.skills.length)throw(0,F.mW)("技能池(`ctx.skills` 或技能库)",'运行时注入 `ctx.skills`(`loadSkills()` 的内置 + 用户池)。技能池为空时**不得**当作"本章无技能契约"继续写:定位阶段的成功判据就是契约齐备,空池必须先查为什么空。');let g=(0,bd.mG)(c,e,d,f.skills),h=f.skills.filter(a=>!a.enabled).length;return{chapterTitle:c,projectType:d,matched:g.map(a=>bg(a,(0,bd.mJ)(a,c,e,d))),disabledCount:h,poolSize:f.skills.length,invalidRecords:f.invalidRecords,note:0===g.length?'没有命中任何技能(匹配是特异度降序的硬门:章域 + 工程类型 + 小节关键词任一不过即不命中)。**这不是"本章没有契约"**——请核对 projectType 是否传错、章标题是否为模板里的正式名。':`命中 ${g.length} 个(已按特异度降序);完整契约用 \`load_skill(skillId)\` 取,不要凭摘要里的节名自己编结构。`}}let bj={name:"match_skills",description:(0,F.HG)("按章标题 + 小节标题 + 工程类型匹配技能,返回**摘要**(结构节名、禁区条数、验收条数与命中依据)。","**本章开工前**的定位阶段(`:378`:「契约齐备」是定位阶段的成功判据);换章、改标题、改工程类型后要重跑。","**写完才调**——那时结构已定,看契约只剩事后辩解;也**不要凭摘要里的节名自己补全契约**(摘要是索引不是内容,用 `load_skill` 取全量);`projectType` 不要猜(猜错会让应命中的技能静默不加载,见工具参数说明)。"),scope:"skill-store",inputSchema:F.wQ.object({chapterTitle:F.wQ.str("章标题(用模板里的正式名;技能按它解析章域)"),sections:F.wQ.arr("本章的小节标题(用于小节关键词门;可空)",F.wQ.str("小节标题")),projectType:F.wQ.str(`工程类型(${bc.Av.join(" / ")};**必填,不给默认值**)`)},["chapterTitle","projectType"]),idempotent:!0,handler:bi};async function bk(a,b){let c=String(a?.skillId??"").trim();if(!c)throw(0,F.P9)("skillId 不能为空");let d=bf(b),e=d.skills.find(a=>a.id===c);if(!e){let a=d.skills.map(a=>a.id).sort().join("、");throw(0,F.mX)(`技能「${c}」不存在。当前池内可用技能:${a||"(池为空)"}`)}return{skill:e,contract:{sectionCount:e.structure.length,forbidden:e.forbidden.map(a=>"string"==typeof a?a:a.phrase),acceptanceSummary:e.acceptance.map(a=>"detector"===a.kind?`detector:${a.ids.join("+")}`:"threshold"===a.kind?`threshold:${a.id}${a.direction?`(${a.direction})`:""}=${a.value}`:`llm-checklist:${a.items.length} 条(非确定性,只提示不入门禁)`)}}}let bl={name:"load_skill",description:(0,F.HG)("取一个技能的**完整契约**(`structure` 结构规格 / `forbidden` 禁区 / `acceptance` 验收 / `requires` 事实需求 / `knowledge` 知识引用)。",'`match_skills` 命中后、**动笔写这一章之前**;也用于复核"我这章的节次是否与契约一致"。',"一次把池里所有技能全 load 进来(每个技能 1.5–2.2KB,几个就顶满工具结果上限,而且用不到的契约只会干扰判断)——只 load 本章真正命中的那几个;也不要在写作中途反复重 load(契约在本章内不变,重复取等于烧上下文)。"),scope:"skill-store",inputSchema:F.wQ.object({skillId:F.wQ.str("技能 id(取自 `match_skills` 或 `list_skills`)")},["skillId"]),idempotent:!0,handler:bk};async function bm(a,b){let c=a?.filter;if(void 0!==c&&("object"!=typeof c||null===c||Array.isArray(c)))throw(0,F.P9)("filter 若要给,必须是对象 `{source?, projectType?, chapterDomain?}`");if(c?.source!==void 0&&"builtin"!==c.source&&"user"!==c.source)throw(0,F.P9)("filter.source 只能是 builtin 或 user");if(c?.chapterDomain!==void 0&&!bc.ii.includes(String(c.chapterDomain)))throw(0,F.P9)(`filter.chapterDomain 取值「${String(c.chapterDomain)}」不在闭集内(${bc.ii.join(" / ")})`);let d=c?.projectType===void 0?void 0:bh(c.projectType,"filter.projectType"),e=bf(b),f=e.skills.filter(a=>(c?.source===void 0||a.source===c.source)&&(c?.chapterDomain===void 0||a.match.chapterDomain===c.chapterDomain)&&(void 0===d||!(a.match.projectTypes.length>0)||!!a.match.projectTypes.includes(d)));return{skills:f.map(a=>bg(a)),total:e.skills.length,filteredOut:e.skills.length-f.length,disabledCount:e.skills.filter(a=>!a.enabled).length,invalidRecords:e.invalidRecords,availableDomains:bc.ii.map(a=>({id:a,label:bc.tv[a]??a})),availableProjectTypes:bc.Av.map(a=>({id:a,label:bc.zK[a]??a})),note:`技能库共 ${e.skills.length} 个,过滤后 ${f.length} 个(含 disabled)。**\`disabled\` 的技能也列出来**:禁用是用户的显式决定,不报出来就没人知道"这条技能为什么没生效"。缺省工程类型为 ${bc.ij}(本工具只做过滤,不参与匹配,故给默认值无副作用)。`}}let bn={name:"list_skills",description:(0,F.HG)("列出技能库(可按 `source` / `projectType` / `chapterDomain` 过滤),返回摘要与可用枚举值(含 disabled 项)。",'需要知道"这个库到底有哪些技能"时:新项目立项、怀疑某个技能该在却没匹配上、或要看用户自定义技能(`source: "user"`)时。',"**不要拿它替代 `match_skills`**:本工具只做过滤、不做章标题匹配,列出来的不等于本章该用的;也不要在写作过程中反复列(技能库在一次运行内不变,重复列等于烧上下文)。"),scope:"skill-store",inputSchema:F.wQ.object({filter:F.wQ.obj("过滤条件(可选;都给即取交集)",{source:F.wQ.enumStr("技能来源",["builtin","user"]),projectType:F.wQ.enumStr("工程类型",bc.Av),chapterDomain:F.wQ.enumStr("章域(闭集)",bc.ii)})}),idempotent:!0,handler:bm},bo=["match_skills","load_skill","list_skills","discover_files","inspect_asset"],bp=["lookup_authoritative","request_target_change","rebalance_budget","check_family"],bq=a=>a.map(a=>a.name),br=(...a)=>[...new Set(a.flat())],bs={locate:bo,plan:br(bo,bp,bq(a1),["expand_scope"]),generate:br(bo,bp,bq(ar),bq(aK),bq(aY),bq(V),bq(a6)),finalize:br(bq(aK),bq(V),bq(a6),bq(bb),bq(X.ri))},bt=["locate","plan","generate","finalize"],bu=[{id:"A.1-evidence",tools:ar},{id:"A.2-verdict",tools:aK},{id:"A.3-compute",tools:aY},{id:"A.4-authoring",tools:V},{id:"A.5-planning",tools:a1},{id:"A.6-declare",tools:a6},{id:"A.8-meta",tools:bb},{id:"A.9-skills",tools:[bj,bl,bn]},{id:"A.10-repair-rounds",tools:X.ri}],bv=bu.flatMap(a=>a.tools.map(a=>{var b;return{...a,stages:(b=a.name,bt.filter(a=>bs[a].includes(b)))}})),bw=new Map(bv.map(a=>[a.name,a]));function bx(a){return bv.filter(b=>b.stages.includes(a))}async function by(a,b,c){let d=Date.now(),e=bw.get(a);if(!e)return(0,F.$b)(a,(0,F.mX)(`未注册的工具「${a}」。已注册 ${bv.length} 个:${bv.map(a=>a.name).join("、")}`),d);let f=function(a,b){if(0===a.inputSchema.required.length)return;if(!b||"object"!=typeof b||Array.isArray(b))return`工具「${a.name}」需要对象参数,缺少必填字段:${a.inputSchema.required.join("、")}`;let c=a.inputSchema.required.filter(a=>void 0===b[a]||null===b[a]);return c.length>0?`工具「${a.name}」缺少必填字段:${c.join("、")}`:void 0}(e,b);if(f)return(0,F.$b)(a,(0,F.P9)(f),d);try{let f=await e.handler(b,c,{tool:a,ctx:c});return(0,F.OY)(a,f,d)}catch(b){return(0,F.$b)(a,(0,F.y4)(b),d)}}async function bz(a,b){let c=b.targetWords,d=[],e=[],g=[];if(c>0){e.push("block-structure-contract");let b=(0,w.z4)(c),g=(0,f.V7)(a);g<b.min?d.push({detectorId:"block-structure-contract",level:"error",severity:"blocker",message:`篇幅欠产:当前 ${g} 字,本块区间 ${b.min}~${b.max} 字(目标 ${b.target} 字)`}):g>b.toleranceLine&&d.push({detectorId:"block-structure-contract",level:"error",severity:"blocker",message:`篇幅严重超产:当前 ${g} 字,超出容差线 ${b.toleranceLine} 字(目标 ${b.target} 字)`})}try{e.push("block-templating");let b=await (0,z.SA)(a);(0,z.mv)(b)&&d.push({detectorId:"block-templating",level:"error",severity:"blocker",message:"模板化套话超标:本块存在零信息前缀句/套话句堆叠"})}catch(a){g.push("block-templating"),d.push({detectorId:"block-templating",level:"warning",message:`模板化扫描失败,该维度本次未执行:${a instanceof Error?a.message:String(a)}`})}try{e.push("block-filler-phrase");let b=(0,z.lN)(a);b&&(0,z.gj)(b)&&d.push({detectorId:"block-filler-phrase",level:"error",severity:"blocker",message:`短语级套话 ${b.count} 处:本块存在零信息短语`})}catch(a){g.push("block-filler-phrase"),d.push({detectorId:"block-filler-phrase",level:"warning",message:`短语级套话扫描失败,该维度本次未执行:${a instanceof Error?a.message:String(a)}`})}if(b.materialText&&b.materialText.trim().length>0)try{e.push("block-fact-density");let c=(0,z.oM)(a,b.materialText);c.blocking&&d.push({detectorId:"block-fact-density",level:"error",severity:"blocker",message:`量化参数密度不足:${c.verdict.params}/${c.verdict.required}`})}catch(a){g.push("block-fact-density"),d.push({detectorId:"block-fact-density",level:"warning",message:`参数密度扫描失败,该维度本次未执行:${a instanceof Error?a.message:String(a)}`})}try{e.push("backstage-fallback");let b=(0,z.mY)(a);b.length>0&&d.push({detectorId:"block-format-constraints",level:"error",severity:"blocker",message:`正文出现后台话术 ${b.length} 行:缺口应走 declare_missing,不得写进正文`})}catch(a){g.push("backstage-fallback"),d.push({detectorId:"block-format-constraints",level:"warning",message:`后台话术扫描失败,该维度本次未执行:${a instanceof Error?a.message:String(a)}`})}if(b.requirementAnchors&&b.requirementAnchors.length>0){e.push("block-requirement-anchor");let c=a.replace(/\s+/gu,"").toLowerCase(),f=b.requirementAnchors.filter(a=>{let b=String(a).replace(/\s+/gu,"").toLowerCase();return b.length>0&&!c.includes(b)});f.length>0&&d.push({detectorId:"block-requirement-anchor",level:"error",severity:"blocker",message:`本节负责的招标要求锚点未落位 ${f.length} 处:${f.slice(0,6).join("、")}——招标文件的实质内容(数值/等级/具名项)必须逐字写入正文`})}return{issues:d,executed:e,degraded:g}}async function bA(a){let b=String(a.nodeId??"").trim()||"current",c=[],d=await W({system:a.system,initialMessages:[{role:"user",content:a.prompt}],budget:function(a=process.env){let b=(0,A.Tl)(a);return{maxTurnsPerBlock:b.maxTurnsPerBlock,maxToolCallsPerBlock:b.maxToolCallsPerBlock,noImprovementRounds:b.noImprovementRounds}}(),...a.onTurn?{onTurn:a.onTurn}:{},check:async b=>bz(b,{targetWords:a.targetWords,materialText:a.materialText,...a.requirementAnchors?{requirementAnchors:a.requirementAnchors}:{}}),runTurn:async({messages:d})=>{let e,f=(0,A.Iw)((0,A.Su)(a.diagnostics)),g=[...new Map((a.toolContext?[...bx("locate"),...bx("plan"),...bx("generate")]:[]).map(a=>[a.name,a])).values()].map(a=>({name:a.name,description:a.description,parameters:a.inputSchema})),h=a.toolContext&&d.length>0?[{role:d[0].role,content:`${d[0].content}
40
40
 
41
41
  【当前写作节点】\`${b}\`——写类工具的 nodeId 一律填它(patch_section / rewrite_section / commit_section / delete_span)。`},...d.slice(1)]:d,i=await (0,j._v)({system:a.system,messages:h,tools:g,stablePrefixChars:a.stablePrefixChars,maxTokens:a.maxTokens,signal:a.signal,diagnostics:a.diagnostics});if(!i){let b=(0,A.Su)(a.diagnostics);if((0,A.Iw)(b)>f||(0,A.nY)(b)||(0,A.Z9)(b)){let a=(0,A.nY)(b)??(0,A.Z9)(b);return{text:"",toolCalls:[],refused:{kind:a?.kind??"budget",message:a?.message??"预算耗尽:本次调用未发起"}}}return{text:"",toolCalls:[]}}let l=[],m=[],n=[],o=a.toolContext?{...a.toolContext,document:function(a){let b=a.draft,c=(a,c)=>({applied:!1,content:b,reason:a,...void 0!==c?{rolledBack:c}:{}}),d=async b=>{let c=await bz(b,{targetWords:a.targetWords,materialText:a.materialText,...a.requirementAnchors?{requirementAnchors:a.requirementAnchors}:{}});return[c.issues.filter(a=>"error"===a.level||"blocker"===a.severity).length,c.degraded.length]};return{readSection:c=>String(c??"").trim()===a.nodeId?b:void 0,commitSection:c=>{if(String(c??"").trim()!==a.nodeId)throw(0,F.mX)(`节点「${c}」不存在:本次写作只开放当前写作节点「${a.nodeId}」`);if(!b.trim())throw(0,F.mX)(`节点「${a.nodeId}」本轮尚无正文,不能提交`);a.onCommit(b)},applyPatch:async e=>{if(String(e?.nodeId??"").trim()!==a.nodeId)return c(`节点「${e?.nodeId}」不存在:本次写作只开放当前写作节点「${a.nodeId}」(工具的参数应指向本节自己)`);let f=J(b,e.anchor,e.replacement);if(f.violations.length>0)return c(`4.4 硬边界预检未通过(事务侧):${f.violations.join(";")}`);let g=await (0,C.b)({originalContent:b,apply:async()=>f.candidate,recheck:d,repairRound:"writer-block-apply",diagnostics:a.diagnostics});return g.rolledBack?c(`回滚保护:改动未过同源复检(确定性残余 blocker/降级维度 ${g.beforeMetrics.join("/")} → ${g.afterMetrics.join("/")}),正文保留改动前`,!0):(a.onCommit(g.content),{applied:!0,content:g.content,rolledBack:!1})}}}({nodeId:b,draft:i.content,targetWords:a.targetWords,...a.requirementAnchors?{requirementAnchors:a.requirementAnchors}:{},...void 0!==a.materialText?{materialText:a.materialText}:{},...a.diagnostics?{diagnostics:a.diagnostics}:{},onCommit:a=>{e=a}})}:void 0;for(let b of i.toolCalls){let c,d=Date.now();try{c=JSON.parse(b.arguments||"{}")}catch{c={}}let e=await by(b.name,c,o??a.toolContext);0===m.length&&m.push({role:"assistant",content:i.content??"",toolCalls:i.toolCalls.map(a=>({id:a.id,name:a.name,arguments:a.arguments}))}),m.push({role:"tool",content:(0,F.hC)(e),toolCallId:b.id});let f=e.ok?e.injection:void 0;f?.suspicious&&n.push({tool:b.name,patterns:f.patterns}),l.push({toolName:b.name,ok:e.ok,durMs:Date.now()-d,summary:e.ok?`ok ${e.bytes??0}B${e.truncated?"(截断)":""}${f?.suspicious?" \xb7 疑似注入(按数据对待)":""}`:`${e.error.code}`})}if(c.push(...l),n.length>0){let c=n.map(a=>`${a.tool}(${a.patterns.join("、")})`).join(";");a.diagnostics&&(a.diagnostics.llm.lastInfo=`工具结果命中疑似注入 ${n.length} 处:${c}——已按数据对待并记节点 issue`);try{a.onToolIssue?a.onToolIssue(n.map(a=>(function(a){let b=[...a.patterns].sort().join("、")||"未标注模式";return{level:"warning",severity:"warning",category:"scope",owner:"system",repairability:"manual_review",message:`工具「${a.tool}」返回的资料内容命中疑似注入形态(${b})——该内容已按数据对待(模型侧带「${F.AO}」前缀),本节正文不得因它改变写作口径`,suggestion:"人工复核该资料:若确为提示注入,请把该文件移出资料范围后重跑本节;正文中据其写出的事实须另行核实来源。",...a.nodeId?{sectionTitle:a.nodeId}:{},provenance:{detectorId:"suspicious-injection",fingerprint:(0,k.c6)(`${a.tool}\u0000${b}\u0000${a.nodeId??""}`)}}})({...a,nodeId:b}))):console.warn(`[agent-tools] 工具结果命中疑似注入(${c})但本次未提供节点问题汇(onToolIssue)——命中未被静默丢弃,见 llm.lastInfo`)}catch(d){let b=d instanceof Error?d.message:String(d);a.diagnostics&&(a.diagnostics.llm.lastInfo=`工具结果命中疑似注入 ${n.length} 处:${c}——**节点 issue 未落库**(${b}):命中未被静默丢弃,但记账不完整`),console.error(`[agent-tools] 记录疑似注入节点 issue 失败(${c}):${b}`,d)}}let p=m.length>0?[{role:"assistant",content:e??i.content},...m]:[];return{text:i.content,...void 0!==e?{committed:e}:{},toolCalls:l,toolMessages:p}}});if("no_content"===d.kind){a.diagnostics&&(a.diagnostics.llm.lastError=`写手循环未产出正文:${d.reason}`);return}if("budget_refused"===d.kind){a.diagnostics&&(a.diagnostics.llm.lastError=`写手循环被预算挡回(${d.refused.kind}):${d.reason}`);return}"unfixable"===d.kind&&a.diagnostics&&(a.diagnostics.llm.lastInfo=`写手循环预算耗尽,提交当前最好草稿(残余 ${d.residual}):${d.reason}`);let e=function(a){if("unfixable"===a.kind&&!(a.residual<=0)&&!/预算耗尽|预算把/.test(a.reason))return{issue:{level:"error",severity:"blocker",category:"structure",message:`块写作未收敛(残余 ${a.residual}):${a.reason}`},reason:`写手循环 ${a.turn} 轮后仍不达标(残余 ${a.residual}):${a.reason} —— 提交当前最好草稿,缺口由块账与导出门禁承载`}}(d);return e&&(a.diagnostics&&(a.diagnostics.llm.lastInfo=`${a.diagnostics.llm.lastInfo??""};本块残余 ${"unfixable"===d.kind?d.residual:0} 未收敛`),a.toolContext?.audit?.declareUnfixable(e)),d.content}Object.fromEntries(bu.map(a=>[a.id,a.tools.length]));let bB={clarification:"澄清/答疑","tender-clause":"招标条款","evaluation-rule":"评价规则","boq-feature":"清单(项目特征)","boq-quantity":"清单(工程量)","drawing-note":"图纸注记","drawing-schedule":"图纸(材料设备表)","drawing-annotation":"图纸标注",code:"规范"},bC=_.AUTHORITY_LATTICE.caliber.map(a=>bB[a]??`未知载体(${a})`).join(" > "),bD=`## 你是
42
42
  工程建设投标技术文档的专业编制者。你只做一件事:产出经得起评标的文档。
@@ -131,7 +131,7 @@ ${K.map(a=>a.content).join("\n")}`,ae=a.evidence.map(a=>a.content).join("\n"),af
131
131
 
132
132
  ${e(b,f)}`:P.push(b),c=f}let Q=(0,i.kT)((0,i.FD)(`## ${a.chapter.title}
133
133
 
134
- ${P.join("\n\n")}`,a.forbidDrawingImages));if(0===O.length)return{sections:x,failedBlocks:O,allSucceeded:!0,markdown:Q};if(a.diagnostics&&O.length>0){let b=a.isolatedRetry?"定向重写仍失败":O.length===d.length?"全部失败":"部分失败",c=O.filter(({failureKinds:a})=>a?.includes("budget_exhausted")).length;a.diagnostics.llm.lastError=`规划块${b}:${O.map(({block:a})=>a.title).join("、")}${c>0?`(其中 ${c} 个块因预算耗尽未完成 LLM 调用)`:""}`}return{sections:x,failedBlocks:O,allSucceeded:!1,markdown:Q}}},19245:(a,b,c)=>{c.d(b,{Dq:()=>x,F9:()=>v,Lb:()=>k,Pc:()=>l,RO:()=>f,V2:()=>e,XF:()=>u,Yw:()=>y,_N:()=>n,ay:()=>h,bZ:()=>i,hK:()=>w,no:()=>o});var d=c(23760);let e=/(?:GB|JGJ|CJJ|JTG|SL|DB|DL|YS|HG|DBJ)[\s/T]*\d{1,2}[\s/-]?(?:T[\s/]*)?\d{2,4}(?:[\s/-]\d{1,4})?/gu,f=/《[^《》\r\n]{2,60}?》/gu,g=/(?:规范|标准|规程)$/u;function h(a){return[...a.matchAll(e)].map(a=>a[0])}function i(a){return[...a.matchAll(f)].map(a=>a[0].replace(/《|》/gu,""))}function j(a){return a.replace(/[!-~]/gu,a=>String.fromCharCode(a.charCodeAt(0)-65248)).replace(/\u3000/gu," ")}function k(a){return j(a).replace(/[\s\u200b-\u200d\ufeff]/gu,"").replace(/[—–-]/gu,"-").toUpperCase()}function l(a){return j(a).replace(/《|》/gu,"").replace(/[((][^))]{0,40}[))]/gu,"").replace(/[\s\u200b-\u200d\ufeff]/gu,"")}function m(a){return g.test(l(a))}function n(a,b){let c=k(a),d=k(b);if(!c||!d)return!1;if(c===d)return!0;let e=c.length<=d.length?c:d,f=c.length<=d.length?d:c;return RegExp(`^${e.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}-\\d{4}$`,"u").test(f)}function o(a,b){let c=l(a),d=l(b);return!!c&&!!d&&(c===d||!(c.length<4)&&!(d.length<4)&&(c.includes(d)||d.includes(c)))}let p=/^[\s()()【】[\]、,,;;::·.及和与]*$/u;function q(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=j(c),d=[];for(let b of a.matchAll(e)){let a=b.index??0;d.push({type:"code",value:c.slice(a,a+b[0].length),index:a,end:a+b[0].length})}for(let b of a.matchAll(f)){let a=b.index??0;d.push({type:"name",value:c.slice(a+1,a+b[0].length-1),index:a,end:a+b[0].length})}if(0===d.length)continue;d.sort((a,b)=>a.index-b.index);let g=new Map,h=new Set;d.forEach((a,b)=>{if("code"!==a.type)return;let e=e=>{for(let f of"left"===e?d.slice(0,b).map((a,c)=>b-1-c):d.slice(b+1).map((a,c)=>b+1+c)){let b=d[f];if("name"!==b.type||h.has(f))continue;let g="left"===e?c.slice(b.end,a.index):c.slice(a.end,b.index);if(!p.test(g))break;return f}return -1},f=e("left"),i=f>=0?f:e("right");i>=0&&(g.set(b,i),h.add(i))});let i=new Set;d.forEach((a,c)=>{if(!i.has(c))if("code"===a.type){let e=g.get(c);void 0!==e?(b.push({code:a.value,name:d[e].value}),i.add(e)):b.push({code:a.value}),i.add(c)}else h.has(c)||(b.push({name:a.value}),i.add(c))})}return b}function r(a,b){let c=a.indexOf(b);if(c<0)return"";let d=Math.max(0,c-24),e=Math.min(a.length,c+b.length+24);return a.slice(d,e).replace(/\s+/gu," ").trim()}function s(a){let b=[];for(let c of a){let a=b.findIndex(a=>!!(a.code&&c.code&&n(a.code,c.code)||a.name&&c.name&&o(a.name,c.name)));if(a<0){b.push(c);continue}"pair"===c.kind&&"pair"!==b[a].kind&&(b[a]=c)}return b}let t=/编制依据|编制说明|编制原则|编制目的/u;function u(a){let b=(0,d.UO)(a);if(0===b.length)return b;let c=b.filter(a=>t.test(a.title));if(0===c.length)return b;let e=a.split(/\r?\n/u);return c.reduce((a,b)=>a+q([b.title,...e.slice(b.start+1,b.end)].join("\n")).length,0)>0?c:b}function v(a){let b=a.split(/\r?\n/u);return u(a).map(a=>[a.title,...b.slice(a.start+1,a.end)].join("\n")).join("\n")}function w(a){let b=u(a),c=v(a),d=a.split(/\r?\n/u),e=new Set;for(let a of b)for(let b=a.start;b<a.end;b+=1)e.add(b);let f=d.filter((a,b)=>!e.has(b)).join("\n"),h=q(c),i=q(f),j=h.filter(a=>a.code).map(a=>a.code),k=h.filter(a=>a.name).map(a=>a.name),p=i.filter(a=>a.code).map(a=>a.code),t=i.filter(a=>a.name).map(a=>a.name),w=function(a){let b=[];for(let c of a.split(/\r?\n/u))if(c.trim())for(let a of c.trim().startsWith("|")?c.split("|"):c.split(/[、,,;;]/u)){let c=a.trim();!(c.length<4||c.length>40||c.includes("《"))&&g.test(l(c))&&b.push(c)}return b}(f),x=a=>p.some(b=>n(a,b)),y=a=>t.some(b=>o(a,b))||w.some(b=>l(b)===l(a)),z=a=>j.some(b=>n(b,a)),A=a=>k.some(b=>o(b,a)),B=[];for(let a of h){let b=!a.code||x(a.code)||!!a.name&&y(a.name),c=!a.name||y(a.name)||!!a.code&&x(a.code);a.code&&!b&&a.name&&m(a.name)?B.push({kind:"pair",value:a.name,code:a.code,name:a.name,counterpart:a.code}):a.code&&!b?B.push({kind:"code",value:a.code,code:a.code,counterpart:a.name}):a.name&&m(a.name)&&!c&&B.push({kind:"name",value:a.name,name:a.name,counterpart:a.code})}let C=[];for(let a of i){let b=!a.code||z(a.code)||!!a.name&&A(a.name),c=!a.name||A(a.name)||!!a.code&&z(a.code);a.code&&!b&&a.name&&m(a.name)?C.push({kind:"pair",value:a.name,code:a.code,name:a.name,context:r(f,a.code)}):a.code&&!b?C.push({kind:"code",value:a.code,code:a.code,context:r(f,a.code)}):a.name&&m(a.name)&&!c&&C.push({kind:"name",value:a.name,name:a.name,context:r(f,`《${a.name}》`)})}return{declaredNotUsed:s(B),usedNotDeclared:s(C),stats:{declaredCodes:j.length,declaredNames:k.length,usedCodes:p.length,usedNames:t.length}}}function x(a){return"pair"===a.kind?`《${a.name}》(${a.code})`:"code"===a.kind?`标准编号「${a.value}」`:`《${a.value}》`}function y(a){let b=w(a);if(b.stats.declaredCodes+b.stats.declaredNames===0)return[];let c=[],d=b.usedNotDeclared,e=b.declaredNotUsed;for(let a of d.slice(0,12))c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据对账缺口:正文引用${x(a)}未列入编制依据小节${a.context?`(证据:…${a.context}…)`:""}`,suggestion:"请将该标准名称及编号按编号族补入编制依据小节同类目(与正文引用形态一致),不得改动正文既有引用。"});if(d.length>12){let a=d.slice(12);c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据对账缺口:正文另有 ${a.length} 处引用标准未列入编制依据小节(${a.slice(0,6).map(x).join("、")} 等)`,suggestion:"请统一核对编制依据小节与正文引用清单,补齐全部未声明标准条目。"})}for(let a of e.slice(0,12))c.push({level:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据对账缺口:编制依据小节的${x(a)}在正文无引用`,suggestion:"请在对应施工章节的工序/验收要求中落位该标准(或从未使用的编制依据中移除),保持编制依据与正文一一对应。"});if(e.length>12){let a=e.slice(12);c.push({level:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据对账缺口:编制依据小节另有 ${a.length} 条声明在正文无引用(${a.slice(0,6).map(x).join("、")} 等)`,suggestion:"请统一核对编制依据与正文引用清单,未使用条目在正文落位或从编制依据移除。"})}return c}},19329:(a,b,c)=>{c.d(b,{E:()=>r});var d=c(37047),e=c(41991),f=c(22157);let g=/应急预案|应急措施|应急响应|应急救援|突发事件|应急管理|应急物资|应急演练|应急组织|应急保障/u,h=/应急|突发|救援|预案|抢险|疏散/u,i=["应急预案的编制与响应流程","突发事件应急处置措施","应急救援组织体系与保障"],j=["应急照明系统安装调试","应急电源配置与切换方案"],k={organization:"应急管理领导小组、应急救援队伍的组织机构与职责分工",procedure:"应急处置程序、应急响应流程与应急演练安排",resource:"应急物资、应急器材设备的储备与保障措施"},l=/应急物资|急救箱|灭火器|沙袋|发电机|水泵|对讲机|应急照明|应急灯|防护服|救援绳|救生衣|铁锹|编织袋|抽水泵|警示带|应急器材/u,m=/配备|储备|保障|配置|数量|不少于|共计|套|具|个|台|把|只/u,n=["应急物资储备清单与配备数量","应急救援器材的配置与保障"],o=["应急照明灯具数量与回路设计","应急电源的电气系统设计"];async function p(a){return(0,e.A)({prototypes:[...i],negativePrototypes:[...j],embedDocuments:a})}async function q(a){return(0,e.A)({prototypes:[...n],negativePrototypes:[...o],embedDocuments:a})}async function r(a,b){let c=a.split(/\r?\n/u),e=[],i=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=>!g.test(a.title)&&h.test(a.title)),j=await p(b),n=i.length>0?await j(i.map(a=>a.title)):[],o=new Set(i.filter((a,b)=>n[b]).map(a=>a.title)),r=a=>g.test(a)||o.has(a),s=!1,t=[],u=[],v="",w=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(r(c)){s=!0,t.push(c);continue}a<=3&&s&&(s=!1);continue}if(s&&a.trim()&&!/^\s*\|/u.test(a)){u.push(a);let b=a.replace(/\s+/gu,"");v+=b,w+=b.length}}if(0===t.length)return e;let x=[];w<300&&x.push(`字数仅 ${w} 字(要求 ≥300 字)`);let y=v.match(/.{1,200}/gu)||[],z=Object.values(k),A=await (0,d.Mv)(y,z),B=a=>y.some(b=>A(b,a)>=d.Eh);B(k.organization)||x.push("应急组织体系"),B(k.procedure)||x.push("应急处置程序/演练");let C=await q(b),D=u.join("。").split(/[。;;]/u).map(a=>a.trim()).filter(a=>l.test(a)&&m.test(a)),E=D.length>0?await C(D):[];return B(k.resource)||E.some(Boolean)||x.push("应急物资保障"),x.length>0&&e.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`应急预案小节深度不足:${t.join("、")}(缺少:${x.join("、")})`,suggestion:"补写应急组织体系(领导小组/抢险队与职责)、应急处置程序与演练安排、应急物资清单与保障措施,达到可落地深度。",sectionTitle:t[0],provenance:{detectorId:"emergency-section-depth",fingerprint:(0,f.c6)(a)}}),e}},21702:(a,b,c)=>{c.d(b,{Cd:()=>l,Im:()=>r,J5:()=>i,KM:()=>y,SA:()=>n,Zw:()=>t,gj:()=>q,hY:()=>u,jk:()=>w,lN:()=>p,mY:()=>z,mv:()=>o,o9:()=>x,oM:()=>m,zw:()=>s});var d=c(78217),e=c(35547),f=c(40299),g=c(23760),h=c(52922);let i=1.5,j=/\d+(?:\.\d+)?\s*(?:m²|㎡|平方米|m³|m3|立方米|km|mm|cm|m|kg|t|吨|层|栋|日历天|天|%|台|套|根|处|个|kV|kW|MPa|kN|℃|次|遍|道|户|座|米|小时|min|分钟)/giu;function k(a){return new Set(a.match(j)||[]).size}function l(a){let b=(0,d.V7)(a),c=k(a),e=b>0?Math.ceil(b/1e3*i):0,f=b>0?Math.round(c/b*1e5)/100:0;return{chars:b,params:c,per1000:f,required:e,gap:b>0&&c<e}}function m(a,b){let c=l(a),d=k(b);return{verdict:c,materialParams:d,blocking:c.gap&&d>=c.required}}async function n(a){let b=(0,h.cs)(a);if(0===b.length)return{totalSentences:0,fillerSentences:0,fillerRatio:0,vagueCount:0,fillerDetails:[]};let c=await (0,h.w7)(b),d=c.map(a=>a.filler),e=d.filter(Boolean).length;return{totalSentences:b.length,fillerSentences:e,fillerRatio:e/b.length,vagueCount:c.filter(a=>a.vague).length,fillerDetails:[...new Set(b.filter((a,b)=>d[b]))].slice(0,12)}}function o(a){return a.fillerRatio>.1||a.vagueCount>=3}function p(a){let b=(0,h.c8)(a);return{count:b.length,phrases:[...new Set(b.map(a=>a.phrase))].slice(0,8),sentences:[...new Set(b.map(a=>a.sentence))].slice(0,8),totalSentences:(0,h.cs)(a).length}}function q(a){return a.count>=1}function r(a){let b=(0,g.AC)(a,[]);return{count:b.length,details:b.map(a=>a.suggestion??a.message).slice(0,3),chars:(0,d.V7)(a)}}function s(a){return a.count>0}function t(a){let b=(0,e.w1)(a);return{count:b.length,sentences:[...new Set(b.map(a=>a.sentence))].slice(0,8),maxRepeats:b.reduce((a,b)=>Math.max(a,b.count),0)}}function u(a){return a.count>0}let v=/重难点|重点难点|难点分析|难点|工程特点|施工特点|项目特点/u;function w(a){return v.test(a)}async function x(a){let b=a.split("\n").filter(a=>!/^\s*#{1,6}\s/u.test(a)).join("\n"),c=(0,h.ge)(b);if(0===c.length)return{entries:0,bothRatio:1,missing:[]};let d=await (0,h.G5)(c);return{entries:c.length,bothRatio:d.ratio,missing:d.details.filter(a=>!a.attributed||!a.quantified).slice(0,8)}}function y(a){return a.entries>0&&a.bothRatio<.5}function z(a){return a.split("\n").map(a=>a.trim()).filter(a=>a.length>0&&f.Rg.test(a)).slice(0,5)}},22213:(a,b,c)=>{c.d(b,{Bk:()=>u,Ep:()=>t,I6:()=>x,KJ:()=>C,ab:()=>z,ap:()=>E,eB:()=>y,eK:()=>B,eL:()=>n,hL:()=>G,iA:()=>w,qj:()=>A,sh:()=>v,xu:()=>o,zJ:()=>D,zX:()=>F});var d=c(70933),e=c(1218);c(78217),c(70208);var f=c(22157),g=c(3063);function h(a){return a.replace(/^#{3,4}\s+.*\n+/u,"").trim()}function i(a,b){let c=a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),d=b.match(RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${c}\\s*\\n([\\s\\S]*?)(?=^###\\s+|^##\\s+|(?![\\s\\S]))`,"mu"));return d?d[0]:b}function j(a,b){let c=b?i(b,a):a;return/^####\s+\S+/mu.test(c)}function k(a){return(0,d.eE)(a).replace(/#{2,6}\s*[^;;。\n]+/gu,"").replace(/资料内容事实[;;::]?/gu,"").replace(/\s+/gu," ").trim()}function l(a){let b=k(a);return!(!b||b.length<4||b.length>120||/资料内容事实|#{2,6}|未尽事宜|项目编号\s*[::]?\s*[一二三四五六七八九十]?$/u.test(b)||/本项目为|总建筑面积|保留现状|专业施工内容统筹|招标文件列明|招标范围还包含|具备有效的.*资质/u.test(b)||/未注明|以图纸为准|按设计要求确定/u.test(b)&&!/\d/u.test(b))&&(!((b.match(/工程|维修|改造|安装|设备/gu)||[]).length>=4)||!!/\d|㎡|m2|m²|mm|厚|验收|检测|调试|试验|复试/u.test(b))&&/\d|㎡|m2|m²|mm|厚|工程|材料|设备|系统|范围|改造|维修|加固|消防|水电|智能化|管网|屋面|门窗|验收|检测|调试/u.test(b)}function m(a){return a.split(/→|;|;|、|,|,/u).map(a=>k(a)).filter(a=>a&&a.length>=2&&a.length<=40).filter(a=>!/^按?施工准备$|^实施$|^检查$|^验收组织?$|^按规范和资料闭环$/u.test(a)).filter(a=>!/本项目为|总建筑面积|保留现状|专业施工内容统筹|招标文件列明|招标范围|未尽事宜|具备有效/u.test(a))}function n(a){let b=[];for(let c of a){let a=c.replace(/[::,,、;;||()()]/gu," ").replace(/\s+/gu," ").trim(),d=new Set(a.split(" ").filter(a=>a.length>=2)),e=new Set([...a.match(/\d+[A-Z]{2,}[A-Za-z0-9]*/gu)||[],...a.match(/\d+(?:\.\d+)?\s*(?:台|套|个|座|㎡|m2|m²|m³|m3|kg|t|根|扇|樘|块|件|组|mm)/gu)||[]]),f=a.split(" ")[0]||"",g=b.findIndex(b=>{if(b.norm.includes(a)||a.includes(b.norm))return!0;if(!([...e].some(a=>b.models.has(a))||[...b.models].some(a=>e.has(a))))return!1;let c=(a,b)=>[...a].every(a=>b.has(a));return c(d,b.tokens)||c(b.tokens,d)||f===b.norm.split(" ")[0]});if(g>=0){let f=b[g];(d.size>f.tokens.size||d.size===f.tokens.size&&c.length<f.text.length)&&(b[g]={text:c,norm:a,tokens:d,models:e})}else b.push({text:c,norm:a,tokens:d,models:e})}return b.map(a=>a.text)}function o(a,b){let c=b.map(a=>a.replace(/[::,,、;;||()()]/gu," ").replace(/\s+/gu," ").trim()),d=/安装|敷设|浇筑|砌筑|抹灰|回填|拆除|吊装|固定|连接|试验|调试|养护|压实|铺设|焊接|绑扎|涂刷|灌浆|开挖|预制|穿线|放线|找平|清底|防水|密封/u;return a.filter(a=>{if(/\d+(?:\.\d+)?\s*(?:台|套|个|座|㎡|m2|m²|m³|m3|kg|t|根|扇|樘|块|件|组)/u.test(a)||/[A-Z]+\d+/u.test(a)&&/箱|柜|泵|机组|风机|面板/u.test(a))return!1;let b=a.replace(/[::,,、;;||()()]/gu," ").replace(/\s+/gu," ").trim();return!!(b.length<=6&&d.test(b))||(b.length<4?!c.some(a=>a.includes(b)):!c.some(a=>a.includes(b)))})}function p(a){let b=k(a);return!b||(b.match(/工程|维修|改造|安装|设备|系统|管网|屋面|门窗|消防|智能化/gu)||[]).length>=5&&!/\d|㎡|m2|m²|mm|厚|验收|检测|调试|试验|复试|记录|报告|材料|设备|规格|标准|检验批/u.test(b)}function q(a){let b=/^(.{1,18}?)(等)([\s\S]{2,})$/u.exec(a);return!b||void 0===b[1]||void 0===b[3]||/电$/u.test(b[1])||/^级/u.test(b[3])?a:b[3].length>=3?b[3]:b[1].length>=3?b[1]:a}let r=/计价|费用|税金|规费|暂列|暂估|合计|汇总|小计|措施项目|其他项目|税金项目|金额|结算管理|竣工结算/u,s=/[[\]【】]/u;function t(a,b){let c=(function(a){let b=[],c=a.match(/施工工作包结构化数据:\s*(\[[^\n]*\])/u);if(c)try{for(let a of JSON.parse(c[1])){let c=k(a.name||""),d=k(a.scope||""),e=n([...a.quantities||[],...a.materials||[],...a.methods||[]].map(k).filter(l).filter(a=>!p(a))),f=o((a.process||[]).flatMap(m),e),g=(a.acceptance||[]).map(k).filter(a=>a&&!p(a));!(!c||/项目施工$|项目$|^\d{4}年度/u.test(c))&&(!d||/资料内容事实|#{2,6}/u.test(d)||b.push({name:c,scope:d,quantities:e,process:f,acceptance:g}))}if(b.length>0)return b}catch(a){console.warn(`[gen] 结构化工作包解析失败,回退正则提取(保真度下降):${a instanceof Error?a.message:String(a)}`),b.length=0}for(let c of a.split(/\r?\n/u).filter(a=>/^\d+\.\s+.+?|范围:/u.test(a))){let a=c.match(/^\d+\.\s+(.+?)|范围:(.+?)|工程量\/材料:(.+?)|流程:(.+?)|验收:(.+)$/u);if(!a)continue;let d=k(a[1]),e=k(a[2]),f=n(a[3].split(/[;;、,,]/u).map(a=>k(a)).filter(l).filter(a=>"按证据展开"!==a)),g=o(m(a[4]),f),h=a[5].split(/[;;、,,]/u).map(a=>k(a)).filter(a=>a&&"按规范和资料闭环"!==a).filter(a=>!p(a));!(!d||/项目施工$|项目$|^\d{4}年度/u.test(d))&&(!e||/资料内容事实|#{2,6}/u.test(e)||b.push({name:d,scope:e,quantities:f,process:g,acceptance:h}))}return b.slice(0,8)})(a).map(a=>a.name).filter(Boolean),d=function(a,b){let c=[a,...b.map(a=>a.content)].filter(Boolean),d=/工程|安装|系统|通风|空调|智能化|装修|幕墙|屋面|土方|基坑|地基|基础|结构|电气|给排水|消防|防水|设备|管网|道路|景观|绿化|公厕|厕所|过路涵|涵|清淤|沟塘|塘|小菜园|菜园|排水沟|水沟|花池|树池|挡墙|护栏/u,f=(()=>{for(let a of c){let b=/(?:项目名称|工程名称)[::\s为是]+([^\n。;;]{4,120})/u.exec(a);if(!b)continue;let c=(0,e.ir)(b[1]);if(c)return c}})();for(let a of c){let b=function(a){for(let b=0;b<a.length;){let c=a.indexOf("招标范围",b);if(c<0)break;let d=a.lastIndexOf("\n",c-1)+1;if(!/^\s*[-*]?\s*(?:\*\*)?\s*\[/u.test(a.slice(d,c)))return c;b=c+4}return -1}(a);if(b<0)continue;let c=a.slice(b,b+600);if(f){let a=c.split(/[。;;\n]/u).map(a=>a.trim()).filter(Boolean).filter(a=>!(0,e.PP)(a,f));a.length>0&&(c=a.join("。"))}let g=c,h=g.indexOf("包括但不限于"),i=(g=(g=h>=0?g.slice(h+6).replace(/^[::、,,;;\s]+/u,""):g.replace(/^[^、,,;;。]{0,60}?招标范围[::]?\s*/u,"")).replace(/(?:等)?图纸[、及]?清单范围内所有工程[。.]*/u,"")).replace(/([^)]*)/gu,"").split(/[、,,;;。]/u).map(a=>k(a).replace(/["“”']/gu,"")).filter(a=>a.length>=3&&a.length<=20).filter(a=>d.test(a)).map(a=>q(a)).filter(a=>a.length>=3&&a.length<=20).filter(a=>!/招标范围|图纸|清单|补疑|答疑|具体内容|包括但不限于|投标|专用合同|未尽事宜|工程量|约束|不得|仅指导|集中交代|矛盾|参数|数字/u.test(a)).filter(a=>!/^(?:包括|涵盖|重点实施|实施|建设范围覆盖|本项目建设|主要包含|主要实施|具体包括|分别为|共计|包含|涉及)/u.test(a)).filter(a=>!/以下|以上|如下|详见|具体内容/u.test(a)).filter(a=>!/^是否/u.test(a)).filter(a=>!/及其他|以及其他/u.test(a)).filter(a=>!s.test(a)).filter(a=>!r.test(a)),j=[];for(let a of i){let b=a.replace(/\s+/gu,"");j.some(a=>a.replace(/\s+/gu,"").includes(b)||b.includes(a.replace(/\s+/gu,"")))||j.push(a)}if(j.length>=3)return j.slice(0,12)}return[]}(a,b),f=function(a){let b=(0,e.qG)(a),c=(0,e.hn)(b),d=[],f=new Set;for(let a of c){let b=a.key.replace(/^清单条目:/u,"").trim();!(!b||b.length<2||b.length>24||r.test(b)||s.test(b))&&(f.has(b)||(f.add(b),d.push(b)))}return d.slice(0,12)}(b),g=[],h=a=>{let b=q(a.trim()),c=b.replace(/\s+/gu,"");return!(!c||/^(?:包括|涵盖|重点实施|实施以下|建设范围覆盖|本项目建设|主要包含|主要实施|具体包括|分别为|共计|包含|涉及|是否)/u.test(c)||/以下|以上|如下|详见|具体内容|及其他|以及其他/u.test(c)||/^\d{4}年度/u.test(c)||/施工图|设计图|详图|平面图|剖面图|立面图|大样图|图集/u.test(c)||c.length>20||g.some(a=>{let b=a.replace(/\s+/gu,"");return b.includes(c)||c.includes(b)}))&&(g.push(b),!0)};for(let a of c)h(a);for(let a of d){if(g.length>=12)break;h(a)}let i=/公厕|厕所|过路涵|涵洞|涵管|污水|排水沟|水沟|清淤|沟塘|塘|小菜园|菜园|菜地|花池|树池|挡墙|护栏|路灯|检查井|化粪池|泵站|生态池|生态塘|护坡|驳岸|栈道|步道/u;if(g.length<3)for(let a of[...f].sort((a,b)=>Number(i.test(b))-Number(i.test(a)))){if(g.length>=12)break;h(a)}else for(let a of f){if(g.length>=16)break;i.test(a)&&h(a)}return g}function u(a,b,c=3,d){let e=d??t(a,b);if(e.length<c)return"";let f=e.map((a,b)=>`#### ${b+1} ${a}`).join("\n");return[`【小节骨架锁定】本节内部结构已由系统锁定,必须且只能按以下 ${e.length} 个工作包小节标题逐项展开(标题一字不差,不得增删改、合并或调序):`,f,"每个工作包小节必须覆盖三方面要素:作业对象与工程量、工序顺序、施工方法(三要素缺一不可),融入连贯段落叙述;禁止以“施工概况/施工流程/施工方法/工艺流程”等结构标签充当 H4 小节标题或段落开头引导。\n要素写法:作业对象与工程量(作业对象与部位、工程量或规模、材料设备规格型号,数量类数值优先取工程量清单数据);工序顺序(先后顺序清晰,相邻小节不得同句式开头,同一句式全文不得反复使用,禁止以固定句模复读);施工方法(工艺做法、工艺参数(数值+单位)、验收检测与记录闭环)。\n融合叙述要求(**只描述形式,不给范例**):三要素必须写成连贯段落——先交代作业对象与范围(部位/单体 + 工程量或规格),再按施工先后把工序串起来叙述,每个工序夹带对应的工艺参数(数值+单位)与验收检测做法;不得分条罗列成要素清单,不得先写「作业对象:」「施工方法:」式标签再补内容。\n数值来源优先级:工程量、材料规格、设备型号等数量类数值优先取工程量清单数据;清单未覆盖的参数(标高、坡率、构造做法等)才取图纸数据;禁止“按设计图纸执行”“详见设计图纸”“按设计文件确定”式概括话术——必须落到具体数值或具体规范条文。\n本节禁止出现 Markdown 表格;禁止写入重难点识别表、关键施工节点控制计划表等属于其他小节的内容;禁止只写综合概述而不展开工作包。"].join("\n")}function v(a,b,c=3){let d=t(a,b);return d.length>=c?d:[]}function w(a,b,c=3){let d=a.filter(a=>b.some(b=>{let c=(0,f.Sw)(b),d=(0,f.Sw)(a);return c.includes(d)||d.includes(c)}));return d.length>=c?d:[]}function x(a){let b=a.split(/\r?\n/u),c=[],d=!1;for(let a of b){let b=a.trim();if(/^\|.+\|\s*$/u.test(b)){d=!0;continue}if(d){if(""===b)continue;d=!1}c.push(a)}return c.join("\n")}function y(a,b,c=[]){let d=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${d}\\s*$`,"u"),g=a.split("\n"),h=g.findIndex(a=>e.test(a.trim()));if(h<0)return a;let i=/^####\s+/u.test(g[h].trim()),j=c.map(f.Sw),k=[g[h]];for(let a=h+1;a<g.length;a+=1){let b=g[a].trim();if(/^#{2,3}\s+/u.test(b))break;if(/^####\s+/u.test(b)&&i){let a=b.replace(/^####\s+(?:\d+(?:\.\d+)*\s+)?/u,""),c=(0,f.Sw)(a);if(!j.some(a=>c.includes(a)||a.includes(c)))break}k.push(g[a])}let l=k.join("\n"),m=x(l);return m===l?a:a.replace(l,m)}function z(a,b,c){let d=i(b,a),e=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");if(!RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${e}\\s*$`,"u").test(d.split("\n")[0]?.trim()||""))return[];let g=(d.match(/^#{3,4}\s+(.+)$/gmu)||[]).map(a=>a.replace(/^#{3,4}\s+/u,""));return c.filter(a=>!g.some(b=>(0,f.Sw)(b).includes((0,f.Sw)(a))))}function A(a,b,c){let d=i(b,a),e=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");if(!RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${e}\\s*$`,"u").test(d.split("\n")[0]?.trim()||""))return a;let g=d.split(/^####\s+/gmu),h=g.shift()||"",j=[];for(let a of g){let b=a.split("\n"),d=(b[0]||"").trim(),e=(0,f.Sw)(d),g=b.slice(1).join("\n").replace(/^#{1,6}\s+.+$/gmu,"").trim();c.some(a=>e.includes((0,f.Sw)(a)))&&g.length<80||j.push(a)}let k=`${h}${j.length>0?"#### ":""}${j.join("#### ")}`;return k===d?a:a.replace(d,k)}function B(a,b){if(/项目主要施工内容/u.test(a)){var c;let d=i(a,b);if(!j(b,a))return`${a} 缺少施工工作包三级小节`;if(!function(a){let b=h(a);return((b.match(/^####\s+(?:\d+\.\d+\.\d+\s+)?[一二三四五六七八九十\d]*[、..]?\s*\S+/gmu)||[]).length||(b.match(/^[一二三四五六七八九十]+、\S+/gmu)||[]).length)>=3&&(0,f.az)(b)}(d))return`${a} 未按施工工作包展开`;let e=d.split(/^####\s+/gmu).slice(1).map(a=>a.trim()).filter(Boolean);if(e.some(a=>!(0,f.az)(a)))return`${a} 存在工作包内容要素不全`;if(c=h(d),/资料内容事实|(?:^#{2,3}|^#{5,6})\s+|\*\*[^*]+\*\*|未尽事宜|专业施工内容统筹|招标范围还包含|具备有效的.*资质|安全生产考核合格证书|注册建造师|联合体投标|项目经理要求|投标人资格|投标人资质|营业执照|安全生产许可证|资格审查|资格后审|中标通知书|签订合同|电子交易系统|投标保证金|评标办法|踏勘现场|投标预备会/mu.test(c))return`${a} 存在脏事实或标题污染`;if(e.some(a=>/施工流程[::][\s\S]*?(未尽事宜|本项目为|总建筑面积|保留现状|专业施工内容统筹|招标文件列明|招标范围|安全生产考核合格证书|联合体投标|注册建造师)/u.test(a)))return`${a} 存在工作包流程污染`;if(!(0,f.Z1)(d)||e.some(a=>{let b=a.match(/施工方法[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"",c=a.match(/(?:施工流程|工艺流程)[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"";return(b.trim().length>0||c.trim().length>0)&&!(0,f.Z1)(b+c)}))return`${a} 存在工作包工序顺序表达缺失`;if(e.some(a=>{let b=a.match(/施工方法[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"";if(!/施工方法[::]/u.test(a))return!1;if(/安全生产考核合格证书|联合体投标|注册建造师|投标人资格|资质要求|营业执照|安全生产许可证/u.test(b)||b.length<30)return!0;let c=(b.match(/[::]\s*\d/gu)||[]).length;return/\d/u.test(b)&&!/→|采用|组织|浇筑|铺设|焊接|绑扎|砌筑|抹灰|涂刷|敷设|压实|养护|试验|调试|测量|放线|验收|检测|复试|记录|报告|吊装|灌注|埋设|嵌缝/u.test(b)&&(c>=2||!/安装|固定|挂墙|机具/u.test(b))||(b.match(/工程|维修|改造|安装|设备/gu)||[]).length>=4&&!/\d|㎡|m2|m²|mm|厚|验收|检测|调试|试验|复试|记录|报告/u.test(b)}))return`${a} 存在工作包施工方法过弱`;let g=h(d);if(/^\s*\|.+\|\s*$/mu.test(g))return`${a} 不应使用 Markdown 表格替代工作包正文`}if(g.gG.test(a)){let c=i(a,b);if(!j(b,a))return`${a} 缺少分项工程方案三级小节`;let d=c.split(/^####\s+/gmu).slice(1).map(a=>a.trim()).filter(Boolean);if(0===d.length)return`${a} 未按分项工程方案展开`;if(d.some(a=>!(0,f.az)(a)))return`${a} 存在分项方案内容要素不全`;if(!(0,f.Z1)(c)||d.some(a=>{let b=a.match(/施工方法[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"",c=a.match(/(?:施工流程|工艺流程)[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"";return(b.trim().length>0||c.trim().length>0)&&!(0,f.Z1)(b+c)}))return`${a} 存在分项方案工序顺序表达缺失`}return""}function C(a,b){let c=b;for(let b of a){if(/项目主要施工内容/u.test(b))continue;let a=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");c=c.replace(RegExp(`(^###\\s+(?:\\d+\\.\\d+\\s+)?${a}\\s*\\n)([\\s\\S]*?)(?=^###\\s+|^##\\s+|$)`,"gmu"),(a,c,d)=>{if(/^####\s+\S+/mu.test(d))return`${c}${d}`;let e=c.replace(/^#{1,6}[\s]*/,"").replace(/^\d+(?:\.\d+)*[\s]*/,"").trim();return(0,f.Sw)(e)===(0,f.Sw)(b)?`${c}
134
+ ${P.join("\n\n")}`,a.forbidDrawingImages));if(0===O.length)return{sections:x,failedBlocks:O,allSucceeded:!0,markdown:Q};if(a.diagnostics&&O.length>0){let b=a.isolatedRetry?"定向重写仍失败":O.length===d.length?"全部失败":"部分失败",c=O.filter(({failureKinds:a})=>a?.includes("budget_exhausted")).length;a.diagnostics.llm.lastError=`规划块${b}:${O.map(({block:a})=>a.title).join("、")}${c>0?`(其中 ${c} 个块因预算耗尽未完成 LLM 调用)`:""}`}return{sections:x,failedBlocks:O,allSucceeded:!1,markdown:Q}}},19245:(a,b,c)=>{c.d(b,{Dq:()=>x,F9:()=>v,Lb:()=>k,Pc:()=>l,RO:()=>f,V2:()=>e,XF:()=>u,Yw:()=>y,_N:()=>n,ay:()=>h,bZ:()=>i,hK:()=>w,no:()=>o});var d=c(23760);let e=/(?:GB|JGJ|CJJ|JTG|SL|DB|DL|YS|HG|DBJ)[\s/T]*\d{1,2}[\s/-]?(?:T[\s/]*)?\d{2,4}(?:[\s/-]\d{1,4})?/gu,f=/《[^《》\r\n]{2,60}?》/gu,g=/(?:规范|标准|规程)$/u;function h(a){return[...a.matchAll(e)].map(a=>a[0])}function i(a){return[...a.matchAll(f)].map(a=>a[0].replace(/《|》/gu,""))}function j(a){return a.replace(/[!-~]/gu,a=>String.fromCharCode(a.charCodeAt(0)-65248)).replace(/\u3000/gu," ")}function k(a){return j(a).replace(/[\s\u200b-\u200d\ufeff]/gu,"").replace(/[—–-]/gu,"-").toUpperCase()}function l(a){return j(a).replace(/《|》/gu,"").replace(/[((][^))]{0,40}[))]/gu,"").replace(/[\s\u200b-\u200d\ufeff]/gu,"")}function m(a){return g.test(l(a))}function n(a,b){let c=k(a),d=k(b);if(!c||!d)return!1;if(c===d)return!0;let e=c.length<=d.length?c:d,f=c.length<=d.length?d:c;return RegExp(`^${e.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}-\\d{4}$`,"u").test(f)}function o(a,b){let c=l(a),d=l(b);return!!c&&!!d&&(c===d||!(c.length<4)&&!(d.length<4)&&(c.includes(d)||d.includes(c)))}let p=/^[\s()()【】[\]、,,;;::·.及和与]*$/u;function q(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=j(c),d=[];for(let b of a.matchAll(e)){let a=b.index??0;d.push({type:"code",value:c.slice(a,a+b[0].length),index:a,end:a+b[0].length})}for(let b of a.matchAll(f)){let a=b.index??0;d.push({type:"name",value:c.slice(a+1,a+b[0].length-1),index:a,end:a+b[0].length})}if(0===d.length)continue;d.sort((a,b)=>a.index-b.index);let g=new Map,h=new Set;d.forEach((a,b)=>{if("code"!==a.type)return;let e=e=>{for(let f of"left"===e?d.slice(0,b).map((a,c)=>b-1-c):d.slice(b+1).map((a,c)=>b+1+c)){let b=d[f];if("name"!==b.type||h.has(f))continue;let g="left"===e?c.slice(b.end,a.index):c.slice(a.end,b.index);if(!p.test(g))break;return f}return -1},f=e("left"),i=f>=0?f:e("right");i>=0&&(g.set(b,i),h.add(i))});let i=new Set;d.forEach((a,c)=>{if(!i.has(c))if("code"===a.type){let e=g.get(c);void 0!==e?(b.push({code:a.value,name:d[e].value}),i.add(e)):b.push({code:a.value}),i.add(c)}else h.has(c)||(b.push({name:a.value}),i.add(c))})}return b}function r(a,b){let c=a.indexOf(b);if(c<0)return"";let d=Math.max(0,c-24),e=Math.min(a.length,c+b.length+24);return a.slice(d,e).replace(/\s+/gu," ").trim()}function s(a){let b=[];for(let c of a){let a=b.findIndex(a=>!!(a.code&&c.code&&n(a.code,c.code)||a.name&&c.name&&o(a.name,c.name)));if(a<0){b.push(c);continue}"pair"===c.kind&&"pair"!==b[a].kind&&(b[a]=c)}return b}let t=/编制依据|编制说明|编制原则|编制目的/u;function u(a){let b=(0,d.UO)(a);if(0===b.length)return b;let c=b.filter(a=>t.test(a.title));if(0===c.length)return b;let e=a.split(/\r?\n/u);return c.reduce((a,b)=>a+q([b.title,...e.slice(b.start+1,b.end)].join("\n")).length,0)>0?c:b}function v(a){let b=a.split(/\r?\n/u);return u(a).map(a=>[a.title,...b.slice(a.start+1,a.end)].join("\n")).join("\n")}function w(a){let b=u(a),c=v(a),d=a.split(/\r?\n/u),e=new Set;for(let a of b)for(let b=a.start;b<a.end;b+=1)e.add(b);let f=d.filter((a,b)=>!e.has(b)).join("\n"),h=q(c),i=q(f),j=h.filter(a=>a.code).map(a=>a.code),k=h.filter(a=>a.name).map(a=>a.name),p=i.filter(a=>a.code).map(a=>a.code),t=i.filter(a=>a.name).map(a=>a.name),w=function(a){let b=[];for(let c of a.split(/\r?\n/u))if(c.trim())for(let a of c.trim().startsWith("|")?c.split("|"):c.split(/[、,,;;]/u)){let c=a.trim();!(c.length<4||c.length>40||c.includes("《"))&&g.test(l(c))&&b.push(c)}return b}(f),x=a=>p.some(b=>n(a,b)),y=a=>t.some(b=>o(a,b))||w.some(b=>l(b)===l(a)),z=a=>j.some(b=>n(b,a)),A=a=>k.some(b=>o(b,a)),B=[];for(let a of h){let b=!a.code||x(a.code)||!!a.name&&y(a.name),c=!a.name||y(a.name)||!!a.code&&x(a.code);a.code&&!b&&a.name&&m(a.name)?B.push({kind:"pair",value:a.name,code:a.code,name:a.name,counterpart:a.code}):a.code&&!b?B.push({kind:"code",value:a.code,code:a.code,counterpart:a.name}):a.name&&m(a.name)&&!c&&B.push({kind:"name",value:a.name,name:a.name,counterpart:a.code})}let C=[];for(let a of i){let b=!a.code||z(a.code)||!!a.name&&A(a.name),c=!a.name||A(a.name)||!!a.code&&z(a.code);a.code&&!b&&a.name&&m(a.name)?C.push({kind:"pair",value:a.name,code:a.code,name:a.name,context:r(f,a.code)}):a.code&&!b?C.push({kind:"code",value:a.code,code:a.code,context:r(f,a.code)}):a.name&&m(a.name)&&!c&&C.push({kind:"name",value:a.name,name:a.name,context:r(f,`《${a.name}》`)})}return{declaredNotUsed:s(B),usedNotDeclared:s(C),stats:{declaredCodes:j.length,declaredNames:k.length,usedCodes:p.length,usedNames:t.length}}}function x(a){return"pair"===a.kind?`《${a.name}》(${a.code})`:"code"===a.kind?`标准编号「${a.value}」`:`《${a.value}》`}function y(a){let b=w(a);if(b.stats.declaredCodes+b.stats.declaredNames===0)return[];let c=[],d=b.usedNotDeclared,e=b.declaredNotUsed;for(let a of d.slice(0,12))c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据对账缺口:正文引用${x(a)}未列入编制依据小节${a.context?`(证据:…${a.context}…)`:""}`,suggestion:"请将该标准名称及编号按编号族补入编制依据小节同类目(与正文引用形态一致),不得改动正文既有引用。"});if(d.length>12){let a=d.slice(12);c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据对账缺口:正文另有 ${a.length} 处引用标准未列入编制依据小节(${a.slice(0,6).map(x).join("、")} 等)`,suggestion:"请统一核对编制依据小节与正文引用清单,补齐全部未声明标准条目。"})}for(let a of e.slice(0,12))c.push({level:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据对账缺口:编制依据小节的${x(a)}在正文无引用`,suggestion:"请在对应施工章节的工序/验收要求中落位该标准(或从未使用的编制依据中移除),保持编制依据与正文一一对应。"});if(e.length>12){let a=e.slice(12);c.push({level:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`编制依据对账缺口:编制依据小节另有 ${a.length} 条声明在正文无引用(${a.slice(0,6).map(x).join("、")} 等)`,suggestion:"请统一核对编制依据与正文引用清单,未使用条目在正文落位或从编制依据移除。"})}return c}},19329:(a,b,c)=>{c.d(b,{E:()=>r});var d=c(37047),e=c(41991),f=c(22157);let g=/应急预案|应急措施|应急响应|应急救援|突发事件|应急管理|应急物资|应急演练|应急组织|应急保障/u,h=/应急|突发|救援|预案|抢险|疏散/u,i=["应急预案的编制与响应流程","突发事件应急处置措施","应急救援组织体系与保障"],j=["应急照明系统安装调试","应急电源配置与切换方案"],k={organization:"应急管理领导小组、应急救援队伍的组织机构与职责分工",procedure:"应急处置程序、应急响应流程与应急演练安排",resource:"应急物资、应急器材设备的储备与保障措施"},l=/应急物资|急救箱|灭火器|沙袋|发电机|水泵|对讲机|应急照明|应急灯|防护服|救援绳|救生衣|铁锹|编织袋|抽水泵|警示带|应急器材/u,m=/配备|储备|保障|配置|数量|不少于|共计|套|具|个|台|把|只/u,n=["应急物资储备清单与配备数量","应急救援器材的配置与保障"],o=["应急照明灯具数量与回路设计","应急电源的电气系统设计"];async function p(a){return(0,e.A)({prototypes:[...i],negativePrototypes:[...j],embedDocuments:a})}async function q(a){return(0,e.A)({prototypes:[...n],negativePrototypes:[...o],embedDocuments:a})}async function r(a,b){let c=a.split(/\r?\n/u),e=[],i=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=>!g.test(a.title)&&h.test(a.title)),j=await p(b),n=i.length>0?await j(i.map(a=>a.title)):[],o=new Set(i.filter((a,b)=>n[b]).map(a=>a.title)),r=a=>g.test(a)||o.has(a),s=!1,t=[],u=[],v="",w=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(r(c)){s=!0,t.push(c);continue}a<=3&&s&&(s=!1);continue}if(s&&a.trim()&&!/^\s*\|/u.test(a)){u.push(a);let b=a.replace(/\s+/gu,"");v+=b,w+=b.length}}if(0===t.length)return e;let x=[];w<300&&x.push(`字数仅 ${w} 字(要求 ≥300 字)`);let y=v.match(/.{1,200}/gu)||[],z=Object.values(k),A=await (0,d.Mv)(y,z),B=a=>y.some(b=>A(b,a)>=d.Eh);B(k.organization)||x.push("应急组织体系"),B(k.procedure)||x.push("应急处置程序/演练");let C=await q(b),D=u.join("。").split(/[。;;]/u).map(a=>a.trim()).filter(a=>l.test(a)&&m.test(a)),E=D.length>0?await C(D):[];return B(k.resource)||E.some(Boolean)||x.push("应急物资保障"),x.length>0&&e.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`应急预案小节深度不足:${t.join("、")}(缺少:${x.join("、")})`,suggestion:"补写应急组织体系(领导小组/抢险队与职责)、应急处置程序与演练安排、应急物资清单与保障措施,达到可落地深度。",sectionTitle:t[0],provenance:{detectorId:"emergency-section-depth",fingerprint:(0,f.c6)(a)}}),e}},21312:(a,b,c)=>{c.r(b),c.d(b,{BLOCK_KNOWLEDGE_BUDGET_CHARS:()=>g,acceptanceLine:()=>i,buildBlockKnowledgePack:()=>k,selectBlockCards:()=>j,unresolvedCardIds:()=>l});var d=c(22496),e=c(67680),f=c(13424);let g=2e3;function h(a){return"string"==typeof a?a:a.phrase}function i(a){if("detector"===a.kind)return a.ids.length>0?`判据 ${a.ids.join("、")}`:void 0;if("threshold"===a.kind){let b=f.n3[a.id],c=b?.label??a.id,d=b?.unit??"";return`阈值 ${c} ${a.value}${d}`}return a.items.length>0?`人工核对 ${a.items.slice(0,3).join(";")}`:void 0}function j(a,b,c=3){let e=b.replace(/\s+/gu,"");return a.map((a,b)=>{let c=(0,d.VY)(a);return c?{id:a,index:b,score:[c.name,...c.aliases||[]].filter(Boolean).reduce((a,b)=>{let c=String(b).replace(/\s+/gu,"");return c.length<2?a:e.includes(c)?Math.max(a,c.length):a},0)}:{id:a,index:b,score:0}}).filter(a=>a.score>0).sort((a,b)=>b.score-a.score||a.index-b.index).slice(0,c).map(a=>a.id)}function k(a){let b=a.budgetChars??g,c=(0,e.mG)(a.chapterTitle,a.sections,a.projectType,a.skills);if(0===c.length)return{text:"",hits:[],truncated:!1,dropped:[]};let f=[],k=[],l=new Set,m=0,n=!1;for(let g of c){let c=j(g.knowledge.filter(a=>"processCard"===a.kind).flatMap(a=>a.ids??[]),a.blockText),o=g.forbidden.map(h).filter(Boolean),p=g.acceptance.map(i).filter(a=>!!a);if(0===c.length&&0===o.length&&0===p.length)continue;let q=[`【领域规则\xb7${g.id}】以下为本工程类型的行业做法与验收口径(**写作先验,不是本项目的资料事实**;按本项目实际做法取用,禁止当资料原文引用,禁止编造本项目没有的参数数值)`],r=0;for(let a of c){let c=(0,d.VY)(a);if(!c)continue;let e=`▸ ${c.name}(工序链):${c.process.join(" → ")}`;for(let[a,d]of(q.push(e),r+=e.length,[["工艺参数",c.params],["检测验收",c.acceptance]]))for(let c of d){let d=` \xb7 ${a}:${c}`;if(m+r+d.length>b){n=!0,l.add(`${a}条目`);continue}q.push(d),r+=d.length}q.push(" \xb7 规范依据:按现行国家、行业标准及项目资料明确的规范版本执行"),r+=30}o.length>0&&q.push(`✗ 本工程类型**禁写**(工艺不匹配):${o.join("、")}`),p.length>0&&q.push(`✓ 验收口径:${p.join(";")}`);let s=q.join("\n");if(m+s.length>b){n=!0,l.add(`${g.id} 整包`);continue}m+=s.length,k.push(s),f.push({skillId:g.id,matchedBy:function(a,b,c,d){let f=(0,e.mJ)(a,b,c,d),g=[`章域 ${a.match.chapterDomain}`];return f.matchedKeywords.length>0&&g.push(`小节关键词 ${f.matchedKeywords.join("、")}`),f.regexHit&&g.push("正则命中"),g.push(`工程类型 ${d}`),g.join(" \xd7 ")}(g,a.chapterTitle,a.sections,a.projectType),cards:c,forbiddenCount:o.length,acceptanceCount:p.length,injectedChars:s.length})}return{text:k.join("\n\n"),hits:f,truncated:n,dropped:[...l]}}function l(a){let b=new Set;for(let c of a)for(let a of c.knowledge)if("processCard"===a.kind)for(let c of a.ids??[])(0,d.VY)(c)||b.add(c);return[...b]}},21702:(a,b,c)=>{c.d(b,{Cd:()=>l,Im:()=>r,J5:()=>i,KM:()=>y,SA:()=>n,Zw:()=>t,gj:()=>q,hY:()=>u,jk:()=>w,lN:()=>p,mY:()=>z,mv:()=>o,o9:()=>x,oM:()=>m,zw:()=>s});var d=c(78217),e=c(35547),f=c(40299),g=c(23760),h=c(52922);let i=1.5,j=/\d+(?:\.\d+)?\s*(?:m²|㎡|平方米|m³|m3|立方米|km|mm|cm|m|kg|t|吨|层|栋|日历天|天|%|台|套|根|处|个|kV|kW|MPa|kN|℃|次|遍|道|户|座|米|小时|min|分钟)/giu;function k(a){return new Set(a.match(j)||[]).size}function l(a){let b=(0,d.V7)(a),c=k(a),e=b>0?Math.ceil(b/1e3*i):0,f=b>0?Math.round(c/b*1e5)/100:0;return{chars:b,params:c,per1000:f,required:e,gap:b>0&&c<e}}function m(a,b){let c=l(a),d=k(b);return{verdict:c,materialParams:d,blocking:c.gap&&d>=c.required}}async function n(a){let b=(0,h.cs)(a);if(0===b.length)return{totalSentences:0,fillerSentences:0,fillerRatio:0,vagueCount:0,fillerDetails:[]};let c=await (0,h.w7)(b),d=c.map(a=>a.filler),e=d.filter(Boolean).length;return{totalSentences:b.length,fillerSentences:e,fillerRatio:e/b.length,vagueCount:c.filter(a=>a.vague).length,fillerDetails:[...new Set(b.filter((a,b)=>d[b]))].slice(0,12)}}function o(a){return a.fillerRatio>.1||a.vagueCount>=3}function p(a){let b=(0,h.c8)(a);return{count:b.length,phrases:[...new Set(b.map(a=>a.phrase))].slice(0,8),sentences:[...new Set(b.map(a=>a.sentence))].slice(0,8),totalSentences:(0,h.cs)(a).length}}function q(a){return a.count>=1}function r(a){let b=(0,g.AC)(a,[]);return{count:b.length,details:b.map(a=>a.suggestion??a.message).slice(0,3),chars:(0,d.V7)(a)}}function s(a){return a.count>0}function t(a){let b=(0,e.w1)(a);return{count:b.length,sentences:[...new Set(b.map(a=>a.sentence))].slice(0,8),maxRepeats:b.reduce((a,b)=>Math.max(a,b.count),0)}}function u(a){return a.count>0}let v=/重难点|重点难点|难点分析|难点|工程特点|施工特点|项目特点/u;function w(a){return v.test(a)}async function x(a){let b=a.split("\n").filter(a=>!/^\s*#{1,6}\s/u.test(a)).join("\n"),c=(0,h.ge)(b);if(0===c.length)return{entries:0,bothRatio:1,missing:[]};let d=await (0,h.G5)(c);return{entries:c.length,bothRatio:d.ratio,missing:d.details.filter(a=>!a.attributed||!a.quantified).slice(0,8)}}function y(a){return a.entries>0&&a.bothRatio<.5}function z(a){return a.split("\n").map(a=>a.trim()).filter(a=>a.length>0&&f.Rg.test(a)).slice(0,5)}},22213:(a,b,c)=>{c.d(b,{Bk:()=>u,Ep:()=>t,I6:()=>x,KJ:()=>C,ab:()=>z,ap:()=>E,eB:()=>y,eK:()=>B,eL:()=>n,hL:()=>G,iA:()=>w,qj:()=>A,sh:()=>v,xu:()=>o,zJ:()=>D,zX:()=>F});var d=c(70933),e=c(1218);c(78217),c(70208);var f=c(22157),g=c(3063);function h(a){return a.replace(/^#{3,4}\s+.*\n+/u,"").trim()}function i(a,b){let c=a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),d=b.match(RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${c}\\s*\\n([\\s\\S]*?)(?=^###\\s+|^##\\s+|(?![\\s\\S]))`,"mu"));return d?d[0]:b}function j(a,b){let c=b?i(b,a):a;return/^####\s+\S+/mu.test(c)}function k(a){return(0,d.eE)(a).replace(/#{2,6}\s*[^;;。\n]+/gu,"").replace(/资料内容事实[;;::]?/gu,"").replace(/\s+/gu," ").trim()}function l(a){let b=k(a);return!(!b||b.length<4||b.length>120||/资料内容事实|#{2,6}|未尽事宜|项目编号\s*[::]?\s*[一二三四五六七八九十]?$/u.test(b)||/本项目为|总建筑面积|保留现状|专业施工内容统筹|招标文件列明|招标范围还包含|具备有效的.*资质/u.test(b)||/未注明|以图纸为准|按设计要求确定/u.test(b)&&!/\d/u.test(b))&&(!((b.match(/工程|维修|改造|安装|设备/gu)||[]).length>=4)||!!/\d|㎡|m2|m²|mm|厚|验收|检测|调试|试验|复试/u.test(b))&&/\d|㎡|m2|m²|mm|厚|工程|材料|设备|系统|范围|改造|维修|加固|消防|水电|智能化|管网|屋面|门窗|验收|检测|调试/u.test(b)}function m(a){return a.split(/→|;|;|、|,|,/u).map(a=>k(a)).filter(a=>a&&a.length>=2&&a.length<=40).filter(a=>!/^按?施工准备$|^实施$|^检查$|^验收组织?$|^按规范和资料闭环$/u.test(a)).filter(a=>!/本项目为|总建筑面积|保留现状|专业施工内容统筹|招标文件列明|招标范围|未尽事宜|具备有效/u.test(a))}function n(a){let b=[];for(let c of a){let a=c.replace(/[::,,、;;||()()]/gu," ").replace(/\s+/gu," ").trim(),d=new Set(a.split(" ").filter(a=>a.length>=2)),e=new Set([...a.match(/\d+[A-Z]{2,}[A-Za-z0-9]*/gu)||[],...a.match(/\d+(?:\.\d+)?\s*(?:台|套|个|座|㎡|m2|m²|m³|m3|kg|t|根|扇|樘|块|件|组|mm)/gu)||[]]),f=a.split(" ")[0]||"",g=b.findIndex(b=>{if(b.norm.includes(a)||a.includes(b.norm))return!0;if(!([...e].some(a=>b.models.has(a))||[...b.models].some(a=>e.has(a))))return!1;let c=(a,b)=>[...a].every(a=>b.has(a));return c(d,b.tokens)||c(b.tokens,d)||f===b.norm.split(" ")[0]});if(g>=0){let f=b[g];(d.size>f.tokens.size||d.size===f.tokens.size&&c.length<f.text.length)&&(b[g]={text:c,norm:a,tokens:d,models:e})}else b.push({text:c,norm:a,tokens:d,models:e})}return b.map(a=>a.text)}function o(a,b){let c=b.map(a=>a.replace(/[::,,、;;||()()]/gu," ").replace(/\s+/gu," ").trim()),d=/安装|敷设|浇筑|砌筑|抹灰|回填|拆除|吊装|固定|连接|试验|调试|养护|压实|铺设|焊接|绑扎|涂刷|灌浆|开挖|预制|穿线|放线|找平|清底|防水|密封/u;return a.filter(a=>{if(/\d+(?:\.\d+)?\s*(?:台|套|个|座|㎡|m2|m²|m³|m3|kg|t|根|扇|樘|块|件|组)/u.test(a)||/[A-Z]+\d+/u.test(a)&&/箱|柜|泵|机组|风机|面板/u.test(a))return!1;let b=a.replace(/[::,,、;;||()()]/gu," ").replace(/\s+/gu," ").trim();return!!(b.length<=6&&d.test(b))||(b.length<4?!c.some(a=>a.includes(b)):!c.some(a=>a.includes(b)))})}function p(a){let b=k(a);return!b||(b.match(/工程|维修|改造|安装|设备|系统|管网|屋面|门窗|消防|智能化/gu)||[]).length>=5&&!/\d|㎡|m2|m²|mm|厚|验收|检测|调试|试验|复试|记录|报告|材料|设备|规格|标准|检验批/u.test(b)}function q(a){let b=/^(.{1,18}?)(等)([\s\S]{2,})$/u.exec(a);return!b||void 0===b[1]||void 0===b[3]||/电$/u.test(b[1])||/^级/u.test(b[3])?a:b[3].length>=3?b[3]:b[1].length>=3?b[1]:a}let r=/计价|费用|税金|规费|暂列|暂估|合计|汇总|小计|措施项目|其他项目|税金项目|金额|结算管理|竣工结算/u,s=/[[\]【】]/u;function t(a,b){let c=(function(a){let b=[],c=a.match(/施工工作包结构化数据:\s*(\[[^\n]*\])/u);if(c)try{for(let a of JSON.parse(c[1])){let c=k(a.name||""),d=k(a.scope||""),e=n([...a.quantities||[],...a.materials||[],...a.methods||[]].map(k).filter(l).filter(a=>!p(a))),f=o((a.process||[]).flatMap(m),e),g=(a.acceptance||[]).map(k).filter(a=>a&&!p(a));!(!c||/项目施工$|项目$|^\d{4}年度/u.test(c))&&(!d||/资料内容事实|#{2,6}/u.test(d)||b.push({name:c,scope:d,quantities:e,process:f,acceptance:g}))}if(b.length>0)return b}catch(a){console.warn(`[gen] 结构化工作包解析失败,回退正则提取(保真度下降):${a instanceof Error?a.message:String(a)}`),b.length=0}for(let c of a.split(/\r?\n/u).filter(a=>/^\d+\.\s+.+?|范围:/u.test(a))){let a=c.match(/^\d+\.\s+(.+?)|范围:(.+?)|工程量\/材料:(.+?)|流程:(.+?)|验收:(.+)$/u);if(!a)continue;let d=k(a[1]),e=k(a[2]),f=n(a[3].split(/[;;、,,]/u).map(a=>k(a)).filter(l).filter(a=>"按证据展开"!==a)),g=o(m(a[4]),f),h=a[5].split(/[;;、,,]/u).map(a=>k(a)).filter(a=>a&&"按规范和资料闭环"!==a).filter(a=>!p(a));!(!d||/项目施工$|项目$|^\d{4}年度/u.test(d))&&(!e||/资料内容事实|#{2,6}/u.test(e)||b.push({name:d,scope:e,quantities:f,process:g,acceptance:h}))}return b.slice(0,8)})(a).map(a=>a.name).filter(Boolean),d=function(a,b){let c=[a,...b.map(a=>a.content)].filter(Boolean),d=/工程|安装|系统|通风|空调|智能化|装修|幕墙|屋面|土方|基坑|地基|基础|结构|电气|给排水|消防|防水|设备|管网|道路|景观|绿化|公厕|厕所|过路涵|涵|清淤|沟塘|塘|小菜园|菜园|排水沟|水沟|花池|树池|挡墙|护栏/u,f=(()=>{for(let a of c){let b=/(?:项目名称|工程名称)[::\s为是]+([^\n。;;]{4,120})/u.exec(a);if(!b)continue;let c=(0,e.ir)(b[1]);if(c)return c}})();for(let a of c){let b=function(a){for(let b=0;b<a.length;){let c=a.indexOf("招标范围",b);if(c<0)break;let d=a.lastIndexOf("\n",c-1)+1;if(!/^\s*[-*]?\s*(?:\*\*)?\s*\[/u.test(a.slice(d,c)))return c;b=c+4}return -1}(a);if(b<0)continue;let c=a.slice(b,b+600);if(f){let a=c.split(/[。;;\n]/u).map(a=>a.trim()).filter(Boolean).filter(a=>!(0,e.PP)(a,f));a.length>0&&(c=a.join("。"))}let g=c,h=g.indexOf("包括但不限于"),i=(g=(g=h>=0?g.slice(h+6).replace(/^[::、,,;;\s]+/u,""):g.replace(/^[^、,,;;。]{0,60}?招标范围[::]?\s*/u,"")).replace(/(?:等)?图纸[、及]?清单范围内所有工程[。.]*/u,"")).replace(/([^)]*)/gu,"").split(/[、,,;;。]/u).map(a=>k(a).replace(/["“”']/gu,"")).filter(a=>a.length>=3&&a.length<=20).filter(a=>d.test(a)).map(a=>q(a)).filter(a=>a.length>=3&&a.length<=20).filter(a=>!/招标范围|图纸|清单|补疑|答疑|具体内容|包括但不限于|投标|专用合同|未尽事宜|工程量|约束|不得|仅指导|集中交代|矛盾|参数|数字/u.test(a)).filter(a=>!/^(?:包括|涵盖|重点实施|实施|建设范围覆盖|本项目建设|主要包含|主要实施|具体包括|分别为|共计|包含|涉及)/u.test(a)).filter(a=>!/以下|以上|如下|详见|具体内容/u.test(a)).filter(a=>!/^是否/u.test(a)).filter(a=>!/及其他|以及其他/u.test(a)).filter(a=>!s.test(a)).filter(a=>!r.test(a)),j=[];for(let a of i){let b=a.replace(/\s+/gu,"");j.some(a=>a.replace(/\s+/gu,"").includes(b)||b.includes(a.replace(/\s+/gu,"")))||j.push(a)}if(j.length>=3)return j.slice(0,12)}return[]}(a,b),f=function(a){let b=(0,e.qG)(a),c=(0,e.hn)(b),d=[],f=new Set;for(let a of c){let b=a.key.replace(/^清单条目:/u,"").trim();!(!b||b.length<2||b.length>24||r.test(b)||s.test(b))&&(f.has(b)||(f.add(b),d.push(b)))}return d.slice(0,12)}(b),g=[],h=a=>{let b=q(a.trim()),c=b.replace(/\s+/gu,"");return!(!c||/^(?:包括|涵盖|重点实施|实施以下|建设范围覆盖|本项目建设|主要包含|主要实施|具体包括|分别为|共计|包含|涉及|是否)/u.test(c)||/以下|以上|如下|详见|具体内容|及其他|以及其他/u.test(c)||/^\d{4}年度/u.test(c)||/施工图|设计图|详图|平面图|剖面图|立面图|大样图|图集/u.test(c)||c.length>20||g.some(a=>{let b=a.replace(/\s+/gu,"");return b.includes(c)||c.includes(b)}))&&(g.push(b),!0)};for(let a of c)h(a);for(let a of d){if(g.length>=12)break;h(a)}let i=/公厕|厕所|过路涵|涵洞|涵管|污水|排水沟|水沟|清淤|沟塘|塘|小菜园|菜园|菜地|花池|树池|挡墙|护栏|路灯|检查井|化粪池|泵站|生态池|生态塘|护坡|驳岸|栈道|步道/u;if(g.length<3)for(let a of[...f].sort((a,b)=>Number(i.test(b))-Number(i.test(a)))){if(g.length>=12)break;h(a)}else for(let a of f){if(g.length>=16)break;i.test(a)&&h(a)}return g}function u(a,b,c=3,d){let e=d??t(a,b);if(e.length<c)return"";let f=e.map((a,b)=>`#### ${b+1} ${a}`).join("\n");return[`【小节骨架锁定】本节内部结构已由系统锁定,必须且只能按以下 ${e.length} 个工作包小节标题逐项展开(标题一字不差,不得增删改、合并或调序):`,f,"每个工作包小节必须覆盖三方面要素:作业对象与工程量、工序顺序、施工方法(三要素缺一不可),融入连贯段落叙述;禁止以“施工概况/施工流程/施工方法/工艺流程”等结构标签充当 H4 小节标题或段落开头引导。\n要素写法:作业对象与工程量(作业对象与部位、工程量或规模、材料设备规格型号,数量类数值优先取工程量清单数据);工序顺序(先后顺序清晰,相邻小节不得同句式开头,同一句式全文不得反复使用,禁止以固定句模复读);施工方法(工艺做法、工艺参数(数值+单位)、验收检测与记录闭环)。\n融合叙述要求(**只描述形式,不给范例**):三要素必须写成连贯段落——先交代作业对象与范围(部位/单体 + 工程量或规格),再按施工先后把工序串起来叙述,每个工序夹带对应的工艺参数(数值+单位)与验收检测做法;不得分条罗列成要素清单,不得先写「作业对象:」「施工方法:」式标签再补内容。\n数值来源优先级:工程量、材料规格、设备型号等数量类数值优先取工程量清单数据;清单未覆盖的参数(标高、坡率、构造做法等)才取图纸数据;禁止“按设计图纸执行”“详见设计图纸”“按设计文件确定”式概括话术——必须落到具体数值或具体规范条文。\n本节禁止出现 Markdown 表格;禁止写入重难点识别表、关键施工节点控制计划表等属于其他小节的内容;禁止只写综合概述而不展开工作包。"].join("\n")}function v(a,b,c=3){let d=t(a,b);return d.length>=c?d:[]}function w(a,b,c=3){let d=a.filter(a=>b.some(b=>{let c=(0,f.Sw)(b),d=(0,f.Sw)(a);return c.includes(d)||d.includes(c)}));return d.length>=c?d:[]}function x(a){let b=a.split(/\r?\n/u),c=[],d=!1;for(let a of b){let b=a.trim();if(/^\|.+\|\s*$/u.test(b)){d=!0;continue}if(d){if(""===b)continue;d=!1}c.push(a)}return c.join("\n")}function y(a,b,c=[]){let d=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${d}\\s*$`,"u"),g=a.split("\n"),h=g.findIndex(a=>e.test(a.trim()));if(h<0)return a;let i=/^####\s+/u.test(g[h].trim()),j=c.map(f.Sw),k=[g[h]];for(let a=h+1;a<g.length;a+=1){let b=g[a].trim();if(/^#{2,3}\s+/u.test(b))break;if(/^####\s+/u.test(b)&&i){let a=b.replace(/^####\s+(?:\d+(?:\.\d+)*\s+)?/u,""),c=(0,f.Sw)(a);if(!j.some(a=>c.includes(a)||a.includes(c)))break}k.push(g[a])}let l=k.join("\n"),m=x(l);return m===l?a:a.replace(l,m)}function z(a,b,c){let d=i(b,a),e=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");if(!RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${e}\\s*$`,"u").test(d.split("\n")[0]?.trim()||""))return[];let g=(d.match(/^#{3,4}\s+(.+)$/gmu)||[]).map(a=>a.replace(/^#{3,4}\s+/u,""));return c.filter(a=>!g.some(b=>(0,f.Sw)(b).includes((0,f.Sw)(a))))}function A(a,b,c){let d=i(b,a),e=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");if(!RegExp(`^#{3,4}\\s+(?:\\d+(?:\\.\\d+)*\\s+)?${e}\\s*$`,"u").test(d.split("\n")[0]?.trim()||""))return a;let g=d.split(/^####\s+/gmu),h=g.shift()||"",j=[];for(let a of g){let b=a.split("\n"),d=(b[0]||"").trim(),e=(0,f.Sw)(d),g=b.slice(1).join("\n").replace(/^#{1,6}\s+.+$/gmu,"").trim();c.some(a=>e.includes((0,f.Sw)(a)))&&g.length<80||j.push(a)}let k=`${h}${j.length>0?"#### ":""}${j.join("#### ")}`;return k===d?a:a.replace(d,k)}function B(a,b){if(/项目主要施工内容/u.test(a)){var c;let d=i(a,b);if(!j(b,a))return`${a} 缺少施工工作包三级小节`;if(!function(a){let b=h(a);return((b.match(/^####\s+(?:\d+\.\d+\.\d+\s+)?[一二三四五六七八九十\d]*[、..]?\s*\S+/gmu)||[]).length||(b.match(/^[一二三四五六七八九十]+、\S+/gmu)||[]).length)>=3&&(0,f.az)(b)}(d))return`${a} 未按施工工作包展开`;let e=d.split(/^####\s+/gmu).slice(1).map(a=>a.trim()).filter(Boolean);if(e.some(a=>!(0,f.az)(a)))return`${a} 存在工作包内容要素不全`;if(c=h(d),/资料内容事实|(?:^#{2,3}|^#{5,6})\s+|\*\*[^*]+\*\*|未尽事宜|专业施工内容统筹|招标范围还包含|具备有效的.*资质|安全生产考核合格证书|注册建造师|联合体投标|项目经理要求|投标人资格|投标人资质|营业执照|安全生产许可证|资格审查|资格后审|中标通知书|签订合同|电子交易系统|投标保证金|评标办法|踏勘现场|投标预备会/mu.test(c))return`${a} 存在脏事实或标题污染`;if(e.some(a=>/施工流程[::][\s\S]*?(未尽事宜|本项目为|总建筑面积|保留现状|专业施工内容统筹|招标文件列明|招标范围|安全生产考核合格证书|联合体投标|注册建造师)/u.test(a)))return`${a} 存在工作包流程污染`;if(!(0,f.Z1)(d)||e.some(a=>{let b=a.match(/施工方法[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"",c=a.match(/(?:施工流程|工艺流程)[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"";return(b.trim().length>0||c.trim().length>0)&&!(0,f.Z1)(b+c)}))return`${a} 存在工作包工序顺序表达缺失`;if(e.some(a=>{let b=a.match(/施工方法[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"";if(!/施工方法[::]/u.test(a))return!1;if(/安全生产考核合格证书|联合体投标|注册建造师|投标人资格|资质要求|营业执照|安全生产许可证/u.test(b)||b.length<30)return!0;let c=(b.match(/[::]\s*\d/gu)||[]).length;return/\d/u.test(b)&&!/→|采用|组织|浇筑|铺设|焊接|绑扎|砌筑|抹灰|涂刷|敷设|压实|养护|试验|调试|测量|放线|验收|检测|复试|记录|报告|吊装|灌注|埋设|嵌缝/u.test(b)&&(c>=2||!/安装|固定|挂墙|机具/u.test(b))||(b.match(/工程|维修|改造|安装|设备/gu)||[]).length>=4&&!/\d|㎡|m2|m²|mm|厚|验收|检测|调试|试验|复试|记录|报告/u.test(b)}))return`${a} 存在工作包施工方法过弱`;let g=h(d);if(/^\s*\|.+\|\s*$/mu.test(g))return`${a} 不应使用 Markdown 表格替代工作包正文`}if(g.gG.test(a)){let c=i(a,b);if(!j(b,a))return`${a} 缺少分项工程方案三级小节`;let d=c.split(/^####\s+/gmu).slice(1).map(a=>a.trim()).filter(Boolean);if(0===d.length)return`${a} 未按分项工程方案展开`;if(d.some(a=>!(0,f.az)(a)))return`${a} 存在分项方案内容要素不全`;if(!(0,f.Z1)(c)||d.some(a=>{let b=a.match(/施工方法[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"",c=a.match(/(?:施工流程|工艺流程)[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"";return(b.trim().length>0||c.trim().length>0)&&!(0,f.Z1)(b+c)}))return`${a} 存在分项方案工序顺序表达缺失`}return""}function C(a,b){let c=b;for(let b of a){if(/项目主要施工内容/u.test(b))continue;let a=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");c=c.replace(RegExp(`(^###\\s+(?:\\d+\\.\\d+\\s+)?${a}\\s*\\n)([\\s\\S]*?)(?=^###\\s+|^##\\s+|$)`,"gmu"),(a,c,d)=>{if(/^####\s+\S+/mu.test(d))return`${c}${d}`;let e=c.replace(/^#{1,6}[\s]*/,"").replace(/^\d+(?:\.\d+)*[\s]*/,"").trim();return(0,f.Sw)(e)===(0,f.Sw)(b)?`${c}
135
135
  ${d.trim()}
136
136
  `:`${c}
137
137
  #### ${b}
@@ -195,7 +195,7 @@ ${b.trim()}
195
195
  |]{0,18}(${as})`,"gu"))){let a=Number(c[1]);a>=100&&b.push(`“${c[2]}”厚度 ${a}mm`)}let c=[...new Set(b)].slice(0,3);return 0===c.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`装饰层工艺参数异常:${c.join("、")} 远超工艺常规厚度(抹面/打底/找平 20mm、坐浆 20~30mm)`,suggestion:"装饰层(抹面/打底/找平/坐浆/结合层)厚度按工艺常规取值:抹面打底找平 20mm、坐浆 20~30mm,与结构层厚度(墙体/垫层/回填)区分,不得串用。"}]}function au(a){let b=[],c=[...a.matchAll(/高峰期总人数(\d+)人|劳动力总人数(\d+)人|总人数(\d+)人/gu)].map(a=>Number(a[1]||a[2]||a[3])).filter(a=>a>0),d=[...a.matchAll(/高峰(?:期)?人数(\d+)人|峰值(?:需求|人数)?[为约]?(\d+)人/gu)].map(a=>Number(a[1]||a[2])).filter(a=>a>0),e=[...new Set(c)],f=[...new Set(d)];e.filter(a=>f.some(b=>b!==a)).length>0&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`劳动力峰值口径矛盾:正文「总人数」出现 ${e.join("人、")}人 与「高峰人数」出现 ${f.join("人、")}人 并存,峰值人数必须唯一`,suggestion:"全文劳动力峰值只允许一个口径:统一总人数与高峰人数为同一数值,删除矛盾口径;分阶段梯次投入人数(准备阶段/主体阶段/竣工阶段)属合法动态配置,不在统一范围内。"});let g=new Map;for(let b of(0,i.Rm)(a)){if(!b.hasTradeCol||0===b.tradeCells.length)continue;let a=new Map;for(let c of b.tradeCells){let b=a.get(c.trade)??0;c.value>b&&a.set(c.trade,c.value)}for(let[b,c]of a){let a=g.get(b)??[];a.push(c),g.set(b,a)}}let h=[...g.entries()].filter(([,a])=>a.length>=2&&new Set(a).size>=2);return h.length>0&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`同工种跨表高峰人数矛盾:${h.map(([a,b])=>`${a} ${b.join("人、")}人`).join(";")} 各表并存,同一工种高峰人数必须唯一`,suggestion:"同一工种在各表中的高峰人数必须一致:以工种配置表(第五章)为权威口径统一各表数值;分阶段投入计划表内同工种不同阶段的动态配置属合法数据,不参与统一。"}),b}function av(a){let b=function(a){let b=[];for(let c of a.matchAll(/(?:生活用水|施工用水|临时用水|用水)[^。;;\n]{0,24}(?:高峰(?:期)?人数|高峰人数)[^。;;\n]{0,8}?([\d,]+)\s*人/gu)){let a=Number(c[1].replace(/[,,]/gu,""));Number.isFinite(a)&&a>0&&b.push(a)}return b}(a);if(0===b.length)return[];let c=[];for(let b of a.matchAll(/高峰(?:期)?人数([\d,]+)人|峰值(?:需求|人数)?[为约]?([\d,]+)人|劳动力峰值[^。;;\n]{0,8}?([\d,]+)\s*人/gu)){let d=Number((b[1]||b[2]||b[3]||"").replace(/[,,]/gu,""));if(!Number.isFinite(d)||d<=0)continue;let e=(b.index??0)+b[0].indexOf(b[1]||b[2]||b[3]||""),f=a.slice(Math.max(0,e-24),e);!/生活用水|施工用水|临时用水|用水/u.test(f)&&((0,i.rx)(a,e)||c.push(d))}let d=[...new Set(c)];if(0===d.length)return[];let e=[...new Set(b)];return 0===e.filter(a=>d.every(b=>b!==a)).length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`用水高峰人数与劳动力峰值不一致:临时用水按高峰人数 ${e.join("人、")}人 计算,而劳动力峰值为 ${d.join("人、")}人,两处引用必须为同一数值`,suggestion:"临时用水高峰人数与劳动力峰值为同一批施工人员的两个引用口径:统一改为劳动力峰值人数,删除自编的用水人数口径。"}]}let aw=/不再另行(?:出现|统计|编制|设置|单列|重复)[^。;;\u000A]{0,40}|以[^。;;\u000A]{0,16}为唯一[^。;;\u000A]{0,24}不再[^。;;\u000A]{0,20}|不再另行[^。;;\u000A]{0,24}(?:口径|基准|表述|数值|数据|统计)/gu;function ax(a){let b=[...a.matchAll(aw)].map(a=>a[0].trim().slice(0,30));return 0===b.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文存在元话语声明句 ${b.length} 处(${[...new Set(b)].slice(0,3).join("、")}):声明≠数据,正文只保留数据不保留口径声明`,suggestion:"删除「不再另行出现其他口径」「不再另行统计累计投入人次」「以 X 为唯一控制基准,不再…」类自我声明句;数据本身的唯一性由数值一致体现,不需要文字声明。"}]}let ay=/(?:[Pp]\s*=\s*[^。;;\n]{0,60}(?:Σ|cosφ|[Kk][12])|[qQ]\s*=\s*[^。;;\n]{0,40}|Σ\s*P|cos\s*φ|[Kk][12]\s*[×*]\s*Σ|[Kk][12]\s*Σ\s*P)/gu;function az(a){let b=[...a.matchAll(ay)].map(a=>a[0].trim().slice(0,30));return 0===b.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`正文出现公式形态残留 ${b.length} 处(${[...new Set(b)].slice(0,3).join("、")}):正文只允许计算值不允许计算公式`,suggestion:"删除公式符号(P =、Σ、cosφ、K1、q =),只保留计算结果值:如「用电负荷约 48kW」「高峰日生活用水量约 X m\xb3」;公式推导过程一律不进入正文。"}]}let aA=/暂列金额|暂估价|报价明细|综合单价|清单合价|预留金|投标报价|异常低价|评标基准价/u,aB=/(?:税率|增值税)[^。;;\n]{0,12}\d/u,aC=/合同估算价|合同估算价格|投资估算|估算价格|工程估算价|最高投标限价|招标控制价/u,aD=/材料价格|商务报价|投标总价|合同总价|工程总价/u,aE=["暂列金额与暂估价的报价明细","综合单价与清单合价的商务数据","投标报价与费率标准的商务条款"],aF=["合同估算价与投资估算的项目信息","最高投标限价与招标控制价的公开信息","商务数据不得写入施工组织设计正文的约束说明"];async function aG(a){return(0,g.A)({prototypes:[...aE],negativePrototypes:[...aF],embedDocuments:a})}async function aH(a,b){let c=[],d=await aG(b),e=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();if(!(/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a))&&(aA.test(b)||aB.test(b)||aD.test(b)))for(let a of(aB.test(b)&&c.push("税率/增值税"),b.split(/(?<=[。;;])\s*/u))){let b=a.match(aA)||[],d=aC.test(a),f=aD.test(a);!(b.length>0)||d||f?(b.length>0&&(d||f)||f&&0===b.length)&&e.push(a):c.push(...b)}}if(e.length>0){let a=await d(e);e.forEach((b,d)=>{if(!a[d])return;let e=b.match(aA)||[],f=b.match(aD)||[];c.push(...e.length>0?e:f)})}let f=[...new Set(c)].slice(0,4);return 0===f.length?[]:[{level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`正文出现商务条款数据:${f.join("、")}`,suggestion:"商务数据(暂列金额/暂估价/综合单价/税率等)不得写入施组正文:删除该句,商务口径仅保留在项目信息表中;技术内容如需保留,改写为不含商务参数的正式技术表述。"}]}let aI=[{key:"excavation",label:"基坑支护及土方外运",re:/基坑支护/u},{key:"zero",label:"地下结构出正负零",re:/正负零|地下室结构/u},{key:"topping",label:"主体结构封顶",re:/主体(?:结构)?封顶/u},{key:"decoration",label:"装饰装修及幕墙",re:/装饰装修/u},{key:"mep",label:"机电安装及智能化调试",re:/机电安装/u},{key:"completion",label:"室外工程及竣工验收",re:/竣工验收/u}];function aJ(a){let b=[],c=(a,c,d)=>{let e=(a=>{let b="封顶"===a?"主体结构封顶":a;return aI.find(a=>a.re.test(b))?.key})(a);void 0!==e&&Number.isFinite(c)&&c>=1&&c<=3e3&&b.push({key:e,day:c,raw:d})};for(let b of a.matchAll(/第(\d{2,3})日[^。;;\n]{0,14}?完成[^。;;\n,、]{0,12}?(基坑支护及土方外运|装饰装修及幕墙|机电安装及智能化调试|室外工程及竣工验收|地下结构出正负零|主体结构封顶|正负零|封顶)/gu))c(b[2],Number(b[1]),b[0].slice(0,40));for(let b of a.matchAll(/(基坑支护|正负零|封顶|装饰装修|机电安装|竣工验收)(?:(?!(?:第\d{2,3}[日天]|,|、)).){0,8}?完成[^。;;\n]{0,10}?第(\d{2,3})[日天]/gu))c(b[1],Number(b[2]),b[0].slice(0,40));for(let b of a.matchAll(/(主体(?:结构)?封顶)(?!后)(?:(?!(?:第\d{2,3}[日天]|,|、|完成|\||[。;;\n])).){0,20}?第(\d{2,3})日/gu))c(b[1],Number(b[2]),b[0].slice(0,40));for(let b of aI){let d=RegExp(`^\\s*\\|\\s*[^|]*${b.re.source}[^|]*\\s*\\|\\s*开工(?:令下发)?后第(\\d{2,3})日\\s*\\|`,"gum");for(let b of a.matchAll(d))c(b[0],Number(b[1]),b[0].slice(0,40))}let d=new Set;return b.filter(a=>{let b=`${a.key}:${a.raw}`;return!d.has(b)&&(d.add(b),!0)})}function aK(a){let b=[],c=new Map;for(let b of aJ(a)){let a=c.get(b.key)||[];a.push(b),c.set(b.key,a)}for(let a of aI){let d=c.get(a.key);if(!d||d.length<2)continue;let e=[...new Set(d.map(a=>a.day))];if(e.length<2)continue;let f=[...new Set(d.map(a=>a.raw))].slice(0,4).join("、");b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`节点工期口径矛盾:“${a.label}”节点出现 ${e.map(a=>`${a}日`).join(" 与 ")} 两套口径:${f}`,suggestion:`关键节点完成时间必须全文唯一:以总进度计划表为准统一“${a.label}”节点日期,删除正文/其他表中矛盾的“第N日”表述。`})}return b}let aL=[{key:"xps",label:"挤塑聚苯板(XPS)厚度",unit:"mm",kind:"number",patterns:[/(?:挤塑聚苯|XPS)(?:(?!(?:宽度|拼缝|不大于|不超过|小于|≤|采用|使用|选用|铺设|粘贴|半径|倒角|圆弧|弧度)).){0,40}?(\d+(?:\.\d+)?)\s*mm/gu,/(\d+(?:\.\d+)?)\s*mm[^。;;\n|]{0,10}?(?:挤塑聚苯|XPS)/gu]},{key:"cushion",label:"垫层混凝土强度等级",unit:"C标号",kind:"code",patterns:[/(?<!混凝土)垫层(?![一-龥]{1,4}[、,,])[^。;;\n|]{0,20}?(C\d{2})/gu]},{key:"transformer",label:"箱式变压器容量",unit:"kVA",kind:"number",patterns:[/(\d+)\s*kVA[^。;;\n|]{0,12}?变压器/gu,/变压器[^。;;\n|]{0,12}?(\d+)\s*kVA/gu]},{key:"formwork",label:"模板周转次数",unit:"次",kind:"number",patterns:[/模板周转(?:次数|使用)?[^。;;\n|]{0,15}?(\d+)\s*次/gu]},{key:"block",label:"蒸压加气混凝土砌块强度等级",unit:"A标号",kind:"code",patterns:[/(?:蒸压加气混凝土|加气混凝土)?砌块[^。;;\n|]{0,24}?(?<![A-Za-z])(A\d+(?:\.\d+)?)/gu]},{key:"extinguisher",label:"干粉灭火器数量",unit:"具",kind:"number",patterns:[/灭火器[^。;;\n]{0,24}?(\d+)\s*具/gu]},{key:"pump",label:"潜水泵(提升泵)数量",unit:"台",kind:"number",patterns:[/(?:潜水泵|提升泵)[^。;;\n]{0,24}?(\d+)\s*台/gu]},{key:"firstaid",label:"急救箱数量",unit:"套/个",kind:"number",patterns:[/急救箱[^。;;\n|]{0,24}?(\d+)\s*(?:套|个)/gu]},{key:"scheduleDays",label:"计划总工期",unit:"日历天",kind:"number",patterns:[/^\s*\|\s*计划工期\s*\|\s*(\d{1,4})\s*个?\s*日历天\s*\|/gum,/(?:计划工期|合同工期|工期总日历天数|工期控制|工期目标|总工期)[^。;;\n|]{0,12}?(\d{1,4})\s*个?\s*日历天/gu,/(\d{1,4})\s*个?\s*日历天[^。;;\n|]{0,8}?(?:总工期|倒排|分解|为唯一|完成)/gu]},{key:"prefabRatio",label:"装配率",unit:"%",kind:"number",patterns:[/装配率[^。;;\n|]{0,14}?(\d+(?:\.\d+)?)\s*%/gu,/装配率[^。;;\n|]{0,44}?计算为(\d+(?:\.\d+)?)\s*%/gu,/(\d+(?:\.\d+)?)\s*%(?:(?![,,。;;\n|]).){0,10}?装配率/gu]},{key:"projectCode",label:"项目编号",unit:"",kind:"code",patterns:[/(?:招标项目编号|项目编号)[^。;;\n|]{0,8}?(20\d{2}[A-Z]{1,8}\d{2,10})/gu]},{key:"towerCrane",label:"塔式起重机(塔吊)数量",unit:"台",kind:"number",patterns:[/(?:塔式起重机|塔吊)[^。;;\n|、,]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:塔式起重机|塔吊)/gu]},{key:"hoist",label:"施工升降机(施工电梯)数量",unit:"台",kind:"number",patterns:[/(?:施工升降机|施工电梯)[^。;;\n|、,]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:施工升降机|施工电梯)/gu]},{key:"truckCrane",label:"汽车起重机(汽车吊)数量",unit:"台",kind:"number",patterns:[/(?:汽车起重机|汽车吊)[^。;;\n|、,]{0,30}?(\d+)\s*台/gu,/(\d+)\s*台[A-Za-z0-9/\-–—~~]{0,16}\s{0,2}(?:汽车起重机|汽车吊)/gu]},{key:"rebarCutter",label:"钢筋切断机数量",unit:"台",kind:"number",patterns:[/钢筋切断机[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"rebarBender",label:"钢筋弯曲机数量",unit:"台",kind:"number",patterns:[/钢筋弯曲机[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"slackDays",label:"机动工期(工序衔接与验收缓冲)",unit:"天",kind:"number",patterns:[/(?:机动工期|缓冲)[^。;;\n|]{0,16}?(\d{1,3})\s*天/gu,/预留[^。;;\n|]{0,8}?(\d{1,3})\s*天[^。;;\n|]{0,10}?(?:机动|缓冲)/gu]},{key:"villageCount",label:"自然村数量",unit:"个自然村",kind:"number",patterns:[/(\d+)\s*个[^,。;、\s\n]{0,8}?自然村(?!分组|施工组)/gu]},{key:"circularSaw",label:"圆盘锯数量",unit:"台",kind:"number",patterns:[/圆盘锯[^。;;\n|]{0,24}?(\d+)\s*台/gu]},{key:"excavator",label:"挖掘机数量",unit:"台",kind:"number",patterns:[/(?:履带式)?挖掘机[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?(?:履带式)?挖掘机/gu]},{key:"dumpTruck",label:"自卸汽车数量",unit:"台/辆",kind:"number",patterns:[/自卸汽车[^。;;\n、,]{0,40}?(\d+)\s*(?:台|辆)/gu,/(\d+)\s*(?:台|辆)[^、,。;\n|]{0,12}?自卸汽车/gu]},{key:"roller",label:"压路机数量",unit:"台",kind:"number",patterns:[/(?:振动)?压路机[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?(?:振动)?压路机/gu]},{key:"rammer",label:"蛙式打夯机数量",unit:"台",kind:"number",patterns:[/蛙式打夯机[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?蛙式打夯机/gu]},{key:"mixerTruck",label:"混凝土搅拌运输车数量",unit:"台",kind:"number",patterns:[/混凝土搅拌运输车[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?混凝土搅拌运输车/gu]},{key:"concreteMixer",label:"混凝土搅拌机数量",unit:"台",kind:"number",patterns:[/混凝土搅拌机[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?混凝土搅拌机/gu]},{key:"sprinkler",label:"洒水车数量",unit:"台/辆",kind:"number",patterns:[/洒水车[^。;;\n、,]{0,40}?(\d+)\s*(?:台|辆)/gu,/(\d+)\s*(?:台|辆)[^、,。;\n|]{0,12}?洒水车/gu]},{key:"aerialLift",label:"高空作业车数量",unit:"台",kind:"number",patterns:[/高空作业车[^。;;\n、,]{0,40}?(\d+)\s*台/gu,/(\d+)\s*台[^、,。;\n|]{0,12}?高空作业车/gu]},{key:"pondBackfill",label:"沟塘回填方量",unit:"m\xb3",kind:"number",patterns:[/(?:沟塘|水塘|池塘|河塘|鱼塘|塘内|渠道|淤泥|流砂|清淤)[^。;;\n|]{0,30}?回填方(?:总量)?[^。;;\n|]{0,16}?(\d+(?:\.\d+)?)\s*m[3³]/gu,/(?:沟塘|水塘|池塘|河塘|鱼塘|塘内|渠道|淤泥|流砂|清淤)[^;;\n|]{0,30}?回填方总量[^。;;\n|]{0,16}?(\d+(?:\.\d+)?)\s*m[3³]/gu,/回填方(?:总量)?[^。;;\n|]{0,16}?(\d+(?:\.\d+)?)\s*m[3³][^。;;\n|]{0,30}?(?:沟塘|水塘|池塘|河塘|鱼塘|塘内|渠道|淤泥|流砂|清淤)/gu]},{key:"trenchClearing",label:"沟槽槽底人工清底预留厚度",unit:"mm",kind:"number",patterns:[/槽底预留(\d+)mm人工清底/gu]},{key:"houseExcavation",label:"距房屋人工开挖保护距离",unit:"m",kind:"number",patterns:[/距房屋(\d+(?:\.\d+)?)m(?:内|范围内)[^。;;\n|]{0,10}?人工开挖/gu]}],aM={pump:/潜水泵|提升泵/u,towerCrane:/塔式起重机|塔吊/u,hoist:/施工升降机|施工电梯/u,truckCrane:/汽车起重机|汽车吊/u,rebarCutter:/钢筋切断机/u,rebarBender:/钢筋弯曲机/u,circularSaw:/圆盘锯/u,excavator:/挖掘机/u,dumpTruck:/自卸汽车|自卸车/u,roller:/压路机/u,rammer:/蛙式打夯机|打夯机/u,mixerTruck:/混凝土搅拌运输车|搅拌车/u,concreteMixer:/混凝土搅拌机/u,sprinkler:/洒水车/u,aerialLift:/高空作业车/u,extinguisher:/灭火器/u,firstaid:/急救箱/u};function aN(a,b){let c=(0,i.Dq)(b);if(void 0===c)return[];let d=new Set;for(let b of a.matchAll(/养护[^。;;\n|]{0,16}?([一二两三四五六七八九十]+|\d{1,2})\s*年/gu)){let c=a.lastIndexOf("\n",b.index)+1,e=a.indexOf("\n",b.index);if(-1===e&&(e=a.length),aQ.test(a.slice(c,e)))continue;let f=(0,i.a0)(b[1]??"");void 0!==f&&f>0&&d.add(f)}if(0===d.size)return[];let e=[...d].filter(a=>a!==c);return 0===e.length?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`绿化养护期清单红线:正文出现养护期 ${e.map(a=>`${a}年`).join("、")},与工程量清单锁定口径「养护 ${c} 年」矛盾`,suggestion:`绿化养护期必须与工程量清单一致(清单锁定「养护 ${c} 年」):将正文所有养护期表述统一为 ${c} 年并删除矛盾口径;养护期属清单实质性条款,不得以常规值替代。`}]}function aO(a,b){let c=(0,i.Mb)(b);if(void 0===c)return[];let d=[];for(let b of a.matchAll(/路灯[^。;;\n|]{0,28}?(\d+)\s*(?:套|盏|杆)/gu)){if(/批/u.test(b[0]))continue;let c=a.lastIndexOf("\n",b.index)+1,e=a.indexOf("\n",b.index);if(-1===e&&(e=a.length),aQ.test(a.slice(c,e)))continue;let f=Number(b[1]);Number.isFinite(f)&&f>0&&d.push(f)}if(0===d.length)return[];let e=d.length>=2?d.reduce((a,b)=>a+b,0):d[0]??0;return e===c?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`路灯数量口径矛盾:正文路灯配置合计约 ${e} 套,与工程量清单锁定口径 ${c} 套不一致(相差 ${Math.round(Math.abs(e-c)/c*100)}%)`,suggestion:`路灯数量必须以工程量清单为准(清单锁定 ${c} 套):按清单核定各型号路灯数量并统一正文全部表述,删除与清单矛盾的套数口径。`}]}let aP=/\d+(?:\.\d+)?\s*(?:mm|kVA|次|具|台|套|个)\s*[//]\s*\d+/u,aQ=/不再出现|不得出现|严禁出现|避免出现|不采用|未采用|予以删除|已删除|取消|纠正为|更正为/u,aR=/再浇筑|再浇|后浇筑|后浇|然后浇筑|然后再浇|上层|上部|面层浇筑|其上浇筑|浇筑完成后再/u,aS=/分层厚度|分层浇筑|分层振捣|焊缝高度|焊缝厚度|焊脚尺寸|锚固深度|保护层厚度|搭接长度|锚固长度|预留|踏步高度|踏步宽度|踏步高|踏步宽|台阶高度|台阶宽度|内厚|外厚|抹面|抹灰|粉刷|垫高|架空|离地|支垫/u,aT=/分别为|分别对应|分别用于|分别按|依次为|依次/u,aU="女儿墙|外墙|内墙|隔墙|地梁|圈梁|构造柱|过梁|垫层|承台|筏板|底板|基础|主体|梁|柱|墙|楼板|屋面|地面|楼面|顶板|楼梯|阳台|雨篷|台阶|散水|坡道|找坡|找平|保护层|防水层|保温层|隔汽层|地坪|办公区|生活区|库房|加工区|堆放区|驻地|周转场|停放区|仓库|材料库|路基|沟槽|基槽|基坑|路槽",aV=/每[台辆架套部][一-龥A-Za-z0-9]{1,8}/gu,aW=/项目部|总协调|工人生活|施工办公|办公|生活|临时|总部|标段|片区/u;function aX(a,b,c){let d=b.slice(Math.max(0,c-8),c),e=d.match(aW);if(e&&void 0!==e.index){let b=d.slice((e.index??0)+e[0].length);if(/^[的施工区域现场]{0,3}$/u.test(b))return`${e[0]}${a}`}let f=b.slice(Math.max(0,c-6),c),g=RegExp(`(${aU})$`,"u").exec(f);return g&&!aY.test(g[1])?`${g[1]}${a}`:a}let aY=/^(?:主体|结构|工程|项目|整体|全|本|该)$/u,aZ=/(?:\d{1,2}\s*[#号]?\s*(?:厂房|门卫|楼|栋|座|馆|站|中心|车间|仓库|宿舍|综合楼)|[A-Z]\s*[#号]?\s*(?:楼|栋|座|厂房|馆))/gu;function a$(a,b,c,d){let e=a.indexOf("\n",b),f=a.slice(d,-1===e?a.length:e);if(/^\s*\|/u.test(f)&&/\|\s*$/u.test(f.trim())){let a=f.replace(/[\u4e00-\u9fa5]{2,6}阶段/gu,""),b=[...a.matchAll(RegExp(aU,"gu"))],c=b[b.length-1];return c?aX(c[0],a,c.index??0):""}let g=Math.max(d,b-16),h=a.slice(g,b),i=Math.max(h.lastIndexOf(","),h.lastIndexOf("、"),h.lastIndexOf(","),h.lastIndexOf(";"),h.lastIndexOf(";"),h.lastIndexOf("。")),j=a.slice(i>=0?g+i+1:g,b+c.length),k=[...a.slice(Math.max(d,b-40),b).matchAll(aZ)],l=k[k.length-1];if(l)return l[0].replace(/\s+/gu,"");let m=j.replace(/[\u4e00-\u9fa5]{2,6}阶段/gu,""),n=[...m.matchAll(aV)];if(n.length>0)return n[n.length-1]?.[0]??"";let o=[...m.matchAll(RegExp(aU,"gu"))],p=o[o.length-1];return p?aX(p[0],m,p.index??0):""}function a_(a,b,c){let d=Math.max(a.lastIndexOf(",",b),a.lastIndexOf(",",b),a.lastIndexOf("。",b),a.lastIndexOf(";",b),a.lastIndexOf(";",b),a.lastIndexOf("\n",b),a.lastIndexOf("|",b))+1,e=a.slice(d,b+c.length);return/每[^,,。;;\n|]{0,16}(?:对应|配备|配置|配套|编组|配)[^,,。;;\n|]{0,10}\d+\s*[台辆][^,,。;;\n|]{0,6}$/u.test(e)}let a0=/共用[^。;;\n]{0,10}|不(?:再)?单独(?:增配|新增|购置|添置|配置)|不另行(?:增配|新增|购置)|轮换使用|周转使用|交叉使用/u,a1=/设备配置表|机械设备配置|设备需用计划|机械设备表|施工机械设备|设备一览/u,a2=/进场时间|进场日期|需用时间|计划进场|使用时间/u;function a3(a){let b=[];for(let c of aL){let d=new Map,e=new Map,f=new Map,g="pump"===c.key&&/潜水泵/u.test(a)&&/提升泵/u.test(a);for(let b of c.patterns)for(let h of a.matchAll(b)){let b=h[0].slice(0,40);if(void 0!==h[1]){let a=aM[c.key],d=a?a.exec(b):null,e=b.indexOf(h[1]);if(d&&e>=0&&d.index>e){let a=b.slice(e+String(h[1]).length,d.index);if(/^\s*(?:台|辆|套|个|座|m|mm|天)?\s*[与和及、,,]{1,2}\s*$/u.test(a))continue}}if(/(?:循环使用|轮换使用|交替使用|分组使用)/u.test(a.slice(h.index||0,(h.index||0)+b.length+30))&&/(?:作业面|区段|分段|片区|分区|工区)/u.test(a.slice(Math.max(0,(h.index||0)-20),h.index||0)))continue;if("trenchClearing"===c.key){let c=Math.max(a.lastIndexOf("。",h.index),a.lastIndexOf(";",h.index),a.lastIndexOf("\n",h.index))+1;if(/基槽|围栏|菜园/u.test(a.slice(c,(h.index||0)+b.length)))continue}if(aP.test(b))continue;{let c=void 0!==h[1]?b.indexOf(String(h[1])):-1;if(c>=0){let b=(h.index||0)+c;if(/半径|倒角|圆弧|弧度/u.test(a.slice(Math.max(0,b-6),b)))continue}}if(aR.test(b))continue;if("scheduleDays"===c.key){let c=b.indexOf(String(h[1]));if(c>=0&&/(?:阶段|第\d+日|至第|共|集中)/u.test(a.slice(Math.max(0,(h.index||0)+c-16),(h.index||0)+c)))continue;let d=Math.max(a.lastIndexOf("。",h.index),a.lastIndexOf(";",h.index),a.lastIndexOf("\n",h.index))+1,e=a.indexOf("。",(h.index||0)+b.length),f=a.slice(d,-1===e?a.length:e);if(/合理期限|书面技术要求|审核认可|响应闭环|答复期限|反馈期限|技术澄清/u.test(f))continue}if(/按不少于|不少于/u.test(b)||/[中内](?:调配|取用|挪用|借用|调用|划拨)|(?:从|由)[^。;;\n]{0,20}?[中内](?:调配|取用|挪用|借用|调用|划拨)/u.test(b)||/增配|增补|追加|补足|另配|增设/u.test(b))continue;if("villageCount"===c.key){let c=a.slice((h.index||0)+b.length,(h.index||0)+b.length+12);if(/分组|施工组|网格|责任区|单元|片区|班组|包保|作业面|施工点|施工段/u.test(c))continue}if(a_(a,h.index||0,b))continue;let i=a.lastIndexOf("\n",h.index)+1,j=a.indexOf("\n",h.index);if(-1===j&&(j=a.length),aQ.test(a.slice(i,j))||/(?:变更|澄清|修改|调整|更正|修正)(?:为|至|如下|后)/u.test(a.slice(Math.max(0,(h.index||0)-20),h.index||0))||function(a,b,c){let d=a.indexOf("\n",b),e=-1===d?a.length:d,f=a.slice(c,e);if(!/^\s*\|/u.test(f)||!/\|\s*$/u.test(f.trim()))return!1;let g=a=>{for(let b of a)if(!/^\s*\|/u.test(b)&&b.trim()&&!/^\s*\*{0,2}表\s*[\d一二三四五六七八九十]+\s*[-–—][\d.]+/u.test(b)){if(/^#{1,6}\s/u.test(b))return!1;return a0.test(b)}return!1},h=Math.max(0,c-1200),i=a.slice(h,c).split("\n");return i.pop(),!!g(i.reverse())||g(a.slice(e+1,e+1+1200).split("\n"))}(a,h.index||0,i)||"number"===c.kind&&function(a,b,c){let d=a.indexOf("\n",b),e=-1===d?a.length:d,f=a.slice(c,e);if(!/^\s*\|/u.test(f)||!/\|\s*$/u.test(f.trim()))return!1;let g=Math.max(0,c-1200),h=a.slice(g,c).split("\n");h.pop();let i=!1,j=null;for(let a of h.reverse()){if(/^\s*\|/u.test(a)){j=a;continue}if(a.trim()){i=a1.test(a);break}}return!!i&&null!==j&&a2.test(j)}(a,h.index||0,i))continue;let k=a$(a,h.index||0,b,i);if(k&&"code"===c.kind&&function(a,b,c,d){let e=c.lastIndexOf(d);if(e<0)return!1;let f=bc(a,b+e);return!!f&&(!!bd.test(f)||!ba.test(f)&&!a9.test(f))}(a,h.index||0,b,k))continue;let l=g&&k?`${b.match(/潜水泵|提升泵/u)?.[0]??""}|${k}`:k,m=d.get(l)||new Set;m.add(h[1]),d.set(l,m);let n=e.get(l)||[];n.push(b),e.set(l,n);let o=Math.max(a.lastIndexOf("。",h.index||0),a.lastIndexOf(";",h.index||0),a.lastIndexOf(";",h.index||0),a.lastIndexOf("\n",h.index||0))+1,p=f.get(l)||new Set;p.add(o),f.set(l,p)}for(let a of[...d.keys()].filter(a=>""===a||a.endsWith("|"))){let b=d.get(a);if(!b||0===b.size)continue;let c=[...d.keys()].filter(b=>b!==a&&b.startsWith(a)&&!b.slice(a.length).includes("|"));if(1!==c.length)continue;let f=c[0]||"",g=d.get(f);if(!g)continue;for(let a of b)g.add(a);let h=e.get(f)||[];h.push(...e.get(a)||[]),e.set(f,h),d.delete(a),e.delete(a)}for(let a of[...d.keys()]){if(""===a||a.includes("|"))continue;let b=d.get(a);if(!b||0===b.size)continue;let c=[...d.keys()].filter(b=>b!==a&&b.length>a.length&&b.endsWith(a));if(1!==c.length)continue;let g=c[0],h=f.get(a),i=f.get(g);if(h&&i&&[...h].some(a=>i.has(a)))continue;let j=d.get(g);if(j){for(let a of b)j.add(a);e.set(g,[...e.get(g)||[],...e.get(a)||[]]),d.delete(a),e.delete(a)}}for(let[a,f]of d){if(f.size<2)continue;let d=a.includes("|")?a.slice(a.indexOf("|")+1):a,g=e.get(a)||[];if("code"===c.kind)b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料参数口径矛盾:“${c.label}”${d?`在部位「${d}」`:"在未标注部位语境下"}出现 ${[...f].map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(g)].slice(0,3).join("、")}`,suggestion:`同一材料同一部位只允许一个口径:以设计图纸/工程量清单为准统一“${c.label}”${d?`在部位「${d}」的取值`:""},删除矛盾表述;不同部位允许不同规格,不得全文归一为一种。`});else{let a=[...f].map(Number).filter(Number.isFinite);if(a.length<2)continue;b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`材料/设备数量口径矛盾:“${c.label}”${d?`在部位「${d}」`:"在未标注部位语境下"}出现 ${a.map(a=>`${a}${c.unit}`).join(" 与 ")} 两套口径:${[...new Set(g)].slice(0,3).join("、")}`,suggestion:`同一设备/材料同一部位只允许一个口径:以应急物资清单/施工部署为准统一“${c.label}”${d?`在部位「${d}」的取值`:""},删除矛盾表述;总量与分区配置属不同口径,不得互相归一。`})}}}return b}function a4(a){return/^C\d{2,3}$/.test(a)?/(?<![A-Za-z0-9])C\d{2,3}(?!\d)/u:/^M\d/.test(a)?/M\d+(?:\.\d+)?/u:/^P\d{1,2}$/.test(a)?/(?<![A-Za-z])P\d{1,2}/u:/^A\d+(?:\.\d+)?$/.test(a)?/A\d+(?:\.\d+)?/u:/^B\d+(?:\.\d+)?$/.test(a)?/B\d+(?:\.\d+)?/u:/^HRB/.test(a)||/^HPB/.test(a)?/HRB\d{3,4}|HPB\d{3}/u:/mm$/.test(a)?/\d+(?:\.\d+)?\s*mm/u:null}function a5(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}let a6=/^(?:采用|选用|使用|本工程|其中|以及|详见|按|为|的|该|各|所有|其他|喷涂|喷刷|涂刷|施工|设计|用|为)$/u,a7=/(?:采用|选用|使用|应用|为|用)([一-龥]{2,6})$/u;function a8(a){let b=(a7.exec(a)?.[1]||a).replace(/^(?:本工程|其中|以及|详见|按|为|的|该|各|所有|其他|喷涂|喷刷|涂刷|施工|设计|中|的)+/u,"");return b.length<2||b.length>6||a6.test(b)?"":b}let a9=/(?:型|系列|级别|等级|型号|牌号|级|类|种)$/u,ba=RegExp(`(?:${aU}|${k.fc})$`,"u"),bb=RegExp(`^(?:${k.fc})$`,"u");function bc(a,b){return/([一-龥]{1,8})$/u.exec(a.slice(Math.max(0,b-8),b))?.[1]||""}let bd=/(?:办公区|生活区|加工区|堆放区|停放区|周转场|驻地|仓库|材料库|库房|工区|作业区|场区)$/u,be=/^\d+(?:\.\d+)?\s*mm$/u;function bf(a,b,c=8){let d=[],e=0,f=0;if(!b)return d;let g=[...new Set(Object.values(b).flat().map(a=>a.location).filter(Boolean))],h=new Map;for(let a of Object.values(b).flat())a.location&&h.set(a.location,(h.get(a.location)||0)+1);for(let i of Object.values(b)){if(i.length<2)continue;let b=new Set;for(let j of i){let{location:m,spec:n}=j;if(!m||!n||m.length<2)continue;let o=a4(n);if(!o)continue;let p=`${m}|${o.source}`;if(b.has(p))continue;b.add(p);let q=i.find(a=>a.location===m&&a4(a.spec))?.location??m,r=new Set(i.filter(a=>a.location===m).map(a=>{let b=a4(a.spec);if(b&&b.source===o.source)return a.spec;let c=RegExp(`^(?:${o.source})`,"u").exec(a.spec);return c?c[0]:null}).filter(a=>null!==a).filter(a=>(0,l.Zg)(a))),s=RegExp(`${a5(m)}[^。;;
196
196
  |]{0,40}?(${o.source})`,"gu");for(let b of a.matchAll(s)){let j=b[1]||"";if(aR.test(b[0])||aS.test(b[0])||aT.test(b[0]))continue;let n=a.slice(Math.max(0,(b.index||0)-40),b.index||0);if(aT.test(n))continue;let p=a.slice((b.index||0)+b[0].length,(b.index||0)+b[0].length+10);if(/范围内|范围/u.test(p)||/(?:工作宽度|作业宽度|操作空间|工作面)/u.test(p)||/^、\s*\d/u.test(p)||/^\s*[²³]/u.test(p)||/(?:底|顶|设计|垫层|基础)?标高[^,。;;\n|]{0,8}?(?:以上|以下)/u.test(b[0])||/^\s*厚(?:\s*[\d::]|覆膜|木|胶合)/u.test(p)||RegExp(`^(?:或|[、,,/])\\s*(?:${o.source})`,"u").test(p))continue;let s=a.slice(Math.max(0,b.index||0),(b.index||0)+b[0].length);if(/(?:标高|高程|平整度|轴线|垂直度|高差)[^。;;\n|]{0,10}(?:偏差|误差|不超过|不得大于|不大于)/u.test(s.slice(-28))||/(?:偏差|误差|公差|缝隙|接缝|拼缝|高差|顺直度|垂直度|平整度|轴线|标高|高程)[^。;;\n|]{0,16}(?:不超过|不得大于|不大于|控制在|±|≤)/u.test(s.slice(-36)))continue;let t=b[0].slice(0,b[0].indexOf(j));if(/(?:间距|中心距|净距|排距|间隔)[^。;;\n|,,、]{0,8}$/u.test(t))continue;let u=b[0].indexOf(j);if(u>m.length&&/(?:涵头|面层|基层|垫层|管基|基础|梁|板|柱|墙|地坪|路面)/u.test(b[0].slice(m.length,u)))continue;let v=b.index||0,w=(b,c)=>!(b.length<=m.length)&&("suffix"===c?b.endsWith(m)&&a.slice(v+m.length-b.length,v+m.length)===b:b.startsWith(m)&&a.slice(v,v+b.length)===b),x=g.find(a=>w(a,"suffix"))??g.find(a=>w(a,"prefix"));if(x){let a=new Set(i.filter(a=>a.location===x&&a4(a.spec)?.source===o.source).map(a=>a.spec));if(a.has(j)||a.size>0)continue}if(r.has(j)||!(0,l.Zg)(j))continue;let y=1===r.size?[...r][0]:void 0,z=void 0===y?function(a,b,c,d,e){if(d.size<2)return;let f=a8(/([一-龥]{1,12})$/u.exec(a.slice(Math.max(0,c-12),c))?.[1]||"");if(!f)return;let g=RegExp(`([一-龥]{1,12})${a5(b)}[^。;;\\n|]{0,24}?(${e.source})`,"gu"),h=new Set;for(let b of a.matchAll(g))a8(b[1]||"")===f&&d.has(b[2]||"")&&h.add(b[2]||"");return 1===h.size?[...h][0]:void 0}(a,m,b.index||0,r,o):void 0,A=y??z,B=v+u;if("other-class"===function(a,b,c,d){let e=bc(a,b);return e?d.some(a=>a.length>c.length&&a===`${e}${c}`)?"same-class":bd.test(e)?"other-class":ba.test(e)||a9.test(e)?"same-class":"other-class":"bare"}(a,v,m,g))continue;let C=a.slice(Math.max(0,B-24),B+j.length+16),D=/([^。;;,、|\n]*)$/u.exec(a.slice(0,B))?.[1]||"",E=(0,l.W_)(`${D}${j}`,j),F=!!(E&&E.includes(m)),G=A?function(a,b){if(!be.test(a.trim())||!be.test(b.trim()))return;let c=(0,k.Bk)(a),d=(0,k.Bk)(b);if(void 0===c||void 0===d)return;let e=Math.max(c,d)/Math.min(c,d);return e>k.do?e:void 0}(j,A):void 0,H=bb.test(m)&&(h.get(m)||0)>=2,I=!H&&!!A&&(!!z||F)&&void 0===G,J=(0,k.Rd)({authorityOwner:A?q:void 0,bodyLocation:m,bodyWindow:C,found:j,authority:A||""}),K=I&&J.allowed?A:void 0;if(!I&&f>=c)continue;I?e+=1:f+=1;let L=[...r].join("/");if(d.push({issue:I?{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规格错位:“${m}”使用的规格 ${j} 与工程量清单权威(${L})不一致`,suggestion:`按工程量清单将“${m}”的规格统一为 ${L};同一材料不同部位允许不同规格,但同一部位不得混用其他部位的规格。`}:{level:"warning",severity:"warning",category:"fact_consistency",owner:"system",repairability:"not_repair_needed",message:`规格错位:“${m}”使用的规格 ${j} 与工程量清单权威(${L})不一致`,suggestion:`按工程量清单将“${m}”的规格统一为 ${L};同一材料不同部位允许不同规格,但同一部位不得混用其他部位的规格。(本条已降级为告警:${H?`清单条目名“${m}”为裸通用部位词、映射内同名条目并列 ${h.get(m)} 条,各自的对象只写在清单项目特征里(规格映射未保留),机器无法判定正文该处指哪一条`:void 0===G?`正文该处未能绑定到清单条目的具体对象${void 0===y?"或权威本身逐项多值无唯一口径":""}`:`正文该处尺寸与清单权威跨量级(${j} vs ${A},${G.toFixed(1)} 倍),不是同一属性维度的量(如板材厚度 vs 构件高度/长度)`},不作机器改写,交人工复核)`},location:m,replacement:K?{start:B,end:B+j.length,replacement:K,detail:`规格错位“${m}” ${j}→${K}(以工程量清单锁定口径为准)`}:void 0}),e>=c)return d}}}return d}function bg(a,b){return bf(a,b).map(a=>a.issue)}let bh=/桩基|灌注桩|钻孔桩|打桩|成桩|桩机/u;function bi(a){let b=function(a){let b=[];for(let c of[...a.matchAll(/^#{3,4}\s+[^\n]*(?:地基与基础)[^\n]*$/gmu)]){let d=(c.index||0)+c[0].length,e=a.slice(d).search(/^#{2,4}\s+/mu),f=a.slice(d,e>=0?d+e:a.length);b.push(f)}return b}(a);if(0===b.length||b.some(a=>bh.test(a)))return[];let c=[];for(let b of a.split(/\r?\n/u)){let a=b.trim();!(!a||/^#{1,6}\s/u.test(a))&&bh.test(b)&&c.push(a.slice(0,48))}let d=[...new Set(c)].slice(0,5);return d.length<2?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`桩基表述残留:地基与基础章节施工流程为筏板/独立基础(无桩基工序),但全文另有 ${d.length} 处桩基表述:${d.join("、")}`,suggestion:"本项目基础形式不含桩基:删除全文所有桩基/桩机表述,进度计划表关键线路工序、质量验收划分表、隐蔽验收表均改为本项目实际基础工序(垫层/底板钢筋/混凝土)。"}]}let bj=/^\s*\|\s*计划工期\s*\|([^|\n]*)\|/u,bk=/工期延误|延误|违约|切除|赔偿|罚款|解除|扣减/u;function bl(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=bj.exec(c);if(!a)continue;let d=(a[1]??"").trim();d&&bk.test(d)&&b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`基本信息表「计划工期」字段错填违约条款文字:“${d.slice(0,40)}”`,suggestion:"「计划工期」字段应填日历天数值(与招标文件前附表一致);工期延误违约条款文字应放在工期风险管控章节,不得占用基本信息表字段。"})}return b}let bm=/基础|支护|围护|桩|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|标高|深度|形式|体系/u,bn=/^(?:焊接|螺栓连接|铆接|法兰连接|承插连接|卡箍连接|粘接|卡压连接|卡扣连接|螺纹连接|高强螺栓连接)(?:固定|安装|连接|紧固)?$/u,bo=/(?:焊接|螺栓连接|铆接|法兰连接|承插连接|卡箍连接|粘接|卡压连接|卡扣连接|螺纹连接|高强螺栓连接)$/u;function bp(a){let b=a.replace(/\s+/gu,""),c=new Set,d=[];{let b=a.split(/\n/u);for(let a=0;a+1<b.length;a+=1){let c=b[a]??"";if(/^\s*\|/u.test(c)&&/^\s*\|[\s:|-]+\|\s*$/u.test((b[a+1]??"").trim()))for(let a of c.split("|")){let b=a.replace(/\s+/gu,"");b.length>=2&&d.push(b)}}}let e=a=>d.some(b=>b.includes(a));for(let a of b.matchAll(/([一-龥]{2,8})\/([一-龥]{2,8})/gu)){let d=bm.test(a[1])||bm.test(a[2]),f=(0,j.m4)(a[1],a[2]);if(!d&&!f||e(a[0]))continue;let g=Math.max(0,(a.index||0)-12),h=Math.min(b.length,(a.index||0)+a[0].length+12),i=b.slice(g,h);!/管线|管道|电缆|给水|排水/u.test(i)&&(!/采用|形式|方式|方案|选用|拟用|拟采用|为/u.test(i)&&(!f||/不得|禁止|不应|不宜|避免|严禁|无需/u.test(i))||c.add(`“${a[1]}/${a[2]}”`))}for(let a of b.matchAll(/[((]\s*或[^))]{1,48}[))]/gu)){let d=a[0].slice(1,-1);if(!/按图纸|按实|按图|待定|另行|视[^,。;]{0,8}而定|根据实际/u.test(d))continue;let e=Math.max(0,(a.index||0)-20),f=b.slice(e,(a.index||0)+a[0].length);bm.test(f)&&c.add(a[0].slice(0,30))}for(let a of b.matchAll(/([一-龥]{2,8})或([一-龥]{2,8})/gu)){let d=bm.test(a[1])||bm.test(a[2]),f=(0,j.m4)(a[1],a[2]);if(!d&&!f||/(?:可能)?(?:达到|超过|大于|小于|高于|低于|不少于|不超过)或(?:达到|超过|大于|小于|高于|低于|不少于|不超过)/u.test(a[0]))continue;let g=b.slice(0,(a.index||0)+a[1].length).split(/[。;,,、]/u).pop()||"";if(/造成|导致|引发|致使|诱发|酿成/u.test(g)||e(a[1])||e(a[2]))continue;let h=Math.max(0,(a.index||0)-12),i=b.slice(h,(a.index||0)+a[1].length);if(/管线|管道|电缆|给水|排水/u.test(i)||!/按|采用|选用|拟用|拟采用|方案|为/u.test(i)&&(!f||/不得|禁止|不应|不宜|避免|严禁|无需/u.test(i)))continue;let k=b.slice(Math.max(0,(a.index||0)-6),a.index||0);if(/临时/u.test(k+a[0])&&/支护|围护|放坡|坡率|开挖/u.test(a[0])||/围挡|警示|防护栏|爬梯|栈桥|便道/u.test(a[0]))continue;let l=b.slice(Math.max(0,(a.index||0)-30),(a.index||0)+a[0].length+12);if(/临时|临建|可拆卸|可周转|撤场/u.test(l)&&/集装箱|活动房|板房|棚房|岗亭|彩钢/u.test(a[1]+a[2])||/顺接|衔接|接顺|接入|连通|找坡|找平/u.test(a[2]))continue;let m=b.slice((a.index||0)+a[0].length,(a.index||0)+a[0].length+6);if(/^(?:顺接|衔接|接顺|接入|连通|找坡|找平)/u.test(m)||/(?:前|后)$/u.test(a[0])||/^(?:之前|之后|前|后)/u.test(m))continue;{let c=Math.max(0,(a.index||0)-8),d=Math.min(b.length,(a.index||0)+a[0].length+8);if(b.slice(c,d).includes("→"))continue}let n=a[1]+a[2];if(/(?:强度不足|固定不牢|松动|变形|开裂|渗漏|破损|脱落|锈蚀|超差|不合格|缺陷|损坏|缺失|偏差|偏移|沉降|位移|错台|起皮|空鼓)/u.test(n)){let c=b.slice((a.index||0)+a[0].length,(a.index||0)+a[0].length+40);if(/返工|返修|整改|修复|加固|更换|补强|补做|处理|消除|纠正|复验|复查|销项|验收/u.test(c))continue}if(bo.test(a[1])&&bn.test(a[2]))continue;let o=a[1].replace(/^.*?(地下连续墙|钢板桩|灌注桩|支护桩|土钉墙|基础|支护|围护|结构|开挖|放坡|喷锚|排桩|连续墙|土钉|锚杆|形式|体系)/u,"$1");c.add(`${o}或${a[2]}`)}return 0===c.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`关键设计决策两可表述:${[...c].join("、")} 以并列/悬置形态表述,基础形式、支护形式等关键决策必须在正文中唯一确定`,suggestion:"以设计图纸/勘察报告/工程量清单为准锁定唯一决策并删除两可表述:明确写出本项目基础形式与支护形式的具体做法(如「基础形式为筏板基础」「基坑支护采用放坡+喷锚」),禁止「或…按图纸实施」类悬置话术。"}]}function bq(a){let b=a.replace(/\s+/gu,"");if((b.match(/基坑|开挖|支护/gu)||[]).length<3)return[];let c=(()=>{let b=a.split(/\r?\n/u),c=[],d=!1;for(let a of b){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(b){b[1].length<=3&&(d=/基坑|开挖|支护|土方/u.test(b[2])),d&&c.push(a);continue}d&&c.push(a)}return c.join("\n")})();for(let a of(c?c.replace(/\s+/gu,""):b).matchAll(/(?:深度|标高)[^。;,,]{0,12}-?\d+(?:\.\d+)?[^。;,,]{0,6}/gu)){let b=a[0];if(!/(?:超过|大于|小于|不[大低小]于|不低于|低于|高于|按|倍|依据|详见|参考|示意|每|以上|以下|偏差|±0|0\.000)/u.test(b)&&!/\d+(?:\.\d+)?\s*(?:h|小时|天|日|min|周|月|昼夜)/u.test(b))return[]}return[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:"基坑深度数值未锁定:正文已有基坑支护/开挖成稿内容,但全文未出现「深度/标高+数值」的确定性表述(比较式阈值如「超过3m」不视为锁定),危大工程分级判定失去依据",suggestion:"从绑定资料(地质勘察报告/基坑支护设计图/基础平面图)锁定基坑开挖深度数值写入基坑支护小节;深度 ≥5m 的深基坑须同步标注危大工程分级与专家论证要求,禁止以「按图纸确定」回避深度数值。"}]}function br(a,b){let c=(0,i.z4)(b);if(void 0===c||c<3)return[];let d=[],e=a5(String(c)),f=RegExp(`(?<![\\d.])${e}(?![\\d])`,"u"),g=a.replace(/\s+/gu,""),h=a=>{for(let b of g.matchAll(RegExp(a,"gu"))){let a=b.index??0,c=g.slice(Math.max(0,a-120),a+b[0].length+120);if(f.test(c))return!0}return!1};return c>=3&&!h("危大工程")&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`危大工程判定缺失:资料基坑开挖深度 ${c}m(≥3m),正文未在判定结论邻近处给出本工程实际深度值(仅出现判定规则套话不算落地)`,suggestion:`依据住建部令第37号,开挖深度≥3m 属危大工程:在基坑支护/危大工程清单小节写明本工程实际深度 ${c}m 与危大工程判定结论,不得只写判定规则不落地本项目。`}),c>=5&&!h("超过一定规模")&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`超危大工程判定缺失:资料基坑开挖深度 ${c}m(≥5m),正文未在「超过一定规模」判定邻近处给出本工程实际深度值(须同时写明专家论证要求)`,suggestion:`开挖深度≥5m 属超过一定规模的危大工程:写明本工程深度 ${c}m 对应分级结论,专项施工方案必须经专家论证,不得只写判定规则不落地分级。`}),d}let bs=["土钉墙","土钉","放坡","喷锚","挂网喷浆","排桩","钻孔灌注桩","灌注桩","支护桩","咬合桩","冠梁","地下连续墙","内支撑","锚杆","锚索","护坡"],bt=["挂网喷浆"];function bu(a){return a.filter(b=>!a.some(a=>a!==b&&a.includes(b)))}function bv(a,b){var c;let d=[b.canonical?.byKey.foundation_support_form?.value,...(b.drawings||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.project||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.preciseFacts||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.bills||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.resources||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.safety||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.quality||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.billItemFacts||[]).map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...Object.values(b.schemaFacts||{}).flat().map(a=>`${a.fieldName||a.key||""} ${(0,e.lG)(a.value)}`),...(b.tables||[]).map(a=>(a.rows||[]).map(a=>a.join(" ")).join("\n"))].filter(Boolean),f=d.filter(a=>/基坑支护形式|基坑支护方式|支护形式|支护方式|土钉|放坡|喷锚|护坡/u.test(a)&&!/监测|监测频次|闭环|基坑开挖深度/u.test(a));if(0===f.length)return[];let g=(c=f.join("\n"),bu(bs.filter(a=>c.includes(a)))),h=d.join("\n"),i=[],j=/不采用|未采用|不设置|未设置|不使用|不宜采用|不得采用|不再出现|不得出现|严禁出现|避免出现|已删除|取消/u,k=bu(bs.filter(a=>!bt.includes(a)).filter(b=>!h.includes(b)&&(b=>{let c=RegExp(b,"gu");for(let b of a.matchAll(c)){let c=a.lastIndexOf("\n",b.index)+1,d=a.indexOf("\n",b.index);-1===d&&(d=a.length);let e=a.slice(c,d).slice(Math.max(0,b.index-c-12),b.index-c);if(!j.test(e))return!0}return!1})(b)));return k.length>0&&i.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`支护形式与资料矛盾:正文出现资料中不存在的支护体系词 ${k.join("、")}`,suggestion:`资料基坑支护形式为「${g.join("、")||f[0]?.slice(0,60)}」:删除编造的支护桩/冠梁/灌注桩类表述与对应参数(垂直度偏差/冠梁顶面标高等),按资料支护形式改写。`}),0===g.filter(b=>RegExp(b,"u").test(a)).length&&/基坑|支护/u.test(a)&&i.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`支护形式未落地:资料基坑支护形式「${g.join("、")||f[0]?.slice(0,60)}」未在正文中出现`,suggestion:`在基坑支护小节写明本工程实际支护形式(${g.join("、")})及对应工艺参数(土钉长度/间距/坡度等),不得以泛化表述回避。`}),i}let bw=["塔式起重机","施工升降机","施工电梯","汽车起重机","汽车吊","混凝土泵车","混凝土泵","挖掘机","装载机","推土机","压路机","平地机","空压机","注浆机","锚杆钻机","混凝土喷射机","喷射机","吊篮","钢筋加工设备","塔吊"],bx=/挖掘机|空压机|注浆机|锚杆钻机|混凝土喷射机|喷射机|推土机/u;function by(a,b){let c={late:[],inverted:[]},d=function(a){let b=[];for(let c of a.matchAll(/第(\d{2,3})日[^。;;\n|]{0,8}?(?:进场|投入使用|安装|调试)/gu)){let d=c.index||0,e=a.slice(Math.max(0,d-24),d),f=bw.find(a=>e.includes(a));f&&b.push({equipment:f,day:Number(c[1]),raw:`${e.slice(-18)}${c[0].slice(0,20)}`,start:d,end:d+c[1].length+2})}let c=new Set;return b.filter(a=>{let b=`${a.equipment}:${a.raw}`;return!c.has(b)&&(c.add(b),!0)})}(a);if(0===d.length)return c;let f=function(a,b){for(let c of[a,...(b.schedule||[]).map(a=>`${a.key||""}${(0,e.lG)(a.value)}`)]){let a=/(?:计划工期|合同工期|总工期|工期总日历天数)[^\d。;;\n|]{0,12}(\d{1,4})\s*个?\s*日历天/u.exec(c);if(a){let b=Number(a[1]);if(Number.isFinite(b)&&b>=30&&b<=3e3)return b}}}(a,b);void 0!==f&&(c.total=f,c.late=d.filter(a=>a.day>=f));let g=aJ(a).filter(a=>"excavation"===a.key).map(a=>a.day);if(g.length>0){let a=Math.min(...g);c.pitDone=a,c.inverted=d.filter(b=>bx.test(b.equipment)&&b.day>a)}return c}function bz(a,b){let c=by(a,b),d=[];return void 0!==c.total&&c.late.length>0&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备进场时间荒谬:${c.late.slice(0,3).map(a=>`「${a.equipment} 第${a.day}日进场」`).join("、")} 已达/超过总工期(${c.total}日历天),工程结束时设备尚未进场`,suggestion:`以总进度计划为准核对设备进场计划:大型施工设备必须在总工期结束前进场并完成使用,${c.late.map(a=>a.equipment).join("、")} 的进场日应提前至工程开始阶段,删除矛盾的尾期进场表述。`}),void 0!==c.pitDone&&c.inverted.length>0&&d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`设备进场工序倒挂:${c.inverted.slice(0,3).map(a=>`「${a.equipment} 第${a.day}日进场」`).join("、")} 晚于基坑支护及土方外运完成节点(第${c.pitDone}日),基坑阶段设备未在工序开始前进场`,suggestion:`基坑阶段专用设备必须在基坑开挖/支护开始前完成进场与报验:将 ${c.inverted.map(a=>a.equipment).join("、")} 的进场日调整为早于基坑支护完成节点(第${c.pitDone}日)的日期,删除工序倒挂表述。`}),d}let bA=/关于|定于|对于|至于|由于|基于|鉴于|处于|位于|在于|置于|用于|属于|终于|便于|善于|现在|正在|存在|所在|潜在|实在$/u;function bB(a,b){let c=a,d=[];for(let a=1;a<=3;a+=1){let a=by(c,b),e=new Map;for(let b of[...a.late,...a.inverted])e.set(`${b.start}:${b.end}`,b);if(0===e.size)break;let f=0,g=1/0;for(let a of[...e.values()].sort((a,b)=>b.start-a.start)){let b=a.start,e=c[b-1];if("于"!==e&&"在"!==e||bA.test(c.slice(Math.max(0,b-2),b))||(b-=1),a.end>g)continue;let h=c.slice(b,a.end);c=c.slice(0,b)+"按进度计划"+c.slice(a.end),g=b,f+=1,d.push(`「${h}」→「按进度计划」`)}if(0===f)break}return{markdown:c,fixedCount:d.length,details:d}}let bC=/[\u4e00-\u9fa5]{2,10}(?:杯|奖)(?![励金惩罚项])/gu,bD=/优质工程|文明工地|样板|标准化|观摩|示范|精品工程|结构优质|省优|市优/u;function bE(a){let b=a;for(;;){let a=b.replace(/^(?:争创|争取|力争|争获|确保|获得|创建|力创|评为|荣获|标为|目标为|承诺|为)/u,"");if(a===b||!a)break;b=a}return b}let bF=/^\s*\|[\s:|-]+\|/u;function bG(a){let b=a.split(/\r?\n/u),c=[],d=a=>a.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.trim()),e=a=>bF.test(a),f=0;for(;f<b.length;){let a;if(!/^\s*\|/u.test(b[f])){f+=1;continue}let g=f;for(;g<b.length&&/^\s*\|/u.test(b[g]);)g+=1;let h=b.slice(f,g),i=0,j=0,k=0,l=b=>{if(!a)return;let e=h.slice(j,b);0!==e.length&&c.push({startLine:f+i,endLine:f+b-1,header:a,firstCol:e.map(a=>d(a)[0]?.replace(/[*_`]/gu,"").trim()||"").filter(Boolean),dataRows:e.map(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())),dataCells:e.flatMap(a=>d(a).map(a=>a.replace(/[*_`]/gu,"").trim())).filter(Boolean),bodyChars:e.join("").length,raw:h.slice(i,b)})};for(;k<h.length;){if(k+1<h.length&&e(h[k+1]||"")){l(k),a=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()),i=k,j=k+2,k+=2;continue}if(a&&k>j){let b=d(h[k]).map(a=>a.replace(/[*_`]/gu,"").trim()).filter(Boolean);if(bH(b,a)>=.6&&k+1<h.length&&!e(h[k+1]||"")){l(k),a=b,i=k,j=k+1,k+=1;continue}}k+=1}l(h.length),f=g}return c}function bH(a,b){if(0===a.length||0===b.length)return 0;let c=new Set(a),d=new Set(b);return[...c].filter(a=>d.has(a)).length/new Set([...c,...d]).size}function bI(a,b){if(0===a.length)return 0;let c=[...b],d=0;for(let b of a){let a=c.indexOf(b);a>=0&&(c.splice(a,1),d+=1)}return d/a.length}let bJ=/^[\d,,.]+\s*(?:人|个|台|具|套|处|支|辆|班|组|项)?$/u,bK=a=>a.filter(a=>!bJ.test(a));function bL(a){let b=[];for(let c of bG(a)){let a=c.dataRows;if(a.length<4)continue;let d=a=>(a[0]||"").trim(),e=(a,b)=>bH(a,b);for(let f=Math.floor(a.length/2);f<=Math.ceil(a.length/2);f+=1){let g=a.slice(0,f),h=a.slice(f);if(g.length<2||h.length<2)continue;let i=0,j=-1;for(let a of h){let b=d(a);if(b){for(let c=j+1;c<g.length;c+=1)if(d(g[c])===b&&e(a,g[c])>=.5){i+=1,j=c;break}}}let k=i/h.length;if(!(k<.8)){b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"local_deterministic",message:`表格内部数据行重复:第 ${c.startLine+1}~${c.endLine+1} 行表格(表头:${c.header.slice(0,3).join("|")})数据行两遍粘贴(${f} 行 + ${h.length} 行,重复匹配率 ${Math.round(100*k)}%)`,suggestion:`删除第二遍重复数据行(保留第一遍 ${f} 行),删除后表格仅保留一份完整数据。`});break}}}return b}function bM(a){let b=[],c=bG(a);if(c.length<2)return b;for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a],f=c[d],g=e.header.length>0&&e.header.length===f.header.length&&e.header.every((a,b)=>a===f.header[b]),h=bH(e.header,f.header),i=bH(e.firstCol,f.firstCol),j=bH(e.dataCells,f.dataCells),k=Math.max(bI(bK(e.dataCells),bK(f.dataCells)),bI(bK(f.dataCells),bK(e.dataCells)));(g&&j>=.6||h>=.7&&i>=.6||i>=.6&&k>=.6)&&b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`表格重复:第 ${e.startLine+1}~${e.endLine+1} 行表格(表头:${e.header.slice(0,3).join("|")})与第 ${f.startLine+1}~${f.endLine+1} 行表格高度重复(表头重合 ${Math.round(100*h)}%、数据重合 ${Math.round(100*j)}%、首列重合 ${Math.round(100*i)}%)`,suggestion:"同一文档内同主题表格只保留信息最全的一张:删除重复表格(保留字段与数据行更多的那张),删除后核对章节表格计划仍被覆盖。"})}return b.sort((a,b)=>{let c=a=>Number(a.match(/数据重合\s*(\d+)%/u)?.[1]??0);return c(b.message)-c(a.message)}).slice(0,5)}function bN(a){let b=a.replace(/\s+/gu,"");return b.length>=40?b:void 0}let bO=15;function bP(a){let b=[];for(let c of a.split(/\n\s*\n/u)){let a=c.trim();if(!a)continue;let d=a.split(/\n/u).filter(a=>{let b=a.trim();return b&&!/^#{1,6}\s/u.test(b)&&!b.startsWith("|")}).join("\n"),e=[];for(let a of d.split(/[。!?!?]/u)){let b=a.trim().replace(/\s+/gu,"");if(b.length<bO)continue;let c=e.findIndex(a=>a.sentence===b||a.sentence.length>b.length&&a.sentence.length-b.length<=bO&&a.sentence.endsWith(b));c>=0?e[c].count+=1:e.push({sentence:b,count:1})}for(let a of e)a.count>=2&&b.push({sentence:a.sentence,count:a.count})}return b}function bQ(a){let b=bP(a);return 0===b.length?[]:b.slice(0,3).map(({sentence:a,count:b})=>({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"local_deterministic",message:`段落内句子复读 ${b} 次:“${a.slice(0,30)}…”`,suggestion:"同一段落内相同句子只保留首次出现,删除段尾复读的重复句(确定性修复器已接入自动剥离)。"}))}let bR=/^(.+?)(?:((?:\d+|[一二三四五六七八九十]+)))+$/u;function bS(a){let b=[];for(let c of a.matchAll(/^###\s+(.+)$/gmu)){let d=c[1].trim();bR.test(d)&&b.push({raw:d,index:a.lastIndexOf("\n",c.index??0)+1})}return b}function bT(a){let b=bS(a);return 0===b.length?[]:b.slice(0,3).map(({raw:a})=>({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"local_deterministic",message:`目录小节标题含防撞名编号后缀:“${a}”`,suggestion:"正式投标文件目录不允许「(1)(2)」编号后缀小节:确定性修复器已接入(按主题域重命名为语义化标题或合并同基线拆半小节)。"}))}let bU=/第(\d{1,3})日(?:至|到|~|~|—|-)第(\d{1,3})日/gu;function bV(a){let b=[];for(let c of a.matchAll(bU))Number(c[1])<=Number(c[2])||b.push({start:c.index??0,end:(c.index??0)+c[0].length,raw:c[0]});return b}function bW(a){let b=bV(a);return 0===b.length?[]:b.slice(0,3).map(({raw:a})=>({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`时间区间倒挂:“${a}”起点大于终点,属时间拼接病句`,suggestion:"删除倒挂区间起点,仅保留终点日期表述(确定性修复器已接入自动剥离)。"}))}function bX(a){let b=[],c=a.split(/\r?\n/u),d=new Map,e=[],f=()=>{let a=bN(e.join(""));if(a){let b=(d.get(a)||0)+1;d.set(a,b)}e=[]};for(let a of c){let b=a.trim();if(!b||/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b)){f();continue}if(/^[-*•]\s/u.test(b)){f(),e.push(b),f();continue}e.push(b)}for(let[a,c]of(f(),[...d.entries()].filter(([,a])=>a>=2).slice(0,3)))b.push({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`段落完全重复 ${c} 次:“${a.slice(0,40)}…”`,suggestion:"同一段落正文只保留首次出现处,删除其余重复段落;确需前后呼应时改写为差异化表述并压缩篇幅。"});return b}let bY=/\d{2,}(?:\.\d+)?/gu,bZ=/\d+\s*#/gu;function b$(a){return(function(a){let b=a.split(/\r?\n/u),c=[];for(let a=0;a<b.length;a+=1){let d=b[a].trim();!(!d||/^#{1,6}\s/u.test(d)||d.startsWith("|")||/^(?:[-*+•]|\d{1,3}[.、)])\s*/u.test(d))&&((d.match(/[一-龥]/gu)||[]).length<40||c.push({line:a+1,text:d,skeleton:function(a,b){let c=a.replace(/[\s\u3000|*`_]/gu,""),d=new Set;for(let a=0;a+5<=c.length;a+=1)d.add(c.slice(a,a+5));return d}(d.replace(/\d+(?:\.\d+)?/gu,"#"),5),numbers:new Set(d.match(bY)||[]),markers:new Set((d.match(bZ)||[]).map(a=>a.replace(/\s/gu,"")))}))}let d=new Map;c.forEach((a,b)=>{for(let c of a.numbers){let a=d.get(c)||[];a.push(b),d.set(c,a)}});let e=new Map;for(let a of d.values())for(let b=0;b<a.length;b+=1)for(let c=b+1;c<a.length;c+=1){let d=`${a[b]}|${a[c]}`;e.set(d,(e.get(d)||0)+1)}let f=[];for(let[a,b]of e){if(b<2)continue;let[d,e]=a.split("|").map(Number),g=c[d],h=c[e];if(2>Math.abs(g.line-h.line))continue;let i=new Set([...g.numbers,...h.numbers]).size,j=0===i?0:b/i;if(j<.6)continue;let k=function(a,b){if(0===a.size||0===b.size)return 0;let c=0;for(let d of a)b.has(d)&&(c+=1);return c/(a.size+b.size-c)}(g.skeleton,h.skeleton);!(k<.3)&&(!(g.markers.size>0)||!(h.markers.size>0)||[...g.markers].some(a=>h.markers.has(a)))&&f.push({firstLine:g.line,secondLine:h.line,skeletonJaccard:Number(k.toFixed(3)),numberOverlap:Number(j.toFixed(2)),excerpt:h.text.slice(0,40)})}return f.sort((a,b)=>a.secondLine-b.secondLine).slice(0,20)})(a).slice(0,3).map(a=>({level:"error",severity:"blocker",category:"style",owner:"llm",repairability:"llm_repairable",message:`段落近似重复:第 ${a.secondLine} 行与第 ${a.firstLine} 行叙述同一批对象与工程量(骨架一致度 ${a.skeletonJaccard}、数值一致度 ${a.numberOverlap}):“${a.excerpt}…”`,suggestion:"两处仅保留信息完整的一处并合并差异(不得改写既有数值与工序事实);重复段落后含原文粘贴来源的,以正文归纳口径为准。",provenance:{detectorId:"paragraph-near-duplicate",fingerprint:(0,e.c6)(`${a.firstLine}|${a.secondLine}|${a.excerpt}`)}}))}function b_(a,b,c){let d=new Set;for(let a of[...b.quality,...b.project,...b.schedule])for(let b of(0,e.lG)(a.value).matchAll(bC))d.add(bE(b[0]));if(c?.extracted)for(let a of c.entries)for(let b of a.text.matchAll(bC))d.add(bE(b[0]));if(0===d.size)return[];let f=new Set;for(let b of a.matchAll(bC)){let a=bE(b[0]);!d.has(a)&&(bD.test(a)||f.add(a))}return 0===f.size?[]:[{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`奖项表述与招标文件白名单不符:正文出现 ${[...f].join("、")},均未出现在招标文件评分项要求或绑定资料中`,suggestion:"创优目标必须以招标文件原文为准逐字落位,禁止自行编造或替换为其他奖项名称;白名单外的奖项表述一律删除或替换为招标原文奖项。"}]}function b0(a){let b=a.split(/\r?\n/u),c=new Set;for(let a of b){let b=/^(#{2,4})\s+(.+)$/u.exec(a.trim());if(!b)continue;let d=b[2].trim();(0,h.Xp)(d)&&c.add(d)}if(0===c.size)return[];let d=[...c];return[{level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`正文出现投标人资格内容小节:${d.slice(0,3).map(a=>`“${a}”`).join("、")}${d.length>3?" 等":""}(资格审查内容不属于施工组织设计,属资格文件/商务文件范畴)`,suggestion:"删除资格内容小节(标题与正文整体删除),不得以改写、合并、降级方式保留;正文如需提及安全生产许可证等证照,只能以施工管理口径表述(如“按规定持证上岗”),不得成节铺陈资格核验内容。"}]}let b1=/(?:荣获|曾获|获得过|被评为)\s*[^。;\n]{2,24}/gu,b2=/奖|杯|荣誉|称号|优秀|先进|示范|观摩|文明工地|优质工程/u,b3=/(?:承接过|承建过)\s*[^。;\n]{2,24}/gu,b4=/工程|项目|标段|业绩/u,b5=/完成过\s*(?:[0-90-9一二三四五六七八九十两]+|[多若干]+)\s*(?:个|项|例|座|条|余项|余个)?\s*(?:类似|同类|以上的?)?\s*(?:工程|项目)/gu,b6=/资质证书编号|证书编号|安全生产许可证编号|资质编号|营业执照注册号|统一社会信用代码|证号[::]/gu,b7=/(?:设计|勘察|监理)单位|设计院|勘察院|监理公司|设计研究总院|设计研究院|设计总院/u;function b8(a,b){if(!b)return[];let c=[];for(let b of a.matchAll(b1))b2.test(b[0])&&c.push(b[0].trim());for(let b of a.matchAll(b3))b4.test(b[0])&&c.push(b[0].trim());for(let b of a.matchAll(b5))c.push(b[0].trim());for(let b of a.matchAll(b6))b7.test(function(a,b){let c=b;for(;c>0&&!/[。;;\n]/u.test(a[c-1]);)c-=1;let d=b;for(;d<a.length&&!/[。;;\n]/u.test(a[d]);)d+=1;return a.slice(c,d)}(a,b.index??0))||c.push(b[0].trim());if(0===c.length)return[];let d=[...new Set(c)];return[{level:"error",severity:"blocker",category:"format",owner:"llm",repairability:"llm_repairable",message:`正文出现投标人身份标记 ${d.length} 处:${d.slice(0,3).map(a=>`“${a.slice(0,30)}”`).join("、")}${d.length>3?" 等":""}(招标暗标要求不得出现明示或暗示具体投标人的说明及标记,包括以往的施工业绩)`,suggestion:"删除或改写身份标记句:以往业绩/获奖表述一律删除;证书资质类表述改写为不自证身份的施工管理口径(如“按规定持证上岗”),不得保留证书编号与奖项名称。"}]}let b9=/人[、,,]材[、,,]机/u,ca=/(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施/u;function cb(a){let b=a.match(ca)?.[1];return b||(/劳动力|人员|作业人员|劳务/u.test(a)?"人":/材料|物资|周转/u.test(a)?"材":/机械|设备|机具|塔吊|起重机/u.test(a)?"机":void 0)}function cc(a){let b=[],c=a.split(/\r?\n/u);for(let a=0;a<c.length;a+=1){let d,e=/^##\s+(.+)$/u.exec(c[a].trim());if(!e||!b9.test(e[1]))continue;let f=c.length;for(let b=a+1;b<c.length;b+=1)if(/^##\s+/u.test(c[b].trim())){f=b;break}let g=[];for(let e=a+1;e<f;e+=1){let a=/^###\s+(.+)$/u.exec(c[e].trim()),f=/^####\s+(.+)$/u.exec(c[e].trim());if(a){d={subject:cb(a[1]),title:a[1].trim()},g.push(d);continue}if(f&&d?.subject){let a=cb(f[1]);a&&a!==d.subject&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章层级错位:小节“${f[1].trim()}”挂在“${d.title}”之下(${"人"===a?"人":"材"===a?"材":"机"}的保障体系应独立成二级小节,不得并入${"人"===d.subject?"人":"材"===d.subject?"材":"机"}的保障体系)`,suggestion:`将“${f[1].trim()}”提升为独立二级小节,或将其内容合并到对应主题的二级小节。`})}}let h=new Set(g.map(a=>a.subject).filter(Boolean)),i=["人","材","机"].every(a=>h.has(a));(g.length<3||!i)&&b.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",message:`人材机章结构不完整:“${e[1].trim()}”仅 ${g.length} 个二级小节(人/材/机的保障体系未全部独立成节)`,suggestion:"拆分为“确保人的保障体系与措施”“确保材的保障体系与措施”“确保机的保障体系与措施”三个二级小节。"})}return b}async function cd(a,b,c={}){let d=[],e=(a,b)=>1e-6>Math.abs(a-b),f=[];for(let c of b){let b=c.groups??[];if(b.length<2||new Set(b.map(a=>Math.round(100*a.value))).size<2)continue;let d=RegExp((0,i.Lp)(c.name),"gu"),e=RegExp(`(?<![\\dA-Za-z])(\\d(?:[\\d,]*(?:\\.\\d+)?))\\s*${(0,i.YZ)(c.unit)}(?![0-9a-zA-Z])`,"gui"),g=[];for(let f of a.matchAll(d)){let d=f.index??0,h=d+f[0].length,i=a.lastIndexOf("\n",d)+1,j=a.indexOf("\n",d);if(-1===j&&(j=a.length),/^\s*\|/u.test(a.slice(i,j)))continue;let k=Math.max(i,d-24),l=a.slice(k,d),n=Math.max(l.lastIndexOf("。"),l.lastIndexOf(";"),l.lastIndexOf(";")),o=n>=0?l.slice(n+1):l,p=b.filter(a=>a.group&&o.includes(a.group));if(1!==p.length)continue;let q=p[0],r=a.slice(h,h+24),s=Math.min(...[r.search(/[、。;,]/u),r.search(/\n/u)].filter(a=>a>=0).concat([r.length])),t=r.slice(0,s),u=null;for(let a of t.matchAll(e)){let b=a[1],d=Number(b.replace(/,/gu,""));Number.isFinite(d)&&!(d<=0)&&(null===u||Math.abs(d-c.value)<Math.abs(u.value-c.value))&&(u={offset:h+(a.index??0)+a[0].indexOf(b),value:d,raw:b})}if(!u)continue;let v=a.slice(h,u.offset);(!/[A-Za-z]/u.test(v)||/[\u4e00-\u9fa5]/u.test(v))&&g.push({group:q.group,value:u.value,excerpt:a.slice(d,u.offset+u.raw.length),sentence:(0,m.kE)(a,d,u.offset+u.raw.length-d),flatIndex:-1})}0!==g.length&&f.push({authority:{name:c.name,value:c.value,unit:c.unit},detail:b,pairings:g})}if(0===f.length)return d;let g=[];for(let a of f)for(let b of a.pairings){b.flatIndex=g.length;let c=a.detail.find(a=>a.group===b.group);g.push({id:`xp${b.flatIndex}`,kind:"quantity",subject:`${a.authority.name}(${b.group})`,value:b.value,unit:a.authority.unit,authority:c?.value??a.authority.value,sentence:b.sentence,facts:[`该条目清单分工程明细:${a.detail.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")}`]})}let h=c.adjudicate??m.hy,j=await h(g,{diagnostics:c.diagnostics,signal:c.signal});for(let a of f){let b=a.pairings.filter(a=>j.records.get(`xp${a.flatIndex}`)?.conclusion!=="consistent");if(0===b.length)continue;let c=!1;for(let f of b){let b=a.detail.find(a=>a.group===f.group);if(!b||e(b.value,f.value))continue;let g=a.detail.find(a=>a.group!==f.group&&e(a.value,f.value));if(g){d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨工程同值复制:“${f.excerpt.slice(0,40)}”在“${f.group}”语境处取值 ${f.value}${a.authority.unit},该值是“${g.group}”的清单明细值(${f.group} 的清单明细值为 ${b.value}${a.authority.unit})`,suggestion:`以工程量清单分工程明细为准修正“${f.group}”语境:应为 ${b.value}${a.authority.unit},不得沿用“${g.group}”的明细值 ${f.value}${a.authority.unit};修复后全文该条目分工程取值必须与清单明细逐一对应。`}),c=!0;break}}if(c)continue;let f=new Map;for(let a of b){let b=a.value.toFixed(2),c=f.get(b)??new Set;c.add(a.group),f.set(b,c)}for(let[c,e]of f){if(e.size<2)continue;let f=a.detail.filter(a=>e.has(a.group));if(new Set(f.map(a=>Math.round(100*a.value))).size<2)continue;let g=b.find(a=>a.value.toFixed(2)===c);d.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`跨工程同值复制:“${g.excerpt.slice(0,40)}”数值 ${c}${a.authority.unit} 同时出现在“${[...e].join("”“")}”等 ${e.size} 个工程对象语境,而清单明细值互不相同(${f.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")})——至少一处属跨工程同值复制`,suggestion:`逐工程对象按清单明细值修正取值(${f.map(b=>`${b.group} ${b.value}${a.authority.unit}`).join("、")}),不得多工程共用同一数值。`});break}}return d}function ce(a){let{phrase:b,first:c,second:d}=a,e=(0,n.Qk)(b,c.phase),f=(0,n.Qk)(b,d.phase);if(e.length<4||f.length<4)return null;let g=e.start<=f.start?c:d,h=g===c?d:c;return{leading:g,trailing:h}}function cf(a,b){let c=[],d=[];if(0===b.length)return{claims:c,ambiguities:d};let e=new Set,f=(f,g,h,i)=>{if(e.has(f))return;let j=Number(g.replace(/[,,]/gu,""));if(!Number.isFinite(j)||j<=0)return;let k=a.lastIndexOf("\n",f)+1,l=a.indexOf("\n",f);-1===l&&(l=a.length);let m=a.slice(k,l);if(/^\s*\|.*\|\s*$/u.test(m)||aQ.test(m))return;let o=a.slice(Math.max(k,f-12),f);if(/不少于|不低于|至少|最低|不小于|≥/u.test(o)||/(?:[\u4e00-\u9fa5]{1,3}(?:工|员|长)|司机|班组|队伍?)\s*$/u.test(o))return;let p=function(a,b){let c=(a.match(/[\p{Script=Han}]/gu)||[]).length;if(0===c)return null;let d=null,e={length:0,start:0,end:0};for(let c of b){let b=(0,n.Qk)(a,c.phase);b.length>=4&&(null===d||b.length>e.length)&&(d=c,e=b)}if(!d)return null;if(e.length>=c)return{best:d};for(let c=1;c<a.length-1;c+=1){if(!/[与及和、,,]/u.test(a[c]))continue;let d=b.find(b=>b.phase===a.slice(0,c).trim());if(!d)continue;let e=b.find(b=>b.phase===a.slice(c+1).trim());if(e&&d.value===e.value)return{best:d}}for(let c of[a.slice(0,e.start),a.slice(e.end)])if(!((c.match(/[\p{Script=Han}]/gu)||[]).length<2)){for(let a of b)if(a.phase!==d.phase&&(0,n.Qk)(c,a.phase).length>=4)return{best:d,second:a}}return{best:d}}(h,b);if(!p)return;let q=a.slice(Math.max(k,f-24),Math.min(a.length,f+g.length+1)).trim();if(p.second){e.add(f),d.push({start:f,raw:g,actual:j,phrase:h,first:{phase:p.best.phase,value:p.best.value,trace:p.best.trace},second:{phase:p.second.phase,value:p.second.value,trace:p.second.trace},excerpt:q});return}if(j===p.best.value)return void e.add(f);e.add(f),c.push({start:f,end:f+g.length,raw:g,actual:j,expected:p.best.value,phase:p.best.phase,trace:p.best.trace,channel:i,excerpt:q})};for(let b of a.matchAll(y)){let c=(b.index??0)+b[0].indexOf(b[1]),d=a.lastIndexOf("\n",c)+1,e=B(a,d,c);e&&f(c,b[1],e.replace(/阶段$/u,""),"base")}for(let b of a.matchAll(A)){if(!b[1]||!b[2])continue;let c=b[2],d=(b.index??0)+b[0].lastIndexOf(c);if(e.has(d))continue;let g=Math.max(a.lastIndexOf("。",d),a.lastIndexOf(";",d),a.lastIndexOf(";",d))+1,h=a.length;for(let b of["。",";",";"]){let c=a.indexOf(b,d);-1!==c&&c<h&&(h=c)}/阶段/u.test(a.slice(g,h))&&f(d,c,b[1].trim(),"enumeration")}return{claims:c,ambiguities:d}}function cg(a,b){let{claims:c,ambiguities:d}=cf(a,b),e=[];for(let a of c)e.push({position:a.start,issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`阶段劳动力数据矛盾:正文“${a.excerpt.slice(0,60)}”取值 ${a.actual} 人,与蓝图分阶段劳动力推导不符(“${a.phase}”阶段应为 ${a.expected} 人)`,suggestion:`分阶段劳动力人数必须以蓝图推导为准:将“${a.phase}”阶段人数统一为 ${a.expected} 人${a.trace?`(依据:${a.trace})`:""},删除其他口径数字。`}});for(let a of d)e.push({position:a.start,issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`阶段名疑似拼接:正文“${a.excerpt.slice(0,60)}”中的阶段名“${a.phrase}”同时混含“${a.first.phase}”与“${a.second.phase}”两个蓝图阶段,人数 ${a.actual} 人无法归属`,suggestion:`将阶段名拆分表述:“${a.first.phase}”按 ${a.first.value} 人、“${a.second.phase}”按 ${a.second.value} 人(蓝图推导)分句列出,不得把两个阶段名连写成单一阶段。`}});return e.sort((a,b)=>a.position-b.position).slice(0,8).map(a=>a.issue)}function ch(a,b){return ci(a,b).map(a=>a.issue)}function ci(a,b){let c=[];if(0===b.length)return c;let d=/首批|第一批|首期|第一期/gu,e=/剩余|补充|追加/gu,f=/保持|维持|确保|不少于|不低于|控制在|以内|以下/u;for(let g of b){if(!g.name||!Number.isFinite(g.count)||g.count<=0)continue;let b=(0,i.Lp)(g.name),h=RegExp(`${b}[^\\n。;;、,,]{0,4}?([\\d,]+)\\s*(?:台|辆)`,"gu"),j=new Set,k=new Set,l=[],m="";for(let b of a.matchAll(/[^。;;\n]+/gu)){let c=b[0],g=b.index??0,i=[...c.matchAll(d)].map(a=>a.index??0),n=[...c.matchAll(e)].map(a=>a.index??0);if(0!==i.length||0!==n.length)for(let b of c.matchAll(h)){if(!b[1])continue;let c=Number(b[1].replace(/[,,]/gu,""));if(!Number.isFinite(c)||c<=0)continue;let d=b.index??0,e=g+d,h=a.lastIndexOf("\n",e)+1,o=a.indexOf("\n",e);-1===o&&(o=a.length);let p=a.slice(h,o);if(/^\s*\|.*\|\s*$/u.test(p)||aQ.test(p))continue;let q=b[0];if(f.test(q)||/以内|以下|上限/u.test(a.slice(e+q.length,e+q.length+4)))continue;let r=i.filter(a=>a<d&&d-a<=40).pop(),s=n.filter(a=>a<d&&d-a<=40).pop();if(void 0!==r||void 0!==s){if(void 0!==s&&(void 0===r||s>r)){k.add(c);let b=/([\d,]+)\s*(?:台|辆)\s*$/u.exec(q);if(b){let c=/(?:约|共|计|近|至少)\s*$/u.exec(q.slice(0,b.index)),d=e+b.index-(c?c[0].length:0),f=e+q.length;l.push({start:d,end:f,excerpt:a.slice(d,f)})}}else j.add(c);m||(m=a.slice(Math.max(h,e-20),Math.min(o,e+q.length)).trim())}}}if(0===j.size||0===k.size)continue;let n=[...j],o=[...k];if(!n.some(a=>o.some(b=>a+b===g.count))&&(c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`机械设备分批台数矛盾:“${g.name}”分批投入(首批 ${n.join("/")} 台+剩余 ${o.join("/")} 台)各批组合之和均不等于蓝图机械汇总 ${g.count} 台${m?`(原文“${m.slice(0,50)}”)`:""}`,suggestion:`分批投入的台数之和必须等于蓝图机械汇总台数:将“${g.name}”各批次调整为首批与剩余合计 ${g.count} 台,或删除分批描述仅保留“${g.name} ${g.count} 台”汇总口径。`},removals:l}),c.length>=5))break}return c}function cj(a,b){let c=[];if(!b||!Number.isFinite(b)||b<=0)return c;let d=/交底|考察|封样|编制|审批|报审|报批|培训|演练|签订|组建|建立|采购|调查|备案|申报|进场确认/u;for(let e of a.matchAll(/(?:开工令下发|开工令下达|下达开工令|开工|计划开工)[^。;;\n年月]{0,8}?(?:第\s*(\d+)\s*(?:个)?(?:日历)?日|(\d+)\s*(?:个)?(?:日历)?日)/gu)){let f=e[1]||e[2];if(!f)continue;if("内"===a.slice((e.index??0)+e[0].length,(e.index??0)+e[0].length+1)){let b=a.slice(Math.max(0,(e.index??0)-40),(e.index??0)+e[0].length+40);if(!d.test(b))continue}let g=Number(f);if(!Number.isFinite(g)||g<=0||g<b)continue;let h=(e.index??0)+e[0].lastIndexOf(f),i=a.lastIndexOf("\n",h)+1,j=a.indexOf("\n",h);-1===j&&(j=a.length);let k=a.slice(i,j);if(/^\s*\|.*\|\s*$/u.test(k))continue;let l=a.slice(Math.max(i,h-40),Math.min(j,h+f.length+40));if(!d.test(l)||aQ.test(l))continue;let m=a.slice(Math.max(i,h-30),Math.min(j,h+f.length+14)).trim(),n=e.index??0;if(c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`前期动作时限矛盾:正文“${m}”将前期准备动作时限设在开工后第 ${g} 日,已达到/超过总工期 ${b} 日(竣工日)——前期动作不可能安排在项目末期`,suggestion:`前期准备动作时限必须落在施工准备阶段内:将第 ${g} 日改为与施工准备阶段相匹配的早期天数(早于总工期 ${b} 日),或删除具体天数改述为“开工令下发后在施工准备阶段内完成”。`},start:n,end:n+e[0].length+ +!!/[前内]/u.test(a[n+e[0].length]||"")}),c.length>=5)break}return c}function ck(a,b){return cj(a,b).map(a=>a.issue)}function cl(a,b){let c=cj(a,b);if(0===c.length)return{markdown:a,fixedCount:0,details:[]};let d=a,e=[],f=1/0;for(let a of[...c].sort((a,b)=>b.start-a.start)){if(a.end>f)continue;let b="在"===d[a.start-1]?"施工准备阶段内":"在施工准备阶段内",c=d.slice(a.start,a.end);d=d.slice(0,a.start)+b+d.slice(a.end),f=a.start,e.push(`「${c}」→「${b}」`)}return{markdown:d,fixedCount:e.length,details:e}}function cm(a){let b=a.split(/\r?\n/u),c=[];b.forEach((a,b)=>{let d=/^(#{3,4})\s+([^\n]+)$/u.exec(a.trim());d&&c.push({index:b,level:d[1].length,title:d[2].trim()})});let d=[];for(let a=0;a<c.length;a+=1){let{index:e,level:f,title:g}=c[a],h=g.replace(/^[\d.]+[\s\u00a0]*/u,"");if(!/工程\s*$/u.test(h))continue;let i=h.replace(/\s*工程\s*$/u,"");if(!i||!/[、与及]/u.test(i))continue;let j=i.split(/[、与及]/u).map(a=>a.trim()).filter(a=>a.length>=2);if(j.length<2)continue;let k=b.length;for(let b=a+1;b<c.length;b+=1)if(c[b].level<=f){k=c[b].index;break}let l=b.slice(e+1,k).join("\n"),m=l.replace(/[、,,]/gu,""),n=j.filter(a=>{if(/^(?:配套|附属|其他|其它|零星|通用)$/u.test(a)||l.includes(a))return!1;let b=a.replace(/[、,,]/gu,"").replace(/(?:安装|施工|工程|作业)$/u,"");if(b.length>=2&&m.includes(b))return!1;if(b.length>=4){let a=b.match(/.{2}/gu)??[];if(a.length>=2&&a.every(a=>m.includes(a)))return!1}return!0});0!==n.length&&d.push({lineIndex:e,level:f,title:g,parts:j,uncovered:n})}return d}let cn=/^(?:合计|小计|总计|汇总|共计|总和|总额|总价|总数量|总量|合价)/u,co=/^(?:其他|其它|其余|剩余|差额|补差)/u,cp=/^(?:其中|占比|比例|备注|说明|注[::])/u,cq=/待定|待补|待明确|待确认|未定|未明确|暂定|暂按|视情况|部分|若干/u,cr=/约(?![定束])|左右|以上|以下|以内|以外|不少于|不超过|不大于|不小于|不低于|不高于|至少|最少|最多|至多|超过|超出|不足|按实|据实|根据实际|不含|含\s*\d|其中|扣除|另计|另含|除外|等(?![级于额])|±|[≥≤≧≦><><]/u,cs=/[\d))]\s*[~~\-—–至到]\s*[\d((]/u,ct=/^(?:[-—–-//\\]+|无|不适用|不涉及|不包含|n\/a)$/iu,cu="(?<![A-Za-z0-9\\-Φφ])(-?(?:\\d{1,3}(?:[,,]\\d{3})+|\\d+)(?:\\.\\d+)?)\\s*(平方米|立方米|平方|立方|万元|亿元|千元|公里|厘米|毫米|公斤|日历天|小时|分钟|台班|工日|千米|盏|棵|株|袋|桶|块|片|条|根|座|台|套|个|处|道|项|批|次|人|名|户|间|层|樘|孔|眼|栋|幢|米|吨|元|万|千|百|天|周|月|年|℃|cm|kVA|mm|km|kg|kW|m2|m3|m\xb2|m\xb3|㎡|MPa|kPa|ml|L|t|m|%|%|‰|A|V|W)?";function cv(a){return a.replace(/[*_`]/gu,"").replace(/\s+/gu,"").replace(/^[((]?\d{1,2}(?:\.\d{1,2})?[.、))]?/u,"")}function cw(a){let b=a.replace(/[*_`]/gu,"").trim(),c={values:[],units:[],uncertain:!1};if(!b||ct.test(b))return c;let d=b.replace(/(?:GB|JGJ|CJJ|CJ|DB|DG|SL|JT|JTS|JTG|TSG|CECS|YB|SH|HG|SY|TB|AQ|JG|JB|ISO|GA|JC|MZ|WW|WH|GH|FZ|QB|YY|HY|LY|NY|SB|SN|WS|YZ|CB|EJ|HB|HS|MH|QJ|SC|SJ|TY|ZB)\s*\d*(?:\s*[A-Za-z])?(?:\s*\/\s*T)?\s*[\d.\-/·]+/giu," ").replace(/\d{4}\s*[-/.年]\s*\d{1,2}\s*[-/.月]\s*\d{1,2}\s*日?/gu," ").replace(/\d{4}\s*[-/.年]\s*\d{1,2}\s*月?/gu," ").replace(/\d{1,2}\s*月\s*\d{1,2}\s*日/gu," ").replace(/(?:19|20)\d{2}\s*年/gu," ").replace(/\d{1,2}(?:\.\d+)?\s*[::]\s*\d{1,2}(?:\.\d+)?/gu," ").replace(/第\s*\d+(?:\.\d+)?\s*(?:章|节|条|款|项|页|版|期|批|次|轮|步|道|层|日历天|季度|个?季度|阶段|部分|天|日|周|月|年)/gu," ").replace(/(?:详见|参见)\s*(?:第\s*)?\d[\d.]*(?:节|条|章|表|图|页|款)?/gu," ").replace(/(?:见|根据|依据|按照|依照|执行|符合)\s*第?\s*\d[\d.]*(?:节|条|章|表|图|页|款)/gu," ").replace(/[A-Za-z]{1,4}\s*[--]\s*\d+(?:\.\d+)?/gu," ").replace(/(?<![\d.])\d{1,2}(?:\.\d{1,2}){2,}(?!\d)/gu," ").replace(/(?:^|[\s、,,;;((])\d{1,2}\s*[.、))](?=\s*(?:\D|$))/gu," ").replace(/\d[\d,]*(?:\.\d+)?(?:\s*[×✕xX*]\s*\d[\d,]*(?:\.\d+)?)+/gu," ").replace(/\d{1,4}(?:\s*\/\s*\d{1,4})+/gu," ");if(cq.test(d))return{...c,uncertain:!0};if(!/\d/u.test(d))return c;if(cr.test(d)||cs.test(d))return{...c,uncertain:!0};let e=[...d.matchAll(RegExp(cu,"gu"))];if(0===e.length)return c;if(""!==d.replace(RegExp(cu,"gu")," ").replace(/[^\u4e00-\u9fa5a-z]/giu,"")&&e.some(a=>!a[2]))return{...c,uncertain:!0};for(let a of e){let b=Number(a[1].replace(/[,,]/gu,""));Number.isFinite(b)&&(c.values.push(b),c.units.push(function(a){let b=(a??"").trim().toLowerCase();return""===b?"":/^(?:m2|m²|㎡|平方米|平方|平米)$/u.test(b)?"m2":/^(?:m3|m³|立方米|立方|方)$/u.test(b)?"m3":/^(?:人|名|员|人员)$/u.test(b)?"人":"%"===b||"%"===b?"%":/^(?:千米|公里)$/u.test(b)?"km":/^(?:米|m)$/u.test(b)?"m":/^(?:吨|t)$/u.test(b)?"t":/^(?:公斤|千克|kg)$/u.test(b)?"kg":b}(a[2])))}return c}function cx(a){let b=cw(a);return b.uncertain||1!==b.values.length?null:{value:b.values[0],unit:b.units[0]??""}}function cy(a){let b=0,c=0,d=new Set;for(let e of a){let a=e.replace(/[*_`]/gu,"").trim();if(!a)continue;let f=cw(a);if(f.uncertain||co.test(cv(a))&&0===f.values.length)return null;if(0!==f.values.length){for(let a of f.values)b+=a,c+=1;for(let a of f.units)a&&d.add(a)}}return d.size>1?null:{sum:b,count:c,unit:1===d.size?[...d][0]:""}}function cz(a){return String(Math.round(100*a)/100)}function cA(a){return a.replace(/[*_`]/gu,"").replace(/\s+/gu," ").trim().slice(0,24)}function cB(a){let b=a.header,c=a.dataRows;if(0===c.length||0===b.length)return[];let d=b.map((a,b)=>b).filter(a=>cn.test(cv(b[a]??""))),e=c.map((a,b)=>b).filter(a=>cn.test(cv(c[a][0]??"")));if(d.length>1||e.length>1)return[];let f=[],g=Math.max(b.length,...c.map(a=>a.length)),h=1===d.length?d[0]:-1,i=1===e.length?e[0]:-1;if(h>0&&c.forEach((a,c)=>{if(c===i||cp.test(cv(a[0]??"")))return;let d=a[h];if(void 0===d)return;let e=cx(d);if(!e)return;let j=[];for(let b=1;b<g;b+=1)b!==h&&j.push(a[b]??"");let k=cy(j);if(!k||k.count<2||e.unit&&k.unit&&e.unit!==k.unit)return;let l=Math.abs(e.value-k.sum);if(l<=Math.max(1,.005*Math.abs(e.value)))return;let m=cA(a[0]??"")||`第 ${c+1} 行`,n=cA(b[h]??"")||"合计";f.push(`「${m}」行:${n} ${cz(e.value)}${e.unit} ≠ 分项和 ${cz(k.sum)}${k.unit}(差 ${cz(l)})`)}),i>=0){let a=c[i];for(let d=1;d<g;d+=1){if(d===h)continue;let e=a[d];if(void 0===e)continue;let g=cx(e);if(!g)continue;let j=cy(c.filter((a,b)=>b!==i&&!cp.test(cv(a[0]??""))).map(a=>a[d]??""));if(!j||j.count<2||g.unit&&j.unit&&g.unit!==j.unit)continue;let k=Math.abs(g.value-j.sum);if(k<=Math.max(1,.005*Math.abs(g.value)))continue;let l=cA(a[0]??"")||"合计",m=cA(b[d]??"")||`第 ${d+1} 列`;f.push(`「${m}」列:${l} ${cz(g.value)}${g.unit} ≠ 分项和 ${cz(j.sum)}${j.unit}(差 ${cz(k)})`)}}return f}function cC(a){let b=bG(a);if(0===b.length)return[];let c=[];for(let a of b){let b=cB(a);if(0!==b.length&&(c.push({level:"error",severity:"blocker",category:"evidence_coverage",owner:"llm",repairability:"llm_repairable",message:`生成后事实反查失败:表格算术不自洽 ${b.length} 处(${b.slice(0,3).join(";")}${b.length>3?" 等":""})`,suggestion:"表内「合计」必须等于分项之和:以分项重算合计,或按权威数据修正分项;台账类保留显性「其他」差额项并给出数值;只允许修正表内数值,严禁编造无来源数据。"}),c.length>=5))break}return c}function cD(a){return bG(a).reduce((a,b)=>a+cB(b).length,0)}function cE(a,b){let c=b.projectName||"";if("village-municipal"===b.blueprintStrategyId||/自然村|美丽乡村|宜居|乡村振兴|行政村|村组|村庄/u.test(c))return[];let d=["自然村","村内","村庄","村民","多村并行","村组","各村"].map(b=>({term:b,count:(a.match(RegExp(b,"gu"))||[]).length})).filter(a=>a.count>0);if(0===d.length)return[];let e=d.reduce((a,b)=>a+b.count,0);return[{level:"error",severity:"blocker",category:"scope",message:`项目类型与正文用词矛盾:本项目非乡村类${c?`(${c})`:""},正文却出现乡村专有表述 ${d.map(a=>`「${a.term}」${a.count} 处`).join("、")}(合计 ${e} 处)`,suggestion:"按项目实际类型统一叙述口径:乡村专有表述应改为对应业务称谓(如「自然村分组」→「单位工程/施工区段」、「村内流水作业」→「区段内流水作业」);若项目确为乡村类,请检查项目名与蓝图策略选型后重新生成。"}]}let cF=[{figure:/进度|工期|横道|网络/u,table:/进度|工期|节点|工序/u,label:"进度计划表"},{figure:/平面|布置|总平面/u,table:/临时设施|临时用地|平面|设施配置/u,label:"临时设施/用地表"},{figure:/组织|机构|岗位|职责/u,table:/岗位|职责|机构|管理人员/u,label:"项目管理机构/岗位职责表"},{figure:/劳动力|人力/u,table:/劳动力|工种|人数/u,label:"劳动力计划表"},{figure:/机械|设备/u,table:/机械|设备|进场/u,label:"机械设备表"},{figure:/材料|物资/u,table:/材料|物资/u,label:"材料计划表"}];function cG(a,b){let c=[],d=a.split("\n"),f=/^图\s*\d+(?:[-—–-]\d+)?\s+\S+$/u,g=/^图\s+[^\s,。;:]{2,36}$/u,h=/!\[[^\]]*\]\([^)]*\)/u,i=d.map((a,b)=>({text:a.trim(),index:b})).filter(a=>f.test(a.text)||g.test(a.text)).filter(a=>{let b=b=>{for(let c=a.index+b;c>=0&&c<d.length;c+=b){let a=d[c].trim();if(a){if(h.test(a))return!0;/^#{1,6}\s/u.test(a)||f.test(a)||g.test(a);break}}return null};return!0!==b(-1)&&!0!==b(1)});for(let f of(i.length>0&&c.push({level:"error",severity:"blocker",category:"format",provenance:{detectorId:"figure-substitute-table",fingerprint:(0,e.c6)(a)},message:`有图题无图 ${i.length} 处:${i.slice(0,3).map(a=>a.text.slice(0,24)).join("、")}`,suggestion:"图题行下面必须真的有一张图(系统生成的图件走 `/api/documents/generated/<docId>/figure/*.svg`);画不出来的图位请写明「待人工插入」并说明原因,不要用图题充数。"}),b)){let a=cF.find(a=>a.figure.test(f.name)),b=a?.table??/./u;d.some(a=>{let c=a.trim();return!!/^\|.+\|$/u.test(c)&&b.test(c)})||c.push({level:"warning",severity:"warning",category:"structure",message:`图类要求未以数据表落实:「${f.name}」(${f.chapterTitle})${a?`(应至少提供${a.label})`:""}`,suggestion:"图类要求一律以等效数据表承载同一信息(进度图→进度计划表、平面布置图→临时设施用地表、机构图→岗位层级表);无对应数据则该项要求落空,须补齐数据而非留空。"})}return c}},36986:(a,b,c)=>{c.d(b,{VB:()=>s,lJ:()=>r});var d=c(11919),e=c(80439),f=c(34680),g=c(69896),h=c(70933),i=c(31846),j=c(22157),k=c(1358),l=c(67582),m=c(75251),n=c(48479);let o=/(?:\d+(?:\.\d+)?\s*(?:mm|cm|m2|m3|m³|m²|㎡|平方米|m|km|kg|g|t|K|L|ml|MPa|kPa|kN|N|℃|%|台|套|座|个|项|批|次|份|人|小时|分钟|日历天|天|周|月|年|万元|元|W|kW|kV|V|A|Hz|米|处|道|根|盏|株|标段|层|樘|孔|眼|间|户|栋|幢|d)(?![\w\u00B2\u00B3])|DN\s*\d+|Φ\s*\d+(?:\.\d+)?|φ\s*\d+(?:\.\d+)?|C\d{2,}|HRB\d+|HPB\d+)/giu;function p(a){return a.replace(/\s+/gu,"").toLowerCase()}function q(a){return[...new Set((a.match(o)||[]).map(p))]}function r(a){let b=new Set;for(let c of a.allEvidence)if(c.content)for(let a of q((0,h.eE)(c.content)))b.add(a);let c=a.input.billFactLock;if(c)for(let a of c.entries){for(let c of q(`${a.name} ${a.description} ${a.quantity}${a.unit}`))b.add(c);for(let c of(0,i.L4)(a.description))b.add(p(c));for(let c of a.specQuantityPairs)for(let a of(b.add(p(c.spec)),q(c.quantity)))b.add(a)}let d=a.input.blueprintData?.quantities;if(d)for(let[a,c]of Object.entries(d)){for(let a of("number"==typeof c.value&&Number.isFinite(c.value)&&b.add(p(`${c.value}${c.unit||""}`)),c.specBreakdown??[]))"number"==typeof a.value&&Number.isFinite(a.value)&&b.add(p(`${a.value}${c.unit||""}`));for(let c of q(a))b.add(c)}for(let c of[...a.structuredFacts||[],...a.factsModel?.preciseFacts||[]])for(let a of q((0,j.lG)(c.value)))b.add(a);for(let c of a.factsModel?.tables||[])for(let a of c.rows||[]){if(!Array.isArray(a)||0===a.length)continue;let c=a.map(a=>String(a??"").trim());for(let a of q(c.join(" ")))b.add(a);let d=[...new Set(c.filter(a=>k.bX.test(a)))];if(0===d.length)continue;let e=[...new Set(c.filter(a=>k.CE.test(a)))];for(let a of d)for(let c of e)for(let d of q(`${a}${c}`))b.add(d)}return b}async function s(a){let b=r(a);if(0===b.size)return;let c=a.blueprintData?(0,l.JB)(a.blueprintData):[],h=function(a){let b=new Map;if(!a)return b;for(let c of[...a.derivationGaps,...a.processGaps]){let a=c.closureCandidates??[];if(0===a.length)continue;let d=p(c.token);b.has(d)||b.set(d,`${a.join(" + ")} = ${c.token.replace(/\s+/gu,"")}`)}return b}(a.authorityAuditReport),i=a=>{let d=[];for(let e of a.split(/[。;;!!??\n]/u).map(a=>a.trim()).filter(Boolean).filter(a=>!a.startsWith("#")&&(a.match(o)??[]).length>0).map(a=>a.slice(0,160))){if(function(a){if(/高温|防暑|危大|专家论证|超过一定规模|40℃|37℃|35℃/u.test(a)||/第\s*\d+\s*(天|周|月|日|层|道|步|轮|批)/u.test(a))return!0;let b=a.match(o)||[];return!!(b.length>0&&b.every(a=>/%$/u.test(a.trim()))&&/完成|进度|利用率|合格率|优良率|评标|得分|负荷/u.test(a)||b.every(a=>/^20\d{2}/u.test(a))&&/年/u.test(a)&&!/月|日/u.test(a))}(e))continue;let a=q(e);if(0===a.length||a.every(a=>b.has(a)))continue;let f=a.filter(a=>!b.has(a)&&"unsourced"===(0,k.eS)({token:a,context:e}).kind),g=function(a,b,c){let d=new Set;if(0===c.length)return d;for(let e of b){let b=a.indexOf(e);if(b<0)continue;let f=a.slice(Math.max(0,b-24),b).replace(/\s+/gu," ");if(!m.FW.test(f))continue;let g=/\d+(?:\.\d+)?/u.exec(e);if(!g)continue;let h=/^[\d,,.]+(.*)$/u.exec(e)?.[1]?.trim()??"",i=(0,l.Dc)(a,b,e.length,l.d$).replace(/\s+/gu," ");(0,m.j9)({total:Number(g[0]),unit:h,context:i,values:c})&&d.add(e)}return d}(e,f,c),h=f.filter(a=>!g.has(a));h.length>0&&d.push({sentence:e,tokens:h})}return d},j=new Map;for(let b of a.finalChapterDrafts){let a=i(b.content);a.length>0&&j.set(b.id,a)}let s=[...j.values()].reduce((a,b)=>a+b.length,0);if(0===s){let c=(0,e.X5)({type:"validation",roleId:"numeric-verification",status:"success",message:"正文数值确定性核对通过:全部正文数值均在资料原文/清单事实锁/蓝图参数桶中找到同值来源",details:[`数值权威库规模:${b.size} 个归一化 token`]},{subtitle:"数值确定性核对"});(0,n.Wl)(a,{batch:"finalize.repairHistory",stage:c}),a.emitProgress(a.finalChapterDrafts);return}let t=0,u=0;for(let[b,c]of j){let j=a.finalChapterDrafts.findIndex(a=>a.id===b);if(j<0)continue;let k=a.finalChapterDrafts[j],l=k.content,m=c,o=i(l).length,q=0,r=!1,s=!1,v=[o];for(;m.length>0&&q<2;){q+=1;let c=(0,e.X5)({type:"llm_review",roleId:`agent-numeric-verification-${b}`,status:"running",message:`正文数值核对发现 ${m.length} 处疑似无来源数值,第 ${q} 轮定向修复中:${k.title}`,details:m.map(a=>`疑似:${a.sentence}(缺来源 token:${a.tokens.join("、")})`)},{subtitle:"数值确定性核对"});(0,n.Wl)(a,{batch:"finalize.repairHistory",stage:c}),a.emitProgress(a.finalChapterDrafts);let d=m.flatMap(a=>a.tokens.map(a=>({token:a,hint:h.get(p(a))}))).filter(a=>!!a.hint),t=["【正文数值定向核对修复】",...q>1?[`本轮为第 ${q} 轮(最多 2 轮):上一轮修复后仍有残留,无法确认来源的数值必须直接删除,禁止保留或替换为其他无来源数值。`]:[],"下列句子中的数值(标注「缺来源 token」)在项目绑定材料、工程量清单与蓝图中均找不到同值来源,属于疑似编造数值。请逐句核对并修复:","1. 若该数值在本章绑定证据中确实存在(仅表述口径不同),保持数值原样,只修正单位或表述;","2. 若该数值确属规范/标准常数(如试块留置、养护龄期、检测频次),保留数值并显性标注规范名称与编号(如「按《混凝土结构工程施工质量验收规范》GB 50204 规定,每100m\xb3留置一组试块」)——显性标注后即视为已溯源;",...d.length>0?["3. 若该数值已给出「具名分项和候选」(该值恰为若干具名权威分项之和),说明它是写手对权威分项的自算合计,**不得删除**:按分项显式还原为「分项名 数值+单位、…,合计 数值+单位」的分解表述(分项值必须取候选值原样,禁止改动候选数值),还原后即为可溯源的合法合计;"]:[],`${d.length>0?"4":"3"}. 其余情况必须删除该数值,改写为不带具体数值的过程控制表述(如「按设计要求」「分层碾压至压实度满足设计及规范要求」);`,"禁止把疑似数值替换为另一个同样无来源的数值;禁止改动句子的非数值部分;只做局部修改,不得新增、删除或合并小节。",m.map(a=>`- 疑似句:${a.sentence}(缺来源 token:${a.tokens.join("、")})`).join("\n"),...d.length>0?["具名分项和候选(按第 3 条还原分解,不得删除):",...d.map(a=>`- ${a.token.replace(/\s+/gu,"")}:${a.hint}`)]:[]].join("\n"),u=await (0,g.b)({originalContent:l,repairRound:"numeric-verification",diagnostics:a.generationDiagnostics,apply:async()=>{let b=await a.withProgressHeartbeat(()=>(0,f.l8)({template:a.template,chapter:{id:k.id,title:k.title,content:l,evidence:k.evidence,missingFacts:k.missingFacts,sections:k.sections},issues:m.map(a=>`疑似无来源数值:${a.sentence}(token:${a.tokens.join("、")})`),promptTexts:t,requirement:a.requirement,forbidDrawingImages:!1,bidComposition:a.bidComposition,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,f.XG)("numeric-verification",a.generationDiagnostics)}));return b.content&&b.content!==l?b.content:l},recheck:a=>[i(a).length]});u.rolledBack||u.content===l||(l=u.content,a.finalChapterDrafts[j]={...k,content:l},r=!0),u.rolledBack&&(s=!0);let w=i(l).length;if(v.push(w),0===w||w>=o||q>=2)break;o=w,m=i(l).slice(0,12)}r&&(t+=1);let w=i(l).length;u+=w;let x=(0,e.X5)({type:"llm_review",roleId:`agent-numeric-verification-${b}`,status:(0,d.YM)({before:c.length,after:w,repaired:r,rolledBack:s}),message:0===w?`数值核对修复完成:${k.title}(${c.length} 处疑似数值已处理,残留轨迹 ${v.join("→")})`:r?`数值核对修复部分生效:${k.title}(疑似数值残留轨迹 ${v.join("→")},已执行 ${q} 轮定向修复(每章最多 2 轮);残留项以 warning 记录,不阻断交付)`:s?`数值核对修复已回滚:${k.title}(修复后疑似数值增多,保留修复前正文;残留 ${w} 处以 warning 记录,不阻断交付)`:`数值核对修复未生效:${k.title}(模型未产生有效修改;残留 ${w} 处以 warning 记录,不阻断交付)`,details:[...c.map(a=>`疑似:${a.sentence}`),w>0?`已执行 ${q} 轮定向修复,残留项以 warning 记录,不阻断交付`:""]},{subtitle:"数值确定性核对"});(0,n.Wl)(a,{batch:"finalize.repairHistory",stage:x}),a.emitProgress(a.finalChapterDrafts)}t>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.generationDiagnostics.llm.lastInfo=`正文数值确定性核对:权威库 ${b.size} token,${s} 处疑似无来源数值,${t} 章完成定向修复,残留 ${u} 处(每章最多 2 轮收敛修复,未收敛残留以 warning 记录,不阻断交付)`}},37095:(a,b,c)=>{c.d(b,{CU:()=>u,H7:()=>t,JB:()=>q,Qf:()=>n,kW:()=>r,oy:()=>o,sn:()=>s,wG:()=>p});var d=c(29021),e=c(21820),f=c(33873),g=c(19898);function h(a){return f.join(e.homedir(),".customize-agent","projects",(0,g.computeProjectId)(a),"kb-operations.jsonl")}function i(a,b){let c=h(a);d.mkdirSync(f.dirname(c),{recursive:!0});let e=`${c}.${process.pid}.${Date.now()}.tmp`;d.writeFileSync(e,`${(function(a){if(a.length<=200)return a;let b=new Set([...a].sort((a,b)=>b.updatedAt-a.updatedAt).slice(0,200).map(a=>a.id));return a.filter(a=>b.has(a.id))})(b).map(a=>JSON.stringify(a)).join("\n")}
197
197
  `,"utf8"),d.renameSync(e,c);let g=k.get(a);g&&(g.mtimeMs=l(c))}let j=Math.round(Date.now()-1e3*process.uptime()),k=new Map;function l(a){try{return d.statSync(a).mtimeMs}catch{return 0}}function m(a){let b=h(a),c=l(b),e=k.get(a);if(e&&e.mtimeMs===c)return e.records;let f=function(a){let b=function(a){let b=h(a);return d.existsSync(b)?d.readFileSync(b,"utf8").split("\n").filter(Boolean).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}}):[]}(a),c=b.filter(a=>"processing"===a.status&&a.updatedAt<j);if(c.length>0){let d=Date.now();for(let a of c)a.status="error",a.stage="error",a.error="服务重启导致任务中断,未完成",a.message=a.error,a.updatedAt=d;i(a,b)}return b}(a);return k.set(a,{mtimeMs:l(b),records:f}),f}function n(a,b){let c=Date.now(),d=m(a),e=d.findIndex(a=>a.id===b.id),f=e>=0?d[e]:void 0,g={id:b.id,type:b.type,title:b.title,stage:b.stage??f?.stage??"uploading",status:b.status??f?.status??"processing",message:b.message??f?.message??"",percent:b.percent??f?.percent??0,fileName:b.fileName??f?.fileName,filePath:b.filePath??f?.filePath,chunkCount:b.chunkCount??f?.chunkCount,textLength:b.textLength??f?.textLength,extractionMode:b.extractionMode??f?.extractionMode,error:b.status&&"error"!==b.status?void 0:b.error??f?.error,details:b.details??f?.details,createdAt:f?.createdAt??c,updatedAt:c};return e>=0?d[e]=g:d.push(g),i(a,d),g}function o(a,b=50){return m(a).sort((a,b)=>b.updatedAt-a.updatedAt).slice(0,b)}function p(a,b){return m(a).filter(a=>a.id.startsWith(b))}function q(a,b){return m(a).find(a=>a.id===b)}function r(a,b){return m(a).filter(a=>!b||a.type===b).sort((a,b)=>b.updatedAt-a.updatedAt)[0]}function s(a){return m(a).filter(a=>"processing"===a.status).sort((a,b)=>b.updatedAt-a.updatedAt)}function t(a){let b=m(a),c=h(a);return d.existsSync(c)&&d.unlinkSync(c),k.delete(a),b.length}function u(a,b){let c=m(a),d=c.findIndex(a=>a.id===b);return!(d<0)&&(c.splice(d,1),i(a,c),!0)}},37126:(a,b,c)=>{c.d(b,{nX:()=>bi,Zd:()=>bh,Om:()=>bg,pm:()=>bl,rR:()=>bo,rX:()=>bq,Vd:()=>bm});var d=c(80323),e=c(11248),f=c(52890);function g(a){return/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|\d{1,2}\.\d{1,2}/u.test(a)}function h(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/[\s,。,.;;::《》“”‘’()()_-]+/gu,"").toLowerCase()}function i(a,b){let c=h(b);if(!c||c.length<4)return!0;let d=h(a);return!!d.includes(c)||c.length>=12&&d.includes(c.slice(0,Math.max(8,Math.floor(.72*c.length))))}let j={规范包:/[括含]/u};var k=c(73859),l=c(82437),m=c(11628);function n(a){return a.replace(/[((]\d+[))]/gu,"").replace(/副本|最终版|扫描件|定稿/gu,"").replace(/\s+/gu,"").replace(/[,。,.;;::《》“”‘’()()_\-—–―─-〜~·•]/gu,"").toLowerCase()}let o=/项目名称|工程名称|招标人|建设单位|发包人|采购人|招标单位|建设地点|工程地点|项目地点/u,p=/bill_of_quantities|drawing|table/iu;function q(a,b,c){if((0,l.j4)(a.trim())||(0,m.wI)(a)||(0,m.H8)(a)||/^(?:详|参见|见|依据)\s*[《【]/u.test(a.trim()))return"";let d=(0,m.pN)(a.trim()).trim();if(d!==a.trim()&&(0,l.j4)(d)||(0,m.A3)(d)||(0,k.d2)(b,d)||(0,k.rF)(b,d)||/签章|盖章|联系人|联系电话|电话|邮箱|解密|开标|评标|保证金|交易系统|空白|填写|上传|下载|递交|投标文件制作|电子服务系统|交易平台/u.test(d)||/\|/u.test(d)||/^#+\s*/u.test(d)||/见(?:招标公告|投标人须知|前附表|本项目|补疑)|资料参数行摘要|公共资源交易监督管理|开评标程序|监管部门|招标代理机构|监督管理部门|行政监督部门/u.test(d)||/是否|符合|采购范围|规定的投标截止时间|电子交易系统|投标人须知|招标文件正文/u.test(d)&&/\d{3,}/u.test(d)||/项目名称|工程名称/u.test(d)&&/项目编号|工程概况|建筑面积|本项目分为|现状建筑物|改造工程|标段/u.test(d)||/项目编号[::]|工程概况[::]|本项目分为|现状建筑物|总建筑面积|本次改造工程|清单编制说明/u.test(d)||c&&/招标人|建设单位|发包人|采购人|招标单位/u.test(c)&&!/局|公司|中心|政府|管委会|委员会|集团|院|大学|学校|街道|办事处|指挥部|项目部|办公室|厅|署|银行|医院/u.test(d))return"";if(c){let a=n(c),b=n(d);if(a.length>=2&&b.length>0&&b.length<=a.length+6&&b.endsWith(a.slice(-2))&&!/\d/u.test(d))return""}if(c&&o.test(c)){if(/所在地|地址|详见|见前附表|见招标/u.test(d)||/检查井|化粪池|机箱|碎石|路灯|井盖|监控系统|吊顶|抹灰|楼面|顶棚/u.test(d))return"";let a=d.replace(RegExp(`^${c.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}\\s*[::、,,..]?\\s*`,"u"),""),b=(0,m.Ui)(a||d);return!b||b.length>40||/第\s*页|共\s*页/u.test(b)||/[,。;;、]/u.test(b)||/[::]/u.test(b)||/^[((][^))]*[))]$/u.test(b)||/[/\\]|\.(?:pdf|docx?|xlsx?|zip)/iu.test(b)||/R\d+C\d+/u.test(b)||n(b)===n(c)?"":n(b)}let e=(0,m.De)(d),f=e.replace(/([^)]*)|\([^)]*\)/gu,"").replace(/\s+/gu,"").trim();if(m.mf.test(f))return n(f.slice(0,40));let g=/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月)/u.exec(e)?.[0],h=n(g&&/工期|总工期|合同工期|计划工期|施工周期|质保期|有效期|养护期/u.test(`${c||""} ${d}`)?g:d);return!h||h.length>80?"":h}var r=c(40299),s=c(52639),t=c(95622),u=c(78217),v=c(13145),w=c(29055),x=c(23760),y=c(44505),z=c(85016),A=c(67582),B=c(36986),C=c(48278),D=c(16152),E=c(40693),F=c(1358),G=c(22157);function H(a){return[...a.project,...a.schedule,...a.quality,...a.safety,...a.resources,...a.preciseFacts,...a.bills,...a.drawings,...a.rules,...a.specifications].flatMap(a=>{let b=(0,e.K3)(`${a.fieldName||a.key} ${(0,G.lG)(a.value)}`),c=(0,e.K3)((0,G.lG)(a.value));return c&&c!==b?[b,c]:[b]}).join("\n")}function I(a,b){let c=[{label:"工期",corpus:H({...b,project:[],quality:[],safety:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/工期|日历天|合同工期|计划工期/u},{label:"质量",corpus:H({...b,project:[],schedule:[],safety:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/质量目标|质量标准|验收|复验/u},{label:"安全",corpus:H({...b,project:[],schedule:[],quality:[],resources:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/安全|文明|风险|应急/u},{label:"资源",corpus:H({...b,project:[],schedule:[],quality:[],safety:[],preciseFacts:[],bills:[],drawings:[],rules:[],specifications:[]}),required:/资源|材料|设备|劳动力/u},{label:"工程量",corpus:H({...b,project:[],schedule:[],quality:[],safety:[],resources:[],preciseFacts:[],drawings:[],rules:[],specifications:[]}),required:/工程量|清单|建筑面积|长度|吨|台|套|项/u}],d=(0,e.K3)(a.replace(/\s+/gu,"")),f=[b.project,b.schedule,b.quality,b.safety,b.resources,b.preciseFacts,b.bills,b.drawings,b.rules,b.specifications].every(a=>0===a.length),g=[];for(let b of c){if(!b.required.test(a))continue;let c=[...new Set(b.corpus.split("\n").map(a=>a.replace(/\s+/gu,"")).filter(Boolean))];(0!==c.length||f)&&0===c.filter(a=>!(a.length<6)&&(!!(d.includes(a.slice(0,24))||a.length>24&&d.includes(a.slice(0,12)))||(a.match(/\d+(?:\.\d+)?(?:m2|hm2|m3|l|ml|mm|cm|km|m|kg|g|t|万元|亿元|元|天|工作天|月|年|h|min|%|permille|mpa|kpa|pa|kn|kw|mw|w|kv|v|ma|a|hz|℃|台|套|件|个|根|只|组|项|处|座|栋|层|间|批|次|人|工日|人日|亩)/gu)||[]).some(a=>a.length>=3&&d.includes(a)))).length&&g.push({level:"warning",message:`证据使用覆盖率偏低:正文中未明显使用${b.label}相关事实`,suggestion:`请在相应章节中引用至少一项${b.label}事实,避免只写通用表述。`})}return g}async function J(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,u.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 K(a,b){let c=[];if(!b)return c;let d=a.map(a=>`${a.title}
198
- ${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}var L=c(35547),M=c(31920),N=c(71536),O=c(65667);let P=[{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"],locations:"机械表、平面布置、进度保障、安全专项方案",kind:"equipment-counts"},{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 Q(a){return a.replace(/[\s,。;;::|]/gu,"").trim()}let R=/塔式起重机|履带吊|汽车吊|卷扬机|脚手架|扣件|钢管|模板|噪声|PM2\.5|PM10|TSP|扬尘在线监测|临电|消防|安全网|围挡|洗车台|沉淀池|雾炮/u,S=/不使用|不采用|不配置|无需|未采用|不得使用|禁止使用/u;function T(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(Q).filter(Boolean)}function U(a,b){return 0===b.length||b.some(b=>b.includes(a)||a.includes(b)||a.length>=4&&b.includes(a.slice(0,4)))}var V=c(37047),W=c(63516),X=c(42750),Y=c(86710);let Z=["电梯","幕墙","智能化","消防","暖通","给排水","电气","燃气","人防","室外","园林","绿化","景观","钢结构","防水","保温","门窗","通风","空调","防雷","接地","动力","照明","拆除","加固","装修","装饰"];var $=c(27625);let _=/[二三四五六七八九十\d]{1,4}\s*个?\s*阶段/u,aa={一:1,二:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};function ab(a){return/(\d+|[一二三四五六七八九十]+)\s*个?\s*阶段/u.exec(a)?.[1]??null}function ac(a){let b=a.map(ab).filter(a=>null!==a).map(a=>/^\d+$/u.test(a)?parseInt(a,10):/^[一二三四五六七八九十]+$/u.test(a)?"十"===a?10:1===a.length?aa[a]??null:a.startsWith("十")?10+(aa[a[1]]??0):a.endsWith("十")?(aa[a[0]]??0)*10:(aa[a[0]]??0)*10+(aa[a[2]]??0):null).filter(a=>null!==a);return 0===b.length?null:1===new Set(b).size?b[0]:null}async function ad(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=>{var b;if(a.length<8||a.length>60)return!1;let c=_.exec(a);return null!==c&&(b=c.index,!/[、,,]/u.test(a.slice(Math.max(0,b-12),b)))}))];if(b.length<2)return[];let c=await (0,V.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(ac).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:"全文统一阶段划分口径:以总进度计划/施工部署章节的划分为唯一口径,其余章节划分句逐字对齐或删除。",provenance:{detectorId:"stage-phrasing",fingerprint:(0,G.c6)(`stage-phrasing\u0000${[...h].sort().join("\x01")}`)}}]}var ae=c(19329),af=c(70208),ag=c(34666),ah=c(10751),ai=c(76193),aj=c(38049),ak=c(68977);let al={基坑工程:/基坑|土方开挖|基坑支护|槽/u,模板工程及支撑体系:/模板|支撑体系|支模|满堂架/u,起重吊装及起重机械安装拆卸工程:/起重|吊装|塔式起重机|塔吊|吊篮|安装拆卸/u,脚手架工程:/脚手架|外架|附着式升降/u},am={superHazardous:/超过一定规模的危大(?:工程)?|超危大/u,hazardous:/属(?:于)?(?:危大(?:工程)?|危险性较大)/u,notHazardous:/不属(?:于)?(?:危大|危险性较大)|未达(?:到)?危大/u},an=/(?:开挖深度|搭设高度|搭设跨度|起吊重量|单件起吊|施工总荷载|集中线荷载)\s*(?:超过|不小于|≥|大于等于|达到)\s*[\d.]+\s*(?:m|kN|kN\/m2|kN\/m²|kN\/m)/u,ao=/本项目|本工程|实际|实测|经核|依据清单|工程量清单载明/u;var ap=c(52922),aq=c(10025);c(12863),c(7148);var ar=c(31846),as=c(31530),at=c(59873),au=c(98632);function av(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=/^\s*\|(.+)\|\s*$/u.exec(c);if(a){let c=(a[1]??"").split("|").map(a=>a.trim()),d=c[0]??"",e=c[1]??"";c.length>=2&&d&&e&&!/^[-:\s]+$/u.test(e)&&b.push({label:d,value:e});continue}for(let a of c.matchAll(/([一-龥A-Za-z]{2,10})\s*[::]\s*([^。;\n|,,]{1,40})/gu)){let c=(a[1]??"").trim(),d=(a[2]??"").trim();c&&d&&b.push({label:c,value:d})}}return b}let aw=new Set(["项目名称","建设地点","建设规模"]);function ax(a,b){let c=new Set;for(let a of b||[]){let b=String(a??"").trim();b.length>=2&&c.add(b)}for(let b of av(a)){let a=(0,l.hf)(b.label,b.label);if(!aw.has(a)||(0,l.oj)(b.value))continue;let d=(0,l.Jo)(b.value).value.trim();for(let a of(d.length>=2&&c.add(d),d.split(/[,,、;;]/u))){let b=a.trim();b.length>=4&&c.add(b)}}return[...c]}function ay(a){return String(a||"").replace(/\s+/gu,"")}function az(a){return ay(a).replace(/(\d{4})年(\d{1,2})月(\d{1,2})日/u,(a,b,c,d)=>`${b}年${Number(c)}月${Number(d)}日`)}function aA(a){let b=/([\d,]+(?:\.\d+)?)\s*(亿元|万元|元)/u.exec(ay(a));if(!b)return ay(a);let c=Number((b[1]??"").replace(/,/gu,""))*("亿元"===b[2]?1e8:"万元"===b[2]?1e4:1);return Number.isFinite(c)?`${c.toFixed(2)}元`:ay(a)}function aB(a,b){let c=(0,aq.dm)(a);if(c!==(0,aq.dm)(b))return!0;if("date"===c)return az(a)===az(b);if("money"===c)return aA(a)===aA(b);if("measure"===c||"spec"===c){let c=(0,as.Bk)(a),d=(0,as.Bk)(b);if(void 0!==c&&void 0!==d)return c===d}return(0,m.LD)(ay(a))===(0,m.LD)(ay(b))}let aC=/\d+(?:\.\d+)?\s*(?:m2|m3|m²|m³|㎡|m|km|kg|t|吨|个|座|套|台|根|块|樘|扇|片|组|件|孔|盏|项|处|层|日历天|天|%)/gu;var aD=c(81892),aE=c(91943),aF=c(54185),aG=c(75251),aH=c(19245);async function aI(a){let b=await (0,x.Z2)(a.markdown,a.factsModel,{scopeClassifier:a.factTokenScopeClassifier}),c=new Set((a.truthValues||[]).flatMap(a=>a.superseded||[]).map(a=>(0,e.K3)(a))),f=(0,w.un)({template:a.template,chapters:a.template.chapters,materialText:a.chapters.map(a=>a.title).join(" ")}),g=(0,W.Uk)(a.tenderRequirements).map(({item:a})=>(0,W.E6)(a)),h=a.markdown.split(/\n/u).filter(a=>/^#{2,4}\s/u.test(a.trim())).map(a=>(0,W.NT)(a)).filter(Boolean).slice(0,80),i=(0,y.s3)(a.markdown,y.ev),j=await (0,V.Mv)(g,[...h,...i]),k=await (0,V.Mv)(a.evaluationCriteriaItems||[],h),m=new Map((await Promise.all(a.chapters.map(async b=>[b.title,await a.professionalDepthClassifier.analyze(b.content)]))).filter(a=>!!a[1]));return[...(0,ai.yT)("toc-consistency",()=>a.promptDocumentRules?.forbidToc?[]:[...(0,x.gN)(a.markdown),...(0,x.f8)(a.markdown)]),...(0,ai.yT)("hazard-grade-consistency",()=>(function(a){var b;let c=(b=a.markdown,a.bindings.map(a=>{let{conclusion:c,excerpt:d}=function(a,b){let c=al[b];for(let b of a.split(/[。;;!?!?\n]/u).map(a=>a.trim()).filter(a=>a.length>0)){if(!c.test(b))continue;let a=b.slice(0,240);if(am.notHazardous.test(b))return{conclusion:"不属危大",excerpt:a};if(am.superHazardous.test(b))return{conclusion:"属超过一定规模的危大",excerpt:a};if(am.hazardous.test(b))return{conclusion:"属危大",excerpt:a}}return{conclusion:null,excerpt:""}}(b,a.category),e={category:a.category,canonical:a.conclusion,written:c,basis:a.basis,excerpt:d};return null===c?{...e,verdict:"absent"}:c!==a.conclusion?{...e,verdict:"contradicted"}:"不属危大"!==a.conclusion&&!ao.test(d)&&an.test(d)?{...e,verdict:"unbound"}:{...e,verdict:"consistent"}})),d=[];for(let a of c){if("consistent"===a.verdict)continue;let b={category:"fact_consistency",owner:"llm",repairability:"llm_repairable",sectionTitle:"危大工程",provenance:{detectorId:"hazard-grade-consistency",fingerprint:`hazard\u0000${a.category}`}};if("contradicted"===a.verdict){let c="不属危大"===a.canonical?`正文把${a.category}写成「${a.written}」,而本项目参数对照阈值表判定**不属危大**——这是**编造危大**,评标专家核对清单即可发现`:"不属危大"===a.written?`正文把${a.category}写成「不属危大」,而本项目参数对照阈值表判定「${a.canonical}」——这是**漏判危大**,属安全合规红线`:"属超过一定规模的危大"===a.written?`正文把${a.category}写成「属超过一定规模的危大」,而本项目参数只达「属危大」档——**越档升级**:超危大要求专家论证,按更高的档位表述会与清单参数对不上,评标核对即发现`:`正文把${a.category}写成「属危大」,而本项目参数已达「属超过一定规模的危大」档——**降档漏判**:达到超危大档的须组织专家论证,降档表述会漏掉这道法定程序`;d.push({...b,level:"error",severity:"blocker",message:`危大分级与资料矛盾(${a.category}):${c}。判定依据:${a.basis}`,suggestion:`按资料实测参数改写${a.category}的危大分级结论为「${a.canonical}」,并逐项写明「本项目实际参数 + 判定阈值对照 + 结论」三要素;不得只抄规范阈值。`});continue}if("unbound"===a.verdict){d.push({...b,level:"error",severity:"blocker",message:`危大分级未绑定本项目参数(${a.category}):正文出现「属危大」结论但该判定窗口内只有规范阈值句、没有本项目实际参数——只抄规范阈值不落地本项目,评审视为未响应。`,suggestion:`在${a.category}判定处补写本项目实测参数(如「本项目 XX 实测 Nm,对照 XX 条款 ≥Xm 门槛,判定属危大工程」);参数取自资料原文,不得编造。`});continue}"不属危大"!==a.canonical&&d.push({...b,level:"error",severity:"blocker",message:`危大分级结论缺失(${a.category}):资料判定「${a.canonical}」,正文未在本类别语境下给出分级结论。判定依据:${a.basis}`,suggestion:`在危大工程清单/安全章补写${a.category}的分级判定(本项目实际参数 + 阈值对照 + 结论三要素)。`})}return d})({markdown:a.markdown,bindings:(0,ak.ym)(a.materialEvidence||[],function(a){let b={};for(let c of a?.preciseFacts||[]){let a=`${c.fieldId||""} ${c.fieldName||""} ${c.key||""}`;/基坑|开挖|挖土|槽/u.test(a)&&/深度/u.test(a)&&"string"==typeof c.value&&(b[c.fieldName||c.fieldId||"基坑开挖深度"]=c.value)}return b}(a.factsModel))})),...(0,ai.yT)("emergency-plan-coverage",()=>(0,ap.mL)(a.markdown).map(a=>({level:"warning",severity:"warning",category:"professional_chain",message:`应急专项预案未覆盖本项目实际风险源:${a.plan}(${a.why})`,suggestion:`在应急管理章补编「${a.plan}」专项应急预案(含应急组织、响应流程、物资与演练安排);风险源证据取自本项目正文,不得以「本项目不涉及」回避有作业证据的风险。`,provenance:{detectorId:"emergency-plan-coverage",fingerprint:`emergency-plan-coverage\u0000${a.plan}`}}))),...(0,ai.yT)("field-value-authority",()=>(function(a){let b=[],c=String(a.markdown||"");if(!c)return b;let d=new Map;for(let b of a.resolved||[]){let a=String(b.attribute||"").trim(),c=String(b.value||"").trim();a&&c&&(d.has(a)||d.set(a,b))}if(0===d.size)return b;let e=new Set;for(let a of av(c)){if(b.length>=8)break;let c=(0,l.hf)(a.label,a.label),f=c?d.get(c):void 0;if(!f)continue;let g=String(a.value||"").trim();if(!g||g.length>40||(0,l.oj)(g)||(0,l.j4)(g)||function(a){let b=new Set;for(let c of a.matchAll(aC))if(b.add(c[0].replace(/\s+/gu,"")),b.size>=2)return!0;return!1}(g))continue;let h=(0,l.Jo)(g).value.trim();if(!h||h.length>40)continue;let i=(0,aq.dm)(h);if("text"===i||i!==(0,aq.dm)(f.value)||aB(h,f.value))continue;let j=`${c}\u0000${h}`;if(e.has(j))continue;e.add(j);let k=f.superseded.some(a=>aB(h,a)),m=f.evidence[0]?.source||"—";b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"field-value-authority",fingerprint:(0,G.c6)(`${c}\u0000${h}`)},message:`字段值-权威值不符:正文「${c}」写作「${h}」,真值层裁决的现行值为「${f.value}」(裁决 ${f.rule};依据 ${m})${k?"——正文所用「"+h+"」是账本登记的**被取代值**(已作废口径)":""}`,suggestion:`将「${c}」改为真值层现行值「${f.value}」(数值、单位、日期形态一并照写);若确需交代变更过程,必须写成「原为${h},经答疑澄清变更为${f.value}」,不得单独以旧值陈述现状。`})}return b})({markdown:a.markdown,resolved:a.truthValues||[]})),...(0,ai.yT)("four-news-substance",()=>(function(a){let b=[],c=String(a.markdown||"");if(!c)return b;let d=(0,ap.T4)(c);if(0===d.found.length)return b;let e=ax(c,a.projectEntities),f=!!a.templating&&(0,at.h)(a.templating),g=c.split(/[。;;\n]+/u).map(a=>a.trim()).filter(a=>a.length>=4);if(e.length>0)for(let a of d.found){if(b.length>=8)break;let c=g.filter(b=>b.includes(a));0!==c.length&&(c.some(a=>e.some(b=>a.includes(b)))||b.push({level:"info",severity:"suggestion",category:"professional_chain",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"four-news-substance",fingerprint:(0,G.c6)(`entity\u0000${a}`)},message:`四新升级价值未落到本项目实体:技术「${a}」在正文出现 ${c.length} 处,但每一处所在句都不含本项目实体(清单条目/图纸参数/项目类型/建设地点)——该价值表述换个项目同样成立(首处:“${c[0].slice(0,60)}”;本次实体基准:${e.slice(0,6).join("、")}${e.length>6?` 等 ${e.length} 项`:""})`,suggestion:`把「${a}」的升级价值写成本项目口径:挂到具体部位/清单条目/图纸参数(节点部位、规格型号、工程量)并给出可核对的量化收益;判定面是"该论断能否追到本项目某个具体事实",不是"句子像不像价值表述"。`}))}for(let a of(0,ap.ge)((0,ap.Du)(c))){if(b.length>=8)break;let c=d.found.filter(b=>a.includes(b));0!==c.length&&(ap.h1.test(a)||b.push({level:"info",severity:"suggestion",category:"professional_chain",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"four-news-substance",fingerprint:(0,G.c6)(`difficulty\u0000${c.join("、")}\u0000${a.slice(0,120)}`)},message:`重难点条目含四新技术声明但无量化目标,从未进入语义复核面:条目“${a.slice(0,60)}”声明了 ${c.join("、")},却无「数值+单位/频次」形态的控制目标(窄触发面 ${f?"已命中":"未命中"}——窄触发面按整篇信号开火,看不见这一条)`,suggestion:`按 templatingReview 第 3 条逐条复核该条目的四新升级价值(是否停留在"提升效率"式套话、能否对标官方推广目录或替代落后工艺),并补齐该条目的量化控制目标;若确无量化口径,须改为可核对的定性验收标准。`}))}return b})({markdown:a.markdown})),...(0,ai.yT)("chapter-focus-mustcover",()=>a.chapters.flatMap(a=>{let b=(0,aD.uQ)(a.title,f);return b?(0,aj.$6)({chapterId:a.id,chapterTitle:a.title,chapterText:a.content,mustCover:b.mustCover}):[]})),...(0,ai.yT)("section-numbering",()=>(0,x.Jn)(a.markdown)),...(0,ai.yT)("section-count-overflow",()=>(0,x.VW)(a.chapters)),...(0,ai.yT)("heading-duplicate",()=>(0,x.kw)(a.markdown)),...(0,ai.yT)("structure-integrity",()=>(0,aE.dC)(a.markdown,{excludeKinds:["truncated-line"]})),...(0,ai.yT)("truncated-sentence",()=>(0,aE.kj)(a.markdown)),...(0,ai.yT)("templated-label",()=>(0,aF.D9)(a.markdown)),...(0,ai.yT)("title-integrity",()=>(0,aF.uw)(a.markdown)),...(0,ai.yT)("evaluation-criteria-coverage",()=>(0,x.wl)(a.markdown,a.evaluationCriteriaItems||[],{semanticSimilarity:k})),...await (0,ai.ll)("requirements-coverage",()=>(0,W.tH)({markdown:a.markdown,entries:(0,W.Uk)(a.tenderRequirements).map(({item:a})=>a),bodyTexts:i,semanticSimilarity:j})),...(0,ai.yT)("fabricated-start-date",()=>(0,y.cf)(a.markdown,a.factsModel,a.materialEvidence)),...(0,ai.yT)("field-value-mismatch",()=>(0,y.a8)(a.markdown,a.factsModel)),...(0,ai.yT)("area-arithmetic",()=>(0,y.u2)(a.markdown)),...(0,ai.yT)("resource-consistency",()=>(0,y.rA)(a.markdown,{laborPeakAuthority:(0,ah.yB)(a.blueprintData)})),...(0,ai.yT)("node-schedule-consistency",()=>(0,y.Et)(a.markdown)),...(0,ai.yT)("cross-section-numeric-conflict",()=>(0,y.H)(a.markdown)),...(0,ai.yT)("fact-reconciliation",()=>(0,aG.az)({markdown:a.markdown,billFactLock:a.billFactLock,blueprintData:a.blueprintData,factsModel:a.factsModel})),...(0,ai.yT)("greening-maintenance-mismatch",()=>(0,y.x5)(a.markdown,a.factsModel)),...(0,ai.yT)("street-light-count-mismatch",()=>(0,y.Tz)(a.markdown,a.factsModel)),...(0,ai.yT)("spec-location-mismatch",()=>(0,y.$$)(a.markdown,a.factsModel.specAuthorityMap)),...await (0,ai.ll)("blueprint-citation-consistency",async()=>a.blueprintData?(await (0,ag.dr)(a.markdown,a.blueprintData)).filter(a=>"error"===a.level):[]),...await (0,ai.ll)("cross-project-value-copy",()=>(0,y.iy)(a.markdown,(0,ah.L$)(a.blueprintData))),...(0,ai.yT)("phase-labor-mixing",()=>(0,y.cv)(a.markdown,(0,ah.i2)(a.blueprintData))),...(0,ai.yT)("equipment-batch-conflict",()=>(0,y.KE)(a.markdown,(0,ah.Be)(a.blueprintData))),...(0,ai.yT)("preliminary-action-timing",()=>(0,y.fg)(a.markdown,a.blueprintData?.contract.totalDays)),...(0,ai.yT)("foundation-form-residue",()=>(0,y.ex)(a.markdown)),...(0,ai.yT)("ambiguous-either-or",()=>(0,y.Fr)(a.markdown)),...(0,ai.yT)("excavation-depth-lock",()=>(0,y.bq)(a.markdown)),...(0,ai.yT)("excavation-hazard-classification",()=>(0,y.LA)(a.markdown,a.factsModel)),...(0,ai.yT)("support-form-fact-consistency",()=>(0,y.ek)(a.markdown,a.factsModel)),...(0,ai.yT)("equipment-entry-timing",()=>(0,y.fQ)(a.markdown,a.factsModel)),...(0,ai.yT)("fabricated-award",()=>(0,y.hu)(a.markdown,a.factsModel,a.tenderRequirements)),...(0,ai.yT)("bidder-qualification-section",()=>(0,y.Rv)(a.markdown)),...(0,ai.yT)("cross-chapter-duplicate-section",()=>(function(a,b){let c=a=>a.replace(/^\d+(?:\.\d+)*[、..\s]*/u,"").replace(/[\s,,、]/gu,""),d=new Map;a.forEach((a,b)=>{let c=(0,af.GQ)(a.title).replace(/[\s,,、]/gu,"");c&&!d.has(c)&&d.set(c,b)});let e=new Map,f=new Map;a.forEach((a,b)=>{let d=new Set;for(let g of(a.content||"").split(/\r?\n/u)){let a=/^###\s+(.+?)\s*$/u.exec(g.trim());if(!a)continue;let h=c(a[1]);if(h.length<8||d.has(h))continue;d.add(h),f.has(h)||f.set(h,a[1].replace(/^\d+(?:\.\d+)*[、..\s]*/u,"").trim());let i=e.get(h)||[];i.push(b),e.set(h,i)}});let g=new Map;b.forEach(a=>{let b=d.get((0,af.GQ)(a.title).replace(/[\s,,、]/gu,""));if(void 0!==b)for(let d of a.sections||[]){let a=c(d);if(a.length<8)continue;let e=g.get(a)||[];e.includes(b)||e.push(b),g.set(a,e)}});let h=[];for(let[b,c]of e){if(c.length<2)continue;let d=g.get(b)||[];if(d.length>=2)continue;let e=1===d.length?d[0]:c[0],i=f.get(b)||b;for(let b of c){if(b===e)continue;let c=a[b];h.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",chapterId:c.id,sectionTitle:i,message:`跨章同名小节:“${i}”已在「${a[e].title}」落位,本章(「${c.title}」)同名小节属跨章串章重复,须改写归并`,suggestion:"同一主题小节全文只保留一处(归属章);非归属章的同名小节:内容与本章主题相关则改写标题为可区分的具体主题并归并内容,与本章无关则整节删除(含标题行);修复后全文不得再出现跨章同名小节。"})}}return h})(a.chapters,a.effectiveChapters||a.template.chapters||[])),...(0,ai.yT)("basic-info-schedule-field",()=>(0,y.cT)(a.markdown)),...(0,ai.yT)("duplicate-table",()=>(0,y.ub)(a.markdown)),...(0,ai.yT)("duplicate-paragraph",()=>(0,y.cl)(a.markdown)),...(0,ai.yT)("paragraph-near-duplicate",()=>(0,L.w9)(a.markdown)),...(0,ai.yT)("paragraph-tail-repeat",()=>(0,y.AD)(a.markdown)),...(0,ai.yT)("collision-numbered-heading",()=>(0,y.xR)(a.markdown)),...(0,ai.yT)("inverted-date-range",()=>(0,y.jP)(a.markdown)),...(0,ai.yT)("resource-triad-section-hierarchy",()=>(0,y.zP)(a.markdown)),...await (0,ai.yT)("support-system-conflict",()=>(0,y.r8)(a.markdown,(0,y.P3)(a.factsModel))),...(0,ai.yT)("dangerous-list-consistency",()=>(0,y.vH)(a.markdown)),...(0,ai.yT)("hazard-exclusion-contradiction",()=>(0,y.m6)(a.markdown)),...await (0,ai.yT)("six-hundred-percent-coverage",()=>(0,y.sn)(a.markdown,{chapterTitles:(a.effectiveChapters||a.template.chapters||[]).map(a=>a.title)})),...await (0,ai.yT)("self-undermining-candidate",()=>(0,y.YN)(a.markdown)),...(0,ai.yT)("paragraph-opening-repeat",()=>(0,y.y2)(a.markdown)),...(0,ai.yT)("flow-form-repeat",()=>(0,aF.Q9)(a.markdown)),...(0,ai.yT)("skeleton-fingerprint",()=>(0,aF.o0)(a.markdown)),...(0,ai.yT)("sentence-pattern-repeat",()=>(0,aF.TN)(a.markdown)),...(0,ai.yT)("sentence-tail-repeat",()=>(0,aF.Jw)(a.markdown)),...(0,ai.yT)("repeated-word",()=>(0,y.Xc)(a.markdown)),...await (0,ai.yT)("commercial-data-in-body",()=>(0,y.mC)(a.markdown)),...(0,ai.yT)("overview-recap",()=>(0,y.l4)(a.markdown)),...(0,ai.yT)("closure-phrase-density-cap",()=>(0,y.dF)(a.markdown)),...await (0,ai.ll)("parameter-concept-conflict",()=>(0,X.Qg)(a.markdown,{billFactLock:a.billFactLock,blueprintQuantities:a.blueprintData?.quantities})),...await (0,ai.ll)("internal-terminology-anchor",()=>(0,z.WT)(a.markdown)),...(0,ai.yT)("construction-system-coverage",()=>(function(a){let b=[...new Set(a.flatMap(a=>Z.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}]})(a.chapters)),...(0,ai.yT)("dangerous-applicability",()=>(0,$.e6)(a.markdown)),...(0,ai.yT)("innovation-tech-coverage",()=>(0,x.Ef)(a.markdown,a.effectiveChapters||a.template.chapters||[])),...(0,ai.yT)("instruction-like-heading",()=>(0,x.K1)(a.markdown)),...(0,ai.yT)("formal-heading-hierarchy",()=>(0,x.Fv)(a.markdown)),...(0,ai.yT)("formal-content-integrity",()=>(0,x.k0)(a.markdown)),...(0,ai.yT)("punctuation-artifact",()=>(0,x.vZ)(a.markdown)),...(0,ai.yT)("table-quality",()=>(0,x.NS)(a.markdown)),...(0,ai.yT)("table-spam",()=>(0,x.SN)(a.markdown)),...(0,ai.yT)("basis-regulations-coverage",()=>(0,x.AN)(a.markdown,a.blueprintData,{chapterTitles:(a.effectiveChapters||a.template.chapters||[]).map(a=>a.title)})),...(0,ai.yT)("basis-regulations-cross",()=>(0,aH.Yw)(a.markdown)),...(0,ai.yT)("resource-breakdown-consistency",()=>(0,x.EJ)(a.markdown,a.blueprintData,a.billFactLock)),...(0,ai.yT)("section-content-integrity",()=>(0,x.qK)(a.markdown,a.chapters)),...(0,ai.yT)("professional-content",()=>(0,x.ji)(a.chapters,m)),...(0,ai.yT)("professional-score",()=>(0,x.i0)(a.chapters,m)),...(0,ai.yT)("generic-professional-content",()=>(0,x.ST)(a.chapters,m)),...(0,ai.yT)("management-measure-number",()=>(0,x.xX)(a.chapters,m)),...await (0,ai.yT)("closed-loop-density",()=>(0,x.Zu)(a.markdown)),...await (0,ai.yT)("cross-chapter-consistency",()=>(0,x.qm)(a.markdown,a.factsModel,a.scopeConflicts,m)),...await (0,ai.yT)("process-spec-conflict",()=>(0,x.hr)(a.markdown,a.factsModel)),...(0,ai.yT)("evidence-usage-coverage",()=>I(a.markdown,a.factsModel)),...await (0,ai.yT)("paragraph-generic",()=>J(a.markdown,a.professionalDepthClassifier)),...await (0,ai.yT)("construction-org-generic-language",()=>(0,E.Fw)(a.chapters)),...(0,ai.yT)("construction-org-control-loop",()=>(0,E.Hl)(a.chapters)),...(0,ai.yT)("construction-org-professional-chain",()=>(0,E.iX)({markdown:a.markdown,factsModel:a.factsModel,chapters:a.chapters})),...(0,ai.yT)("construction-org-consistency",()=>(function(a,b){let c=[];if(!/施工组织设计|施工组织|施组|质量|安全|文明施工/u.test(a))return c;for(let d of P){if("equipment-counts"===d.kind){c.push(...function(a,b,c){let d=(0,O.AK)(a);if(0===d.length)return[];let{names:e,counts:f}=function(a,b){let c=[],d=new Map,e=a=>{c.includes(a)||c.push(a)};for(let c of b){let b=a[c];if(Array.isArray(b))for(let a of b){if(!a||"object"!=typeof a||!("value"in a)||"string"!=typeof a.value)continue;for(let b of(0,O.AK)(a.value))e(b.name),d.has(b.name)||d.set(b.name,b.count);let b=Q(a.value);if(b.length>12||/\d/u.test(b))continue;let c=(0,O.Rh)(b);c&&e(c)}}return{names:c,counts:d}}(b,c.factGroups);if(0===e.length)return[];let g=[],h=new Map,i=[],j=new Set;for(let a of d){let b=e.find(b=>U(a.name,[b]));if(b){let c=f.get(b);if(void 0===c||c===a.count)continue;let d=`${a.name}:${[a.count,c].sort((a,b)=>a-b).join("-")}`;if(j.has(d))continue;j.add(d),i.push(`${a.name}:正文 ${a.count} 台、资料 ${c} 台`);continue}if(R.test(a.name))continue;let c=h.get(a.name);(!c||a.raw.length<c.length)&&h.set(a.name,a.raw)}if(h.size>0){let a=[...h].map(([a,b])=>b.length-a.length<=1?b:a).slice(0,5);g.push({level:"warning",message:`施组数据一致性风险:机械数量型号 可能与项目图谱/事实不一致(${a.join("、")})`,suggestion:`请核对机械数量型号在${c.locations}中的表述,统一以招标文件、项目图谱和可信事实为准。`})}return i.length>0&&g.push({level:"warning",message:`施组数据一致性风险:机械数量型号 正文台数与项目图谱/事实不一致(${i.slice(0,5).join(";")})`,suggestion:`同一机械台数全文档只允许一套口径:请以资料事实/项目图谱中的机械配置为准统一${c.locations}中的台数表述(正文与资料并存时以资料为准)。`}),g}(a,b,d));continue}let e=T(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=Q(d[1]||d[0]||"");!S.test(a)&&a.length>=2&&a.length<=80&&c.push(a)}}return[...new Set(c)]})(a,d.patterns??[]).filter(a=>!R.test(a)&&!U(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)),...(0,ai.yT)("construction-org-chapter-data-coverage",()=>(function(a,b){let c=[],d=T(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,ai.yT)("construction-org-major-content",()=>(0,E.Av)(a.chapters,a.markdown)),...(0,ai.yT)("construction-org-division-section",()=>(0,E.CS)(a.chapters,a.markdown)),...(0,ai.yT)("major-content-governance",()=>(0,E.l5)(a.markdown)),...(0,ai.yT)("construction-org-bonus-module",()=>(0,E.b7)(a.chapters)),...(0,ai.yT)("chapter-dependency",()=>K(a.chapters,m)),...(0,ai.yT)("document-delivery-score",()=>(function(a,b,c,d){let e=(d?.size??0)>0,f={factuality:(0,u.V7)(a)>=80,structure:b.length>0,depth:e,executable:e,evidence:b.length>0},g={factuality:2*!(0,x.vY)(a,c).some(a=>"error"===a.level),structure:b.length>0&&b.every(b=>a.includes(b.title)&&(0,u.V7)(b.content)>=600)?2:1,depth:0===(0,x.i0)(b,d).length?2:1,executable:0===K(b,d).length?2:1,evidence:0===I(a,c).length?2:1},h=Object.keys(g).filter(a=>f[a]),i=Object.keys(g).filter(a=>!f[a]),j=h.reduce((a,b)=>a+g[b],0),k=2*h.length,l={factuality:"事实",structure:"结构",depth:"专业",executable:"可执行",evidence:"证据"},m=i.map(a=>l[a]).join("、");return[{level:"info",message:`文档交付评分报告:总分 ${j}/${k}(已测 ${h.length}/5 维),`+h.map(a=>`${l[a]}${g[a]}`).join(",")+(i.length>0?`;**未测维度(本次无输入,未计分)**:${m}`:""),suggestion:i.length>0?`存在未测维度(${m}):该部分本次**未被核验**,本分数不构成放行依据;请补齐输入(章草稿/AI 分析)后重跑。`:j>=.8*k?"可交付,但建议继续优化证据使用覆盖率和章节依赖链路。":"建议优先修复低分维度后再导出。"}]})(a.markdown,a.chapters,a.factsModel,m)),...(0,ai.yT)("generated-fact-verification",()=>b),...(0,ai.yT)("numeric-traceability",()=>(0,F.FA)(a.markdown,a.factsModel)),...(0,ai.yT)("table-arithmetic-consistency",()=>(0,y.qE)(a.markdown)),...(0,ai.yT)("duplicate-basic-info",()=>(0,x.iC)(a.markdown)),...await (0,ai.yT)("formal-style",()=>(0,x.BV)(a.markdown)),...(0,ai.yT)("tertiary-heading",()=>(0,r.dh)(a.markdown)),...(0,ai.yT)("min-chapter-section",()=>(0,x.Ty)(a.chapters)),...(0,ai.yT)("hollow-table-cell",()=>(0,x.cG)(a.markdown)),...(0,ai.yT)("schedule-duration-overrun",()=>(0,x.v4)(a.markdown)),...(0,ai.yT)("stage-schedule-consistency",()=>(0,x.KQ)(a.markdown)),...(0,ai.yT)("caliber-consistency",()=>[...(0,x.lg)(a.markdown,a.truthValues||[]),...(0,Y.Y)(a.markdown,a.clarificationAmendments)]),...(0,ai.yT)("hazard-parameter-binding",()=>(0,x.Bs)(a.markdown,a.truthValues||[])),...(0,ai.yT)("blueprint-value-placement",()=>(0,x.uy)(a.markdown,a.blueprintData)),...(0,ai.yT)("dangling-conjunction",()=>(0,x.Dy)(a.markdown)),...(0,ai.yT)("planned-section-placement",()=>(0,x.hd)(a.markdown,a.chapters)),...await (0,ai.yT)("precise-fact-usage",()=>(0,x.N1)(a.markdown,a.factsModel,a.chapters)),...(0,ai.yT)("parameter-obligation-usage",()=>(0,d.bs)(a.markdown,a.factsModel,a.chapters,{supersededValues:c})),...await (0,ai.yT)("boq-placement",()=>(0,x.S2)(a.markdown,a.chapters,a.factsModel)),...await (0,ai.yT)("stage-phrasing",()=>ad(a.markdown)),...await (0,ai.yT)("emergency-section-depth",()=>(0,ae.E)(a.markdown)),...(0,ai.yT)("boq-row-trace",()=>(0,F.QP)((0,F.JV)(a.markdown,a.factsModel))),...(0,ai.yT)("drawing-reference",()=>(0,x.yd)(a.markdown,a.drawingFactLock)),...(0,ai.yT)("drawing-pointer-phrase",()=>(0,x.D0)(a.markdown)),...(0,ai.yT)("atlas-reference-phrase",()=>(function(a){let b=(0,M.St)(a);return 0===b.length?[]:[{level:"error",severity:"blocker",category:"format",owner:"system",repairability:"local_deterministic",message:`正文出现图集/标准图指向替代做法 ${b.length} 处(如「${[...new Set(b)].slice(0,3).join("」「")}」):做法必须写进正文,不得让评标人回查图集`,suggestion:"写出具体做法(尺寸/材料/构造参数/工艺要求)替代指向短语;规范/法规引用(书名号内为规范名,或标题后紧跟 GB/JGJ/CJJ 类标准代号)不属本判据范围,保留不动。"}]})(a.markdown)),...(0,ai.yT)("source-enumeration",()=>(0,r.bx)(a.markdown).filter(a=>a.message.includes("资料来源罗列话术"))),...(0,ai.yT)("meta-discourse-declaration",()=>(0,L.nm)(a.markdown)),...(0,ai.yT)("finish-thickness",()=>(0,L.WY)(a.markdown)),...(0,ai.yT)("formula-residue",()=>(0,L.ON)(a.markdown)),...(0,ai.yT)("web-evidence-leakage",()=>(0,N.Eu)(a.markdown)),...(0,ai.yT)("formal-placeholder",()=>(0,x.bM)(a.markdown)),...(0,ai.yT)("prompt-example-leak",()=>(0,x.M$)(a.markdown,a.promptIds)),...(0,ai.yT)("degenerate-content",()=>(0,x.AC)(a.markdown,a.chapters)),...(0,ai.yT)("planned-auto-spec-gate",()=>(0,x.mR)(a.markdown,a.template)),...(0,ai.yT)("bid-composition-body-table",()=>(0,r.NN)(a.markdown,{bodyTableForbidden:a.bodyTableForbidden,plannedChapterTitles:(a.effectiveChapters?.length?a.effectiveChapters:a.template.chapters).filter(a=>(a.tablePlans?.length||0)>0||(a.tableSections?.length||0)>0||(a.diagramRequirements?.length||0)>0).map(a=>a.title),requiredTableTitles:a.promptDocumentRules?.requiredTables||[]})),...(0,ai.yT)("bid-composition-body-figure",()=>(0,r.Fo)(a.markdown,a.bodyFigureForbidden)),...(0,ai.yT)("identity-marks-forbidden",()=>(0,y.Vl)(a.markdown,a.identityMarksForbidden)),...(0,ai.yT)("planned-structure",()=>(0,r.UG)(a.markdown,a.template,a.bodyTableForbidden)),...(0,ai.yT)("table-caption",()=>(0,r.XU)(a.markdown,a.bodyTableForbidden)),...await (0,ai.yT)("prompt-document-rule",()=>(0,r.Ed)(a.markdown,a.promptDocumentRules,void 0,{bodyTableForbidden:a.bodyTableForbidden,coverForbidden:a.coverForbidden})),...await (0,ai.yT)("local-adaptation-keyword",()=>(0,y.cJ)(a.markdown,a.factsModel)),...(0,ai.yT)("boq-division-coverage",()=>(0,F.sl)(a.markdown,a.chapters,a.factsModel))]}let aJ={project:"项目基础事实",schedule:"工期与节点",quality:"质量目标与验收",safety:"安全文明要求",resources:"资源投入依据",quantities:"清单/图纸/工程量事实",rules:"规范规则与验收要求"};var aK=c(43378),aL=c(31263),aM=c(47843),aN=c(27827);let aO={requirement:.3,structure:.15,dataAnchor:.2,professionalDepth:.15,compliance:.1,factIntegrity:.1},aP={anchors:.85,modules:.15},aQ={execution:.45,figure:.35,caption:.2,appendix:.75,bodyCompliance:.25},aR={boq:.4,parameters:.3,drawing:.15,authority:.15},aS={selfHarm:.25,placeholder:.2,length:.15,tableConsistency:.2,regulation:.2},aT={reconciliation:.6,binding:.2,keyFacts:.2},aU=/规格-数值绑定|名称-数值绑定|合计值/u,aV=/编制依据对账缺口/u,aW=/无主数值审计失败/u,aX={selfHarm:/自伤表述/u,placeholder:/占位符|占位式表达/u,length:/正文篇幅/u};function aY(a){let b=a.filter(a=>null!==a.value&&Number.isFinite(a.value));if(0===b.length)return{value:null};let c=b.reduce((a,b)=>a+b.weight,0);return{value:b.reduce((a,b)=>a+b.value*b.weight,0)/c,detail:b.map(a=>a.detail).filter(a=>!!a).join("、")||void 0}}async function aZ(a,b){if(!b)return{value:null};let c=a.filter(a=>(0,u.V7)(a.content)>=800);if(0===c.length)return{value:null};let d=[],e=await Promise.all(c.map(a=>b.analyze(a.content).catch(b=>{d.push(`${a.title}:${b instanceof Error?b.message:String(b)}`)}))),f=c.map((a,b)=>({title:a.title,analysis:e[b]})).filter(a=>!!a.analysis);if(0===f.length)return{value:null};let g=0,h=[];for(let a of f){let b=(0,x.Pu)(a.analysis.dimensions),c=(0,x.lH)(a.title);g+=Math.min(1,b/c),b<c&&h.push(`${a.title} ${b}/12`)}let i=g/f.length*100,j=d.length>0?`;⚠ ${d.length} 章语义分析失败未计入(${d.slice(0,2).join(";")})`:"",k=(h.length>0?`专业深度达标 ${Math.round(i)}(薄弱:${h.slice(0,3).join("、")})`:`专业深度达标 ${Math.round(i)}(全部章达目标线)`)+j;return{value:i,detail:k}}async function a$(a){let b=await (0,au.tf)({markdown:a.markdown,chapters:a.chapters,template:a.template,factTraces:a.factTraces,issues:a.issues,embedDocuments:a.embedDocuments}),c=a.bidComposition?.bidType||"unknown",d=a.tenderRequirements?.extracted&&a.tenderRequirements.entries||[],e=d.length>0?(0,W.U1)(d,a.markdown):[],f=e.filter(a=>"comply"!==a.entry.policy),g=f.length>0?(()=>{let a=f.filter(a=>a.satisfied).length;return{value:a/f.length*100,detail:`锚点全命中 ${a}/${f.length}`}})():{value:null},h=function(a,b){if(0===b.length)return;let c=(0,ar.mJ)(a,b);return{effectiveRows:c.effectiveRows,placedRows:c.disposedRows,explicitRows:c.explicitRows,rate:c.rate,exemptRows:b.filter(a=>a.exempt).slice(0,50).map(a=>`${a.itemName}${a.quantity?` ${a.quantity}${a.unit}`:""}`)}}(a.markdown,a.boqRowTraces||[]),i=aY([{...g,weight:aP.anchors},{...function(a){if(!Number.isFinite(a))return{value:null};let b=Math.round(a*au.Me.length);return{value:100*a,detail:`强制模块 ${b}/${au.Me.length}`}}(b.moduleCoverageRate),weight:aP.modules}]),j=function(a){let{markdown:b,mode:c,bidComposition:d,effectiveChapters:e,chapters:f}=a;if("blind"===c){let a=[],c=d?.appendixPlan||[];if(c.length>0){let d=c.filter(a=>(0,t.cM)(b,a)).length;a.push({weight:aQ.appendix,value:d/c.length*100,detail:`附表承载 ${d}/${c.length}`})}if(d?.bodyTablePolicy==="forbidden"){let d=function(a,b){let c=-1;for(let d of b){let b=a.indexOf(`## ${d.title}`);b>=0&&(c<0||b<c)&&(c=b)}let d=c>=0?a.slice(0,c):a;return d.match(/^\s*\|/gmu)?.length||0}(b,c);a.push({weight:aQ.bodyCompliance,value:Math.max(0,100-25*d),detail:d>0?`正文禁表 违规 ${d} 处`:"正文禁表合规"})}else{let c=(e||[]).reduce((a,b)=>a+(b.tablePlans?.length||0),0);if(c>0&&e){let b=Math.max(0,c-(0,aK.Xi)(e,f).reduce((a,b)=>a+b.plans.length,0));a.push({weight:aQ.execution,value:b/c*100,detail:`表执行 ${b}/${c}`})}let d=(e||[]).filter(a=>(a.tablePlans?.length||0)>0||(a.tableSections?.length||0)>0||(a.diagramRequirements?.length||0)>0).map(a=>a.title),g=(0,r.NN)(b,{bodyTableForbidden:!1,plannedChapterTitles:d}).length;a.push({weight:aQ.bodyCompliance,value:Math.max(0,100-25*g),detail:g>0?`正文未授权表格 违规 ${g} 处`:"正文表格授权合规"});let h=(0,r.xw)(b,!1);h.total>0&&a.push({weight:aQ.caption,value:h.captioned/h.total*100,detail:`题注 ${h.captioned}/${h.total}`})}return aY(a)}let g=[],h=(e||[]).reduce((a,b)=>a+(b.tablePlans?.length||0),0);if(h>0&&e){let a=Math.max(0,h-(0,aK.Xi)(e,f).reduce((a,b)=>a+b.plans.length,0));g.push({weight:aQ.execution,value:a/h*100,detail:`表执行 ${a}/${h}`})}let i=(0,aK.cA)({chapters:e});i.length>0&&g.push({weight:aQ.figure,value:null,detail:`图位分量本次不计(${i.length} 类图类要求):真图判据未上线,替代表头不计分(避免"假装有图"拿满分)`});let j=(0,r.xw)(b,d?.bodyTablePolicy==="forbidden");return j.total>0&&g.push({weight:aQ.caption,value:j.captioned/j.total*100,detail:`题注 ${j.captioned}/${j.total}`}),aY(g)}({markdown:a.markdown,mode:c,bidComposition:a.bidComposition,effectiveChapters:a.effectiveChapters,chapters:a.chapters}),k=function(a){let{markdown:b,billPlacementAudit:c,parameterUsageAudit:d,drawingFactLock:e,authorityAuditReport:f}=a,g=[];c&&null!==c.rate&&Number.isFinite(c.rate)&&g.push({weight:aR.boq,value:100*c.rate,detail:`BOQ 落位 ${c.placedRows}/${c.effectiveRows}`}),d&&null!==d.rate&&Number.isFinite(d.rate)&&g.push({weight:aR.parameters,value:100*d.rate,detail:`参数 ${d.usedParams}/${d.usedParams+d.relevantMissedCount}`});let h=e?0===e.groups.length?"图纸事实锁无可用分组(无图纸类证据入库)":void 0:"图纸事实锁不可用(未构建或构建失败)";if(e&&e.groups.length>0){let a=(0,aL.SL)(e,b);g.push({weight:aR.drawing,value:100*a.rate,detail:`图纸事实 ${a.referenced.length}/${e.groups.length}`})}if(f){let a=f.unregisteredCount+f.derivationGaps.length+f.processGaps.length;g.push({weight:aR.authority,value:Math.max(0,100-5*a),detail:a>0?`无主数值 缺口 ${a} 处`:"无主数值 0 缺口"})}let i=aY(g);return h&&null!==i.value&&(i.detail=`${i.detail?`${i.detail};`:""}⚠ ${h},图纸分量未计量(本维度按剩余分量重归一)`),i}({markdown:a.markdown,billPlacementAudit:h,parameterUsageAudit:a.parameterUsageAudit,drawingFactLock:a.drawingFactLock,authorityAuditReport:a.authorityAuditReport}),l=await aZ(a.chapters,a.professionalDepthClassifier),m=function(a,b){let c=b=>a.filter(a=>b.test(a.message)).length,d=c(aX.selfHarm),e=c(aX.placeholder),f=c(aX.length),g=(0,L.OV)(b),h=(0,aH.hK)(b),i=h.declaredNotUsed.length,j=h.usedNotDeclared.length,k=h.stats.declaredCodes+h.stats.declaredNames>0?{weight:aS.regulation,value:Math.max(0,100-(i+j)*20),detail:i+j>0?`编制依据缺口 ${i+j} 处(声明未用 ${i}/引用未声明 ${j})`:"编制依据对账 0 缺口"}:{weight:aS.regulation,value:null};return aY([{weight:aS.selfHarm,value:Math.max(0,100-25*d),detail:d>0?`自伤 ${d} 处`:"自伤 0"},{weight:aS.placeholder,value:Math.max(0,100-25*e),detail:e>0?`占位符 ${e} 处`:"占位符 0"},{weight:aS.length,value:Math.max(0,100-50*f),detail:f>0?`篇幅超限 ${f} 条`:"篇幅达标"},{weight:aS.tableConsistency,value:Math.max(0,100-20*g),detail:g>0?`表内不自洽 ${g} 处`:"表自洽 100%"},k])}(a.issues,a.markdown),n=function(a,b){let c=a.filter(a=>"error"===a.level&&"fact_consistency"===a.category&&!aV.test(a.message)&&!aW.test(a.message)),d=c.filter(a=>aU.test(a.message)),e=[{weight:aT.reconciliation,value:Math.max(0,100-20*c.length),detail:c.length>0?`对账冲突 ${c.length} 条`:"对账零冲突"},{weight:aT.binding,value:Math.max(0,100-20*d.length),detail:d.length>0?`绑定冲突 ${d.length} 条`:"绑定零冲突"}];return b&&null!==b.rate&&Number.isFinite(b.rate)&&e.push({weight:aT.keyFacts,value:100*b.rate,detail:`关键事实 ${b.placed}/${b.specs}`}),aY(e)}(a.issues,a.keyFactPlacementAudit),o=[{key:"requirement",label:"要求实体响应",...i,weight:aO.requirement},{key:"structure",label:"结构呈现落实",...j,weight:aO.structure},{key:"dataAnchor",label:"数据锚定",...k,weight:aO.dataAnchor},{key:"professionalDepth",label:"专业深度",...l,weight:aO.professionalDepth},{key:"compliance",label:"合规与规范",...m,weight:aO.compliance},{key:"factIntegrity",label:"事实完整与一致性",...n,weight:aO.factIntegrity}],p=o.filter(a=>null!==a.value&&Number.isFinite(a.value)),q=p.reduce((a,b)=>a+b.weight,0),s=q>0?p.reduce((a,b)=>a+b.value*b.weight,0)/q:0,u=p.length,v=o.length,w=q>=.9,y=Math.round(s),z=p.map(a=>({key:a.key,label:a.label,score:Math.round(a.value),weight:a.weight,detail:a.detail})),A=a.issues.filter(a=>"error"===a.level&&(0,x.R9)(a)).length,B=Math.max(0,Math.min(99,Math.round(y-Math.min(10,3*A)))),C=await (0,au.BH)(a.markdown,a.embedDocuments),D=a.evaluationCriteriaItems&&a.evaluationCriteriaItems.length>0?await (0,aM.y)({items:a.evaluationCriteriaItems,markdown:a.markdown,embedDocuments:a.embedDocuments}):void 0,E=d.length>0?d.map((a,b)=>({text:a.text.slice(0,160),category:a.category,responded:"comply"===a.policy||!!e[b]?.satisfied})):void 0,F="unknown"===c?";⚠ 标书类型未判定(按明标口径)——暗标项目须核对招标文件后重跑":"",G=D?`;评分细则模拟 ${D.simulatedScore}%(met ${D.met} / partial ${D.partial} / missing ${D.missing})`:"",H=B>=95&&0===A&&b.uniqueness>=60&&w,I=H?["已达到当前质量目标,建议保持事实口径和导出前复核。"]:[...w?[]:[`本次仅计量 ${u}/${v} 维(权重覆盖 ${(100*q).toFixed(0)}%,低于下限 90%):重归一分不得作为达标依据,须先补齐缺失维度的计量条件再判定。`],"按对齐评分口径补齐短板维度:要求实体响应补锚点全命中(核心词与数字参数逐条落位)、结构呈现补图表落位、数据锚定补 BOQ/参数/图纸/无主数值溯源、专业深度按章补六维薄弱项、合规与规范清理自伤与占位符并压缩超限篇幅且编制依据与正文双向对齐、事实一致性补关键事实落位与数值对账。","系统需优先修复阻断问题、扩大本地知识库检索、补抽结构化事实,并将未落位事实写入对应章节。"];b.uniqueness<60&&I.push(`低雷同性 ${b.uniqueness} 低于门槛 60:存在与公开模板/通用话术重合的雷同风险,须改写高重合段落后再交付。`);let J=`${w?"":"⚠ "}本次仅计量 ${u}/${v} 维、权重覆盖 ${(100*q).toFixed(0)}%`,K=`交付置信度 ${B}% / 目标 95%,综合评分 ${y}/100(${[...z.map(a=>`${a.label} ${a.score}`),`低雷同性 ${b.uniqueness}`].join("、")});${J}${F}${G};评分口径 ${aN.GX}(主尺)`;return{overall:y,deliveryProbability:B,target:95,passed:H,scores:b,mode:c,dimensions:z,requirementChecklist:E,billPlacementAudit:h,parameterUsageAudit:a.parameterUsageAudit,keyFactPlacementAudit:a.keyFactPlacementAudit,templating:C,caliber:aN.Eq,evaluationCriteriaAttainment:D,measurementCoverage:{dimensions:u,totalDimensions:v,weightRatio:q,sufficient:w},summary:K,actions:I}}let a_=new Set(["fact-coverage","overview-recap","internal-terminology-anchor","global-consistency-snapshot","data-consistency-snapshot","clarification-amendment"]);function a0(...a){return a.flat()}var a1=c(84450),a2=c(51190),a3=c(32434),a4=c(80439),a5=c(18351),a6=c(64297),a7=c(55807),a8=c(33409),a9=c(94281),ba=c(68402),bb=c(21702),bc=c(48479),bd=c(16040);function be(a,b){let c=new Set([b?.projectName,...b?.fingerprint?.projectNames||[]].filter(Boolean));return(b?.contaminationCandidates||[]).reduce((a,b)=>!b||b.length<6||c.has(b)?a:a.replace(RegExp(b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"gu"),"本项目工程"),a)}let bf=(0,C.LK)();function bg(a){let b=[];for(let c of a)for(let a of bf){let d=(0,G.Xl)(c.content,a.title)||(0,G.Xl)(c.content,a.title,{fuzzy:!0}),e=(0,u.V7)(d);if(!d||e>=a.minChars)continue;let f=(0,a7.R_)(a.title);e>=f?b.push({level:"warning",severity:"warning",message:`${c.title} ${a.title} 正文深度接近目标:当前 ${e} 字,目标 ${a.minChars} 字`,suggestion:"已达到可交付深度,建议后续按项目数据继续优化扩写。"}):b.push({level:"error",severity:"blocker",message:`${c.title} ${a.title} 正文不足:当前 ${e} 字,要求不少于 ${f} 字`,suggestion:"关键小节必须补足项目数据、重点难点与施工内容对应关系后方可导出。",chapterId:c.id,sectionTitle:a.title,provenance:{detectorId:"critical-section-depth",fingerprint:(0,G.c6)(`${c.title}\u0000${a.title}`)}})}return b}function bh(a){let b=0;for(let c of a)for(let a of bf){let d=(0,G.Xl)(c.content,a.title)||(0,G.Xl)(c.content,a.title,{fuzzy:!0}),e=(0,u.V7)(d);if(!d||e>=a.minChars)continue;let f=(0,a7.R_)(a.title);e>=f||(b+=f-e)}return b}async function bi(a){let{documentSpec:b,validationIssues:c,factsModel:d,finalChapterDrafts:e,finalMarkdown:f,template:h,promptIds:l,promptDocumentRules:r,projectMaterialSummary:s,domainProfile:t,structuredFacts:v,documentBudget:w,scopeConflicts:A,evaluationCriteriaItems:B,effectiveChapters:C,tenderRequirements:D,requirementsSimilarity:E,factTokenScopeClassifier:F,professionalDepthClassifier:H,blueprintData:I,billFactLock:J,drawingFactLock:K,bodyTableForbidden:L,bodyFigureForbidden:M,identityMarksForbidden:N,coverForbidden:O}=a;return a0((0,ai.yT)("spec-gate-rules",()=>(0,x.kQ)(b,c,d,e,f)),(0,ai.yT)("auto-spec-validation",()=>(function(a){let b=[],c=a.markdown||"";for(let e of a.spec.factFields.filter(a=>a.required)){var d;!((d=e.name).length<4||g(d))&&/\d|GB|JGJ|C\d|HRB|DN|mm|MPa|kPa|工期|质量|安全|项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数/u.test(d)&&!i(c,e.name)&&b.push({level:"info",message:`正文可能未显式覆盖“${e.name}”`,suggestion:"建议检查对应章节是否已自然表达该事实。"})}let e=a.summary.facts.projectName;!e||"当前知识库项目"===e||g(e)||i(c,e)||b.push({level:"warning",message:"正文未明显体现关键对象名称",suggestion:"建议在概况、背景或首页标题中体现当前文档的关键对象名称。"});let f=a.summary.facts.documentNo;for(let a of(f&&!c.includes(f)&&b.push({level:"info",message:"正文未体现文档/任务编号",suggestion:"如文档需要编号,请在概况、背景或首页信息中补充。"}),["知识库证据","资料类型","提示词角色","文档规范包","规范包","后台自动规范","后台优化建议","基础事实候选","材料未提供","未检索到"]))(function(a,b){let c=j[b];if(!c)return a.includes(b);let d=0;for(;;){let e=a.indexOf(b,d);if(e<0)return!1;let f=a[e+b.length]||"";if(f&&c.test(f)){d=e+b.length;continue}return!0}})(c,a)&&b.push({level:"error",message:`正文包含后台流程话术:${a}`,suggestion:"请重新生成或在审查阶段删除后台流程描述。"});return b})({markdown:f,spec:b,summary:s})),(0,ai.yT)("fact-consistency",()=>(function(a){let b=a.profile||k.p4,c=[],d=new Map;for(let c of a.facts){let a=c.fieldName||c.key;!(!a||!function(a,b){let c=(0,k.oC)(b,a);return c?"single"===c.cardinality&&"allow_multiple"!==c.conflictPolicy&&"ignore"!==c.conflictPolicy:/项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数|工期|质量标准|合同价格形式|绿色建筑等级|投标有效期|质保期/u.test(a)}(a,b)||o.test(a)&&p.test(c.roleId||""))&&q(String(c.value),b,a)&&d.set(a,[...d.get(a)||[],{value:String(c.value),source:c.sourceFile}])}for(let[a,e]of d){let d=new Map;for(let c of e){let e=q(c.value,b,a);if(!e)continue;let f=(0,m.EI)((0,m.LD)(e));d.set(f,[...d.get(f)||[],c])}if(d.size>1){let a=[...d.keys()].sort((a,b)=>a.length-b.length),b=new Set;for(let c=0;c<a.length;c+=1){let e=a[c];if(!b.has(e))for(let f=c+1;f<a.length;f+=1){let c=a[f],g=c.length-e.length,h=e.length<=12&&/(?:省|市|县|区|镇|乡|村|开发区|经开区|新区|高新区)$/u.test(e)&&c.startsWith(e),i=e.length<=20&&/(?:项目|工程|标段)$/u.test(e)&&c.startsWith(e);if((g<=3||e.endsWith("等")&&g<=6||h||i)&&c.startsWith(e)){d.set(c,[...d.get(c)||[],...d.get(e)||[]]),b.add(e);break}}}for(let a of b)d.delete(a)}if(d.size>1)for(let b of["duration","date","plain"]){let e=new Map([...d].filter(([a])=>(0,m.cg)(a)===b));if(e.size>1){let b=[...e.values()].map(a=>`${a[0].value}(${a.map(a=>a.source).filter(Boolean).join("、")||"未知来源"})`).join(" vs ");c.push({level:"error",message:`事实一致性冲突:${a} 存在多个值:${b}`,suggestion:"请确认当前绑定材料组,或在模板绑定中只绑定当前文档所需材料。"})}}}let e=a.summary.facts.projectName;if(e&&"当前知识库项目"!==e&&!/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|招标工程量清单封面|招标工程量清单扉页|工程量清单表|清单封面|清单扉页|\d{1,2}\.\d{1,2}/u.test(e)){let b=n(a.markdown),d=[e,...a.summary.fingerprint.projectNames].flatMap(a=>[a,a.replace(/^\d+(?:\.\d+)?[^\u4e00-\u9fa5]*/u,""),a.replace(/\([^)]*\)|([^)]*)/gu,"")]).map(a=>n(a)).filter(a=>a.length>=4),f=d.filter(a=>a.length>=8),g=d.filter(a=>a.length<8),h=f.some(a=>b.includes(a)||a.length>=12&&b.includes(a.slice(0,Math.max(8,Math.floor(.72*a.length))))),i=g.some(a=>b.includes(a));(f.length>0?h:!(g.length>0)||i)||c.push({level:"warning",message:`正文未包含当前对象名称:${e}`,suggestion:"请确认标题、概况或背景信息是否已体现当前对象名称。"})}return c})({markdown:f,facts:v,summary:s,profile:t})),(0,ai.yT)("project-contamination",()=>(function(a,b){let c=[],d=new Set([b.projectName,...b.fingerprint.projectNames].filter(Boolean));for(let e of b.contaminationCandidates)e.length>=6&&!d.has(e)&&a.replace(/\s+/gu,"").includes(e.replace(/\s+/gu,""))&&c.push({level:"error",message:`正文疑似混入其他对象名称:${e}`,suggestion:"请检查绑定材料选择、模板绑定文件和知识库证据范围。"});let e=b.fingerprint.documentNos,f=a.match(/\b\d{4}[A-Z]{2,}\d{4,}\b/gu)?.find(a=>!e.includes(a));return f&&e.length>0&&c.push({level:"error",message:`正文疑似混入其他文档编号:${f}`,suggestion:"请重新生成并检查是否召回了其他绑定材料。"}),c})(f,s)),(0,ai.yT)("project-type-consistency",()=>(0,y.MM)(f,{projectName:I?.project?.name,blueprintStrategyId:I?.strategyId})),(0,ai.yT)("figure-substitute-table",()=>(0,y.X_)(f,(0,aK.cA)({chapters:C}))),(0,ai.yT)("project-basic-placeholder",()=>(0,a7.h)(f,v)),await (0,ai.ll)("standard-final",()=>aI({markdown:f,truthValues:a.truthValues,chapters:e,factsModel:d,template:h,promptIds:l,promptDocumentRules:r,scopeConflicts:A,evaluationCriteriaItems:B,effectiveChapters:C,tenderRequirements:D,requirementsSimilarity:E,factTokenScopeClassifier:F,professionalDepthClassifier:H,materialEvidence:a.materialEvidence,blueprintData:I,billFactLock:J,drawingFactLock:K,bodyTableForbidden:L,bodyFigureForbidden:M,identityMarksForbidden:N,coverForbidden:O,clarificationAmendments:a.clarificationAmendments})),(0,ai.yT)("fact-coverage",()=>(0,a7.br)(f,[...v,...d.preciseFacts]).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议后续优化事实自然落位;导出阶段不因未落位的引用型或可优化事实阻断。"}))),(0,ai.yT)("page-target",()=>(0,u.PE)(h.generationSettings,f).filter(a=>!(w.minPages&&/低于目标页数/u.test(a.message)))),(0,ai.yT)("document-budget",()=>(0,u.ty)(w,f)),(0,ai.yT)("formal-text-gate",()=>(0,a3.IA)(f)),await (0,ai.ll)("internal-terminology-anchor",()=>(0,z.WT)(f)),(0,ai.yT)("heading-uncovered-engineering-items",()=>(0,x.j9)(f)),(0,ai.yT)("writer-missing-section",()=>f.includes("WRITER_MISSING_SECTION")||f.includes("Writer 未完成")?[{level:"error",severity:"blocker",category:"structure",owner:"system",message:"最终正文仍包含未完成小节标记",suggestion:"必须重新补写对应小节并删除 WRITER_MISSING_SECTION/Writer 未完成。"}]:[]),(0,ai.yT)("critical-section-depth",()=>bg(e)),(0,ai.yT)("critical-section-fact-density",()=>(function(a){let b=[{title:"项目特点、重点、难点分析",minNumericFacts:5,minObjectFacts:8,objectPatterns:[/建筑面积|面积/u,/层|框架结构|既有建筑/u,/结构形式|结构加固|墙体补强|装配式/u,/拆除|改造|装修|装饰/u,/工期|日历天/u,/质量标准|合格/u,/营业商铺|经营区域|场地/u,/管网|防水|室外道排/u,/智能化|弱电|消防|暖通|通风空调|水电/u]},{title:"项目主要施工内容",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/拆除|垃圾外运|既有设施保护/u,/结构加固|墙体补强|框架结构/u,/装饰|装修|基层|面层|环保|阻燃/u,/防水|管网|给排水|阀门|道排/u,/消防|水电|电气|弱电|智能化|通风空调/u,/屋面|立面|室外|附属/u,/施工流程|施工方法|施工顺序|工艺流程/u,/验收|检测|调试|资料闭环/u]},{title:"主要分部分项工程施工方案",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/拆除|垃圾外运|既有设施保护/u,/结构加固|墙体补强|框架结构/u,/装饰|装修|基层|面层|环保|阻燃/u,/防水|管网|给排水|阀门|道排/u,/消防|水电|电气|弱电|智能化|通风空调/u,/屋面|立面|室外|附属/u,/施工流程|施工方法|施工顺序|工艺流程/u,/验收|检测|调试|资料闭环/u]},{title:"主要施工方法",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/拆除|垃圾外运|既有设施保护/u,/结构加固|墙体补强|框架结构/u,/装饰|装修|基层|面层|环保|阻燃/u,/防水|管网|给排水|阀门|道排/u,/消防|水电|电气|弱电|智能化|通风空调/u,/屋面|立面|室外|附属/u,/施工流程|施工方法|施工顺序|工艺流程/u,/验收|检测|调试|资料闭环/u]}];return a.flatMap(a=>b.flatMap(b=>{let c=(0,G.Xl)(a.content,b.title);if(!c)return[];let d=new Set(c.match(/\d+(?:\.\d+)?\s*(?:m²|㎡|平方米|m|mm|层|栋|日历天|天|%|台|套|根|处|个|kg|t|吨)/giu)||[]).size,e=b.objectPatterns.filter(a=>a.test(c)).length,f=[];return d<b.minNumericFacts&&f.push({level:"warning",severity:"warning",message:`${a.title} ${b.title} 参数落位不足:当前 ${d} 个,建议不少于 ${b.minNumericFacts} 个`,suggestion:"关键小节必须写入项目规模、工期、层数、结构、专业工程或验收参数等具体数值。"}),e<b.minObjectFacts&&f.push({level:"warning",severity:"warning",message:`${a.title} ${b.title} 专业事实覆盖不足:当前 ${e} 类,建议不少于 ${b.minObjectFacts} 类`,suggestion:"优先基于当前项目绑定资料补充工程对象、专业范围、重点难点和对应施工内容;不得为满足类别数量编造或混入其他项目事实。"}),f}))})(e)),(0,ai.yT)("chapter-fact-density",()=>e.flatMap(a=>{let b=(0,bb.Cd)(a.content);return b.gap?[{level:"warning",severity:"warning",message:`${a.title} 量化参数密度偏低:当前 ${b.params} 个(约 ${b.per1000}/千字,建议 ≥${bb.J5}/千字、约 ${b.required} 个),小节事实或量化参数落位可继续优化`,suggestion:"优先将本章绑定资料中的工程规模、工期、部位做法、材料规格等参数自然写入对应工序;不得从行业惯例或相邻章节借参数凑数。"}]:[]})),await (0,ai.ll)("construction-org-professional-audit",async()=>(await (0,ba.YL)(e,f)).map(a=>"error"===a.level?{...a,severity:"blocker"}:a))).map(a=>"error"===a.level?{...a,severity:a.severity||"blocker"}:a)}let bj=/章节级证据覆盖较弱|章节事实覆盖不足|小节事实或量化参数落位可继续优化/u;async function bk(a){var b;let{finalChapterDrafts:c,effectiveChapters:e,factsModel:g,allEvidence:h,finalMarkdown:i,validationIssues:j,retrievalCoverageReports:k,includeRetrievalCoverage:l,template:m,tenderRequirements:n,bidComposition:o,drawingFactLock:p,structuredFacts:q,authorityAuditReport:r,professionalDepthClassifier:s,evaluationCriteriaItems:t,documentBudget:v}=a,y=function(a){let b=a.chapters.map(b=>{let c=function(a){let b=["project"];return/进度|工期|节点|部署/u.test(a.title)&&b.push("schedule"),/质量|验收|材料/u.test(a.title)&&b.push("quality","rules"),/安全|文明|风险|危大/u.test(a.title)&&b.push("safety","rules"),/资源|材料|设备|劳动力|机械/u.test(a.title)&&b.push("resources"),/施工|工艺|技术|方案|清单|工程量|图纸/u.test(a.title)&&b.push("quantities"),[...new Set(b)]}(a.templateChapters.find(a=>a.id===b.id||a.title===b.title)||b),d=c.filter(c=>{var d;return d=a.factsModel,("project"===c?d.project.length>0||d.preciseFacts.length>0:"schedule"===c?d.schedule.length>0:"quality"===c?d.quality.length>0||d.specifications.length>0:"safety"===c?d.safety.length>0||d.rules.length>0:"resources"===c?d.resources.length>0||d.bills.length>0:"quantities"===c?d.bills.length>0||d.drawings.length>0||d.tables.length>0:"rules"===c&&(d.rules.length>0||d.specifications.length>0))||(b.evidence||[]).some(a=>RegExp(aJ[c]||c,"u").test(`${a.sectionTitle||""} ${a.content||""}`))}),e=c.filter(a=>!d.includes(a)),f=c.length?Math.round(d.length/c.length*100):100;return{chapterId:b.id,title:b.title,requiredDomains:c,confirmedDomains:d,unconfirmedDomains:e,score:f}}),c=new Set(a.evidence.map(a=>a.filePath).filter(Boolean)),d=b.length?Math.round(b.reduce((a,b)=>a+b.score,0)/b.length):100;return{score:d,evidenceCount:a.evidence.length,confirmedFiles:c.size,chapterReports:b,unconfirmedDomains:[...new Set(b.flatMap(a=>a.unconfirmedDomains))],remediation:d>=95?"知识库事实覆盖已达到高置信交付要求。":"系统需扩大本地知识库检索、补抽结构化事实,并将已确认事实落位到对应章节。"}}({chapters:c,templateChapters:e,factsModel:g,evidence:h}),z=(0,F.e$)(i,g),A=(b={chapters:c,templateChapters:e,factsModel:g,chapterTargets:v?.chapterTargets,projectTypes:(0,w.un)({template:m,chapters:m.chapters,materialText:c.map(a=>a.title).join(" ")})}).chapters.map(a=>{let c=b.templateChapters.find(b=>b.id===a.id||b.title===a.title),{checks:d,skipped:e}=function(a,b,c){a.title,(b?.sections||a.sections||[]).join(" ");let d=[{key:"structure",label:"结构完整",passed:(a.sections||b?.sections||[]).length>=2||/###\s+/u.test(a.content)},{key:"evidence",label:"证据绑定",passed:(a.evidence||[]).length>0},{key:"professional",label:"专业控制点",passed:/验收|复核|检查|交底|控制点|整改|闭环|台账|进场|工序/u.test(a.content)}],e=[],f=c.chapterTargets?.get(a.id)||c.chapterTargets?.get(a.title);if("number"==typeof f&&Number.isFinite(f)&&f>0){let b=Math.round(.85*f),c=(0,u.V7)(a.content);d.push({key:"depth",label:`内容深度(计划 ${f} 字,下限 ${b})`,passed:c>=b,detail:`实交 ${c} 字`})}else e.push("内容深度(本章无计划字数:documentBudget.chapterTargets 缺该章)");let g=(0,aD.uQ)(a.title,[...c.projectTypes??[]]);if(g&&g.mustCover.length>0){let b=(0,aj.$6)({chapterId:a.id,chapterTitle:a.title,chapterText:a.content,mustCover:g.mustCover}),c=b.map(a=>a.message.replace(/^[^:]*:/u,"").slice(0,60));d.push({key:"must-cover",label:`必需要素(${g.mustCover.length} 项)`,passed:0===b.length,detail:0===b.length?void 0:`未落位 ${b.length} 项:${c.slice(0,3).join(";")}`})}else e.push("必需要素(本章没有已注册的 mustCover 义务:chapterFocusRule 未命中)");return{checks:d,skipped:e}}(a,c,b),f=d.filter(a=>a.passed).length,g=d.filter(a=>!a.passed);return{chapterId:a.id,title:a.title,score:d.length?Math.round(f/d.length*100):100,checks:d,action:0===g.length?`章节覆盖完整(计量 ${d.length} 项${e.length>0?`,另有 ${e.length} 项因判据缺失未计量`:""})。`:`未通过:${g.map(a=>`${a.label}${a.detail?`(${a.detail})`:""}`).join(";")}`+(e.length>0?`。另有 ${e.length} 项因判据缺失未计量:${e.join(";")}`:"")}}),B=a0(j,y.score>=85?[]:[{level:"warning",message:`系统知识库覆盖确认率偏低:${y.score}%`,suggestion:`${y.remediation} 未确认事实域:${y.unconfirmedDomains.map(a=>aJ[a]||a).join("、")||"无"}`}],(0,F.c$)(z,{maxIssues:20}),A.filter(a=>a.score<80).map(a=>{let b=a.checks.filter(a=>!a.passed).map(a=>a.label),c=b.length>0&&!b.some(b=>a.action.includes(b))?` 未通过项:${b.join("、")}`:"";return{level:"warning",message:`章节覆盖不足:${a.title} ${a.score}%`,suggestion:`${a.action}${c}`}}),l?(0,a1.L9)(k):[]);B=B.map(a=>bj.test(a.message)&&"warning"===a.level?{...a,level:"info"}:a);let C=await a$({markdown:i,chapters:c,issues:B,knowledgeCoverage:y,factTraces:z,template:m,tenderRequirements:n,bidComposition:o,effectiveChapters:e,drawingFactLock:p,boqRowTraces:(0,F.JV)(i,g),parameterUsageAudit:(0,d.Y5)({markdown:i,factsModel:g,chapters:c,supersededValues:a.supersededTruthValues}),keyFactPlacementAudit:(0,f._P)(i,[...q||[],...g&&g.preciseFacts||[]]),authorityAuditReport:r,professionalDepthClassifier:s,evaluationCriteriaItems:t}),D=function(a){let b=[],c=a.issues.filter(a=>"error"===a.level);c.length>0&&b.push({priority:"high",title:"阻断问题修复",action:`修复 ${c.length} 个导出阻断问题,优先处理事实冲突、结构缺失、模板规则违规和占位残留。`});let d=(a.factTraces||[]).filter(a=>"unplaced"===a.status&&(0,F.O7)(a));if(d.length>0){let a=d.length>12?`${d.length} 项(示例:${d.slice(0,8).map(a=>a.label).join("、")} 等)`:`${d.length} 项(${d.map(a=>a.label).join("、")})`;b.push({priority:"high",title:"事实落位修复",action:`将 ${a} 已确认知识库事实写入对应章节,保持原始数值、单位和来源口径。`})}a.knowledgeCoverage&&a.knowledgeCoverage.score<95&&b.push({priority:"medium",title:"知识库确认覆盖修复",action:"扩大本地知识库检索范围,执行事实补抽和章节证据重分配;这是系统检索、抽取、落位问题,不要求用户追加资料。"});let e=(a.chapterCoverage||[]).filter(a=>a.score<80);if(e.length>0){let a=e.length>10?`${e.slice(0,8).map(a=>a.title).join("、")} 及其他${e.length-8}章`:e.map(a=>a.title).join("、");b.push({priority:"medium",title:"章节覆盖修复",action:`补齐低覆盖章节(${e.length}章):${a}。`})}return a.qualityReport&&!a.qualityReport.passed&&b.push({priority:"medium",title:"交付置信度修复",action:a.qualityReport.actions.join(" ")}),b}({issues:B,qualityReport:C,knowledgeCoverage:y,factTraces:z,chapterCoverage:A});if(C?.evaluationCriteriaAttainment){let a=await (0,ai.ll)("criteria-substantive-attainment",()=>(function(a){let b=[],c=String(a.markdown||""),d=a.audit;if(!c||!d||!Array.isArray(d.criteria)||0===d.criteria.length)return b;let e=ax(c,a.projectEntities),f=(0,au.Uv)(c);for(let a of d.criteria){if(b.length>=10)break;let d=String(a.title||"").trim();if(!d)continue;let g=String(a.anchor||"").trim(),h=Number.isFinite(a.similarity)?Number(a.similarity).toFixed(2):"—";if("missing"===a.status){b.push({level:"warning",severity:"warning",category:"evidence_coverage",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"criteria-substantive-attainment",fingerprint:(0,G.c6)(`missing\u0000${d}`)},message:`评分项「${d}」无实质响应:正文标题与正文均无匹配(承接判定 missing)——该项在评标中不得分。`,suggestion:`为该评分项补写正文小节并落位本项目实体与量化指标;评分条目必须逐条承接为可查证的小节,不得以通用表述顶替。`});continue}if("partial"===a.status){let a=f.find(a=>{let b=String(a.heading||"").replace(/^#{1,6}\s+/u,"").trim();return b.length>0&&g.length>0&&(b===g||b.startsWith(g)||g.startsWith(b))}),c=!!a&&!a.hasSubstantiveBody;b.push({level:"warning",severity:"warning",category:"evidence_coverage",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"criteria-substantive-attainment",fingerprint:(0,G.c6)(`partial\u0000${d}`)},message:`评分项「${d}」仅标题承接、无内容级响应(相似度 ${h}${g?`;承接标题“${g}”`:""})${c?"——承接小节为空壳(无实质正文段落)":""}。`,suggestion:`在承接小节内补写针对本项目的内容(本项目实体 + 工艺参数/控制点/验收标准),使该项达到内容级响应;只有标题的承接在评标中至多得一半分。`});continue}if(0===e.length||!g)continue;let i=c.indexOf(g);if(i<0)continue;let j=function(a,b){let c=a.lastIndexOf("\n",Math.max(0,b-1))+1,d=a.indexOf("\n\n",b),e=Math.max(b+1,Math.min(d>=0?d:a.length,c+900));return a.slice(c,e)}(c,i);e.some(a=>j.includes(a))||b.push({level:"warning",severity:"warning",category:"evidence_coverage",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"criteria-substantive-attainment",fingerprint:(0,G.c6)(`met\u0000${d}`)},message:`评分项「${d}」的达标只是语义层面的:命中块与本项相似度 ${h},但块内不含任何本项目实体(清单条目/图纸参数/项目类型/建设地点)——属通用表述(换个项目同样成立),非实质达标。`,suggestion:`把该评分项的响应落到本项目实体上:引用清单条目/图纸参数/本项目工程量与部位,并给出可核对的量化指标;语义相似度达标而实体缺位在评标中会被判为通用套话。`})}return b})({markdown:i,audit:C.evaluationCriteriaAttainment}));a.length>0&&(B=[...B,...a])}B=a0(B,C.passed?[]:[{level:"error",severity:"blocker",category:"structure",repairability:"manual_review",owner:"user",message:`交付置信度未达目标:${C.deliveryProbability}% / ${C.target}%(综合评分 ${C.overall}/100)`,suggestion:C.actions.join(" ")}],D.filter(a=>"high"===a.priority).map(a=>({level:"info",message:`修复策略待执行:${a.title}`,suggestion:a.action})));let E=(0,ai.yT)("gating-checklist",()=>(0,x.Ai)(B,g,c));return{knowledgeCoverage:y,factTraces:z,chapterCoverage:A,qualityReport:C,repairStrategies:D,validationIssues:B,finalExportGate:E}}function bl(a){let b=(0,bd.B1)(a.documentId,void 0!==a.nodeLogBaseDir?{baseDir:a.nodeLogBaseDir}:{});return b.noNodeLog&&(void 0===a.documentId||0===a.documentId.length)?a.executionStages=[]:(b.noNodeLog&&console.warn(`[gen][stages] 阶段视图读不到节点日志(doc=${a.documentId}):executionStages 记为空表,不拿旧快照顶替。旧归档(本段之前落盘的文档)没有 .nodes.jsonl,属预期;若是新生成请查节点日志写入路径。`),a.executionStages=function(a,b={}){var c;let d=b.limit??300;if(a.length<=d)return a;let e=d-4-1;if(e<=0)return a.slice(-d);let f=function(a,b=()=>void 0){let c=a.map((a,c)=>{let d=a.nodeId??(0,bc.sf)(a),e=b(d);return{index:c,nodeId:d,...void 0!==e?{seq:e}:{}}}),d=c.filter(a=>void 0===a.seq).map(a=>a.index),e=[];for(let a=1;a<c.length;a+=1){let b=c[a-1],d=c[a];void 0!==b.seq&&void 0!==d.seq&&(d.seq<b.seq||d.seq===b.seq&&d.nodeId<b.nodeId)&&e.length<5&&e.push({index:d.index,seq:d.seq,previousIndex:b.index,previousSeq:b.seq})}return{entries:c,unresolved:d,mismatches:e,usable:0===d.length&&0===e.length}}(a,(c=b.documentId)?a=>(0,bc.bv)(c,a):()=>void 0),g=function(a,b,c){if(!a.usable||c<0)return;let d=[...a.entries].sort((a,b)=>a.seq-b.seq||(a.nodeId<b.nodeId?-1:+(a.nodeId>b.nodeId)));if(d.length<4+c)return;let e=d.slice(0,b).map(a=>a.index);return{head:e,tail:d.slice(d.length-c).map(a=>a.index),archived:d.slice(b,d.length-c).map(a=>a.index)}}(f,4,e);g||console.warn(function(a){let b=[];for(let c of(b.push(`[gen][throttle] 节流退回**数组口径**(节点口径不可用):阶段 ${a.total} 条,未解析 ${a.unresolved.length} 条${a.unresolved.length>0?`(下标 ${a.unresolved.slice(0,5).join(",")})`:""},节点顺序与数组顺序不一致 ${a.mismatches.length} 处`),a.mismatches))b.push(`(下标 ${c.previousIndex}→${c.index}:seq ${c.previousSeq}→${c.seq})`);return b.push(`doc=${a.documentId||"(无 documentId)"}。★ 退回数组位置只保证"与退役前逐字一致",**不等于**节点口径已被验证:投影出来的每条阶段都带来源节点 id(\`stage.nodeId\`),本该条条可解析;出现未解析说明**这条阶段没有节点**(手写条目漏了 \`nodeId\`,或它根本不是投影来的)。故本条出现即表示"数组里混进了非节点来源的条目"——那正是退役要治的形态,别当噪音忽略。`),b.join(" ")}({...void 0!==b.documentId?{documentId:b.documentId}:{},total:a.length,unresolved:f.unresolved,mismatches:f.mismatches}));let h=g?g.head.map(b=>a[b]):a.slice(0,4),i=g?g.tail.map(b=>a[b]):a.slice(-e),j=g?g.archived.map(b=>a[b]):a.slice(4,a.length-e),k=j.filter(a=>"failed"===a.status).length;return[...h,{type:"validation",roleId:"stage-archive",status:k>0?"failed":"success",message:`已归档 ${j.length} 个中间执行阶段${k>0?`(含 ${k} 个失败记录)`:""}`,details:j[0]?.subtitle?[`归档区间:${j[0].subtitle} → ${j[j.length-1]?.subtitle||""}`]:[]},...i]}(b.stages,{documentId:a.documentId})),a.executionStages}async function bm(a){var b,c;let d=(b=a.chapterDrafts,c=a.documentSpec,b.map(a=>{let b=c.chapterRules.find(b=>b.id===a.id||b.title===a.title),d=(b?.requiredFactIds||[]).map(a=>c.factFields.find(b=>b.id===a)?.name).filter(Boolean),e=[...new Set([...a.missingFacts||[],...d].filter(Boolean))],f=e.filter(b=>!a.missingFacts.includes(b)),g=e.filter(b=>a.missingFacts.includes(b));return{chapterId:a.id,title:a.title,requiredFacts:e,coveredFacts:f,missingFacts:g,evidenceCount:a.evidence.length}}));a.validation=(0,a7.M6)(a.chapterDrafts,a.governedStructuredFacts,a.template,a.promptIds),(0,ai.yT)("chapter-block-degradation",()=>void 0),a.validation.warnings=[...a.validation.warnings,...a.readiness.warnings],a.validation.errors=[...a.validation.errors,...a.readiness.blockingIssues],a.sources=[...a.allEvidence.reduce((a,b)=>a.set(b.filePath,(a.get(b.filePath)??0)+1),new Map).entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b}));let e=new Map;for(let b of a.allEvidence)e.set(b.source||"unknown",(e.get(b.source||"unknown")??0)+1);a.validationIssues=a0((0,a5.w9)(a.validation,a.factsModel,a.chapterDrafts),function(a){let b=[];for(let c of a)0===c.evidenceCount?b.push({level:"error",message:`章节缺少证据:${c.title}`,suggestion:"请补充对应绑定材料或调整模板章节检索词。"}):c.missingFacts.length>0&&b.push({level:"warning",message:`章节事实覆盖不足:${c.title},缺失 ${c.missingFacts.slice(0,6).join("、")}`,suggestion:"建议补充章节 requiredFacts 或绑定材料证据。"});return b}(d),(a.globalConsistencyIssues||[]).filter(a=>!/^跨章一致性冲突|^工序规格冲突/u.test(a)).slice(0,10).map(b=>{let c=/^数据一致性矛盾/u.test(b);return{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`${c?"数据一致性复核":"跨章一致性复核"}:${b}`,suggestion:c?"全文数据必须一致:以绑定资料(图纸/清单/招标文件)为准选定唯一值,统一矛盾数值对。":"跨章数值口径不一致属低级错误,必须定向修复统一口径后重新校验。",provenance:{detectorId:c?"data-consistency-snapshot":"global-consistency-snapshot",fingerprint:(0,G.c6)(a.chapterDrafts.map(a=>a.content).join("\n\n"))}}}));let f=a.chapterDrafts.map(a=>a.content).join("\n\n");a.validationIssues=a0(a.validationIssues,(0,a7.br)(f,a.structuredFacts).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议 Agent Writer 在章节生成阶段优先落位可信基础事实;导出阶段不因未落位的低置信或泛化事实阻断。",provenance:{detectorId:"fact-coverage",fingerprint:(0,G.c6)(f)}})));let g=Math.max(0,a.effectiveChapters.length-a.chapterDrafts.length);a.validationIssues=a0(a.validationIssues,[...(0,ai.yT)("generation-completeness",()=>g>0?[{level:"error",severity:"blocker",category:"structure",owner:"system",repairability:"manual_review",message:`部分章节生成失败:${g} 章`,suggestion:a.failedChapterMessages.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。",provenance:{detectorId:"generation-completeness",fingerprint:`missing-chapters#${g}`}}]:[])]);let h=await Promise.all(a.chapterDrafts.map(async b=>{let c=a.effectiveChapters.find(a=>a.id===b.id);if(!c)return[];let d=await (0,a6.mt)({chapter:c,content:b.content,evidence:b.evidence||[]});return d.length>0?[{level:"warning",message:`${b.title} 小节事实或量化参数落位可继续优化:${d.slice(0,5).join(";")}`,suggestion:"建议在 Agent Writer 阶段扩大定向证据,不得在导出阶段补写。"}]:[]}));for(let b of(a.validationIssues=a0(a.validationIssues,h.flat()),a.assets=[],a.chapterGenerationStages))(0,bc.Wl)(a,{batch:"finalize.rebuild",stage:b});bl(a),(0,bc.Wl)(a,{batch:"finalize.rebuild",stage:(0,a4.X5)({type:"reference",roleId:"knowledge-usage-report",status:"success",message:`资料使用报告:证据 ${a.allEvidence.length} 条,来源文件 ${a.sources.length} 份,结构化事实 ${a.structuredFacts.length} 条`,details:[`证据类型:${[...e.entries()].map(([a,b])=>`${a} ${b}`).join(",")||"无"}`,`索引健康:可用切片 ${a.indexHealth.usableChunkCount} 条,待索引 ${a.indexHealth.pendingJobs} 个,向量${(0,a7.EG)(a.indexHealth.vectorStatus?.status)}`]},{subtitle:"资料使用报告"})}),(0,bc.Wl)(a,{batch:"finalize.rebuild",stage:(0,a4.X5)({type:"reference",roleId:"web-research-report",status:a.webResearchReport.enabled?"success":"skipped",message:a.webResearchReport.enabled?`联网增强:检索章节 ${new Set(a.webResearchReport.chapters).size} 个,查询 ${a.webResearchReport.queries.length} 个,使用公开资料 ${a.webResearchReport.evidenceCount} 条`:"联网增强未开启",details:a.webResearchReport.enabled?[`检索主题:${[...new Set(a.webResearchReport.queries)].join(";")||"无"}`,`过滤结果:${a.webResearchReport.filteredCount} 条`,"公开资料仅用于通用规范、政策、工艺和措施补充,不作为项目事实来源"]:["可在模型配置中开启联网增强"]},{subtitle:"联网增强报告"})});{let b=(0,ai.Jq)("standard-final"),c=b.degraded.length>0?b.degraded.join("、"):"无";(0,bc.Wl)(a,{batch:"finalize.rebuild",stage:(0,a4.X5)({type:"validation",roleId:"detector-execution-summary",status:b.degraded.length>0?"failed":"success",message:b.degraded.length>0?`交付前检测器执行情况:已执行 ${b.executed.length} 个、**降级未执行 ${b.degraded.length} 个**(该 ${b.degraded.length} 个检测维度本次未查,导出不受阻断但需复核)`:`交付前检测器执行情况:${b.executed.length} 个全部执行完成`,details:[`降级未执行(基础设施异常):${c}`,...b.declaredMissing.length>0?[`声明但未执行(疑为死检测器,请核查接线):${b.declaredMissing.join("、")}`]:[],"说明:降级为检测器基础设施异常而非正文内容缺陷,不阻断导出;重跑可恢复该维度检查。"]},{subtitle:"交付前检测器执行情况"})}),a.emitProgress?.()}}function bn(a){let b=(0,W._D)(a.tenderRequirements?.structureRequirements||[],a.effectiveChapters,a.requirementsSimilarity);return(0,aK.cA)({structureItems:b.assignments.map(a=>({chapterTitle:a.chapterTitle,form:a.requirement.form,element:a.requirement.element})),chapters:a.effectiveChapters})}function bo(a){let b=(0,y.dW)(a.chapterDrafts);b.insertedIn&&(a.chapterDrafts=b.chapters,a.generationDiagnostics.llm.lastInfo=`安全目标承诺句兜底:${b.insertedIn}(写作侧未写出安全目标,按投标人承诺口径补入)`);let c=(0,s._C)(a.bidComposition),d=(0,s.kO)(a.bidComposition),e=a.bidComposition?.formatRules.cover==="forbidden",f=(0,r.rs)((0,r.V3)({templateId:a.template.id,templateName:a.template.name,title:a.template.outputTitle,requirement:a.requirement||"",projectRoot:a.projectRoot,projectId:a.projectId,generationSettings:a.template.generationSettings,facts:a.facts,structuredFacts:a.structuredFacts,factsModel:a.factsModel,chapters:a.chapterDrafts,sources:a.sources,missingItems:[...new Set(a.missingItems)],validation:a.validation,validationIssues:a.validationIssues,executionStages:a.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:a.assets,partialChapters:a.chapterDrafts.map(b=>({id:b.id,title:b.title,chars:(0,u.V7)(b.content),status:(0,a7.DR)(b,a.documentBudget.chapterTargets.get(b.id)),updatedAt:Date.now()})),checkpointChapters:a.chapterDrafts,generatedAt:Date.now()},{forbidDrawingImages:d,promptRules:a.promptDocumentRules,bodyTableForbidden:c,coverForbidden:e}),a.chapterDrafts,{forbidDrawingImages:d,promptRules:a.promptDocumentRules,bodyTableForbidden:c,coverForbidden:e});a.finalChapterDrafts=f.chapters.map(b=>{let c=a.effectiveChapters.find(a=>a.id===b.id)||b;return{...b,sections:b.sections||[],content:(0,a7.w_)(b.content,c)}}),(0,D.Q)(a),a.finalMarkdown=(0,r.rs)((0,r.V3)({templateId:a.template.id,templateName:a.template.name,title:a.template.outputTitle,requirement:a.requirement||"",projectRoot:a.projectRoot,projectId:a.projectId,generationSettings:a.template.generationSettings,facts:a.facts,structuredFacts:a.structuredFacts,factsModel:a.factsModel,chapters:a.finalChapterDrafts,sources:a.sources,missingItems:[...new Set(a.missingItems)],validation:a.validation,validationIssues:a.validationIssues,executionStages:a.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:a.assets,partialChapters:[],checkpointChapters:a.finalChapterDrafts,generatedAt:Date.now()},{forbidDrawingImages:d,promptRules:a.promptDocumentRules,bodyTableForbidden:c,coverForbidden:e}),a.finalChapterDrafts,{forbidDrawingImages:d,promptRules:a.promptDocumentRules,bodyTableForbidden:c,coverForbidden:e}).markdown,a.finalMarkdown=(0,y._D)((0,a7.Ht)((0,r.bR)((0,a7.Xr)((0,r.kT)((0,r.K7)(be((0,a7.jO)(a.finalMarkdown,a.structuredFacts,{bodyTableForbidden:c}),a.projectMaterialSummary))))))).markdown,c||(a.finalMarkdown=(0,aK.gA)(a.finalMarkdown),a.finalMarkdown=(0,aK.aH)(a.finalMarkdown,bn(a),{substituteTable:b=>(0,a8.Ik)(a.blueprintData,b)}).markdown),a.finalMarkdown=(0,t.u7)(a.finalMarkdown,{plan:a.bidComposition?.appendixPlan||[],blueprintData:a.blueprintData})}function bp(a){let b=(0,A.ZP)(a.finalMarkdown,a.blueprintData,(0,B.lJ)(a));a.authorityAuditReport=b;let c=(0,ai.yT)("authority-audit-gap",()=>(0,A.Bg)(b));a.validationIssues=[...a.validationIssues.filter(a=>!a.message.startsWith("无主数值审计失败")),...c];let d=b.unregisteredCount>0||b.derivationGaps.length>0||b.processGaps.length>0;(0,bc.Wl)(a,{batch:"finalize.rebuild",stage:(0,a4.X5)({type:"validation",roleId:"authority-audit",status:d?"failed":"success",message:(0,A.Hk)(b),details:(0,A.Z0)(b)},{subtitle:"权威覆盖审计"})})}async function bq(a){let b=bn(a);a.rebuildFinalMarkdown=()=>{let c=(0,y._D)((0,a7.Ht)((0,r.bR)((0,a7.Xr)((0,r.kT)((0,r.K7)(be((0,a7.jO)(function(a){let b=(0,s.kO)(a.bidComposition),c=(0,a7.Ht)((0,r.rs)((0,r.V3)({templateId:a.template.id,templateName:a.template.name,title:a.template.outputTitle,requirement:a.requirement||"",projectRoot:a.projectRoot,projectId:a.projectId,generationSettings:a.template.generationSettings,facts:a.facts,structuredFacts:a.structuredFacts,factsModel:a.factsModel,chapters:a.chapters,sources:a.sources,missingItems:[...new Set(a.missingItems)],validation:a.validation,validationIssues:a.validationIssues,executionStages:a.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:a.assets,partialChapters:[],checkpointChapters:a.chapters,generatedAt:Date.now()},{forbidDrawingImages:b,promptRules:a.promptDocumentRules,bodyTableForbidden:a.bodyTableForbidden,coverForbidden:a.coverForbidden}),a.chapters,{forbidDrawingImages:b,promptRules:a.promptDocumentRules,bodyTableForbidden:a.bodyTableForbidden,coverForbidden:a.coverForbidden}).markdown),d=(0,v.av)(c),e=d.splitCount>0?d.markdown:c;return(0,t.u7)(e,{plan:a.bidComposition?.appendixPlan||[],blueprintData:a.blueprintData})}({template:a.template,requirement:a.requirement,projectRoot:a.projectRoot,projectId:a.projectId,facts:a.facts,structuredFacts:a.structuredFacts,factsModel:a.factsModel,chapters:a.finalChapterDrafts,sources:a.sources,missingItems:a.missingItems,validation:a.validation,validationIssues:a.validationIssues,executionStages:a.executionStages,assets:a.assets,promptDocumentRules:a.promptDocumentRules,bodyTableForbidden:(0,s._C)(a.bidComposition),coverForbidden:a.bidComposition?.formatRules.cover==="forbidden",bidComposition:a.bidComposition,blueprintData:a.blueprintData}),a.structuredFacts,{bodyTableForbidden:(0,s._C)(a.bidComposition)}),a.projectMaterialSummary))))))).markdown;return(0,s._C)(a.bidComposition)?c:(0,aK.aH)((0,aK.gA)(c),b,{substituteTable:b=>(0,a8.Ik)(a.blueprintData,b)}).markdown};let c=(0,a2.mN)({facts:a.structuredFacts,markdown:a.finalMarkdown});if(c.size>0&&(0,bc.Wl)(a,{batch:"finalize.rebuild",stage:{type:"fact_extraction",roleId:"canonical-facts",status:"success",message:`已决策可信基础事实 ${c.size} 项`,details:[...c.values()].map(a=>`${a.label}=${a.value}(${a.source},confidence=${a.confidence})`).slice(0,12)}}),!a.caliberLedger){let b=[...a.factsModel?.preciseFacts||[],...a.factsModel?.project||[],...a.factsModel?.schedule||[],...a.factsModel?.quality||[],...a.factsModel?.safety||[]].map(a=>({key:a.key,label:a.fieldName,value:a.value,sourceFile:a.sourceFile})),c=[...(a.allEvidence||[]).map(a=>({text:String(a.content||""),source:`${a.filePath||""} ${a.sectionTitle||""}`})),...b.map(a=>({text:String(a.value??""),source:String(a.sourceFile||"")}))],e=(0,aq.Oq)((0,aq.UD)(c)),f=(0,l.iC)({facts:b,overrides:e,labeledValues:(0,aq.Su)(c)});a.caliberLedger=(0,l.wc)(f),a.truthValues=f.resolved;let g=(0,l.DK)(f);g.length>0&&(console.error(`[caliber] 真值层自检发现 ${g.length} 处不变量违规:${g.slice(0,5).join(";")}`),(0,bc.Wl)(a,{batch:"finalize.rebuild",stage:(0,a4.X5)({type:"validation",roleId:"caliber-self-check",status:"partial",message:`真值层自检:${g.length} 处不变量违规(${g.slice(0,3).join(";")})——已记录,不改写、不阻断`},{subtitle:"真值层自检"})}));let h=(0,d.Y6)(a.factsModel?.factIndex?.parameterFacts||[]),i=(0,a4.X5)({type:"reference",roleId:"caliber-ledger",status:"success",message:`口径账本(真值层):受管属性 ${f.resolved.length} 项、噪声剔除 ${f.noiseRejected.length} 项、值级覆盖 ${e.length} 对;参数绑定 ${h.bound}/${h.bound+h.unbound}(绑定率 ${Math.round(100*h.bindRate)}%,项目级 ${h.projectLevel} 项不计入)`,details:[...a.caliberLedger.slice(0,20),...e.length>0?[`值级覆盖:${e.slice(0,5).map(a=>`${a.superseded}→${a.effective}`).join("、")}`]:[],...h.unbound>0?[`未绑定对象(应清零:有锚点却未抽到=抽取器缺陷):${h.unboundSamples.join(";")}`]:[]]},{subtitle:"口径账本"});(0,bc.Wl)(a,{batch:"finalize.rebuild",stage:i})}let f=(0,a9.q7)(a.finalMarkdown,a.clarificationOverrides||[]);f.length>0&&(a.validationIssues=[...a.validationIssues,...f]),a.baseValidationIssues=a.validationIssues,a.validationIssues=await bi({documentSpec:a.documentSpec,validationIssues:a.validationIssues,factsModel:a.factsModel,finalChapterDrafts:a.finalChapterDrafts,finalMarkdown:a.finalMarkdown,truthValues:a.truthValues,template:a.template,promptIds:a.promptIds,promptDocumentRules:a.promptDocumentRules,projectMaterialSummary:a.projectMaterialSummary,domainProfile:a.domainProfile,structuredFacts:a.structuredFacts,documentBudget:a.documentBudget,scopeConflicts:a.scopeConflicts,evaluationCriteriaItems:a.evaluationCriteriaItems,effectiveChapters:a.effectiveChapters,tenderRequirements:a.tenderRequirements,requirementsSimilarity:a.requirementsSimilarity,factTokenScopeClassifier:a.factTokenScopeClassifier,professionalDepthClassifier:a.professionalDepthClassifier,materialEvidence:a.allEvidence,blueprintData:a.blueprintData,billFactLock:a.billFactLock,drawingFactLock:a.drawingFactLock,bodyTableForbidden:(0,s._C)(a.bidComposition),bodyFigureForbidden:(0,s.kO)(a.bidComposition),identityMarksForbidden:!!a.bidComposition?.identityMarksForbidden,coverForbidden:a.bidComposition?.formatRules.cover==="forbidden",clarificationAmendments:a.clarificationAmendments?.amendments}),bp(a),a.qualityBundle=await bk({documentBudget:a.documentBudget,finalChapterDrafts:a.finalChapterDrafts,effectiveChapters:a.effectiveChapters,factsModel:a.factsModel,allEvidence:a.allEvidence,finalMarkdown:a.finalMarkdown,validationIssues:a.validationIssues,retrievalCoverageReports:a.retrievalCoverageReports,includeRetrievalCoverage:!0,template:a.template,tenderRequirements:a.tenderRequirements,bidComposition:a.bidComposition,drawingFactLock:a.drawingFactLock,structuredFacts:a.structuredFacts,authorityAuditReport:a.authorityAuditReport,professionalDepthClassifier:a.professionalDepthClassifier,evaluationCriteriaItems:a.evaluationCriteriaItems,supersededTruthValues:new Set((a.truthValues||[]).flatMap(a=>a.superseded||[]).map(a=>(0,e.K3)(a)))}),a.validationIssues=a.qualityBundle.validationIssues,a.recomputeFinalValidationBundle=async()=>{let b=a.baseValidationIssues.filter(a=>!a.provenance||!a_.has(a.provenance.detectorId));a.validationIssues=await bi({documentSpec:a.documentSpec,validationIssues:b,factsModel:a.factsModel,finalChapterDrafts:a.finalChapterDrafts,finalMarkdown:a.finalMarkdown,truthValues:a.truthValues,template:a.template,promptIds:a.promptIds,promptDocumentRules:a.promptDocumentRules,projectMaterialSummary:a.projectMaterialSummary,domainProfile:a.domainProfile,structuredFacts:a.structuredFacts,documentBudget:a.documentBudget,scopeConflicts:a.scopeConflicts,evaluationCriteriaItems:a.evaluationCriteriaItems,effectiveChapters:a.effectiveChapters,tenderRequirements:a.tenderRequirements,requirementsSimilarity:a.requirementsSimilarity,factTokenScopeClassifier:a.factTokenScopeClassifier,professionalDepthClassifier:a.professionalDepthClassifier,materialEvidence:a.allEvidence,blueprintData:a.blueprintData,billFactLock:a.billFactLock,drawingFactLock:a.drawingFactLock,bodyTableForbidden:(0,s._C)(a.bidComposition),bodyFigureForbidden:(0,s.kO)(a.bidComposition),identityMarksForbidden:!!a.bidComposition?.identityMarksForbidden,coverForbidden:a.bidComposition?.formatRules.cover==="forbidden",clarificationAmendments:a.clarificationAmendments?.amendments}),bp(a),a.qualityBundle=await bk({documentBudget:a.documentBudget,finalChapterDrafts:a.finalChapterDrafts,effectiveChapters:a.effectiveChapters,factsModel:a.factsModel,allEvidence:a.allEvidence,finalMarkdown:a.finalMarkdown,validationIssues:a.validationIssues,retrievalCoverageReports:a.retrievalCoverageReports,includeRetrievalCoverage:!1,template:a.template,tenderRequirements:a.tenderRequirements,bidComposition:a.bidComposition,drawingFactLock:a.drawingFactLock,structuredFacts:a.structuredFacts,authorityAuditReport:a.authorityAuditReport,professionalDepthClassifier:a.professionalDepthClassifier,evaluationCriteriaItems:a.evaluationCriteriaItems,supersededTruthValues:new Set((a.truthValues||[]).flatMap(a=>a.superseded||[]).map(a=>(0,e.K3)(a)))}),a.validationIssues=a.qualityBundle.validationIssues}}},38032:(a,b,c)=>{c.d(b,{iA:()=>v,TQ:()=>q,MW:()=>w});var d=c(77598),e=c(19898),f=c(73859),g=c(92808),h=c(32374),i=c(29055),j=c(52639),k=c(67680);function l(a){let b,c=new Map;for(let b of a){let a=b.outputTitle?.trim();a&&c.set(a,(c.get(a)??0)+1)}let d=0;for(let[a,e]of[...c.entries()].sort((a,b)=>a[0]<b[0]?-1:+(a[0]>b[0])))e>d&&(b=a,d=e);return b}function m(...a){let b=new Set,c=[];for(let d of a)for(let a of d??[]){let d=a.trim();0===d.length||b.has(d)||(b.add(d),c.push(d))}return c}var n=c(45304),o=c(70208),p=c(70610);function q(a){return{id:a.id,name:a.title,outputTitle:a.title,category:a.documentType,description:"",chapters:a.chapters}}class r extends Error{constructor(a,b,c){super(b),this.name="DocumentSpecDerivationError",this.code=a,this.missing=c}}function s(...a){let b=new Set,c=[];for(let d of a)for(let a of d??[]){let d=a.trim();0===d.length||b.has(d)||(b.add(d),c.push(d))}return c}function t(a){return(0,o.YZ)(a).replace(/\s+/gu,"")}let u=/^根据显式大纲章节生成正式正文[::]/u;function v(a){var b;let c,q=(a.requirement||"").trim();try{c=(0,p.Z0)(a.promptIds??[],{projectRoot:a.projectRoot})}catch(a){if(a instanceof p.hu)throw new r("prompt-unavailable",a.message,["提示词"]);throw a}let v=c.map(a=>a.content).join("\n\n").trim(),w=c.filter(a=>"writer"===a.category||"chapter"===a.category),x=(w.length>0?w:c).map(a=>({name:a.name,chapters:(0,o.cs)([{text:a.content,source:a.name,strict:!0}])})).filter(a=>a.chapters.length>=2),y=(0,o.cs)([{text:q,source:"用户需求",strict:!0}]);if(y.length<2&&x.length>1)throw new r("ambiguous-outline",`有 ${x.length} 份选中的提示词各自声明了章节大纲(${x.map(a=>`「${a.name}」${a.chapters.length} 章`).join("、")}):章节结构只能有一个来源,请只保留其中一份带 <OUTLINE> 的提示词(其余提示词若只是抽取口径,请去掉它的大纲块);若只想临时改结构,可在输入框里写出你要的整份大纲(它会整份替换提示词的章清单)。`,["章节大纲(唯一来源)"]);let z=y.length>=2?y:x[0]?.chapters??[];if(z.length<2)throw new r("no-outline",`提示词里没有可用的章节大纲:派生文档规格需要 ≥2 章的显式大纲(模板已退役,章节结构不再有第二来源)。当前从提示词与要求里识别到 ${z.length} 章。请在提示词里写显式大纲块:用 <OUTLINE> 与 </OUTLINE> 把逐行章节清单包起来(标签名也可用 章节大纲 / 大纲 / 目录 / CHAPTERS),逐行写章标题;两级结构用 1.1 /(1)形态写小节。`,["章节大纲(≥2 章)"]);let A=y.length>=2?"用户需求":x[0]?.name??"提示词",B=z.map(a=>a.title),C=function(a){let b=(a.projectName||"").trim();return b||a.projectRoot.replace(/[\\/]+$/u,"").split(/[\\/]/u).filter(Boolean).at(-1)||"当前项目"}(a),D=a.projectType?a.projectType:(0,i.yt)({template:{name:C,outputTitle:a.title||""},chapters:B.map(a=>({title:a})),requirement:`${a.requirement||""} ${v}`})[0]??"general",E=function(a){let b=a.skills??h.d7,c=a.projectType??"general",d=a.chapters??[],e="number"==typeof a.maxChapters&&a.maxChapters>0?Math.min(d.length,a.maxChapters):d.length,f=[],g=new Set,i=0;for(let a=0;a<e;a+=1){let e=d[a],h=[...e.sections??[]];i+=1;let j=(0,k.mG)(e.title,h,c,b);for(let a of j)g.add(a.id);let l=j.length>0?(0,k.$i)(j):{structure:[],forbidden:[],conflicts:[]};f.push({title:e.title,domains:(0,k.VO)(e.title),skillIds:j.map(a=>a.id),sections:l.structure,checklist:function(a){let b=[...a].sort((a,b)=>a.id<b.id?-1:+(a.id>b.id)),c=b.map(a=>a.chapterChecklist?.purpose?.trim()).find(a=>!!a),d={sections:m(...b.map(a=>a.chapterChecklist?.sections)),queries:m(...b.map(a=>a.chapterChecklist?.queries)),requiredFacts:m(...b.map(a=>a.chapterChecklist?.requiredFacts)),tableSections:m(...b.map(a=>a.chapterChecklist?.tableSections)),tableRequirements:m(...b.map(a=>a.chapterChecklist?.tableRequirements)),pinnedEvidenceFilePaths:m(...b.map(a=>a.chapterChecklist?.pinnedEvidenceFilePaths))};for(let a of(c&&(d.purpose=c),Object.keys(d))){let b=d[a];Array.isArray(b)&&0===b.length&&delete d[a]}return d}(j),forbidden:function(a){let b=[...a].sort((a,b)=>a.id<b.id?-1:+(a.id>b.id)),c=new Set,d=[];for(let a of b)for(let b of a.forbidden??[]){let a=("string"==typeof b?b:b.phrase).trim();0===a.length||c.has(a)||(c.add(a),d.push(a))}return d}(j),conflicts:l.conflicts})}let n=[...g].sort(),o=b.filter(a=>g.has(a.id));return{poolSize:b.length,matchReads:i,matchedSkillIds:n,chapters:f,...l(o)?{outputTitle:l(o)}:{},exportSettings:(0,j.b2)(a.formatRules),formatRulesPresent:!!a.formatRules}}({skills:a.skills??function(){try{let a=(0,n.l1)();return a.length>0?a:h.d7}catch{return h.d7}}(),chapters:z.map(a=>({title:a.title,sections:a.sections})),projectType:D,maxChapters:a.maxChapters}),{chapters:F,perChapter:G}=function(a,b){let c=new Map(b.chapters.map(a=>[a.title.trim(),a])),d=[];return{chapters:a.map(a=>{let b=c.get(a.title.trim()),e=(a.sections??[]).filter(Boolean),f=new Set(e.map(t)),g=(b?.sections??[]).map(a=>a.title.trim()).filter(Boolean).filter(a=>!f.has(t(a))),h=s(a.queries,b?.checklist.queries,b?.sections.map(a=>a.title)),i=b?.checklist.purpose?.trim(),j=function(a){let b=(a||"").trim();return 0===b.length||u.test(b)}(a.purpose)&&i?i:a.purpose;return d.push({title:a.title,domains:b?.domains??[],skillIds:b?.skillIds??[],sectionsFromOutline:e,sectionsFromSkills:g,conflicts:b?.conflicts.length??0}),{...a,purpose:j,queries:h,requiredFacts:s(a.requiredFacts,b?.checklist.requiredFacts),...s(e,g).length>0?{sections:s(e,g)}:{},...b?.checklist.tableSections?.length?{tableSections:s(a.tableSections,b.checklist.tableSections)}:{},...b?.checklist.tableRequirements?.length?{tableRequirements:s(a.tableRequirements,b.checklist.tableRequirements)}:{},...b?.checklist.pinnedEvidenceFilePaths?.length?{pinnedEvidenceFilePaths:s(a.pinnedEvidenceFilePaths,b.checklist.pinnedEvidenceFilePaths)}:{}}}),perChapter:d}}(z,E),H=(b=`${a.title||""} ${C} ${B.join(" ")} ${q} ${v}`,(0,f.E6)(b)?f.IB.name:(0,g.rs)(b,g.nt)||"文档"),{title:I,source:J}=function(a){let b=(a.title||"").trim();if(b)return{title:b,source:"human"};let c=(a.plan.outputTitle||"").trim(),d=c||a.documentType,e=a.projectName.trim();return{title:e?`${e}${d}`:d,source:c?"skill":"derived"}}({title:a.title,projectName:C,documentType:H,plan:E});return{id:function(a,b,c){let f=(0,d.createHash)("sha1").update(JSON.stringify({root:(0,e.computeProjectId)(a.projectRoot),title:b,prompt:c,requirement:a.requirement||""})).digest("hex").slice(0,12);return`doc-spec-${f}`}(a,I,v),title:I,documentType:H,chapters:F,derivation:{skillPoolSize:E.poolSize,matchReads:E.matchReads,matchedSkillIds:E.matchedSkillIds,outlineSource:A,projectType:D,titleSource:J,projectName:C,promptChars:v.length,requirementChars:q.length,prompts:c.map(a=>({id:a.id,name:a.name,category:a.category,chars:a.content.length})),perChapter:G}}}function w(a){return a instanceof r?[{level:"error",message:a.message,missing:a.missing}]:a instanceof Error?[{level:"error",message:a.message,missing:[]}]:[{level:"error",message:String(a),missing:[]}]}},38049:(a,b,c)=>{c.d(b,{$6:()=>k,Tg:()=>f,_u:()=>m});var d=c(7148);let e=new Map([["工程名称、建设地点、建设规模、计划工期、质量标准等资料已确认事实",{spec:{kind:"keywordGroups",groups:[["工程名称","项目名称"],["建设地点","工程地点","项目地点","位于"],["建设规模","建筑面积","总建筑面积","占地面积"],["计划工期","工期"],["质量标准","质量目标","合格标准"]],min:3},blocking:!0}],["现场条件与招标范围边界",{spec:{kind:"keywordGroups",groups:[["现场条件","场地条件","周边环境","交通条件","地质条件","地勘"],["招标范围","承包范围","施工范围","范围边界"]],min:2},blocking:!0}],["编制依据与适用范围(按五类逐项列全:招标文件及补疑补遗、国家法律法规、国家/行业现行规范标准、地方法规规章、企业管理体系;地方法规规章必须结合工程所在地属地的现行地方性法规与政府规章,不得只写笼统一句话)",{spec:{kind:"keywordGroups",groups:[["招标文件","补疑","补遗","答疑","澄清"],["法律法规","《中华人民共和国","法律、行政法规","建筑法","安全生产法"],["规范","标准","GB","JGJ","GB/T"],["地方","省","市.*条例","地方性法规","政府规章"],["企业管理体系","企业标准","质量、环境、职业健康安全","管理体系"]],min:4},blocking:!0}],["B5 专业工程清单:资料识别的专业工程逐个展开(不少于 5 个,每个专业工程写明作业对象与工程量、工序顺序、施工方法三方面要素,落到工程量与工艺参数)",{spec:{kind:"countDistinct",pattern:/^(?:#{3,5}\s*|[((]?\d{1,2}[)).、]\s*)([一-龥]{2,20}(?:工程|系统|分部|分项|安装|结构|装饰|管道|道路|桥梁|绿化))/gmu,min:5},blocking:!0}],["资料识别的专业工程(不少于5个)",{spec:{kind:"countDistinct",pattern:/^(?:#{3,5}\s*|[((]?\d{1,2}[)).、]\s*)([一-龥]{2,20}(?:工程|系统|分部|分项|安装|结构|装饰|管道|道路|桥梁|绿化))/gmu,min:5},blocking:!0}],["每个专业工程的作业对象与工程量/工序顺序/施工方法三方面要素",{spec:{kind:"keywordGroups",groups:[["工艺|工序|流程|顺序|先.*后|→"],["工程量|数量|面积为|长度为|共计|合计"],["采用|施工方法|工艺参数|做法"]],min:3},blocking:!1}],["工程量、材料设备规格、检测验收与资料闭环",{spec:{kind:"keywordGroups",groups:[["工程量|数量|面积|长度|体积"],["规格|型号|强度等级|管径|厚度"],["验收|检验|检测|复试"],["资料|台账|归档|记录"]],min:3},blocking:!1}],["资料明确的专业工程范围(逐项展开分项工程方案)",{spec:{kind:"countDistinct",pattern:/^#{3,5}\s*([一-龥]{2,24}(?:工程|系统|分部|分项|方案))/gmu,min:3},blocking:!0}],["每个分项方案的作业对象与工程量/工序顺序/施工方法三方面要素",{spec:{kind:"keywordGroups",groups:[["工艺|工序|流程|顺序|先.*后|→"],["工程量|数量|面积为|长度为|共计|合计"],["采用|施工方法|工艺参数|做法"]],min:3},blocking:!1}],["每个分项方案不少于4个工艺参数与至少1处3环节以上工序顺序表达",{spec:{kind:"paramDensity",min:1.5},blocking:!0}],["工艺参数来自绑定材料或行业通用规范值,不得编造",{spec:{kind:"keywordGroups",groups:[],min:0},blocking:!1}],["重点难点成因与影响范围",{spec:{kind:"keywordGroups",groups:[["成因|风险来源|风险源于|致险因素|由于|原因"],["影响|风险|后果|危害"]],min:2},blocking:!0}],["对应施工内容与专项措施",{spec:{kind:"keywordGroups",groups:[["措施|方案|对策"],["专项|针对性|具体做法"]],min:2},blocking:!0}],["责任岗位、检查频次、整改闭环",{spec:{kind:"keywordGroups",groups:[["责任|岗位|负责人"],["频次|每.*次|每周|每月|每日|巡查"],["整改|闭环|复查|复核"]],min:2},blocking:!1}],["施工区段与流水划分",{spec:{kind:"keywordGroups",groups:[["施工段|区段|流水段|作业面|分区"],["流水|平行|搭接|穿插"]],min:2},blocking:!0}],["各阶段施工顺序与穿插关系",{spec:{kind:"keywordGroups",groups:[["阶段|顺序|先后|先.*后|→"],["穿插|搭接|交叉|衔接"]],min:2},blocking:!1}],["资源动态调配机制",{spec:{kind:"keywordGroups",groups:[["资源"],["调配|动态|平衡|周转|调度"]],min:2},blocking:!1}],["总进度计划与关键节点",{spec:{kind:"keywordGroups",groups:[["总进度|进度计划|工期计划|里程碑"],["节点|控制点|关键线路"]],min:2},blocking:!0}],["周/日计划分解",{spec:{kind:"keywordGroups",groups:[["周计划|月度计划|月计划|日计划|季计划|年计划|旬计划"],["分解|细化|滚动|编制"]],min:1},blocking:!1}],["进度偏差识别与纠偏措施",{spec:{kind:"keywordGroups",groups:[["偏差|滞后|延误|对比"],["纠偏|赶工|调整|补救"]],min:2},blocking:!1}],["质量目标与验收依据",{spec:{kind:"keywordGroups",groups:[["质量目标|质量标准|合格率|一次验收合格"],["验收|GB|规范|标准"]],min:2},blocking:!0}],["三检制度与样板引路",{spec:{kind:"keywordGroups",groups:[["三检|自检|互检|专检"],["样板|首件|示范|引路"]],min:2},blocking:!0}],["隐蔽工程验收与材料复试",{spec:{kind:"keywordGroups",groups:[["隐蔽"],["验收|记录|影像|签证"],["复试|见证取样|送检"]],min:2},blocking:!0}],["见证取样送检、试块养护、分部分项报验等质量保障制度逐项落位",{spec:{kind:"keywordGroups",groups:[["见证取样|见证员|送检"],["试块|标养|同条件|养护"],["报验|分部分项|验收程序"]],min:2},blocking:!0}],["质量通病防治与闭环整改",{spec:{kind:"keywordGroups",groups:[["通病|常见问题|易发"],["防治|预防|治理|措施"],["整改|闭环|复查"]],min:2},blocking:!1}],["保修与缺陷责任期承诺",{spec:{kind:"keywordGroups",groups:[["保修"],["缺陷责任期|保修期|保修年限|保修期限"]],min:2},blocking:!0}],["安全目标与量化控制指标(如杜绝重伤及以上事故、轻伤事故频率控制值、安全达标率),须以承诺句式明确写出",{spec:{kind:"keywordGroups",groups:[["安全目标|安全生产目标|安全指标"],["杜绝|控制|达标率|不高于|不超过|为零|事故率"]],min:2},blocking:!0}],["危险源辨识与风险分级",{spec:{kind:"keywordGroups",groups:[["危险源|危害因素|风险源"],["辨识|识别|清单|台账"],["分级|等级|级别"]],min:2},blocking:!0}],["危大工程辨识清单逐项完整(按项目实际情况覆盖基坑支护与降水、模板支撑、脚手架、起重吊装、吊篮、拆除等适用项,逐项写明辨识依据,不得遗漏)",{spec:{kind:"keywordGroups",groups:[["基坑|降水|支护"],["模板|支撑体系|支模"],["脚手架"],["起重|吊装|塔吊|吊篮"],["拆除|爆破"]],min:2},blocking:!0}],["B6 危大分级参数—判定绑定(硬要求):每一类危大工程的判定必须写「本项目实际参数 + 判定阈值对照 + 结论」三要素(如「本项目基坑开挖深度 1.75m,对照《危险性较大的分部分项工程安全管理规定》开挖深度超过 3m 属危大工程的阈值,判定本工程基坑不属于危大工程」);**禁止只抄规范阈值**(如只写「开挖深度超过 3m 的沟槽土方开挖工程」而不给本项目实际深度);参数取自资料原文,不得编造",{spec:{kind:"keywordGroups",groups:[["超过|不小于|大于|阈值|限值"],["本项目|本工程|实际"],["判定|属于|不属于|不构成|构成|认定为"]],min:3},blocking:!0}],["危大工程专项方案编制与审批程序",{spec:{kind:"keywordGroups",groups:[["专项施工方案|专项方案"],["编制|审批|论证|审核|审批程序"]],min:2},blocking:!0}],["安全交底与隐患排查闭环",{spec:{kind:"keywordGroups",groups:[["交底"],["隐患排查|检查|巡查"],["闭环|整改|复查|销项"]],min:2},blocking:!1}],["施工现场临时用电三级配电两级保护:总配电箱/分配电箱/开关箱三级配电,两级漏电保护(总箱与开关箱各一级,漏电动作电流与动作时间参数落位),TN-S 接零保护系统,漏电保护器每周试跳 1 次",{spec:{kind:"keywordGroups",groups:[["三级配电|总配电箱|分配电箱|开关箱"],["两级保护|漏电保护|漏电动作"],["TN-S|接零保护|三级五线"],["试跳|检测|试验"]],min:3},blocking:!0}],["B5 生产安全事故应急预案与应急演练(八部分结构:总则、组织机构及职责、风险分析与危险源辨识、应急物资设备与通讯保障、专项应急预案、应急响应、后期处置、培训演练):逐部分展开,演练频次量化(如每半年 1 次),物资储备清单化",{spec:{kind:"keywordGroups",groups:[["总则|目的|编制目的"],["组织机构|应急组织|职责"],["风险分析|危险源辨识"],["物资|设备|通讯"],["专项应急预案"],["应急响应"],["后期处置|善后"],["培训|演练"]],min:5},blocking:!0}],["机械设备投入计划",{spec:{kind:"keywordGroups",groups:[["机械|设备"],["进场|投入|计划|台|数量"]],min:2},blocking:!0}],["分阶段劳动力计划",{spec:{kind:"keywordGroups",groups:[["劳动力|人员|工种|班组"],["阶段|基础|主体|装饰|收尾"]],min:2},blocking:!0}],["材料进场计划与验收",{spec:{kind:"keywordGroups",groups:[["材料"],["进场|采购|计划"],["验收|检验|复试|合格证"]],min:2},blocking:!1}],["扬尘治理六个百分百逐项落位(施工工地周边 100% 围挡、物料堆放 100% 覆盖、出入车辆 100% 冲洗、施工现场地面 100% 硬化、拆迁工地 100% 湿法作业、渣土车辆 100% 密闭运输;不涉及拆迁的写明豁免理由)",{spec:{kind:"keywordGroups",groups:[["围挡"],["覆盖|苫盖"],["冲洗|洗车"],["硬化"],["湿法|洒水"],["密闭运输|密闭"]],min:4},blocking:!0}],["扬尘噪声分时段管控",{spec:{kind:"keywordGroups",groups:[["扬尘"],["噪声|噪音"],["时段|夜间|白天|分时"]],min:2},blocking:!1}],["监测预警与台账",{spec:{kind:"keywordGroups",groups:[["监测|监控|检测"],["台账|记录|档案"]],min:2},blocking:!1}],["绿色施工与四节一环保措施:绿色施工按《绿色施工评价标准》GB/T 50640 分阶段评价(每阶段不少于 1 次,评价记录归档)",{spec:{kind:"keywordGroups",groups:[["绿色施工"],["GB/T 50640|绿色施工评价标准|评价"],["阶段|归档|记录"]],min:2},blocking:!1}],["B5 四节一环保量化指标:节水(非传统水源利用率/用水量控制)、节材(材料损耗率/废弃物回收率)、节地(土方平衡率)、节能(能耗指标)各至少 1 项带单位量化指标,附录八基准对照项逐项量化响应",{spec:{kind:"keywordGroups",groups:[["节水|用水量|水循环|非传统水源"],["节材|损耗率|回收率"],["节地|土方平衡|占地"],["节能|能耗|用电量"]],min:3},blocking:!0}],["应急组织架构",{spec:{kind:"keywordGroups",groups:[["应急"],["组织|机构|小组|职责|指挥"]],min:2},blocking:!0}],["应急物资储备",{spec:{kind:"keywordGroups",groups:[["应急物资|物资储备|救援物资|储备"],["清单|台账|数量|配备"]],min:1},blocking:!1}],["专项预案与演练计划",{spec:{kind:"keywordGroups",groups:[["专项.*预案|专项应急预案"],["演练|演习"],["频次|每.*次|每半年|每年"]],min:2},blocking:!1}],["竣工清理与垃圾外运",{spec:{kind:"keywordGroups",groups:[["竣工|完工|收尾"],["清理|清运|垃圾|外运"]],min:2},blocking:!0}],["缺陷修补与复验",{spec:{kind:"keywordGroups",groups:[["缺陷|整改|修补"],["复验|复查|验收"]],min:2},blocking:!1}],["验收移交与保修响应",{spec:{kind:"keywordGroups",groups:[["验收|移交|交接"],["保修|响应|回访"]],min:2},blocking:!0}],["建筑工人实名制管理(实名登记率 100%、实名制管理平台考勤)",{spec:{kind:"keywordGroups",groups:[["实名制|实名登记"],["平台|考勤|系统"],["100%"]],min:2},blocking:!0}],["农民工工资专用账户与银行代发(专用账户开设、按月足额代发、工资保证金)",{spec:{kind:"keywordGroups",groups:[["工资专用账户|专用账户"],["银行代发|代发|按月足额"],["保证金"]],min:2},blocking:!0}],["考勤与工资支付台账",{spec:{kind:"keywordGroups",groups:[["考勤"],["台账|记录|公示"],["工资|支付"]],min:2},blocking:!1}],["工伤保险办理与参保信息管理(作业人员工伤保险按项目参保、参保信息纳入实名制管理、工伤事故申报处置流程)",{spec:{kind:"keywordGroups",groups:[["工伤保险|参保"],["申报|处置|流程|理赔"]],min:2},blocking:!1}],["现状交通与地下管线调查(交通流量、沿线单位出入口、管线权属与埋深)",{spec:{kind:"keywordGroups",groups:[["交通流量|交通量|流量调查|现状交通"],["出入口|沿线单位|路口|交叉口"],["管线|权属|埋深|物探|图纸"]],min:2},blocking:!0}],["分阶段导改方案与围挡设置(导改阶段划分、导改路线、通行能力校核、围挡撤除条件)",{spec:{kind:"keywordGroups",groups:[["阶段|分期|分幅|分步|一期|二期"],["导改|导行|绕行|改道|路线"],["围挡|隔离|水马|护栏"],["通行能力|车道|宽度|校核|限速"]],min:2},blocking:!0}],["行人与沿线单位通行保障(人行通道、无障碍通行、出入口保通)",{spec:{kind:"keywordGroups",groups:[["行人|人行|无障碍"],["通道|便道|过街|栈桥"],["出入口|保通|通行|绕行"]],min:2},blocking:!1}],["地下管线探测与保护措施(探测方法、保护形式、监护与应急)",{spec:{kind:"keywordGroups",groups:[["物探|探测|探沟|开挖样洞|管线调查"],["保护|加固|悬吊|迁改|包封"],["监护|旁站|应急|报警|联动"]],min:2},blocking:!0}],["导改标志标线与夜间警示设施(标志、标线、夜间警示)",{spec:{kind:"keywordGroups",groups:[["标志|标牌|指示牌|导向"],["标线|轮廓标|隔离墩"],["夜间|警示|反光|照明"]],min:2},blocking:!1}],["受影响居民与诉求调查(受影响户数、诉求清单、调查方式)",{spec:{kind:"keywordGroups",groups:[["户数|居民|住户|栋"],["诉求|意见|需求|建议"],["调查|走访|座谈|问卷|排查"]],min:2},blocking:!0}],["扰民因素识别与控制措施(噪声、扬尘、振动、作业时段)",{spec:{kind:"keywordGroups",groups:[["噪声|噪音"],["扬尘|粉尘|垃圾"],["振动|震动"],["时段|夜间|作业时间|休息"]],min:2},blocking:!0}],["分区施工与居民通行保障(施工分区、通行路线、临时通道)",{spec:{kind:"keywordGroups",groups:[["分区|分段|分片|作业面|流水"],["通行|出行|通道|便道|路线"],["居民|住户|单元|楼道"]],min:2},blocking:!0}],["既有设施保护措施(既有管线、既有构筑物、保护形式)",{spec:{kind:"keywordGroups",groups:[["既有|原有|现状|保留"],["管线|管网|构筑物|设施|树木"],["保护|防护|加固|监测|恢复"]],min:2},blocking:!1}],["沟通公示与投诉响应(公示方式、联系渠道、响应时限)",{spec:{kind:"keywordGroups",groups:[["公示|公告|告知|张贴|通知"],["联系|电话|渠道|接待"],["响应|时限|处置|回复|办结"]],min:2},blocking:!0}],["成品保护策划与责任划分(保护对象清单、责任岗位、交接制度)",{spec:{kind:"keywordGroups",groups:[["成品|半成品|保护对象"],["清单|台账|一览表"],["责任|岗位|责任人|班组"],["交接|移交|签认"]],min:2},blocking:!0}],["交接验收与责任转移时点(交接条件、交接记录、责任转移时点)",{spec:{kind:"keywordGroups",groups:[["交接|移交|接收"],["验收|检查|确认"],["记录|签认|单"],["时点|责任转移"]],min:2},blocking:!1}],["分部位成品保护措施(地面、墙面、吊顶、门窗、设备)",{spec:{kind:"keywordGroups",groups:[["地面|楼面|地砖|石材|地板"],["墙面|墙柱|墙纸|涂料"],["吊顶|天棚|风口"],["门窗|门扇|玻璃"],["设备|面板|开关|插座|灯具"]],min:3},blocking:!0}],["交叉施工作业面协调(工序穿插顺序、作业面移交、冲突处理)",{spec:{kind:"keywordGroups",groups:[["交叉|穿插|平行作业"],["工序|顺序|先后"],["作业面|工作面|移交|协调|界面"]],min:2},blocking:!1}],["成品损坏责任认定与修复(损坏记录、责任认定、修复与复验)",{spec:{kind:"keywordGroups",groups:[["损坏|破损|污染|损伤|划伤"],["责任|认定|赔偿|追责"],["修复|更换|复验|整改"]],min:2},blocking:!1}]]),f={spec:{kind:"quantifiedRatio",min:.5},blocking:!0},g=RegExp(`\\d+(?:\\.\\d+)?\\s*(?:${d.wA}|mm|cm|kW|kV|MPa|kN|kPa|d|h|min|s|V|A|%|‰|度|毫米|厘米|公斤|千克|小时|分钟|日历天|天|日|年|月|周|旬|次|遍|人|项|份|层|栋|区|名|位|批|点|元|万元|立|标|级|段|处|道)(?![一-龥])`,"gu"),h=/([一-龥]{2,16}(?:工程|系统|分部|分项))(?=[、,,;;])/gu,i=new Set(["本工程","该工程","全部工程","所有工程","各工程","此项工程","整个工程","本系统"]);function j(a,b){switch(a.kind){case"keywordGroups":{if(0===a.groups.length)return{satisfied:!0,detail:"未设确定性判据(交由其它层)"};let c=a.groups.filter(a=>a.some(a=>RegExp(a,"u").test(b))).length;return{satisfied:c>=a.min,detail:`命中义务要素 ${c}/${a.groups.length}(线 ${a.min})`}}case"countDistinct":{let c=new Set;for(let d of b.matchAll(new RegExp(a.pattern.source,a.pattern.flags.includes("u")?a.pattern.flags:`${a.pattern.flags}u`))){let a=(d[1]||d[0]).replace(/\s+/gu,"");a&&!i.has(a)&&c.add(a)}if(c.size<a.min)for(let a of b.matchAll(RegExp(h.source,"gu"))){let b=(a[1]||"").replace(/\s+/gu,"");b&&!i.has(b)&&c.add(b)}return{satisfied:c.size>=a.min,detail:`逐项展开 ${c.size} 项(线 ${a.min})`}}case"sectionPresence":{let c=a.titles.filter(a=>RegExp(`^#{2,5}\\s*[\\d..]*\\s*${a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}`,"mu").test(b)).length;return{satisfied:c>=a.min,detail:`小节存在 ${c}/${a.titles.length}(线 ${a.min})`}}case"quantifiedRatio":{let c=b.split(/\n{2,}/u).map(a=>a.trim()).filter(Boolean);if(0===c.length)return{satisfied:!1,detail:"无段落"};let d=c.filter(a=>RegExp(g.source,"u").test(a)).length/c.length;return{satisfied:d>=a.min,detail:`量化段落占比 ${(100*d).toFixed(0)}%(线 ${(100*a.min).toFixed(0)}%)`}}case"paramDensity":{let c=b.replace(/\s+/gu,"").length;if(0===c)return{satisfied:!1,detail:"无正文"};let d=(b.match(RegExp(g.source,"gu"))||[]).length/c*1e3;return{satisfied:d>=a.min,detail:`工艺参数密度 ${d.toFixed(2)}/千字(线 ${a.min})`}}default:return{satisfied:!0,detail:`未知规格 ${String(a)}`}}}function k(a){let b=[];return a.mustCover.forEach((c,d)=>{let g=e.get(c)??(c.includes("每条重点难点必须写成")?f:void 0);if(!g)return;if(g===f){let e=function(a){let b=a.split("\n"),c=[];for(let a=0;a<b.length;a+=1)/^#{2,5}\s*[\d..]*\s*[^\n]*?(?:重点|难点)/u.test(b[a]||"")&&c.push(a);if(0===c.length)return null;let d=[];for(let a of c){let c=(b[a]?.match(/^#+/u)?.[0]||"#").length,e=a+1;for(;e<b.length;){let a=b[e]?.match(/^(#+)\s/u);if(a&&a[1].length<=c)break;e+=1}d.push(b.slice(a+1,e).join("\n"))}let e=d.join("\n\n").trim();return e.length>0?e:null}(a.chapterText);if(null===e)return;let f=j(g.spec,e);if(f.satisfied)return;b.push(l(a,c,d,g.blocking,f.detail));return}let h=j(g.spec,a.chapterText);h.satisfied||b.push(l(a,c,d,g.blocking,h.detail))}),b}function l(a,b,c,d,e){return{level:d?"error":"info",severity:d?"blocker":"suggestion",category:"professional_chain",message:`${a.chapterTitle} 章型义务未落位(${c+1}/${a.mustCover.length}):${b.slice(0,40)}${b.length>40?"…":""}——${e}`,suggestion:`按本章写作重点逐项补齐:${b}`,sectionTitle:a.chapterTitle,provenance:{detectorId:"chapter-focus-mustcover",fingerprint:`${a.chapterId}\u0000mustcover\u0000${c}`}}}function m(){return[...e.keys()]}},39372:(a,b,c)=>{c.d(b,{DR:()=>k,EG:()=>m,EK:()=>n,G2:()=>t,Il:()=>r,M6:()=>h,NJ:()=>s,R_:()=>j,_8:()=>o,bz:()=>q,gq:()=>g,md:()=>i});var d=c(76760),e=c(78217),f=c(3063);function g(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} 字`}}function h(a,b,c,d){let e=[],f=[];for(let b of a)0===b.evidence.length&&e.push(`${b.title} 未检索到资料证据`),b.content.length<80&&e.push(`${b.title} 内容较短,建议人工补充或重新生成`);return c&&a.length<c.chapters.length&&f.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===d.length&&f.push("本次生成没有生效的提示词(未选择)"),{passed:0===f.length,warnings:e,errors:f}}function i(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))||c.some(a=>/空小节|缺少规划小节/u.test(a))?"failed":"success"}function j(a){return(0,f.ap)(a)}function k(a,b){let c=(0,e.V7)(a.content);return c<=0?"failed":"number"==typeof b&&Number.isFinite(b)&&b>0&&c<.85*b?"partial":"completed"}function l(a,b,c=12){if(0===b.length)return[];let e=b.slice(0,c).map(a=>d.basename(a)),f=b.length>c?` 等 ${b.length} 个文件`:"";return[`${a}:${e.join("、")}${f}`]}function m(a){return a?({ready:"就绪",pending:"待构建",partial:"部分就绪",error:"异常",unavailable:"不可用"})[a]??"未知":"未知"}function n(a,b){let c=new Set(b.filter(Boolean)),d=(a.listFiles?.()||[]).filter(a=>0===c.size||c.has(a.relativePath)),e=new Set(d.map(a=>a.relativePath)),f=[...c].filter(a=>!e.has(a)),g=d.filter(a=>0===Math.max(0,Math.ceil(Number(a.chunkCount)||0))).map(a=>a.relativePath),h=d.filter(a=>"error"===a.status).map(a=>a.relativePath),i="function"==typeof a.countPendingIndexJobs?a.countPendingIndexJobs():0,j="function"==typeof a.getVectorStatus?a.getVectorStatus():void 0,k=d.filter(a=>"error"!==a.status&&Math.max(0,Math.ceil(Number(a.chunkCount)||0))>0),n=k.map(a=>a.relativePath),o=k.reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0),p=[...l("部分绑定文件未完成索引,已自动跳过",f),...l("部分绑定文件没有可用切片,已自动跳过",g),...l("部分绑定文件索引失败,已自动跳过",h)],q=c.size>0&&0===o?["所有绑定文件均无可用切片"]:[],r=[...p,...i>0?[`仍有 ${i} 个待索引任务,建议等待索引完成后生成`]:[],...j&&"ready"!==j.status?[`向量索引状态为${m(j.status)},当前召回质量可能下降`]:[]];return{scopedRecords:d,usablePaths:n,missingFiles:f,emptyFiles:g,errorFiles:h,pendingJobs:i,vectorStatus:j,usableChunkCount:o,blockingIssues:q,warnings:r}}function o(a){return[...a].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(",")}function p(a,b=5){return a?Object.entries(a).sort((a,b)=>b[1].inputChars-a[1].inputChars).slice(0,b):[]}function q(a,b=5){return p(a,b).map(([a,b])=>`${a} ${b.calls}次/${(b.inputChars/1e4).toFixed(1)}万字${b.schemaFailures?`(schema失败${b.schemaFailures})`:""}`).join(",")}function r(a){return a.filter(a=>a.name.startsWith("phase:")).sort((a,b)=>a.startedAt-b.startedAt).map(a=>`${a.name}:${(a.durationMs/1e3).toFixed(1)} 秒`)}function s(a,b=5){return p(a,b).map(([a,b])=>{let c=b.cacheHitTokens+b.cacheMissTokens,d=c>0?`,缓存命中 ${Math.round(b.cacheHitTokens/c*100)}%(${b.cacheHitTokens}/${c} token)`:"",e=b.schemaFailures?`,schema 失败 ${b.schemaFailures} 次`:"";return`${a}:${b.calls} 次,输入 ${(b.inputChars/1e4).toFixed(1)} 万字(L3 ${(b.l3Chars/1e4).toFixed(1)} 万字)${d}${e}`})}function t(a,b,c){if(Number.isFinite(c)&&c>0)return Math.ceil(c);let d=new Set(b.filter(Boolean)),e=a.listFiles?.().filter(a=>0===d.size||d.has(a.relativePath)).reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0)??0;return e>0?e:Math.max(1,d.size)}},40693:(a,b,c)=>{c.d(b,{Av:()=>L,CS:()=>U,DK:()=>aa,FI:()=>B,Fw:()=>C,Hl:()=>E,Ls:()=>A,Qe:()=>z,U4:()=>n,b7:()=>M,db:()=>G,eS:()=>V,iX:()=>F,jW:()=>$,l5:()=>_,ot:()=>D,y1:()=>K});var d=c(29055),e=c(3063),f=c(22157),g=c(41991);let h=a=>a.split(/\n(?=#{1,3}\s)/u)[0].trim(),i=/按设计图纸执行|按设计文件执行|详见设计图纸|按.{0,10}设计总说明执行|详见图纸|以设计图纸为准/u,j=/按设计确定/u,k=/\d+(?:\.\d+)?\s*(?:㎡|m²|m2|m3|m³|mm|cm|m|MPa|kPa|%|日历天|天|小时|层|台|套|个|座|次|kN|t|N|颗|樘|扇)/giu,l=/(?:间距|偏差|坡度|养护|搭接|试验压力|含水率|饱满度|压实度|厚度|饱满)[^\n]{0,10}\d/giu;function m(a,b){return!!i.test(a)||!!j.test(a)&&(a.match(k)||[]).length+(a.match(l)||[]).length<b}let n=["精心组织","科学管理","精益求精","全力保障","高效推进","力争一流","最大限度","显著提升","大力落实","充分确保","严格把控"],o=RegExp(n.join("|"),"u"),p=["精心组织科学管理确保工程质量","严格把控质量安全进度各项指标","最大限度提升项目管理水平","全力保障项目顺利推进","大力落实各项管理措施"],q=["精心组织劳动力分批进场并登记交底","每道工序完成后实测实量并记录数据","混凝土浇筑后每天洒水养护不少于两次"];async function r(a){return(0,g.A)({prototypes:[...p],negativePrototypes:[...q],lexicalHints:o,embedDocuments:a})}let s=[{pattern:/质量|验收|隐蔽|样板|通病/u,label:"质量闭环",concepts:[{label:"班组自检",any:/自检|自查|自验/u},{label:"工序互检",any:/互检/u},{label:"交接检",any:/交接检|工序交接|交接验收/u},{label:"问题整改",any:/整改|返工|返修|纠正|消缺/u},{label:"整改验证",any:/复查|复验|复核|复测|验证|销项|销号/u},{label:"资料归档",any:/归档|台账|资料留存|记录留存|签认/u}],prompt:"质量类内容须写清质量问题的发现、处置与验证过程:谁检查、发现问题怎么处置、处置结果由谁验证认可、留下什么记录;各环节落到具体工序与岗位,不要把环节名称罗列成串。",ownerRe:/质量/u},{pattern:/安全|风险|危大|临电|消防|吊装|高处/u,label:"安全闭环",concepts:[{label:"风险辨识",any:/辨识|识别|危险源/u},{label:"安全交底",any:/交底/u},{label:"现场检查",any:/检查|巡查|排查|验收/u},{label:"隐患整改",any:/整改|处置|消除|纠正|返工/u},{label:"整改验证",any:/复查|复核|复验|验证|销项|销号|闭合/u}],prompt:"安全类内容须写清风险识别、交底、现场检查、隐患处置与处置后验证的完整过程:每步落到具体岗位、频次与记录,不要把环节名称罗列成串。"},{pattern:/进度|工期|节点|计划/u,label:"进度闭环",concepts:[{label:"计划分解",any:/计划分解|总进度计划|月计划|周计划|节点计划/u},{label:"过程检查",any:/检查|核查|统计|对比/u},{label:"偏差识别",any:/偏差|滞后|延误|差距/u},{label:"资源纠偏",any:/纠偏|调整|增派|调配|赶工/u},{label:"节点复核",any:/复核|核对|确认|校准/u}],prompt:"进度类内容须写清计划分解、过程检查、偏差识别、资源纠偏与节点复核:每步落到具体岗位、周期与记录。",ownerRe:/进度|工期/u},{pattern:/文明|扬尘|噪声|绿色|环保|垃圾/u,label:"环保闭环",concepts:[{label:"监测",any:/监测|检测|观测|测定/u},{label:"预警",any:/预警|报警|阈值|超标/u},{label:"联动处置",any:/处置|整改|停工|覆盖|洒水|降尘/u},{label:"台账记录",any:/台账|记录|归档|留存/u}],prompt:"文明环保类内容须写清监测、预警、联动处置与台账记录:监测点位、频次、阈值与处置动作落到具体岗位。"},{pattern:/工资|劳务|实名/u,label:"工资闭环",concepts:[{label:"实名登记",any:/实名|进场登记|用工登记/u},{label:"考勤",any:/考勤|打卡|出勤/u},{label:"工资核算",any:/核算|计量|结算|工资表/u},{label:"公示",any:/公示|公开|张榜/u},{label:"银行代发",any:/代发|银行发放|专用账户/u},{label:"资料归档",any:/归档|留存|备查|台账/u}],prompt:"工资保障类内容须写清实名登记、考勤、工资核算、公示、银行代发与资料归档:每步落到具体岗位、周期与留存凭证。",ownerRe:/劳务|工资|劳动力|实名|用工/u},{pattern:/应急|预案|救援|事故/u,label:"应急闭环",concepts:[{label:"险情发现",any:/发现|报告|报警|监测/u},{label:"警戒疏散",any:/警戒|疏散|隔离|撤离/u},{label:"初期处置",any:/处置|抢救|救护|抢险/u},{label:"救援上报",any:/上报|报告|请求救援|拨打/u},{label:"复盘整改",any:/复盘|总结|整改|改进/u}],prompt:"应急类内容须写清险情发现、警戒疏散、初期处置、救援上报与事后复盘:每步落到具体岗位与时限。"}],t={building:{label:"房建工程",chain:["施工准备","土方/基础","主体结构","二次结构/砌体","防水","机电安装","装饰装修","室外工程","竣工验收"],forbidden:["管道闭水试验","沥青摊铺","水稳层","交通导改"],prompt:"房建类章节应按“施工准备—基础—主体—二次结构—防水—机电—装饰—室外—验收”组织,不得混入市政道路工序。"},municipal:{label:"市政工程",chain:["测量放线","管线探测","围挡导行","沟槽/路基","管道/管涵/检查井","回填","水稳/沥青/铺装","标线/标志/路灯","验收移交"],forbidden:["主体结构","二次结构","塔吊","外脚手架","屋面防水"],prompt:"市政类章节应按“测量放线—管线探测—围挡导行—沟槽/路基—管道/结构—回填—路面恢复—验收移交”组织,不得写成房建主体结构逻辑。"},renovation:{label:"老旧小区改造",chain:["居民沟通","分区施工","既有保护","外墙/屋面/管网改造","扰民控制","竣工恢复"],forbidden:["大面积深基坑","高支模","大体量主体结构","长距离交通导改"],prompt:"老旧小区改造类章节必须体现“居民沟通—分区施工—既有保护—改造作业—扰民控制—竣工恢复”,不得忽略居民通行和既有设施保护。"},decoration:{label:"装饰装修工程",chain:["基层处理","防水/闭水","吊顶/龙骨","墙地面/铺装","收口/收边","成品保护","空气质量/环境检测"],forbidden:["深基坑","路基压实","水稳层","沥青摊铺","大体量土方"],prompt:"装饰装修类章节应按“基层处理—防水闭水—吊顶墙面—地面铺装—细部收口—成品保护—空气质量验收”组织,不得混入基坑、路基等无关内容。"},general:{label:"通用工程",chain:["施工准备","工艺流程/施工工艺","施工方法","验收标准/验收要求"],forbidden:[],prompt:"未判别出具体专业类型的章节,仍须按“施工准备—工艺流程—施工方法—验收标准”的次序把工艺内容写实:先写作业条件准备与确认,再写工艺流程与工序步骤,再写各步骤的施工方法与过程控制要求,最后写质量验收要求(检验项目、方法与频次);不得只写管理口号、或整章只罗列工艺名称而无过程叙述。"}},u=[{title:"招标评分项响应索引",pattern:/技术标|施工组织设计|评分|响应/u,prompt:"设置招标评分项响应索引,逐项对应章节、响应内容和位置。"},{title:"主要工程量一览表",pattern:/工程量|清单|土方|钢筋|混凝土|管道|路面/u,prompt:"将主要工程量表格化,关联资源配置和进度节点。"},{title:"影像资料留存",pattern:/隐蔽|危大|整改|验收|样板/u,prompt:"隐蔽、危大、材料验收、样板和整改前后对比必须留存影像资料。"},{title:"变更签证管理",pattern:/改造|市政|工期紧|变更|签证/u,prompt:"改造、市政或工期紧项目应补充变更识别、技术核定、签证资料和影响跟踪。"},{title:"危险品专项管理",pattern:/装修|装饰|动火|油漆|稀释剂|氧气|乙炔/u,prompt:"涉及动火、油漆、稀释剂、氧气乙炔时应补充危险品分区存放与动火审批。"},{title:"材料损耗与周转控制",pattern:/钢筋|模板|周转|材料|大体量/u,prompt:"体量大或材料占比高时应补充钢筋翻样、模板周转、余料回收和限额领料。"},{title:"分户验收",pattern:/住宅|住户|交付|分户/u,prompt:"住宅项目应补充分户实测实量、问题清单、整改与复验记录、交付资料。",projectTypes:["building","renovation"]}];function v(a){let b=a.map(a=>({id:a.id||a.title,title:`${a.title} ${(a.sections||[]).join(" ")}`.trim(),purpose:"",queries:[],requiredFacts:[]}));return(0,d.un)({template:{id:"runtime",name:"",outputTitle:"",description:"",category:"",chapters:b},chapters:b})}function w(a){return a.replace(/\s+/gu,"").toLowerCase()}function x(a,b){return a.split("/").some(a=>b.includes(w(a)))}function y(a){return a.split("/")[0]}function z(a){let b=[];for(let c of a.chapters)for(let a of String(c.content||"").split(/(?=^#{3}\s)/mu)){if(!a.trim())continue;let e=a.match(/^#{1,6}\s*(.+)$/mu);if(!e)continue;let f=e[1].trim().slice(0,40);if(!f)continue;let g=w(a);for(let{type:a,pattern:e}of d.s8){if(!e.test(f))continue;let d=t[a],h=d.forbidden.filter(a=>g.includes(w(a)));h.length>=1&&b.push({chapter:c,kind:"mixed",domain:a,label:d.label,sectionTitle:f,hits:[...h],missing:[],prompt:d.prompt})}}let c=w(a.documentText),e=Object.keys(t).filter(a=>"general"!==a).filter(b=>{let d=t[b];return RegExp(d.label,"u").test(a.documentText)||d.chain.filter(a=>x(a,c)).length>=3});for(let d of e.length?e:["general"]){let e=t[d],f=e.chain.filter(a=>x(a,c));if(f.length>=Math.min(3,e.chain.length))continue;let g=[...a.chapters].map(a=>({chapter:a,hits:e.chain.filter(b=>x(b,w(`${a.title} ${a.content||""}`))).length})).sort((a,b)=>b.hits-a.hits)[0];g&&0!==g.hits&&b.push({chapter:g.chapter,kind:"insufficient",domain:d,label:e.label,hits:f.map(y),missing:e.chain.filter(a=>!x(a,c)).map(y),prompt:e.prompt})}return b.push(...function(a){let b=[];for(let c of Object.keys(t).filter(a=>"general"!==a)){let d=t[c],e=d.chain.map((b,c)=>({node:b,chainOrder:c,at:function(a,b){let c=w(b),d=a.split("/").map(a=>c.indexOf(w(a))).filter(a=>a>=0);return d.length>0?Math.min(...d):-1}(b,a.documentText)})).filter(a=>a.at>=0);if(e.length<3)continue;let f=e.filter((a,b)=>b>0&&a.at<(e[b-1]?.at??-1));if(0===f.length)continue;let g=[...a.chapters].map(a=>({chapter:a,hits:d.chain.filter(b=>x(b,w(`${a.title} ${a.content||""}`))).length})).sort((a,b)=>b.hits-a.hits)[0];g&&0!==g.hits&&b.push({chapter:g.chapter,kind:"order",domain:c,label:d.label,hits:e.map(a=>y(a.node)),missing:f.map(a=>y(a.node)),prompt:d.prompt})}return b}(a)),b}function A(a){let b=`${a.title} ${(a.sections||[]).join(" ")}`;if(!/施工组织设计|施工组织|施组|技术标|施工方案|质量|安全|文明施工/u.test(b))return"";let c=v([a]);return["【施工组织设计专项写作规则】","- 禁止空话套话:不要只写“加强管理、严格控制、确保质量、精心组织、科学管理、周密部署、狠抓落实、统筹兼顾”等零信息口号(全文质检会按语义原型拦截并要求重写),每条措施要能回答“谁来做、做什么、什么标准、多久一次、不达标怎么处置”——按这五问写成句子,不要套用固定字词表或固定收尾。","- 落地措施范例:“由质检员每周不少于1次对级配碎石层压实度抽检,不足95%的当日返工复验”——每句措施要能回答“谁、做什么、什么标准、多久一次、不达标怎么办”;项目特有数据必须来自资料或图谱。",...(0,d.V5)(s,c).filter(a=>a.pattern.test(b)).map(a=>`- ${a.prompt}`),...(0,d.V5)(u,c).filter(a=>a.pattern.test(b)).map(a=>`- 高分补充:${a.prompt}`)].join("\n")}function B(a){let b={id:"runtime",name:a.templateName,outputTitle:a.outputTitle||"",description:"",category:"",chapters:[]},c=a.chapters.map(a=>({...a,title:`${a.title} ${(a.sections||[]).join(" ")}`.trim()})),e=(0,d.yt)({template:{...b,name:"",outputTitle:""},chapters:c}).filter(a=>"general"!==a),f=(e.length?e:(0,d.yt)({template:b,chapters:[],requirement:a.requirement,materialText:a.materialText})).filter(a=>"general"!==a).map(a=>t[a].prompt),g=f.length?f:[t.general.prompt];return`【专业工序链约束】
198
+ ${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}var L=c(35547),M=c(31920),N=c(71536),O=c(65667);let P=[{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"],locations:"机械表、平面布置、进度保障、安全专项方案",kind:"equipment-counts"},{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 Q(a){return a.replace(/[\s,。;;::|]/gu,"").trim()}let R=/塔式起重机|履带吊|汽车吊|卷扬机|脚手架|扣件|钢管|模板|噪声|PM2\.5|PM10|TSP|扬尘在线监测|临电|消防|安全网|围挡|洗车台|沉淀池|雾炮/u,S=/不使用|不采用|不配置|无需|未采用|不得使用|禁止使用/u;function T(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(Q).filter(Boolean)}function U(a,b){return 0===b.length||b.some(b=>b.includes(a)||a.includes(b)||a.length>=4&&b.includes(a.slice(0,4)))}var V=c(37047),W=c(63516),X=c(42750),Y=c(86710);let Z=["电梯","幕墙","智能化","消防","暖通","给排水","电气","燃气","人防","室外","园林","绿化","景观","钢结构","防水","保温","门窗","通风","空调","防雷","接地","动力","照明","拆除","加固","装修","装饰"];var $=c(27625);let _=/[二三四五六七八九十\d]{1,4}\s*个?\s*阶段/u,aa={一:1,二:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};function ab(a){return/(\d+|[一二三四五六七八九十]+)\s*个?\s*阶段/u.exec(a)?.[1]??null}function ac(a){let b=a.map(ab).filter(a=>null!==a).map(a=>/^\d+$/u.test(a)?parseInt(a,10):/^[一二三四五六七八九十]+$/u.test(a)?"十"===a?10:1===a.length?aa[a]??null:a.startsWith("十")?10+(aa[a[1]]??0):a.endsWith("十")?(aa[a[0]]??0)*10:(aa[a[0]]??0)*10+(aa[a[2]]??0):null).filter(a=>null!==a);return 0===b.length?null:1===new Set(b).size?b[0]:null}async function ad(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=>{var b;if(a.length<8||a.length>60)return!1;let c=_.exec(a);return null!==c&&(b=c.index,!/[、,,]/u.test(a.slice(Math.max(0,b-12),b)))}))];if(b.length<2)return[];let c=await (0,V.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(ac).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:"全文统一阶段划分口径:以总进度计划/施工部署章节的划分为唯一口径,其余章节划分句逐字对齐或删除。",provenance:{detectorId:"stage-phrasing",fingerprint:(0,G.c6)(`stage-phrasing\u0000${[...h].sort().join("\x01")}`)}}]}var ae=c(19329),af=c(70208),ag=c(34666),ah=c(10751),ai=c(76193),aj=c(38049),ak=c(68977);let al={基坑工程:/基坑|土方开挖|基坑支护|槽/u,模板工程及支撑体系:/模板|支撑体系|支模|满堂架/u,起重吊装及起重机械安装拆卸工程:/起重|吊装|塔式起重机|塔吊|吊篮|安装拆卸/u,脚手架工程:/脚手架|外架|附着式升降/u},am={superHazardous:/超过一定规模的危大(?:工程)?|超危大/u,hazardous:/属(?:于)?(?:危大(?:工程)?|危险性较大)/u,notHazardous:/不属(?:于)?(?:危大|危险性较大)|未达(?:到)?危大/u},an=/(?:开挖深度|搭设高度|搭设跨度|起吊重量|单件起吊|施工总荷载|集中线荷载)\s*(?:超过|不小于|≥|大于等于|达到)\s*[\d.]+\s*(?:m|kN|kN\/m2|kN\/m²|kN\/m)/u,ao=/本项目|本工程|实际|实测|经核|依据清单|工程量清单载明/u;var ap=c(52922),aq=c(10025);c(12863),c(7148);var ar=c(31846),as=c(31530),at=c(59873),au=c(98632);function av(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=/^\s*\|(.+)\|\s*$/u.exec(c);if(a){let c=(a[1]??"").split("|").map(a=>a.trim()),d=c[0]??"",e=c[1]??"";c.length>=2&&d&&e&&!/^[-:\s]+$/u.test(e)&&b.push({label:d,value:e});continue}for(let a of c.matchAll(/([一-龥A-Za-z]{2,10})\s*[::]\s*([^。;\n|,,]{1,40})/gu)){let c=(a[1]??"").trim(),d=(a[2]??"").trim();c&&d&&b.push({label:c,value:d})}}return b}let aw=new Set(["项目名称","建设地点","建设规模"]);function ax(a,b){let c=new Set;for(let a of b||[]){let b=String(a??"").trim();b.length>=2&&c.add(b)}for(let b of av(a)){let a=(0,l.hf)(b.label,b.label);if(!aw.has(a)||(0,l.oj)(b.value))continue;let d=(0,l.Jo)(b.value).value.trim();for(let a of(d.length>=2&&c.add(d),d.split(/[,,、;;]/u))){let b=a.trim();b.length>=4&&c.add(b)}}return[...c]}function ay(a){return String(a||"").replace(/\s+/gu,"")}function az(a){return ay(a).replace(/(\d{4})年(\d{1,2})月(\d{1,2})日/u,(a,b,c,d)=>`${b}年${Number(c)}月${Number(d)}日`)}function aA(a){let b=/([\d,]+(?:\.\d+)?)\s*(亿元|万元|元)/u.exec(ay(a));if(!b)return ay(a);let c=Number((b[1]??"").replace(/,/gu,""))*("亿元"===b[2]?1e8:"万元"===b[2]?1e4:1);return Number.isFinite(c)?`${c.toFixed(2)}元`:ay(a)}function aB(a,b){let c=(0,aq.dm)(a);if(c!==(0,aq.dm)(b))return!0;if("date"===c)return az(a)===az(b);if("money"===c)return aA(a)===aA(b);if("measure"===c||"spec"===c){let c=(0,as.Bk)(a),d=(0,as.Bk)(b);if(void 0!==c&&void 0!==d)return c===d}return(0,m.LD)(ay(a))===(0,m.LD)(ay(b))}let aC=/\d+(?:\.\d+)?\s*(?:m2|m3|m²|m³|㎡|m|km|kg|t|吨|个|座|套|台|根|块|樘|扇|片|组|件|孔|盏|项|处|层|日历天|天|%)/gu;var aD=c(81892),aE=c(91943),aF=c(54185),aG=c(75251),aH=c(19245);async function aI(a){let b=await (0,x.Z2)(a.markdown,a.factsModel,{scopeClassifier:a.factTokenScopeClassifier}),c=new Set((a.truthValues||[]).flatMap(a=>a.superseded||[]).map(a=>(0,e.K3)(a))),f=(0,w.un)({template:a.template,chapters:a.template.chapters,materialText:a.chapters.map(a=>a.title).join(" ")}),g=(0,W.Uk)(a.tenderRequirements).map(({item:a})=>(0,W.E6)(a)),h=a.markdown.split(/\n/u).filter(a=>/^#{2,4}\s/u.test(a.trim())).map(a=>(0,W.NT)(a)).filter(Boolean).slice(0,80),i=(0,y.s3)(a.markdown,y.ev),j=await (0,V.Mv)(g,[...h,...i]),k=await (0,V.Mv)(a.evaluationCriteriaItems||[],h),m=new Map((await Promise.all(a.chapters.map(async b=>[b.title,await a.professionalDepthClassifier.analyze(b.content)]))).filter(a=>!!a[1]));return[...(0,ai.yT)("toc-consistency",()=>a.promptDocumentRules?.forbidToc?[]:[...(0,x.gN)(a.markdown),...(0,x.f8)(a.markdown)]),...(0,ai.yT)("hazard-grade-consistency",()=>(function(a){var b;let c=(b=a.markdown,a.bindings.map(a=>{let{conclusion:c,excerpt:d}=function(a,b){let c=al[b];for(let b of a.split(/[。;;!?!?\n]/u).map(a=>a.trim()).filter(a=>a.length>0)){if(!c.test(b))continue;let a=b.slice(0,240);if(am.notHazardous.test(b))return{conclusion:"不属危大",excerpt:a};if(am.superHazardous.test(b))return{conclusion:"属超过一定规模的危大",excerpt:a};if(am.hazardous.test(b))return{conclusion:"属危大",excerpt:a}}return{conclusion:null,excerpt:""}}(b,a.category),e={category:a.category,canonical:a.conclusion,written:c,basis:a.basis,excerpt:d};return null===c?{...e,verdict:"absent"}:c!==a.conclusion?{...e,verdict:"contradicted"}:"不属危大"!==a.conclusion&&!ao.test(d)&&an.test(d)?{...e,verdict:"unbound"}:{...e,verdict:"consistent"}})),d=[];for(let a of c){if("consistent"===a.verdict)continue;let b={category:"fact_consistency",owner:"llm",repairability:"llm_repairable",sectionTitle:"危大工程",provenance:{detectorId:"hazard-grade-consistency",fingerprint:`hazard\u0000${a.category}`}};if("contradicted"===a.verdict){let c="不属危大"===a.canonical?`正文把${a.category}写成「${a.written}」,而本项目参数对照阈值表判定**不属危大**——这是**编造危大**,评标专家核对清单即可发现`:"不属危大"===a.written?`正文把${a.category}写成「不属危大」,而本项目参数对照阈值表判定「${a.canonical}」——这是**漏判危大**,属安全合规红线`:"属超过一定规模的危大"===a.written?`正文把${a.category}写成「属超过一定规模的危大」,而本项目参数只达「属危大」档——**越档升级**:超危大要求专家论证,按更高的档位表述会与清单参数对不上,评标核对即发现`:`正文把${a.category}写成「属危大」,而本项目参数已达「属超过一定规模的危大」档——**降档漏判**:达到超危大档的须组织专家论证,降档表述会漏掉这道法定程序`;d.push({...b,level:"error",severity:"blocker",message:`危大分级与资料矛盾(${a.category}):${c}。判定依据:${a.basis}`,suggestion:`按资料实测参数改写${a.category}的危大分级结论为「${a.canonical}」,并逐项写明「本项目实际参数 + 判定阈值对照 + 结论」三要素;不得只抄规范阈值。`});continue}if("unbound"===a.verdict){d.push({...b,level:"error",severity:"blocker",message:`危大分级未绑定本项目参数(${a.category}):正文出现「属危大」结论但该判定窗口内只有规范阈值句、没有本项目实际参数——只抄规范阈值不落地本项目,评审视为未响应。`,suggestion:`在${a.category}判定处补写本项目实测参数(如「本项目 XX 实测 Nm,对照 XX 条款 ≥Xm 门槛,判定属危大工程」);参数取自资料原文,不得编造。`});continue}"不属危大"!==a.canonical&&d.push({...b,level:"error",severity:"blocker",message:`危大分级结论缺失(${a.category}):资料判定「${a.canonical}」,正文未在本类别语境下给出分级结论。判定依据:${a.basis}`,suggestion:`在危大工程清单/安全章补写${a.category}的分级判定(本项目实际参数 + 阈值对照 + 结论三要素)。`})}return d})({markdown:a.markdown,bindings:(0,ak.ym)(a.materialEvidence||[],function(a){let b={};for(let c of a?.preciseFacts||[]){let a=`${c.fieldId||""} ${c.fieldName||""} ${c.key||""}`;/基坑|开挖|挖土|槽/u.test(a)&&/深度/u.test(a)&&"string"==typeof c.value&&(b[c.fieldName||c.fieldId||"基坑开挖深度"]=c.value)}return b}(a.factsModel))})),...(0,ai.yT)("emergency-plan-coverage",()=>(0,ap.mL)(a.markdown).map(a=>({level:"warning",severity:"warning",category:"professional_chain",message:`应急专项预案未覆盖本项目实际风险源:${a.plan}(${a.why})`,suggestion:`在应急管理章补编「${a.plan}」专项应急预案(含应急组织、响应流程、物资与演练安排);风险源证据取自本项目正文,不得以「本项目不涉及」回避有作业证据的风险。`,provenance:{detectorId:"emergency-plan-coverage",fingerprint:`emergency-plan-coverage\u0000${a.plan}`}}))),...(0,ai.yT)("field-value-authority",()=>(function(a){let b=[],c=String(a.markdown||"");if(!c)return b;let d=new Map;for(let b of a.resolved||[]){let a=String(b.attribute||"").trim(),c=String(b.value||"").trim();a&&c&&(d.has(a)||d.set(a,b))}if(0===d.size)return b;let e=new Set;for(let a of av(c)){if(b.length>=8)break;let c=(0,l.hf)(a.label,a.label),f=c?d.get(c):void 0;if(!f)continue;let g=String(a.value||"").trim();if(!g||g.length>40||(0,l.oj)(g)||(0,l.j4)(g)||function(a){let b=new Set;for(let c of a.matchAll(aC))if(b.add(c[0].replace(/\s+/gu,"")),b.size>=2)return!0;return!1}(g))continue;let h=(0,l.Jo)(g).value.trim();if(!h||h.length>40)continue;let i=(0,aq.dm)(h);if("text"===i||i!==(0,aq.dm)(f.value)||aB(h,f.value))continue;let j=`${c}\u0000${h}`;if(e.has(j))continue;e.add(j);let k=f.superseded.some(a=>aB(h,a)),m=f.evidence[0]?.source||"—";b.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"field-value-authority",fingerprint:(0,G.c6)(`${c}\u0000${h}`)},message:`字段值-权威值不符:正文「${c}」写作「${h}」,真值层裁决的现行值为「${f.value}」(裁决 ${f.rule};依据 ${m})${k?"——正文所用「"+h+"」是账本登记的**被取代值**(已作废口径)":""}`,suggestion:`将「${c}」改为真值层现行值「${f.value}」(数值、单位、日期形态一并照写);若确需交代变更过程,必须写成「原为${h},经答疑澄清变更为${f.value}」,不得单独以旧值陈述现状。`})}return b})({markdown:a.markdown,resolved:a.truthValues||[]})),...(0,ai.yT)("four-news-substance",()=>(function(a){let b=[],c=String(a.markdown||"");if(!c)return b;let d=(0,ap.T4)(c);if(0===d.found.length)return b;let e=ax(c,a.projectEntities),f=!!a.templating&&(0,at.h)(a.templating),g=c.split(/[。;;\n]+/u).map(a=>a.trim()).filter(a=>a.length>=4);if(e.length>0)for(let a of d.found){if(b.length>=8)break;let c=g.filter(b=>b.includes(a));0!==c.length&&(c.some(a=>e.some(b=>a.includes(b)))||b.push({level:"info",severity:"suggestion",category:"professional_chain",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"four-news-substance",fingerprint:(0,G.c6)(`entity\u0000${a}`)},message:`四新升级价值未落到本项目实体:技术「${a}」在正文出现 ${c.length} 处,但每一处所在句都不含本项目实体(清单条目/图纸参数/项目类型/建设地点)——该价值表述换个项目同样成立(首处:“${c[0].slice(0,60)}”;本次实体基准:${e.slice(0,6).join("、")}${e.length>6?` 等 ${e.length} 项`:""})`,suggestion:`把「${a}」的升级价值写成本项目口径:挂到具体部位/清单条目/图纸参数(节点部位、规格型号、工程量)并给出可核对的量化收益;判定面是"该论断能否追到本项目某个具体事实",不是"句子像不像价值表述"。`}))}for(let a of(0,ap.ge)((0,ap.Du)(c))){if(b.length>=8)break;let c=d.found.filter(b=>a.includes(b));0!==c.length&&(ap.h1.test(a)||b.push({level:"info",severity:"suggestion",category:"professional_chain",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"four-news-substance",fingerprint:(0,G.c6)(`difficulty\u0000${c.join("、")}\u0000${a.slice(0,120)}`)},message:`重难点条目含四新技术声明但无量化目标,从未进入语义复核面:条目“${a.slice(0,60)}”声明了 ${c.join("、")},却无「数值+单位/频次」形态的控制目标(窄触发面 ${f?"已命中":"未命中"}——窄触发面按整篇信号开火,看不见这一条)`,suggestion:`按 templatingReview 第 3 条逐条复核该条目的四新升级价值(是否停留在"提升效率"式套话、能否对标官方推广目录或替代落后工艺),并补齐该条目的量化控制目标;若确无量化口径,须改为可核对的定性验收标准。`}))}return b})({markdown:a.markdown})),...(0,ai.yT)("chapter-focus-mustcover",()=>a.chapters.flatMap(a=>{let b=(0,aD.uQ)(a.title,f);return b?(0,aj.$6)({chapterId:a.id,chapterTitle:a.title,chapterText:a.content,mustCover:b.mustCover}):[]})),...(0,ai.yT)("section-numbering",()=>(0,x.Jn)(a.markdown)),...(0,ai.yT)("section-count-overflow",()=>(0,x.VW)(a.chapters)),...(0,ai.yT)("heading-duplicate",()=>(0,x.kw)(a.markdown)),...(0,ai.yT)("structure-integrity",()=>(0,aE.dC)(a.markdown,{excludeKinds:["truncated-line"]})),...(0,ai.yT)("truncated-sentence",()=>(0,aE.kj)(a.markdown)),...(0,ai.yT)("templated-label",()=>(0,aF.D9)(a.markdown)),...(0,ai.yT)("title-integrity",()=>(0,aF.uw)(a.markdown)),...(0,ai.yT)("evaluation-criteria-coverage",()=>(0,x.wl)(a.markdown,a.evaluationCriteriaItems||[],{semanticSimilarity:k})),...await (0,ai.ll)("requirements-coverage",()=>(0,W.tH)({markdown:a.markdown,entries:(0,W.Uk)(a.tenderRequirements).map(({item:a})=>a),bodyTexts:i,semanticSimilarity:j})),...(0,ai.yT)("fabricated-start-date",()=>(0,y.cf)(a.markdown,a.factsModel,a.materialEvidence)),...(0,ai.yT)("field-value-mismatch",()=>(0,y.a8)(a.markdown,a.factsModel)),...(0,ai.yT)("area-arithmetic",()=>(0,y.u2)(a.markdown)),...(0,ai.yT)("resource-consistency",()=>(0,y.rA)(a.markdown,{laborPeakAuthority:(0,ah.yB)(a.blueprintData)})),...(0,ai.yT)("node-schedule-consistency",()=>(0,y.Et)(a.markdown)),...(0,ai.yT)("cross-section-numeric-conflict",()=>(0,y.H)(a.markdown)),...(0,ai.yT)("fact-reconciliation",()=>(0,aG.az)({markdown:a.markdown,billFactLock:a.billFactLock,blueprintData:a.blueprintData,factsModel:a.factsModel})),...(0,ai.yT)("greening-maintenance-mismatch",()=>(0,y.x5)(a.markdown,a.factsModel)),...(0,ai.yT)("street-light-count-mismatch",()=>(0,y.Tz)(a.markdown,a.factsModel)),...(0,ai.yT)("spec-location-mismatch",()=>(0,y.$$)(a.markdown,a.factsModel.specAuthorityMap)),...await (0,ai.ll)("blueprint-citation-consistency",async()=>a.blueprintData?(await (0,ag.dr)(a.markdown,a.blueprintData)).filter(a=>"error"===a.level):[]),...await (0,ai.ll)("cross-project-value-copy",()=>(0,y.iy)(a.markdown,(0,ah.L$)(a.blueprintData))),...(0,ai.yT)("phase-labor-mixing",()=>(0,y.cv)(a.markdown,(0,ah.i2)(a.blueprintData))),...(0,ai.yT)("equipment-batch-conflict",()=>(0,y.KE)(a.markdown,(0,ah.Be)(a.blueprintData))),...(0,ai.yT)("preliminary-action-timing",()=>(0,y.fg)(a.markdown,a.blueprintData?.contract.totalDays)),...(0,ai.yT)("foundation-form-residue",()=>(0,y.ex)(a.markdown)),...(0,ai.yT)("ambiguous-either-or",()=>(0,y.Fr)(a.markdown)),...(0,ai.yT)("excavation-depth-lock",()=>(0,y.bq)(a.markdown)),...(0,ai.yT)("excavation-hazard-classification",()=>(0,y.LA)(a.markdown,a.factsModel)),...(0,ai.yT)("support-form-fact-consistency",()=>(0,y.ek)(a.markdown,a.factsModel)),...(0,ai.yT)("equipment-entry-timing",()=>(0,y.fQ)(a.markdown,a.factsModel)),...(0,ai.yT)("fabricated-award",()=>(0,y.hu)(a.markdown,a.factsModel,a.tenderRequirements)),...(0,ai.yT)("bidder-qualification-section",()=>(0,y.Rv)(a.markdown)),...(0,ai.yT)("cross-chapter-duplicate-section",()=>(function(a,b){let c=a=>a.replace(/^\d+(?:\.\d+)*[、..\s]*/u,"").replace(/[\s,,、]/gu,""),d=new Map;a.forEach((a,b)=>{let c=(0,af.GQ)(a.title).replace(/[\s,,、]/gu,"");c&&!d.has(c)&&d.set(c,b)});let e=new Map,f=new Map;a.forEach((a,b)=>{let d=new Set;for(let g of(a.content||"").split(/\r?\n/u)){let a=/^###\s+(.+?)\s*$/u.exec(g.trim());if(!a)continue;let h=c(a[1]);if(h.length<8||d.has(h))continue;d.add(h),f.has(h)||f.set(h,a[1].replace(/^\d+(?:\.\d+)*[、..\s]*/u,"").trim());let i=e.get(h)||[];i.push(b),e.set(h,i)}});let g=new Map;b.forEach(a=>{let b=d.get((0,af.GQ)(a.title).replace(/[\s,,、]/gu,""));if(void 0!==b)for(let d of a.sections||[]){let a=c(d);if(a.length<8)continue;let e=g.get(a)||[];e.includes(b)||e.push(b),g.set(a,e)}});let h=[];for(let[b,c]of e){if(c.length<2)continue;let d=g.get(b)||[];if(d.length>=2)continue;let e=1===d.length?d[0]:c[0],i=f.get(b)||b;for(let b of c){if(b===e)continue;let c=a[b];h.push({level:"error",severity:"blocker",category:"structure",owner:"llm",repairability:"llm_repairable",chapterId:c.id,sectionTitle:i,message:`跨章同名小节:“${i}”已在「${a[e].title}」落位,本章(「${c.title}」)同名小节属跨章串章重复,须改写归并`,suggestion:"同一主题小节全文只保留一处(归属章);非归属章的同名小节:内容与本章主题相关则改写标题为可区分的具体主题并归并内容,与本章无关则整节删除(含标题行);修复后全文不得再出现跨章同名小节。"})}}return h})(a.chapters,a.effectiveChapters||a.template.chapters||[])),...(0,ai.yT)("basic-info-schedule-field",()=>(0,y.cT)(a.markdown)),...(0,ai.yT)("duplicate-table",()=>(0,y.ub)(a.markdown)),...(0,ai.yT)("duplicate-paragraph",()=>(0,y.cl)(a.markdown)),...(0,ai.yT)("paragraph-near-duplicate",()=>(0,L.w9)(a.markdown)),...(0,ai.yT)("paragraph-tail-repeat",()=>(0,y.AD)(a.markdown)),...(0,ai.yT)("collision-numbered-heading",()=>(0,y.xR)(a.markdown)),...(0,ai.yT)("inverted-date-range",()=>(0,y.jP)(a.markdown)),...(0,ai.yT)("resource-triad-section-hierarchy",()=>(0,y.zP)(a.markdown)),...await (0,ai.yT)("support-system-conflict",()=>(0,y.r8)(a.markdown,(0,y.P3)(a.factsModel))),...(0,ai.yT)("dangerous-list-consistency",()=>(0,y.vH)(a.markdown)),...(0,ai.yT)("hazard-exclusion-contradiction",()=>(0,y.m6)(a.markdown)),...await (0,ai.yT)("six-hundred-percent-coverage",()=>(0,y.sn)(a.markdown,{chapterTitles:(a.effectiveChapters||a.template.chapters||[]).map(a=>a.title)})),...await (0,ai.yT)("self-undermining-candidate",()=>(0,y.YN)(a.markdown)),...(0,ai.yT)("paragraph-opening-repeat",()=>(0,y.y2)(a.markdown)),...(0,ai.yT)("flow-form-repeat",()=>(0,aF.Q9)(a.markdown)),...(0,ai.yT)("skeleton-fingerprint",()=>(0,aF.o0)(a.markdown)),...(0,ai.yT)("sentence-pattern-repeat",()=>(0,aF.TN)(a.markdown)),...(0,ai.yT)("sentence-tail-repeat",()=>(0,aF.Jw)(a.markdown)),...(0,ai.yT)("repeated-word",()=>(0,y.Xc)(a.markdown)),...await (0,ai.yT)("commercial-data-in-body",()=>(0,y.mC)(a.markdown)),...(0,ai.yT)("overview-recap",()=>(0,y.l4)(a.markdown)),...(0,ai.yT)("closure-phrase-density-cap",()=>(0,y.dF)(a.markdown)),...await (0,ai.ll)("parameter-concept-conflict",()=>(0,X.Qg)(a.markdown,{billFactLock:a.billFactLock,blueprintQuantities:a.blueprintData?.quantities})),...await (0,ai.ll)("internal-terminology-anchor",()=>(0,z.WT)(a.markdown)),...(0,ai.yT)("construction-system-coverage",()=>(function(a){let b=[...new Set(a.flatMap(a=>Z.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}]})(a.chapters)),...(0,ai.yT)("dangerous-applicability",()=>(0,$.e6)(a.markdown)),...(0,ai.yT)("innovation-tech-coverage",()=>(0,x.Ef)(a.markdown,a.effectiveChapters||a.template.chapters||[])),...(0,ai.yT)("instruction-like-heading",()=>(0,x.K1)(a.markdown)),...(0,ai.yT)("formal-heading-hierarchy",()=>(0,x.Fv)(a.markdown)),...(0,ai.yT)("formal-content-integrity",()=>(0,x.k0)(a.markdown)),...(0,ai.yT)("punctuation-artifact",()=>(0,x.vZ)(a.markdown)),...(0,ai.yT)("table-quality",()=>(0,x.NS)(a.markdown)),...(0,ai.yT)("table-spam",()=>(0,x.SN)(a.markdown)),...(0,ai.yT)("basis-regulations-coverage",()=>(0,x.AN)(a.markdown,a.blueprintData,{chapterTitles:(a.effectiveChapters||a.template.chapters||[]).map(a=>a.title)})),...(0,ai.yT)("basis-regulations-cross",()=>(0,aH.Yw)(a.markdown)),...(0,ai.yT)("resource-breakdown-consistency",()=>(0,x.EJ)(a.markdown,a.blueprintData,a.billFactLock)),...(0,ai.yT)("section-content-integrity",()=>(0,x.qK)(a.markdown,a.chapters)),...(0,ai.yT)("professional-content",()=>(0,x.ji)(a.chapters,m)),...(0,ai.yT)("professional-score",()=>(0,x.i0)(a.chapters,m)),...(0,ai.yT)("generic-professional-content",()=>(0,x.ST)(a.chapters,m)),...(0,ai.yT)("management-measure-number",()=>(0,x.xX)(a.chapters,m)),...await (0,ai.yT)("closed-loop-density",()=>(0,x.Zu)(a.markdown)),...await (0,ai.yT)("cross-chapter-consistency",()=>(0,x.qm)(a.markdown,a.factsModel,a.scopeConflicts,m)),...await (0,ai.yT)("process-spec-conflict",()=>(0,x.hr)(a.markdown,a.factsModel)),...(0,ai.yT)("evidence-usage-coverage",()=>I(a.markdown,a.factsModel)),...await (0,ai.yT)("paragraph-generic",()=>J(a.markdown,a.professionalDepthClassifier)),...await (0,ai.yT)("construction-org-generic-language",()=>(0,E.Fw)(a.chapters)),...(0,ai.yT)("construction-org-control-loop",()=>(0,E.Hl)(a.chapters)),...(0,ai.yT)("construction-org-professional-chain",()=>(0,E.iX)({markdown:a.markdown,factsModel:a.factsModel,chapters:a.chapters})),...(0,ai.yT)("construction-org-consistency",()=>(function(a,b){let c=[];if(!/施工组织设计|施工组织|施组|质量|安全|文明施工/u.test(a))return c;for(let d of P){if("equipment-counts"===d.kind){c.push(...function(a,b,c){let d=(0,O.AK)(a);if(0===d.length)return[];let{names:e,counts:f}=function(a,b){let c=[],d=new Map,e=a=>{c.includes(a)||c.push(a)};for(let c of b){let b=a[c];if(Array.isArray(b))for(let a of b){if(!a||"object"!=typeof a||!("value"in a)||"string"!=typeof a.value)continue;for(let b of(0,O.AK)(a.value))e(b.name),d.has(b.name)||d.set(b.name,b.count);let b=Q(a.value);if(b.length>12||/\d/u.test(b))continue;let c=(0,O.Rh)(b);c&&e(c)}}return{names:c,counts:d}}(b,c.factGroups);if(0===e.length)return[];let g=[],h=new Map,i=[],j=new Set;for(let a of d){let b=e.find(b=>U(a.name,[b]));if(b){let c=f.get(b);if(void 0===c||c===a.count)continue;let d=`${a.name}:${[a.count,c].sort((a,b)=>a-b).join("-")}`;if(j.has(d))continue;j.add(d),i.push(`${a.name}:正文 ${a.count} 台、资料 ${c} 台`);continue}if(R.test(a.name))continue;let c=h.get(a.name);(!c||a.raw.length<c.length)&&h.set(a.name,a.raw)}if(h.size>0){let a=[...h].map(([a,b])=>b.length-a.length<=1?b:a).slice(0,5);g.push({level:"warning",message:`施组数据一致性风险:机械数量型号 可能与项目图谱/事实不一致(${a.join("、")})`,suggestion:`请核对机械数量型号在${c.locations}中的表述,统一以招标文件、项目图谱和可信事实为准。`})}return i.length>0&&g.push({level:"warning",message:`施组数据一致性风险:机械数量型号 正文台数与项目图谱/事实不一致(${i.slice(0,5).join(";")})`,suggestion:`同一机械台数全文档只允许一套口径:请以资料事实/项目图谱中的机械配置为准统一${c.locations}中的台数表述(正文与资料并存时以资料为准)。`}),g}(a,b,d));continue}let e=T(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=Q(d[1]||d[0]||"");!S.test(a)&&a.length>=2&&a.length<=80&&c.push(a)}}return[...new Set(c)]})(a,d.patterns??[]).filter(a=>!R.test(a)&&!U(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)),...(0,ai.yT)("construction-org-chapter-data-coverage",()=>(function(a,b){let c=[],d=T(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,ai.yT)("construction-org-major-content",()=>(0,E.Av)(a.chapters,a.markdown)),...(0,ai.yT)("construction-org-division-section",()=>(0,E.CS)(a.chapters,a.markdown)),...(0,ai.yT)("major-content-governance",()=>(0,E.l5)(a.markdown)),...(0,ai.yT)("construction-org-bonus-module",()=>(0,E.b7)(a.chapters)),...(0,ai.yT)("chapter-dependency",()=>K(a.chapters,m)),...(0,ai.yT)("document-delivery-score",()=>(function(a,b,c,d){let e=(d?.size??0)>0,f={factuality:(0,u.V7)(a)>=80,structure:b.length>0,depth:e,executable:e,evidence:b.length>0},g={factuality:2*!(0,x.vY)(a,c).some(a=>"error"===a.level),structure:b.length>0&&b.every(b=>a.includes(b.title)&&(0,u.V7)(b.content)>=600)?2:1,depth:0===(0,x.i0)(b,d).length?2:1,executable:0===K(b,d).length?2:1,evidence:0===I(a,c).length?2:1},h=Object.keys(g).filter(a=>f[a]),i=Object.keys(g).filter(a=>!f[a]),j=h.reduce((a,b)=>a+g[b],0),k=2*h.length,l={factuality:"事实",structure:"结构",depth:"专业",executable:"可执行",evidence:"证据"},m=i.map(a=>l[a]).join("、");return[{level:"info",message:`文档交付评分报告:总分 ${j}/${k}(已测 ${h.length}/5 维),`+h.map(a=>`${l[a]}${g[a]}`).join(",")+(i.length>0?`;**未测维度(本次无输入,未计分)**:${m}`:""),suggestion:i.length>0?`存在未测维度(${m}):该部分本次**未被核验**,本分数不构成放行依据;请补齐输入(章草稿/AI 分析)后重跑。`:j>=.8*k?"可交付,但建议继续优化证据使用覆盖率和章节依赖链路。":"建议优先修复低分维度后再导出。"}]})(a.markdown,a.chapters,a.factsModel,m)),...(0,ai.yT)("generated-fact-verification",()=>b),...(0,ai.yT)("numeric-traceability",()=>(0,F.FA)(a.markdown,a.factsModel)),...(0,ai.yT)("table-arithmetic-consistency",()=>(0,y.qE)(a.markdown)),...(0,ai.yT)("duplicate-basic-info",()=>(0,x.iC)(a.markdown)),...await (0,ai.yT)("formal-style",()=>(0,x.BV)(a.markdown)),...(0,ai.yT)("tertiary-heading",()=>(0,r.dh)(a.markdown)),...(0,ai.yT)("min-chapter-section",()=>(0,x.Ty)(a.chapters)),...(0,ai.yT)("hollow-table-cell",()=>(0,x.cG)(a.markdown)),...(0,ai.yT)("schedule-duration-overrun",()=>(0,x.v4)(a.markdown)),...(0,ai.yT)("stage-schedule-consistency",()=>(0,x.KQ)(a.markdown)),...(0,ai.yT)("caliber-consistency",()=>[...(0,x.lg)(a.markdown,a.truthValues||[]),...(0,Y.Y)(a.markdown,a.clarificationAmendments)]),...(0,ai.yT)("hazard-parameter-binding",()=>(0,x.Bs)(a.markdown,a.truthValues||[])),...(0,ai.yT)("blueprint-value-placement",()=>(0,x.uy)(a.markdown,a.blueprintData)),...(0,ai.yT)("dangling-conjunction",()=>(0,x.Dy)(a.markdown)),...(0,ai.yT)("planned-section-placement",()=>(0,x.hd)(a.markdown,a.chapters)),...await (0,ai.yT)("precise-fact-usage",()=>(0,x.N1)(a.markdown,a.factsModel,a.chapters)),...(0,ai.yT)("parameter-obligation-usage",()=>(0,d.bs)(a.markdown,a.factsModel,a.chapters,{supersededValues:c})),...await (0,ai.yT)("boq-placement",()=>(0,x.S2)(a.markdown,a.chapters,a.factsModel)),...await (0,ai.yT)("stage-phrasing",()=>ad(a.markdown)),...await (0,ai.yT)("emergency-section-depth",()=>(0,ae.E)(a.markdown)),...(0,ai.yT)("boq-row-trace",()=>(0,F.QP)((0,F.JV)(a.markdown,a.factsModel))),...(0,ai.yT)("drawing-reference",()=>(0,x.yd)(a.markdown,a.drawingFactLock)),...(0,ai.yT)("drawing-pointer-phrase",()=>(0,x.D0)(a.markdown)),...(0,ai.yT)("atlas-reference-phrase",()=>(function(a){let b=(0,M.St)(a);return 0===b.length?[]:[{level:"error",severity:"blocker",category:"format",owner:"system",repairability:"local_deterministic",message:`正文出现图集/标准图指向替代做法 ${b.length} 处(如「${[...new Set(b)].slice(0,3).join("」「")}」):做法必须写进正文,不得让评标人回查图集`,suggestion:"写出具体做法(尺寸/材料/构造参数/工艺要求)替代指向短语;规范/法规引用(书名号内为规范名,或标题后紧跟 GB/JGJ/CJJ 类标准代号)不属本判据范围,保留不动。"}]})(a.markdown)),...(0,ai.yT)("source-enumeration",()=>(0,r.bx)(a.markdown).filter(a=>a.message.includes("资料来源罗列话术"))),...(0,ai.yT)("meta-discourse-declaration",()=>(0,L.nm)(a.markdown)),...(0,ai.yT)("finish-thickness",()=>(0,L.WY)(a.markdown)),...(0,ai.yT)("formula-residue",()=>(0,L.ON)(a.markdown)),...(0,ai.yT)("web-evidence-leakage",()=>(0,N.Eu)(a.markdown)),...(0,ai.yT)("formal-placeholder",()=>(0,x.bM)(a.markdown)),...(0,ai.yT)("prompt-example-leak",()=>(0,x.M$)(a.markdown,a.promptIds)),...(0,ai.yT)("degenerate-content",()=>(0,x.AC)(a.markdown,a.chapters)),...(0,ai.yT)("planned-auto-spec-gate",()=>(0,x.mR)(a.markdown,a.template)),...(0,ai.yT)("bid-composition-body-table",()=>(0,r.NN)(a.markdown,{bodyTableForbidden:a.bodyTableForbidden,plannedChapterTitles:(a.effectiveChapters?.length?a.effectiveChapters:a.template.chapters).filter(a=>(a.tablePlans?.length||0)>0||(a.tableSections?.length||0)>0||(a.diagramRequirements?.length||0)>0).map(a=>a.title),requiredTableTitles:a.promptDocumentRules?.requiredTables||[]})),...(0,ai.yT)("bid-composition-body-figure",()=>(0,r.Fo)(a.markdown,a.bodyFigureForbidden)),...(0,ai.yT)("identity-marks-forbidden",()=>(0,y.Vl)(a.markdown,a.identityMarksForbidden)),...(0,ai.yT)("planned-structure",()=>(0,r.UG)(a.markdown,a.template,a.bodyTableForbidden)),...(0,ai.yT)("table-caption",()=>(0,r.XU)(a.markdown,a.bodyTableForbidden)),...await (0,ai.yT)("prompt-document-rule",()=>(0,r.Ed)(a.markdown,a.promptDocumentRules,void 0,{bodyTableForbidden:a.bodyTableForbidden,coverForbidden:a.coverForbidden})),...await (0,ai.yT)("local-adaptation-keyword",()=>(0,y.cJ)(a.markdown,a.factsModel)),...(0,ai.yT)("boq-division-coverage",()=>(0,F.sl)(a.markdown,a.chapters,a.factsModel))]}let aJ={project:"项目基础事实",schedule:"工期与节点",quality:"质量目标与验收",safety:"安全文明要求",resources:"资源投入依据",quantities:"清单/图纸/工程量事实",rules:"规范规则与验收要求"};var aK=c(43378),aL=c(31263),aM=c(47843),aN=c(27827);let aO={requirement:.3,structure:.15,dataAnchor:.2,professionalDepth:.15,compliance:.1,factIntegrity:.1},aP={anchors:.85,modules:.15},aQ={execution:.45,figure:.35,caption:.2,appendix:.75,bodyCompliance:.25},aR={boq:.4,parameters:.3,drawing:.15,authority:.15},aS={selfHarm:.25,placeholder:.2,length:.15,tableConsistency:.2,regulation:.2},aT={reconciliation:.6,binding:.2,keyFacts:.2},aU=/规格-数值绑定|名称-数值绑定|合计值/u,aV=/编制依据对账缺口/u,aW=/无主数值审计失败/u,aX={selfHarm:/自伤表述/u,placeholder:/占位符|占位式表达/u,length:/正文篇幅/u};function aY(a){let b=a.filter(a=>null!==a.value&&Number.isFinite(a.value));if(0===b.length)return{value:null};let c=b.reduce((a,b)=>a+b.weight,0);return{value:b.reduce((a,b)=>a+b.value*b.weight,0)/c,detail:b.map(a=>a.detail).filter(a=>!!a).join("、")||void 0}}async function aZ(a,b){if(!b)return{value:null};let c=a.filter(a=>(0,u.V7)(a.content)>=800);if(0===c.length)return{value:null};let d=[],e=await Promise.all(c.map(a=>b.analyze(a.content).catch(b=>{d.push(`${a.title}:${b instanceof Error?b.message:String(b)}`)}))),f=c.map((a,b)=>({title:a.title,analysis:e[b]})).filter(a=>!!a.analysis);if(0===f.length)return{value:null};let g=0,h=[];for(let a of f){let b=(0,x.Pu)(a.analysis.dimensions),c=(0,x.lH)(a.title);g+=Math.min(1,b/c),b<c&&h.push(`${a.title} ${b}/12`)}let i=g/f.length*100,j=d.length>0?`;⚠ ${d.length} 章语义分析失败未计入(${d.slice(0,2).join(";")})`:"",k=(h.length>0?`专业深度达标 ${Math.round(i)}(薄弱:${h.slice(0,3).join("、")})`:`专业深度达标 ${Math.round(i)}(全部章达目标线)`)+j;return{value:i,detail:k}}async function a$(a){let b=await (0,au.tf)({markdown:a.markdown,chapters:a.chapters,template:a.template,factTraces:a.factTraces,issues:a.issues,embedDocuments:a.embedDocuments}),c=a.bidComposition?.bidType||"unknown",d=a.tenderRequirements?.extracted&&a.tenderRequirements.entries||[],e=d.length>0?(0,W.U1)(d,a.markdown):[],f=e.filter(a=>"comply"!==a.entry.policy),g=f.length>0?(()=>{let a=f.filter(a=>a.satisfied).length;return{value:a/f.length*100,detail:`锚点全命中 ${a}/${f.length}`}})():{value:null},h=function(a,b){if(0===b.length)return;let c=(0,ar.mJ)(a,b);return{effectiveRows:c.effectiveRows,placedRows:c.disposedRows,explicitRows:c.explicitRows,rate:c.rate,exemptRows:b.filter(a=>a.exempt).slice(0,50).map(a=>`${a.itemName}${a.quantity?` ${a.quantity}${a.unit}`:""}`)}}(a.markdown,a.boqRowTraces||[]),i=aY([{...g,weight:aP.anchors},{...function(a){if(!Number.isFinite(a))return{value:null};let b=Math.round(a*au.Me.length);return{value:100*a,detail:`强制模块 ${b}/${au.Me.length}`}}(b.moduleCoverageRate),weight:aP.modules}]),j=function(a){let{markdown:b,mode:c,bidComposition:d,effectiveChapters:e,chapters:f}=a;if("blind"===c){let a=[],c=d?.appendixPlan||[];if(c.length>0){let d=c.filter(a=>(0,t.cM)(b,a)).length;a.push({weight:aQ.appendix,value:d/c.length*100,detail:`附表承载 ${d}/${c.length}`})}if(d?.bodyTablePolicy==="forbidden"){let d=function(a,b){let c=-1;for(let d of b){let b=a.indexOf(`## ${d.title}`);b>=0&&(c<0||b<c)&&(c=b)}let d=c>=0?a.slice(0,c):a;return d.match(/^\s*\|/gmu)?.length||0}(b,c);a.push({weight:aQ.bodyCompliance,value:Math.max(0,100-25*d),detail:d>0?`正文禁表 违规 ${d} 处`:"正文禁表合规"})}else{let c=(e||[]).reduce((a,b)=>a+(b.tablePlans?.length||0),0);if(c>0&&e){let b=Math.max(0,c-(0,aK.Xi)(e,f).reduce((a,b)=>a+b.plans.length,0));a.push({weight:aQ.execution,value:b/c*100,detail:`表执行 ${b}/${c}`})}let d=(e||[]).filter(a=>(a.tablePlans?.length||0)>0||(a.tableSections?.length||0)>0||(a.diagramRequirements?.length||0)>0).map(a=>a.title),g=(0,r.NN)(b,{bodyTableForbidden:!1,plannedChapterTitles:d}).length;a.push({weight:aQ.bodyCompliance,value:Math.max(0,100-25*g),detail:g>0?`正文未授权表格 违规 ${g} 处`:"正文表格授权合规"});let h=(0,r.xw)(b,!1);h.total>0&&a.push({weight:aQ.caption,value:h.captioned/h.total*100,detail:`题注 ${h.captioned}/${h.total}`})}return aY(a)}let g=[],h=(e||[]).reduce((a,b)=>a+(b.tablePlans?.length||0),0);if(h>0&&e){let a=Math.max(0,h-(0,aK.Xi)(e,f).reduce((a,b)=>a+b.plans.length,0));g.push({weight:aQ.execution,value:a/h*100,detail:`表执行 ${a}/${h}`})}let i=(0,aK.cA)({chapters:e});i.length>0&&g.push({weight:aQ.figure,value:null,detail:`图位分量本次不计(${i.length} 类图类要求):真图判据未上线,替代表头不计分(避免"假装有图"拿满分)`});let j=(0,r.xw)(b,d?.bodyTablePolicy==="forbidden");return j.total>0&&g.push({weight:aQ.caption,value:j.captioned/j.total*100,detail:`题注 ${j.captioned}/${j.total}`}),aY(g)}({markdown:a.markdown,mode:c,bidComposition:a.bidComposition,effectiveChapters:a.effectiveChapters,chapters:a.chapters}),k=function(a){let{markdown:b,billPlacementAudit:c,parameterUsageAudit:d,drawingFactLock:e,authorityAuditReport:f}=a,g=[];c&&null!==c.rate&&Number.isFinite(c.rate)&&g.push({weight:aR.boq,value:100*c.rate,detail:`BOQ 落位 ${c.placedRows}/${c.effectiveRows}`}),d&&null!==d.rate&&Number.isFinite(d.rate)&&g.push({weight:aR.parameters,value:100*d.rate,detail:`参数 ${d.usedParams}/${d.usedParams+d.relevantMissedCount}`});let h=e?0===e.groups.length?"图纸事实锁无可用分组(无图纸类证据入库)":void 0:"图纸事实锁不可用(未构建或构建失败)";if(e&&e.groups.length>0){let a=(0,aL.SL)(e,b);g.push({weight:aR.drawing,value:100*a.rate,detail:`图纸事实 ${a.referenced.length}/${e.groups.length}`})}if(f){let a=f.unregisteredCount+f.derivationGaps.length+f.processGaps.length;g.push({weight:aR.authority,value:Math.max(0,100-5*a),detail:a>0?`无主数值 缺口 ${a} 处`:"无主数值 0 缺口"})}let i=aY(g);return h&&null!==i.value&&(i.detail=`${i.detail?`${i.detail};`:""}⚠ ${h},图纸分量未计量(本维度按剩余分量重归一)`),i}({markdown:a.markdown,billPlacementAudit:h,parameterUsageAudit:a.parameterUsageAudit,drawingFactLock:a.drawingFactLock,authorityAuditReport:a.authorityAuditReport}),l=await aZ(a.chapters,a.professionalDepthClassifier),m=function(a,b){let c=b=>a.filter(a=>b.test(a.message)).length,d=c(aX.selfHarm),e=c(aX.placeholder),f=c(aX.length),g=(0,L.OV)(b),h=(0,aH.hK)(b),i=h.declaredNotUsed.length,j=h.usedNotDeclared.length,k=h.stats.declaredCodes+h.stats.declaredNames>0?{weight:aS.regulation,value:Math.max(0,100-(i+j)*20),detail:i+j>0?`编制依据缺口 ${i+j} 处(声明未用 ${i}/引用未声明 ${j})`:"编制依据对账 0 缺口"}:{weight:aS.regulation,value:null};return aY([{weight:aS.selfHarm,value:Math.max(0,100-25*d),detail:d>0?`自伤 ${d} 处`:"自伤 0"},{weight:aS.placeholder,value:Math.max(0,100-25*e),detail:e>0?`占位符 ${e} 处`:"占位符 0"},{weight:aS.length,value:Math.max(0,100-50*f),detail:f>0?`篇幅超限 ${f} 条`:"篇幅达标"},{weight:aS.tableConsistency,value:Math.max(0,100-20*g),detail:g>0?`表内不自洽 ${g} 处`:"表自洽 100%"},k])}(a.issues,a.markdown),n=function(a,b){let c=a.filter(a=>"error"===a.level&&"fact_consistency"===a.category&&!aV.test(a.message)&&!aW.test(a.message)),d=c.filter(a=>aU.test(a.message)),e=[{weight:aT.reconciliation,value:Math.max(0,100-20*c.length),detail:c.length>0?`对账冲突 ${c.length} 条`:"对账零冲突"},{weight:aT.binding,value:Math.max(0,100-20*d.length),detail:d.length>0?`绑定冲突 ${d.length} 条`:"绑定零冲突"}];return b&&null!==b.rate&&Number.isFinite(b.rate)&&e.push({weight:aT.keyFacts,value:100*b.rate,detail:`关键事实 ${b.placed}/${b.specs}`}),aY(e)}(a.issues,a.keyFactPlacementAudit),o=[{key:"requirement",label:"要求实体响应",...i,weight:aO.requirement},{key:"structure",label:"结构呈现落实",...j,weight:aO.structure},{key:"dataAnchor",label:"数据锚定",...k,weight:aO.dataAnchor},{key:"professionalDepth",label:"专业深度",...l,weight:aO.professionalDepth},{key:"compliance",label:"合规与规范",...m,weight:aO.compliance},{key:"factIntegrity",label:"事实完整与一致性",...n,weight:aO.factIntegrity}],p=o.filter(a=>null!==a.value&&Number.isFinite(a.value)),q=p.reduce((a,b)=>a+b.weight,0),s=q>0?p.reduce((a,b)=>a+b.value*b.weight,0)/q:0,u=p.length,v=o.length,w=q>=.9,y=Math.round(s),z=p.map(a=>({key:a.key,label:a.label,score:Math.round(a.value),weight:a.weight,detail:a.detail})),A=a.issues.filter(a=>"error"===a.level&&(0,x.R9)(a)).length,B=Math.max(0,Math.min(99,Math.round(y-Math.min(10,3*A)))),C=await (0,au.BH)(a.markdown,a.embedDocuments),D=a.evaluationCriteriaItems&&a.evaluationCriteriaItems.length>0?await (0,aM.y)({items:a.evaluationCriteriaItems,markdown:a.markdown,embedDocuments:a.embedDocuments}):void 0,E=d.length>0?d.map((a,b)=>({text:a.text.slice(0,160),category:a.category,responded:"comply"===a.policy||!!e[b]?.satisfied})):void 0,F="unknown"===c?";⚠ 标书类型未判定(按明标口径)——暗标项目须核对招标文件后重跑":"",G=D?`;评分细则模拟 ${D.simulatedScore}%(met ${D.met} / partial ${D.partial} / missing ${D.missing})`:"",H=B>=95&&0===A&&b.uniqueness>=60&&w,I=H?["已达到当前质量目标,建议保持事实口径和导出前复核。"]:[...w?[]:[`本次仅计量 ${u}/${v} 维(权重覆盖 ${(100*q).toFixed(0)}%,低于下限 90%):重归一分不得作为达标依据,须先补齐缺失维度的计量条件再判定。`],"按对齐评分口径补齐短板维度:要求实体响应补锚点全命中(核心词与数字参数逐条落位)、结构呈现补图表落位、数据锚定补 BOQ/参数/图纸/无主数值溯源、专业深度按章补六维薄弱项、合规与规范清理自伤与占位符并压缩超限篇幅且编制依据与正文双向对齐、事实一致性补关键事实落位与数值对账。","系统需优先修复阻断问题、扩大本地知识库检索、补抽结构化事实,并将未落位事实写入对应章节。"];b.uniqueness<60&&I.push(`低雷同性 ${b.uniqueness} 低于门槛 60:存在与公开模板/通用话术重合的雷同风险,须改写高重合段落后再交付。`);let J=`${w?"":"⚠ "}本次仅计量 ${u}/${v} 维、权重覆盖 ${(100*q).toFixed(0)}%`,K=`交付置信度 ${B}% / 目标 95%,综合评分 ${y}/100(${[...z.map(a=>`${a.label} ${a.score}`),`低雷同性 ${b.uniqueness}`].join("、")});${J}${F}${G};评分口径 ${aN.GX}(主尺)`;return{overall:y,deliveryProbability:B,target:95,passed:H,scores:b,mode:c,dimensions:z,requirementChecklist:E,billPlacementAudit:h,parameterUsageAudit:a.parameterUsageAudit,keyFactPlacementAudit:a.keyFactPlacementAudit,templating:C,caliber:aN.Eq,evaluationCriteriaAttainment:D,measurementCoverage:{dimensions:u,totalDimensions:v,weightRatio:q,sufficient:w},summary:K,actions:I}}let a_=new Set(["fact-coverage","overview-recap","internal-terminology-anchor","global-consistency-snapshot","data-consistency-snapshot","clarification-amendment"]);function a0(...a){return a.flat()}var a1=c(84450),a2=c(51190),a3=c(32434),a4=c(80439),a5=c(18351),a6=c(64297),a7=c(55807),a8=c(33409),a9=c(94281),ba=c(68402),bb=c(21702),bc=c(48479),bd=c(16040);function be(a,b){let c=new Set([b?.projectName,...b?.fingerprint?.projectNames||[]].filter(Boolean));return(b?.contaminationCandidates||[]).reduce((a,b)=>!b||b.length<6||c.has(b)?a:a.replace(RegExp(b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"gu"),"本项目工程"),a)}let bf=(0,C.LK)();function bg(a){let b=[];for(let c of a)for(let a of bf){let d=(0,G.Xl)(c.content,a.title)||(0,G.Xl)(c.content,a.title,{fuzzy:!0}),e=(0,u.V7)(d);if(!d||e>=a.minChars)continue;let f=(0,a7.R_)(a.title);e>=f?b.push({level:"warning",severity:"warning",message:`${c.title} ${a.title} 正文深度接近目标:当前 ${e} 字,目标 ${a.minChars} 字`,suggestion:"已达到可交付深度,建议后续按项目数据继续优化扩写。"}):b.push({level:"error",severity:"blocker",message:`${c.title} ${a.title} 正文不足:当前 ${e} 字,要求不少于 ${f} 字`,suggestion:"关键小节必须补足项目数据、重点难点与施工内容对应关系后方可导出。",chapterId:c.id,sectionTitle:a.title,provenance:{detectorId:"critical-section-depth",fingerprint:(0,G.c6)(`${c.title}\u0000${a.title}`)}})}return b}function bh(a){let b=0;for(let c of a)for(let a of bf){let d=(0,G.Xl)(c.content,a.title)||(0,G.Xl)(c.content,a.title,{fuzzy:!0}),e=(0,u.V7)(d);if(!d||e>=a.minChars)continue;let f=(0,a7.R_)(a.title);e>=f||(b+=f-e)}return b}async function bi(a){let{documentSpec:b,validationIssues:c,factsModel:d,finalChapterDrafts:e,finalMarkdown:f,template:h,promptIds:l,promptDocumentRules:r,projectMaterialSummary:s,domainProfile:t,structuredFacts:v,documentBudget:w,scopeConflicts:A,evaluationCriteriaItems:B,effectiveChapters:C,tenderRequirements:D,requirementsSimilarity:E,factTokenScopeClassifier:F,professionalDepthClassifier:H,blueprintData:I,billFactLock:J,drawingFactLock:K,bodyTableForbidden:L,bodyFigureForbidden:M,identityMarksForbidden:N,coverForbidden:O}=a;return a0((0,ai.yT)("spec-gate-rules",()=>(0,x.kQ)(b,c,d,e,f)),(0,ai.yT)("auto-spec-validation",()=>(function(a){let b=[],c=a.markdown||"";for(let e of a.spec.factFields.filter(a=>a.required)){var d;!((d=e.name).length<4||g(d))&&/\d|GB|JGJ|C\d|HRB|DN|mm|MPa|kPa|工期|质量|安全|项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数/u.test(d)&&!i(c,e.name)&&b.push({level:"info",message:`正文可能未显式覆盖“${e.name}”`,suggestion:"建议检查对应章节是否已自然表达该事实。"})}let e=a.summary.facts.projectName;!e||"当前知识库项目"===e||g(e)||i(c,e)||b.push({level:"warning",message:"正文未明显体现关键对象名称",suggestion:"建议在概况、背景或首页标题中体现当前文档的关键对象名称。"});let f=a.summary.facts.documentNo;for(let a of(f&&!c.includes(f)&&b.push({level:"info",message:"正文未体现文档/任务编号",suggestion:"如文档需要编号,请在概况、背景或首页信息中补充。"}),["知识库证据","资料类型","提示词角色","文档规范包","规范包","后台自动规范","后台优化建议","基础事实候选","材料未提供","未检索到"]))(function(a,b){let c=j[b];if(!c)return a.includes(b);let d=0;for(;;){let e=a.indexOf(b,d);if(e<0)return!1;let f=a[e+b.length]||"";if(f&&c.test(f)){d=e+b.length;continue}return!0}})(c,a)&&b.push({level:"error",message:`正文包含后台流程话术:${a}`,suggestion:"请重新生成或在审查阶段删除后台流程描述。"});return b})({markdown:f,spec:b,summary:s})),(0,ai.yT)("fact-consistency",()=>(function(a){let b=a.profile||k.p4,c=[],d=new Map;for(let c of a.facts){let a=c.fieldName||c.key;!(!a||!function(a,b){let c=(0,k.oC)(b,a);return c?"single"===c.cardinality&&"allow_multiple"!==c.conflictPolicy&&"ignore"!==c.conflictPolicy:/项目名称|工程名称|招标人|建设地点|建筑面积|结构形式|层数|工期|质量标准|合同价格形式|绿色建筑等级|投标有效期|质保期/u.test(a)}(a,b)||o.test(a)&&p.test(c.roleId||""))&&q(String(c.value),b,a)&&d.set(a,[...d.get(a)||[],{value:String(c.value),source:c.sourceFile}])}for(let[a,e]of d){let d=new Map;for(let c of e){let e=q(c.value,b,a);if(!e)continue;let f=(0,m.EI)((0,m.LD)(e));d.set(f,[...d.get(f)||[],c])}if(d.size>1){let a=[...d.keys()].sort((a,b)=>a.length-b.length),b=new Set;for(let c=0;c<a.length;c+=1){let e=a[c];if(!b.has(e))for(let f=c+1;f<a.length;f+=1){let c=a[f],g=c.length-e.length,h=e.length<=12&&/(?:省|市|县|区|镇|乡|村|开发区|经开区|新区|高新区)$/u.test(e)&&c.startsWith(e),i=e.length<=20&&/(?:项目|工程|标段)$/u.test(e)&&c.startsWith(e);if((g<=3||e.endsWith("等")&&g<=6||h||i)&&c.startsWith(e)){d.set(c,[...d.get(c)||[],...d.get(e)||[]]),b.add(e);break}}}for(let a of b)d.delete(a)}if(d.size>1)for(let b of["duration","date","plain"]){let e=new Map([...d].filter(([a])=>(0,m.cg)(a)===b));if(e.size>1){let b=[...e.values()].map(a=>`${a[0].value}(${a.map(a=>a.source).filter(Boolean).join("、")||"未知来源"})`).join(" vs ");c.push({level:"error",message:`事实一致性冲突:${a} 存在多个值:${b}`,suggestion:"请确认当前绑定材料组,或在模板绑定中只绑定当前文档所需材料。"})}}}let e=a.summary.facts.projectName;if(e&&"当前知识库项目"!==e&&!/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|招标工程量清单封面|招标工程量清单扉页|工程量清单表|清单封面|清单扉页|\d{1,2}\.\d{1,2}/u.test(e)){let b=n(a.markdown),d=[e,...a.summary.fingerprint.projectNames].flatMap(a=>[a,a.replace(/^\d+(?:\.\d+)?[^\u4e00-\u9fa5]*/u,""),a.replace(/\([^)]*\)|([^)]*)/gu,"")]).map(a=>n(a)).filter(a=>a.length>=4),f=d.filter(a=>a.length>=8),g=d.filter(a=>a.length<8),h=f.some(a=>b.includes(a)||a.length>=12&&b.includes(a.slice(0,Math.max(8,Math.floor(.72*a.length))))),i=g.some(a=>b.includes(a));(f.length>0?h:!(g.length>0)||i)||c.push({level:"warning",message:`正文未包含当前对象名称:${e}`,suggestion:"请确认标题、概况或背景信息是否已体现当前对象名称。"})}return c})({markdown:f,facts:v,summary:s,profile:t})),(0,ai.yT)("project-contamination",()=>(function(a,b){let c=[],d=new Set([b.projectName,...b.fingerprint.projectNames].filter(Boolean));for(let e of b.contaminationCandidates)e.length>=6&&!d.has(e)&&a.replace(/\s+/gu,"").includes(e.replace(/\s+/gu,""))&&c.push({level:"error",message:`正文疑似混入其他对象名称:${e}`,suggestion:"请检查绑定材料选择、模板绑定文件和知识库证据范围。"});let e=b.fingerprint.documentNos,f=a.match(/\b\d{4}[A-Z]{2,}\d{4,}\b/gu)?.find(a=>!e.includes(a));return f&&e.length>0&&c.push({level:"error",message:`正文疑似混入其他文档编号:${f}`,suggestion:"请重新生成并检查是否召回了其他绑定材料。"}),c})(f,s)),(0,ai.yT)("project-type-consistency",()=>(0,y.MM)(f,{projectName:I?.project?.name,blueprintStrategyId:I?.strategyId})),(0,ai.yT)("figure-substitute-table",()=>(0,y.X_)(f,(0,aK.cA)({chapters:C}))),(0,ai.yT)("project-basic-placeholder",()=>(0,a7.h)(f,v)),await (0,ai.ll)("standard-final",()=>aI({markdown:f,truthValues:a.truthValues,chapters:e,factsModel:d,template:h,promptIds:l,promptDocumentRules:r,scopeConflicts:A,evaluationCriteriaItems:B,effectiveChapters:C,tenderRequirements:D,requirementsSimilarity:E,factTokenScopeClassifier:F,professionalDepthClassifier:H,materialEvidence:a.materialEvidence,blueprintData:I,billFactLock:J,drawingFactLock:K,bodyTableForbidden:L,bodyFigureForbidden:M,identityMarksForbidden:N,coverForbidden:O,clarificationAmendments:a.clarificationAmendments})),(0,ai.yT)("fact-coverage",()=>(0,a7.br)(f,[...v,...d.preciseFacts]).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议后续优化事实自然落位;导出阶段不因未落位的引用型或可优化事实阻断。"}))),(0,ai.yT)("page-target",()=>(0,u.PE)(h.generationSettings,f).filter(a=>!(w.minPages&&/低于目标页数/u.test(a.message)))),(0,ai.yT)("document-budget",()=>(0,u.ty)(w,f)),(0,ai.yT)("formal-text-gate",()=>(0,a3.IA)(f)),await (0,ai.ll)("internal-terminology-anchor",()=>(0,z.WT)(f)),(0,ai.yT)("heading-uncovered-engineering-items",()=>(0,x.j9)(f)),(0,ai.yT)("writer-missing-section",()=>f.includes("WRITER_MISSING_SECTION")||f.includes("Writer 未完成")?[{level:"error",severity:"blocker",category:"structure",owner:"system",message:"最终正文仍包含未完成小节标记",suggestion:"必须重新补写对应小节并删除 WRITER_MISSING_SECTION/Writer 未完成。"}]:[]),(0,ai.yT)("critical-section-depth",()=>bg(e)),(0,ai.yT)("critical-section-fact-density",()=>(function(a){let b=[{title:"项目特点、重点、难点分析",minNumericFacts:5,minObjectFacts:8,objectPatterns:[/建筑面积|面积/u,/层|框架结构|既有建筑/u,/结构形式|结构加固|墙体补强|装配式/u,/拆除|改造|装修|装饰/u,/工期|日历天/u,/质量标准|合格/u,/营业商铺|经营区域|场地/u,/管网|防水|室外道排/u,/智能化|弱电|消防|暖通|通风空调|水电/u]},{title:"项目主要施工内容",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/拆除|垃圾外运|既有设施保护/u,/结构加固|墙体补强|框架结构/u,/装饰|装修|基层|面层|环保|阻燃/u,/防水|管网|给排水|阀门|道排/u,/消防|水电|电气|弱电|智能化|通风空调/u,/屋面|立面|室外|附属/u,/施工流程|施工方法|施工顺序|工艺流程/u,/验收|检测|调试|资料闭环/u]},{title:"主要分部分项工程施工方案",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/拆除|垃圾外运|既有设施保护/u,/结构加固|墙体补强|框架结构/u,/装饰|装修|基层|面层|环保|阻燃/u,/防水|管网|给排水|阀门|道排/u,/消防|水电|电气|弱电|智能化|通风空调/u,/屋面|立面|室外|附属/u,/施工流程|施工方法|施工顺序|工艺流程/u,/验收|检测|调试|资料闭环/u]},{title:"主要施工方法",minNumericFacts:4,minObjectFacts:6,objectPatterns:[/拆除|垃圾外运|既有设施保护/u,/结构加固|墙体补强|框架结构/u,/装饰|装修|基层|面层|环保|阻燃/u,/防水|管网|给排水|阀门|道排/u,/消防|水电|电气|弱电|智能化|通风空调/u,/屋面|立面|室外|附属/u,/施工流程|施工方法|施工顺序|工艺流程/u,/验收|检测|调试|资料闭环/u]}];return a.flatMap(a=>b.flatMap(b=>{let c=(0,G.Xl)(a.content,b.title);if(!c)return[];let d=new Set(c.match(/\d+(?:\.\d+)?\s*(?:m²|㎡|平方米|m|mm|层|栋|日历天|天|%|台|套|根|处|个|kg|t|吨)/giu)||[]).size,e=b.objectPatterns.filter(a=>a.test(c)).length,f=[];return d<b.minNumericFacts&&f.push({level:"warning",severity:"warning",message:`${a.title} ${b.title} 参数落位不足:当前 ${d} 个,建议不少于 ${b.minNumericFacts} 个`,suggestion:"关键小节必须写入项目规模、工期、层数、结构、专业工程或验收参数等具体数值。"}),e<b.minObjectFacts&&f.push({level:"warning",severity:"warning",message:`${a.title} ${b.title} 专业事实覆盖不足:当前 ${e} 类,建议不少于 ${b.minObjectFacts} 类`,suggestion:"优先基于当前项目绑定资料补充工程对象、专业范围、重点难点和对应施工内容;不得为满足类别数量编造或混入其他项目事实。"}),f}))})(e)),(0,ai.yT)("chapter-fact-density",()=>e.flatMap(a=>{let b=(0,bb.Cd)(a.content);return b.gap?[{level:"warning",severity:"warning",message:`${a.title} 量化参数密度偏低:当前 ${b.params} 个(约 ${b.per1000}/千字,建议 ≥${bb.J5}/千字、约 ${b.required} 个),小节事实或量化参数落位可继续优化`,suggestion:"优先将本章绑定资料中的工程规模、工期、部位做法、材料规格等参数自然写入对应工序;不得从行业惯例或相邻章节借参数凑数。"}]:[]})),await (0,ai.ll)("construction-org-professional-audit",async()=>(await (0,ba.YL)(e,f)).map(a=>"error"===a.level?{...a,severity:"blocker"}:a))).map(a=>"error"===a.level?{...a,severity:a.severity||"blocker"}:a)}let bj=/章节级证据覆盖较弱|章节事实覆盖不足|小节事实或量化参数落位可继续优化/u;async function bk(a){var b;let{finalChapterDrafts:c,effectiveChapters:e,factsModel:g,allEvidence:h,finalMarkdown:i,validationIssues:j,retrievalCoverageReports:k,includeRetrievalCoverage:l,template:m,tenderRequirements:n,bidComposition:o,drawingFactLock:p,structuredFacts:q,authorityAuditReport:r,professionalDepthClassifier:s,evaluationCriteriaItems:t,documentBudget:v}=a,y=function(a){let b=a.chapters.map(b=>{let c=function(a){let b=["project"];return/进度|工期|节点|部署/u.test(a.title)&&b.push("schedule"),/质量|验收|材料/u.test(a.title)&&b.push("quality","rules"),/安全|文明|风险|危大/u.test(a.title)&&b.push("safety","rules"),/资源|材料|设备|劳动力|机械/u.test(a.title)&&b.push("resources"),/施工|工艺|技术|方案|清单|工程量|图纸/u.test(a.title)&&b.push("quantities"),[...new Set(b)]}(a.templateChapters.find(a=>a.id===b.id||a.title===b.title)||b),d=c.filter(c=>{var d;return d=a.factsModel,("project"===c?d.project.length>0||d.preciseFacts.length>0:"schedule"===c?d.schedule.length>0:"quality"===c?d.quality.length>0||d.specifications.length>0:"safety"===c?d.safety.length>0||d.rules.length>0:"resources"===c?d.resources.length>0||d.bills.length>0:"quantities"===c?d.bills.length>0||d.drawings.length>0||d.tables.length>0:"rules"===c&&(d.rules.length>0||d.specifications.length>0))||(b.evidence||[]).some(a=>RegExp(aJ[c]||c,"u").test(`${a.sectionTitle||""} ${a.content||""}`))}),e=c.filter(a=>!d.includes(a)),f=c.length?Math.round(d.length/c.length*100):100;return{chapterId:b.id,title:b.title,requiredDomains:c,confirmedDomains:d,unconfirmedDomains:e,score:f}}),c=new Set(a.evidence.map(a=>a.filePath).filter(Boolean)),d=b.length?Math.round(b.reduce((a,b)=>a+b.score,0)/b.length):100;return{score:d,evidenceCount:a.evidence.length,confirmedFiles:c.size,chapterReports:b,unconfirmedDomains:[...new Set(b.flatMap(a=>a.unconfirmedDomains))],remediation:d>=95?"知识库事实覆盖已达到高置信交付要求。":"系统需扩大本地知识库检索、补抽结构化事实,并将已确认事实落位到对应章节。"}}({chapters:c,templateChapters:e,factsModel:g,evidence:h}),z=(0,F.e$)(i,g),A=(b={chapters:c,templateChapters:e,factsModel:g,chapterTargets:v?.chapterTargets,projectTypes:(0,w.un)({template:m,chapters:m.chapters,materialText:c.map(a=>a.title).join(" ")})}).chapters.map(a=>{let c=b.templateChapters.find(b=>b.id===a.id||b.title===a.title),{checks:d,skipped:e}=function(a,b,c){a.title,(b?.sections||a.sections||[]).join(" ");let d=[{key:"structure",label:"结构完整",passed:(a.sections||b?.sections||[]).length>=2||/###\s+/u.test(a.content)},{key:"evidence",label:"证据绑定",passed:(a.evidence||[]).length>0},{key:"professional",label:"专业控制点",passed:/验收|复核|检查|交底|控制点|整改|闭环|台账|进场|工序/u.test(a.content)}],e=[],f=c.chapterTargets?.get(a.id)||c.chapterTargets?.get(a.title);if("number"==typeof f&&Number.isFinite(f)&&f>0){let b=Math.round(.85*f),c=(0,u.V7)(a.content);d.push({key:"depth",label:`内容深度(计划 ${f} 字,下限 ${b})`,passed:c>=b,detail:`实交 ${c} 字`})}else e.push("内容深度(本章无计划字数:documentBudget.chapterTargets 缺该章)");let g=(0,aD.uQ)(a.title,[...c.projectTypes??[]]);if(g&&g.mustCover.length>0){let b=(0,aj.$6)({chapterId:a.id,chapterTitle:a.title,chapterText:a.content,mustCover:g.mustCover}),c=b.map(a=>a.message.replace(/^[^:]*:/u,"").slice(0,60));d.push({key:"must-cover",label:`必需要素(${g.mustCover.length} 项)`,passed:0===b.length,detail:0===b.length?void 0:`未落位 ${b.length} 项:${c.slice(0,3).join(";")}`})}else e.push("必需要素(本章没有已注册的 mustCover 义务:chapterFocusRule 未命中)");return{checks:d,skipped:e}}(a,c,b),f=d.filter(a=>a.passed).length,g=d.filter(a=>!a.passed);return{chapterId:a.id,title:a.title,score:d.length?Math.round(f/d.length*100):100,checks:d,action:0===g.length?`章节覆盖完整(计量 ${d.length} 项${e.length>0?`,另有 ${e.length} 项因判据缺失未计量`:""})。`:`未通过:${g.map(a=>`${a.label}${a.detail?`(${a.detail})`:""}`).join(";")}`+(e.length>0?`。另有 ${e.length} 项因判据缺失未计量:${e.join(";")}`:"")}}),B=a0(j,y.score>=85?[]:[{level:"warning",message:`系统知识库覆盖确认率偏低:${y.score}%`,suggestion:`${y.remediation} 未确认事实域:${y.unconfirmedDomains.map(a=>aJ[a]||a).join("、")||"无"}`}],(0,F.c$)(z,{maxIssues:20}),A.filter(a=>a.score<80).map(a=>{let b=a.checks.filter(a=>!a.passed).map(a=>a.label),c=b.length>0&&!b.some(b=>a.action.includes(b))?` 未通过项:${b.join("、")}`:"";return{level:"warning",message:`章节覆盖不足:${a.title} ${a.score}%`,suggestion:`${a.action}${c}`}}),l?(0,a1.L9)(k):[]);B=B.map(a=>bj.test(a.message)&&"warning"===a.level?{...a,level:"info"}:a);let C=await a$({markdown:i,chapters:c,issues:B,knowledgeCoverage:y,factTraces:z,template:m,tenderRequirements:n,bidComposition:o,effectiveChapters:e,drawingFactLock:p,boqRowTraces:(0,F.JV)(i,g),parameterUsageAudit:(0,d.Y5)({markdown:i,factsModel:g,chapters:c,supersededValues:a.supersededTruthValues}),keyFactPlacementAudit:(0,f._P)(i,[...q||[],...g&&g.preciseFacts||[]]),authorityAuditReport:r,professionalDepthClassifier:s,evaluationCriteriaItems:t}),D=function(a){let b=[],c=a.issues.filter(a=>"error"===a.level);c.length>0&&b.push({priority:"high",title:"阻断问题修复",action:`修复 ${c.length} 个导出阻断问题,优先处理事实冲突、结构缺失、模板规则违规和占位残留。`});let d=(a.factTraces||[]).filter(a=>"unplaced"===a.status&&(0,F.O7)(a));if(d.length>0){let a=d.length>12?`${d.length} 项(示例:${d.slice(0,8).map(a=>a.label).join("、")} 等)`:`${d.length} 项(${d.map(a=>a.label).join("、")})`;b.push({priority:"high",title:"事实落位修复",action:`将 ${a} 已确认知识库事实写入对应章节,保持原始数值、单位和来源口径。`})}a.knowledgeCoverage&&a.knowledgeCoverage.score<95&&b.push({priority:"medium",title:"知识库确认覆盖修复",action:"扩大本地知识库检索范围,执行事实补抽和章节证据重分配;这是系统检索、抽取、落位问题,不要求用户追加资料。"});let e=(a.chapterCoverage||[]).filter(a=>a.score<80);if(e.length>0){let a=e.length>10?`${e.slice(0,8).map(a=>a.title).join("、")} 及其他${e.length-8}章`:e.map(a=>a.title).join("、");b.push({priority:"medium",title:"章节覆盖修复",action:`补齐低覆盖章节(${e.length}章):${a}。`})}return a.qualityReport&&!a.qualityReport.passed&&b.push({priority:"medium",title:"交付置信度修复",action:a.qualityReport.actions.join(" ")}),b}({issues:B,qualityReport:C,knowledgeCoverage:y,factTraces:z,chapterCoverage:A});if(C?.evaluationCriteriaAttainment){let a=await (0,ai.ll)("criteria-substantive-attainment",()=>(function(a){let b=[],c=String(a.markdown||""),d=a.audit;if(!c||!d||!Array.isArray(d.criteria)||0===d.criteria.length)return b;let e=ax(c,a.projectEntities),f=(0,au.Uv)(c);for(let a of d.criteria){if(b.length>=10)break;let d=String(a.title||"").trim();if(!d)continue;let g=String(a.anchor||"").trim(),h=Number.isFinite(a.similarity)?Number(a.similarity).toFixed(2):"—";if("missing"===a.status){b.push({level:"warning",severity:"warning",category:"evidence_coverage",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"criteria-substantive-attainment",fingerprint:(0,G.c6)(`missing\u0000${d}`)},message:`评分项「${d}」无实质响应:正文标题与正文均无匹配(承接判定 missing)——该项在评标中不得分。`,suggestion:`为该评分项补写正文小节并落位本项目实体与量化指标;评分条目必须逐条承接为可查证的小节,不得以通用表述顶替。`});continue}if("partial"===a.status){let a=f.find(a=>{let b=String(a.heading||"").replace(/^#{1,6}\s+/u,"").trim();return b.length>0&&g.length>0&&(b===g||b.startsWith(g)||g.startsWith(b))}),c=!!a&&!a.hasSubstantiveBody;b.push({level:"warning",severity:"warning",category:"evidence_coverage",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"criteria-substantive-attainment",fingerprint:(0,G.c6)(`partial\u0000${d}`)},message:`评分项「${d}」仅标题承接、无内容级响应(相似度 ${h}${g?`;承接标题“${g}”`:""})${c?"——承接小节为空壳(无实质正文段落)":""}。`,suggestion:`在承接小节内补写针对本项目的内容(本项目实体 + 工艺参数/控制点/验收标准),使该项达到内容级响应;只有标题的承接在评标中至多得一半分。`});continue}if(0===e.length||!g)continue;let i=c.indexOf(g);if(i<0)continue;let j=function(a,b){let c=a.lastIndexOf("\n",Math.max(0,b-1))+1,d=a.indexOf("\n\n",b),e=Math.max(b+1,Math.min(d>=0?d:a.length,c+900));return a.slice(c,e)}(c,i);e.some(a=>j.includes(a))||b.push({level:"warning",severity:"warning",category:"evidence_coverage",owner:"llm",repairability:"llm_repairable",provenance:{detectorId:"criteria-substantive-attainment",fingerprint:(0,G.c6)(`met\u0000${d}`)},message:`评分项「${d}」的达标只是语义层面的:命中块与本项相似度 ${h},但块内不含任何本项目实体(清单条目/图纸参数/项目类型/建设地点)——属通用表述(换个项目同样成立),非实质达标。`,suggestion:`把该评分项的响应落到本项目实体上:引用清单条目/图纸参数/本项目工程量与部位,并给出可核对的量化指标;语义相似度达标而实体缺位在评标中会被判为通用套话。`})}return b})({markdown:i,audit:C.evaluationCriteriaAttainment}));a.length>0&&(B=[...B,...a])}B=a0(B,C.passed?[]:[{level:"error",severity:"blocker",category:"structure",repairability:"manual_review",owner:"user",message:`交付置信度未达目标:${C.deliveryProbability}% / ${C.target}%(综合评分 ${C.overall}/100)`,suggestion:C.actions.join(" ")}],D.filter(a=>"high"===a.priority).map(a=>({level:"info",message:`修复策略待执行:${a.title}`,suggestion:a.action})));let E=(0,ai.yT)("gating-checklist",()=>(0,x.Ai)(B,g,c));return{knowledgeCoverage:y,factTraces:z,chapterCoverage:A,qualityReport:C,repairStrategies:D,validationIssues:B,finalExportGate:E}}function bl(a){let b=(0,bd.B1)(a.documentId,void 0!==a.nodeLogBaseDir?{baseDir:a.nodeLogBaseDir}:{});return b.noNodeLog&&(void 0===a.documentId||0===a.documentId.length)?a.executionStages=[]:(b.noNodeLog&&console.warn(`[gen][stages] 阶段视图读不到节点日志(doc=${a.documentId}):executionStages 记为空表,不拿旧快照顶替。旧归档(本段之前落盘的文档)没有 .nodes.jsonl,属预期;若是新生成请查节点日志写入路径。`),a.executionStages=function(a,b={}){var c;let d=b.limit??300;if(a.length<=d)return a;let e=d-4-1;if(e<=0)return a.slice(-d);let f=function(a,b=()=>void 0){let c=a.map((a,c)=>{let d=a.nodeId??(0,bc.sf)(a),e=b(d);return{index:c,nodeId:d,...void 0!==e?{seq:e}:{}}}),d=c.filter(a=>void 0===a.seq).map(a=>a.index),e=[];for(let a=1;a<c.length;a+=1){let b=c[a-1],d=c[a];void 0!==b.seq&&void 0!==d.seq&&(d.seq<b.seq||d.seq===b.seq&&d.nodeId<b.nodeId)&&e.length<5&&e.push({index:d.index,seq:d.seq,previousIndex:b.index,previousSeq:b.seq})}return{entries:c,unresolved:d,mismatches:e,usable:0===d.length&&0===e.length}}(a,(c=b.documentId)?a=>(0,bc.bv)(c,a):()=>void 0),g=function(a,b,c){if(!a.usable||c<0)return;let d=[...a.entries].sort((a,b)=>a.seq-b.seq||(a.nodeId<b.nodeId?-1:+(a.nodeId>b.nodeId)));if(d.length<4+c)return;let e=d.slice(0,b).map(a=>a.index);return{head:e,tail:d.slice(d.length-c).map(a=>a.index),archived:d.slice(b,d.length-c).map(a=>a.index)}}(f,4,e);g||console.warn(function(a){let b=[];for(let c of(b.push(`[gen][throttle] 节流退回**数组口径**(节点口径不可用):阶段 ${a.total} 条,未解析 ${a.unresolved.length} 条${a.unresolved.length>0?`(下标 ${a.unresolved.slice(0,5).join(",")})`:""},节点顺序与数组顺序不一致 ${a.mismatches.length} 处`),a.mismatches))b.push(`(下标 ${c.previousIndex}→${c.index}:seq ${c.previousSeq}→${c.seq})`);return b.push(`doc=${a.documentId||"(无 documentId)"}。★ 退回数组位置只保证"与退役前逐字一致",**不等于**节点口径已被验证:投影出来的每条阶段都带来源节点 id(\`stage.nodeId\`),本该条条可解析;出现未解析说明**这条阶段没有节点**(手写条目漏了 \`nodeId\`,或它根本不是投影来的)。故本条出现即表示"数组里混进了非节点来源的条目"——那正是退役要治的形态,别当噪音忽略。`),b.join(" ")}({...void 0!==b.documentId?{documentId:b.documentId}:{},total:a.length,unresolved:f.unresolved,mismatches:f.mismatches}));let h=g?g.head.map(b=>a[b]):a.slice(0,4),i=g?g.tail.map(b=>a[b]):a.slice(-e),j=g?g.archived.map(b=>a[b]):a.slice(4,a.length-e),k=j.filter(a=>"failed"===a.status).length;return[...h,{type:"validation",roleId:"stage-archive",status:k>0?"failed":"success",message:`已归档 ${j.length} 个中间执行阶段${k>0?`(含 ${k} 个失败记录)`:""}`,details:j[0]?.subtitle?[`归档区间:${j[0].subtitle} → ${j[j.length-1]?.subtitle||""}`]:[]},...i]}(b.stages,{documentId:a.documentId})),a.executionStages}async function bm(a){var b,c;let d=(b=a.chapterDrafts,c=a.documentSpec,b.map(a=>{let b=c.chapterRules.find(b=>b.id===a.id||b.title===a.title),d=(b?.requiredFactIds||[]).map(a=>c.factFields.find(b=>b.id===a)?.name).filter(Boolean),e=[...new Set([...a.missingFacts||[],...d].filter(Boolean))],f=e.filter(b=>!a.missingFacts.includes(b)),g=e.filter(b=>a.missingFacts.includes(b));return{chapterId:a.id,title:a.title,requiredFacts:e,coveredFacts:f,missingFacts:g,evidenceCount:a.evidence.length}}));a.validation=(0,a7.M6)(a.chapterDrafts,a.governedStructuredFacts,a.template,a.promptIds),(0,ai.yT)("chapter-block-degradation",()=>void 0),a.validation.warnings=[...a.validation.warnings,...a.readiness.warnings],a.validation.errors=[...a.validation.errors,...a.readiness.blockingIssues],a.sources=[...a.allEvidence.reduce((a,b)=>a.set(b.filePath,(a.get(b.filePath)??0)+1),new Map).entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b}));let e=new Map;for(let b of a.allEvidence)e.set(b.source||"unknown",(e.get(b.source||"unknown")??0)+1);a.validationIssues=a0((0,a5.w9)(a.validation,a.factsModel,a.chapterDrafts),function(a){let b=[];for(let c of a)0===c.evidenceCount?b.push({level:"error",message:`章节缺少证据:${c.title}`,suggestion:"请补充对应绑定材料或调整模板章节检索词。"}):c.missingFacts.length>0&&b.push({level:"warning",message:`章节事实覆盖不足:${c.title},缺失 ${c.missingFacts.slice(0,6).join("、")}`,suggestion:"建议补充章节 requiredFacts 或绑定材料证据。"});return b}(d),(a.globalConsistencyIssues||[]).filter(a=>!/^跨章一致性冲突|^工序规格冲突/u.test(a)).slice(0,10).map(b=>{let c=/^数据一致性矛盾/u.test(b);return{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`${c?"数据一致性复核":"跨章一致性复核"}:${b}`,suggestion:c?"全文数据必须一致:以绑定资料(图纸/清单/招标文件)为准选定唯一值,统一矛盾数值对。":"跨章数值口径不一致属低级错误,必须定向修复统一口径后重新校验。",provenance:{detectorId:c?"data-consistency-snapshot":"global-consistency-snapshot",fingerprint:(0,G.c6)(a.chapterDrafts.map(a=>a.content).join("\n\n"))}}}));let f=a.chapterDrafts.map(a=>a.content).join("\n\n");a.validationIssues=a0(a.validationIssues,(0,a7.br)(f,a.structuredFacts).map(a=>({...a,level:"warning",severity:"warning",suggestion:"建议 Agent Writer 在章节生成阶段优先落位可信基础事实;导出阶段不因未落位的低置信或泛化事实阻断。",provenance:{detectorId:"fact-coverage",fingerprint:(0,G.c6)(f)}})));let g=Math.max(0,a.effectiveChapters.length-a.chapterDrafts.length);a.validationIssues=a0(a.validationIssues,[...(0,ai.yT)("generation-completeness",()=>g>0?[{level:"error",severity:"blocker",category:"structure",owner:"system",repairability:"manual_review",message:`部分章节生成失败:${g} 章`,suggestion:a.failedChapterMessages.join(";")||"请检查模型调用、知识库检索和事实抽取配置后重新生成失败章节。",provenance:{detectorId:"generation-completeness",fingerprint:`missing-chapters#${g}`}}]:[])]);let h=await Promise.all(a.chapterDrafts.map(async b=>{let c=a.effectiveChapters.find(a=>a.id===b.id);if(!c)return[];let d=await (0,a6.mt)({chapter:c,content:b.content,evidence:b.evidence||[]});return d.length>0?[{level:"warning",message:`${b.title} 小节事实或量化参数落位可继续优化:${d.slice(0,5).join(";")}`,suggestion:"建议在 Agent Writer 阶段扩大定向证据,不得在导出阶段补写。"}]:[]}));for(let b of(a.validationIssues=a0(a.validationIssues,h.flat()),a.assets=[],a.chapterGenerationStages))(0,bc.Wl)(a,{batch:"finalize.rebuild",stage:b});bl(a),(0,bc.Wl)(a,{batch:"finalize.rebuild",stage:(0,a4.X5)({type:"reference",roleId:"knowledge-usage-report",status:"success",message:`资料使用报告:证据 ${a.allEvidence.length} 条,来源文件 ${a.sources.length} 份,结构化事实 ${a.structuredFacts.length} 条`,details:[`证据类型:${[...e.entries()].map(([a,b])=>`${a} ${b}`).join(",")||"无"}`,`索引健康:可用切片 ${a.indexHealth.usableChunkCount} 条,待索引 ${a.indexHealth.pendingJobs} 个,向量${(0,a7.EG)(a.indexHealth.vectorStatus?.status)}`]},{subtitle:"资料使用报告"})}),(0,bc.Wl)(a,{batch:"finalize.rebuild",stage:(0,a4.X5)({type:"reference",roleId:"web-research-report",status:a.webResearchReport.enabled?"success":"skipped",message:a.webResearchReport.enabled?`联网增强:检索章节 ${new Set(a.webResearchReport.chapters).size} 个,查询 ${a.webResearchReport.queries.length} 个,使用公开资料 ${a.webResearchReport.evidenceCount} 条`:"联网增强未开启",details:a.webResearchReport.enabled?[`检索主题:${[...new Set(a.webResearchReport.queries)].join(";")||"无"}`,`过滤结果:${a.webResearchReport.filteredCount} 条`,"公开资料仅用于通用规范、政策、工艺和措施补充,不作为项目事实来源"]:["可在模型配置中开启联网增强"]},{subtitle:"联网增强报告"})});{let b=(0,ai.Jq)("standard-final"),c=b.degraded.length>0?b.degraded.join("、"):"无";(0,bc.Wl)(a,{batch:"finalize.rebuild",stage:(0,a4.X5)({type:"validation",roleId:"detector-execution-summary",status:b.degraded.length>0?"failed":"success",message:b.degraded.length>0?`交付前检测器执行情况:已执行 ${b.executed.length} 个、**降级未执行 ${b.degraded.length} 个**(该 ${b.degraded.length} 个检测维度本次未查,导出不受阻断但需复核)`:`交付前检测器执行情况:${b.executed.length} 个全部执行完成`,details:[`降级未执行(基础设施异常):${c}`,...b.declaredMissing.length>0?[`声明但未执行(疑为死检测器,请核查接线):${b.declaredMissing.join("、")}`]:[],"说明:降级为检测器基础设施异常而非正文内容缺陷,不阻断导出;重跑可恢复该维度检查。"]},{subtitle:"交付前检测器执行情况"})}),a.emitProgress?.()}}function bn(a){let b=(0,W._D)(a.tenderRequirements?.structureRequirements||[],a.effectiveChapters,a.requirementsSimilarity);return(0,aK.cA)({structureItems:b.assignments.map(a=>({chapterTitle:a.chapterTitle,form:a.requirement.form,element:a.requirement.element})),chapters:a.effectiveChapters})}function bo(a){let b=(0,y.dW)(a.chapterDrafts);b.insertedIn&&(a.chapterDrafts=b.chapters,a.generationDiagnostics.llm.lastInfo=`安全目标承诺句兜底:${b.insertedIn}(写作侧未写出安全目标,按投标人承诺口径补入)`);let c=(0,s._C)(a.bidComposition),d=(0,s.kO)(a.bidComposition),e=a.bidComposition?.formatRules.cover==="forbidden",f=(0,r.rs)((0,r.V3)({templateId:a.template.id,templateName:a.template.name,title:a.template.outputTitle,requirement:a.requirement||"",projectRoot:a.projectRoot,projectId:a.projectId,generationSettings:a.template.generationSettings,facts:a.facts,structuredFacts:a.structuredFacts,factsModel:a.factsModel,chapters:a.chapterDrafts,sources:a.sources,missingItems:[...new Set(a.missingItems)],validation:a.validation,validationIssues:a.validationIssues,executionStages:a.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:a.assets,partialChapters:a.chapterDrafts.map(b=>({id:b.id,title:b.title,chars:(0,u.V7)(b.content),status:(0,a7.DR)(b,a.documentBudget.chapterTargets.get(b.id)),updatedAt:Date.now()})),checkpointChapters:a.chapterDrafts,generatedAt:Date.now()},{forbidDrawingImages:d,promptRules:a.promptDocumentRules,bodyTableForbidden:c,coverForbidden:e}),a.chapterDrafts,{forbidDrawingImages:d,promptRules:a.promptDocumentRules,bodyTableForbidden:c,coverForbidden:e});a.finalChapterDrafts=f.chapters.map(b=>{let c=a.effectiveChapters.find(a=>a.id===b.id)||b;return{...b,sections:b.sections||[],content:(0,a7.w_)(b.content,c)}}),(0,D.Q)(a),a.finalMarkdown=(0,r.rs)((0,r.V3)({templateId:a.template.id,templateName:a.template.name,title:a.template.outputTitle,requirement:a.requirement||"",projectRoot:a.projectRoot,projectId:a.projectId,generationSettings:a.template.generationSettings,facts:a.facts,structuredFacts:a.structuredFacts,factsModel:a.factsModel,chapters:a.finalChapterDrafts,sources:a.sources,missingItems:[...new Set(a.missingItems)],validation:a.validation,validationIssues:a.validationIssues,executionStages:a.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:a.assets,partialChapters:[],checkpointChapters:a.finalChapterDrafts,generatedAt:Date.now()},{forbidDrawingImages:d,promptRules:a.promptDocumentRules,bodyTableForbidden:c,coverForbidden:e}),a.finalChapterDrafts,{forbidDrawingImages:d,promptRules:a.promptDocumentRules,bodyTableForbidden:c,coverForbidden:e}).markdown,a.finalMarkdown=(0,y._D)((0,a7.Ht)((0,r.bR)((0,a7.Xr)((0,r.kT)((0,r.K7)(be((0,a7.jO)(a.finalMarkdown,a.structuredFacts,{bodyTableForbidden:c}),a.projectMaterialSummary))))))).markdown,c||(a.finalMarkdown=(0,aK.gA)(a.finalMarkdown),a.finalMarkdown=(0,aK.aH)(a.finalMarkdown,bn(a),{substituteTable:b=>(0,a8.Ik)(a.blueprintData,b)}).markdown),a.finalMarkdown=(0,t.u7)(a.finalMarkdown,{plan:a.bidComposition?.appendixPlan||[],blueprintData:a.blueprintData})}function bp(a){let b=(0,A.ZP)(a.finalMarkdown,a.blueprintData,(0,B.lJ)(a));a.authorityAuditReport=b;let c=(0,ai.yT)("authority-audit-gap",()=>(0,A.Bg)(b));a.validationIssues=[...a.validationIssues.filter(a=>!a.message.startsWith("无主数值审计失败")),...c];let d=b.unregisteredCount>0||b.derivationGaps.length>0||b.processGaps.length>0;(0,bc.Wl)(a,{batch:"finalize.rebuild",stage:(0,a4.X5)({type:"validation",roleId:"authority-audit",status:d?"failed":"success",message:(0,A.Hk)(b),details:(0,A.Z0)(b)},{subtitle:"权威覆盖审计"})})}async function bq(a){let b=bn(a);a.rebuildFinalMarkdown=()=>{let c=(0,y._D)((0,a7.Ht)((0,r.bR)((0,a7.Xr)((0,r.kT)((0,r.K7)(be((0,a7.jO)(function(a){let b=(0,s.kO)(a.bidComposition),c=(0,a7.Ht)((0,r.rs)((0,r.V3)({templateId:a.template.id,templateName:a.template.name,title:a.template.outputTitle,requirement:a.requirement||"",projectRoot:a.projectRoot,projectId:a.projectId,generationSettings:a.template.generationSettings,facts:a.facts,structuredFacts:a.structuredFacts,factsModel:a.factsModel,chapters:a.chapters,sources:a.sources,missingItems:[...new Set(a.missingItems)],validation:a.validation,validationIssues:a.validationIssues,executionStages:a.executionStages,exportGate:{passed:!1,blockingIssues:[],checklist:[]},assets:a.assets,partialChapters:[],checkpointChapters:a.chapters,generatedAt:Date.now()},{forbidDrawingImages:b,promptRules:a.promptDocumentRules,bodyTableForbidden:a.bodyTableForbidden,coverForbidden:a.coverForbidden}),a.chapters,{forbidDrawingImages:b,promptRules:a.promptDocumentRules,bodyTableForbidden:a.bodyTableForbidden,coverForbidden:a.coverForbidden}).markdown),d=(0,v.av)(c),e=d.splitCount>0?d.markdown:c;return(0,t.u7)(e,{plan:a.bidComposition?.appendixPlan||[],blueprintData:a.blueprintData})}({template:a.template,requirement:a.requirement,projectRoot:a.projectRoot,projectId:a.projectId,facts:a.facts,structuredFacts:a.structuredFacts,factsModel:a.factsModel,chapters:a.finalChapterDrafts,sources:a.sources,missingItems:a.missingItems,validation:a.validation,validationIssues:a.validationIssues,executionStages:a.executionStages,assets:a.assets,promptDocumentRules:a.promptDocumentRules,bodyTableForbidden:(0,s._C)(a.bidComposition),coverForbidden:a.bidComposition?.formatRules.cover==="forbidden",bidComposition:a.bidComposition,blueprintData:a.blueprintData}),a.structuredFacts,{bodyTableForbidden:(0,s._C)(a.bidComposition)}),a.projectMaterialSummary))))))).markdown;return(0,s._C)(a.bidComposition)?c:(0,aK.aH)((0,aK.gA)(c),b,{substituteTable:b=>(0,a8.Ik)(a.blueprintData,b)}).markdown};let c=(0,a2.mN)({facts:a.structuredFacts,markdown:a.finalMarkdown});if(c.size>0&&(0,bc.Wl)(a,{batch:"finalize.rebuild",stage:{type:"fact_extraction",roleId:"canonical-facts",status:"success",message:`已决策可信基础事实 ${c.size} 项`,details:[...c.values()].map(a=>`${a.label}=${a.value}(${a.source},confidence=${a.confidence})`).slice(0,12)}}),!a.caliberLedger){let b=[...a.factsModel?.preciseFacts||[],...a.factsModel?.project||[],...a.factsModel?.schedule||[],...a.factsModel?.quality||[],...a.factsModel?.safety||[]].map(a=>({key:a.key,label:a.fieldName,value:a.value,sourceFile:a.sourceFile})),c=[...(a.allEvidence||[]).map(a=>({text:String(a.content||""),source:`${a.filePath||""} ${a.sectionTitle||""}`})),...b.map(a=>({text:String(a.value??""),source:String(a.sourceFile||"")}))],e=(0,aq.Oq)((0,aq.UD)(c)),f=(0,l.iC)({facts:b,overrides:e,labeledValues:(0,aq.Su)(c)});a.caliberLedger=(0,l.wc)(f),a.truthValues=f.resolved;let g=(0,l.DK)(f);g.length>0&&(console.error(`[caliber] 真值层自检发现 ${g.length} 处不变量违规:${g.slice(0,5).join(";")}`),(0,bc.Wl)(a,{batch:"finalize.rebuild",stage:(0,a4.X5)({type:"validation",roleId:"caliber-self-check",status:"partial",message:`真值层自检:${g.length} 处不变量违规(${g.slice(0,3).join(";")})——已记录,不改写、不阻断`},{subtitle:"真值层自检"})}));let h=(0,d.Y6)(a.factsModel?.factIndex?.parameterFacts||[]),i=(0,a4.X5)({type:"reference",roleId:"caliber-ledger",status:"success",message:`口径账本(真值层):受管属性 ${f.resolved.length} 项、噪声剔除 ${f.noiseRejected.length} 项、值级覆盖 ${e.length} 对;参数绑定 ${h.bound}/${h.bound+h.unbound}(绑定率 ${Math.round(100*h.bindRate)}%,项目级 ${h.projectLevel} 项不计入)`,details:[...a.caliberLedger.slice(0,20),...e.length>0?[`值级覆盖:${e.slice(0,5).map(a=>`${a.superseded}→${a.effective}`).join("、")}`]:[],...h.unbound>0?[`未绑定对象(应清零:有锚点却未抽到=抽取器缺陷):${h.unboundSamples.join(";")}`]:[]]},{subtitle:"口径账本"});(0,bc.Wl)(a,{batch:"finalize.rebuild",stage:i})}let f=(0,a9.q7)(a.finalMarkdown,a.clarificationOverrides||[]);f.length>0&&(a.validationIssues=[...a.validationIssues,...f]),a.baseValidationIssues=a.validationIssues,a.validationIssues=await bi({documentSpec:a.documentSpec,validationIssues:a.validationIssues,factsModel:a.factsModel,finalChapterDrafts:a.finalChapterDrafts,finalMarkdown:a.finalMarkdown,truthValues:a.truthValues,template:a.template,promptIds:a.promptIds,promptDocumentRules:a.promptDocumentRules,projectMaterialSummary:a.projectMaterialSummary,domainProfile:a.domainProfile,structuredFacts:a.structuredFacts,documentBudget:a.documentBudget,scopeConflicts:a.scopeConflicts,evaluationCriteriaItems:a.evaluationCriteriaItems,effectiveChapters:a.effectiveChapters,tenderRequirements:a.tenderRequirements,requirementsSimilarity:a.requirementsSimilarity,factTokenScopeClassifier:a.factTokenScopeClassifier,professionalDepthClassifier:a.professionalDepthClassifier,materialEvidence:a.allEvidence,blueprintData:a.blueprintData,billFactLock:a.billFactLock,drawingFactLock:a.drawingFactLock,bodyTableForbidden:(0,s._C)(a.bidComposition),bodyFigureForbidden:(0,s.kO)(a.bidComposition),identityMarksForbidden:!!a.bidComposition?.identityMarksForbidden,coverForbidden:a.bidComposition?.formatRules.cover==="forbidden",clarificationAmendments:a.clarificationAmendments?.amendments}),bp(a),a.qualityBundle=await bk({documentBudget:a.documentBudget,finalChapterDrafts:a.finalChapterDrafts,effectiveChapters:a.effectiveChapters,factsModel:a.factsModel,allEvidence:a.allEvidence,finalMarkdown:a.finalMarkdown,validationIssues:a.validationIssues,retrievalCoverageReports:a.retrievalCoverageReports,includeRetrievalCoverage:!0,template:a.template,tenderRequirements:a.tenderRequirements,bidComposition:a.bidComposition,drawingFactLock:a.drawingFactLock,structuredFacts:a.structuredFacts,authorityAuditReport:a.authorityAuditReport,professionalDepthClassifier:a.professionalDepthClassifier,evaluationCriteriaItems:a.evaluationCriteriaItems,supersededTruthValues:new Set((a.truthValues||[]).flatMap(a=>a.superseded||[]).map(a=>(0,e.K3)(a)))}),a.validationIssues=a.qualityBundle.validationIssues,a.recomputeFinalValidationBundle=async()=>{let b=a.baseValidationIssues.filter(a=>!a.provenance||!a_.has(a.provenance.detectorId));a.validationIssues=await bi({documentSpec:a.documentSpec,validationIssues:b,factsModel:a.factsModel,finalChapterDrafts:a.finalChapterDrafts,finalMarkdown:a.finalMarkdown,truthValues:a.truthValues,template:a.template,promptIds:a.promptIds,promptDocumentRules:a.promptDocumentRules,projectMaterialSummary:a.projectMaterialSummary,domainProfile:a.domainProfile,structuredFacts:a.structuredFacts,documentBudget:a.documentBudget,scopeConflicts:a.scopeConflicts,evaluationCriteriaItems:a.evaluationCriteriaItems,effectiveChapters:a.effectiveChapters,tenderRequirements:a.tenderRequirements,requirementsSimilarity:a.requirementsSimilarity,factTokenScopeClassifier:a.factTokenScopeClassifier,professionalDepthClassifier:a.professionalDepthClassifier,materialEvidence:a.allEvidence,blueprintData:a.blueprintData,billFactLock:a.billFactLock,drawingFactLock:a.drawingFactLock,bodyTableForbidden:(0,s._C)(a.bidComposition),bodyFigureForbidden:(0,s.kO)(a.bidComposition),identityMarksForbidden:!!a.bidComposition?.identityMarksForbidden,coverForbidden:a.bidComposition?.formatRules.cover==="forbidden",clarificationAmendments:a.clarificationAmendments?.amendments}),bp(a),a.qualityBundle=await bk({documentBudget:a.documentBudget,finalChapterDrafts:a.finalChapterDrafts,effectiveChapters:a.effectiveChapters,factsModel:a.factsModel,allEvidence:a.allEvidence,finalMarkdown:a.finalMarkdown,validationIssues:a.validationIssues,retrievalCoverageReports:a.retrievalCoverageReports,includeRetrievalCoverage:!1,template:a.template,tenderRequirements:a.tenderRequirements,bidComposition:a.bidComposition,drawingFactLock:a.drawingFactLock,structuredFacts:a.structuredFacts,authorityAuditReport:a.authorityAuditReport,professionalDepthClassifier:a.professionalDepthClassifier,evaluationCriteriaItems:a.evaluationCriteriaItems,supersededTruthValues:new Set((a.truthValues||[]).flatMap(a=>a.superseded||[]).map(a=>(0,e.K3)(a)))}),a.validationIssues=a.qualityBundle.validationIssues}}},38032:(a,b,c)=>{c.d(b,{iA:()=>v,TQ:()=>q,MW:()=>w});var d=c(77598),e=c(19898),f=c(73859),g=c(92808),h=c(32374),i=c(29055),j=c(52639),k=c(67680);function l(a){let b,c=new Map;for(let b of a){let a=b.outputTitle?.trim();a&&c.set(a,(c.get(a)??0)+1)}let d=0;for(let[a,e]of[...c.entries()].sort((a,b)=>a[0]<b[0]?-1:+(a[0]>b[0])))e>d&&(b=a,d=e);return b}function m(...a){let b=new Set,c=[];for(let d of a)for(let a of d??[]){let d=a.trim();0===d.length||b.has(d)||(b.add(d),c.push(d))}return c}var n=c(45304),o=c(70208),p=c(70610);function q(a){return{id:a.id,name:a.title,outputTitle:a.title,category:a.documentType,description:"",chapters:a.chapters}}class r extends Error{constructor(a,b,c){super(b),this.name="DocumentSpecDerivationError",this.code=a,this.missing=c}}function s(...a){let b=new Set,c=[];for(let d of a)for(let a of d??[]){let d=a.trim();0===d.length||b.has(d)||(b.add(d),c.push(d))}return c}function t(a){return(0,o.YZ)(a).replace(/\s+/gu,"")}let u=/^根据显式大纲章节生成正式正文[::]/u;function v(a){var b;let c,q=(a.requirement||"").trim();try{c=(0,p.Z0)(a.promptIds??[],{projectRoot:a.projectRoot})}catch(a){if(a instanceof p.hu)throw new r("prompt-unavailable",a.message,["提示词"]);throw a}let v=c.map(a=>a.content).join("\n\n").trim(),w=c.filter(a=>"writer"===a.category||"chapter"===a.category),x=(w.length>0?w:c).map(a=>({name:a.name,chapters:(0,o.cs)([{text:a.content,source:a.name,strict:!0}])})).filter(a=>a.chapters.length>=2),y=(0,o.cs)([{text:q,source:"用户需求",strict:!0}]);if(y.length<2&&x.length>1)throw new r("ambiguous-outline",`有 ${x.length} 份选中的提示词各自声明了章节大纲(${x.map(a=>`「${a.name}」${a.chapters.length} 章`).join("、")}):章节结构只能有一个来源,请只保留其中一份带 <OUTLINE> 的提示词(其余提示词若只是抽取口径,请去掉它的大纲块);若只想临时改结构,可在输入框里写出你要的整份大纲(它会整份替换提示词的章清单)。`,["章节大纲(唯一来源)"]);let z=y.length>=2?y:x[0]?.chapters??[];if(z.length<2)throw new r("no-outline",`提示词里没有可用的章节大纲:派生文档规格需要 ≥2 章的显式大纲(模板已退役,章节结构不再有第二来源)。当前从提示词与要求里识别到 ${z.length} 章。请在提示词里写显式大纲块:用 <OUTLINE> 与 </OUTLINE> 把逐行章节清单包起来(标签名也可用 章节大纲 / 大纲 / 目录 / CHAPTERS),逐行写章标题;两级结构用 1.1 /(1)形态写小节。`,["章节大纲(≥2 章)"]);let A=y.length>=2?"用户需求":x[0]?.name??"提示词",B=z.map(a=>a.title),C=function(a){let b=(a.projectName||"").trim();return b||a.projectRoot.replace(/[\\/]+$/u,"").split(/[\\/]/u).filter(Boolean).at(-1)||"当前项目"}(a),D=a.projectType?a.projectType:(0,i.yt)({template:{name:C,outputTitle:a.title||""},chapters:B.map(a=>({title:a})),requirement:`${a.requirement||""} ${v}`})[0]??"general",E=function(a){let b=a.skills??h.d7,c=a.projectType??"general",d=a.chapters??[],e="number"==typeof a.maxChapters&&a.maxChapters>0?Math.min(d.length,a.maxChapters):d.length,f=[],g=new Set,i=0;for(let a=0;a<e;a+=1){let e=d[a],h=[...e.sections??[]];i+=1;let j=(0,k.mG)(e.title,h,c,b);for(let a of j)g.add(a.id);let l=j.length>0?(0,k.$i)(j):{structure:[],forbidden:[],conflicts:[]};f.push({title:e.title,domains:(0,k.VO)(e.title),skillIds:j.map(a=>a.id),sections:l.structure,checklist:function(a){let b=[...a].sort((a,b)=>a.id<b.id?-1:+(a.id>b.id)),c=b.map(a=>a.chapterChecklist?.purpose?.trim()).find(a=>!!a),d={sections:m(...b.map(a=>a.chapterChecklist?.sections)),queries:m(...b.map(a=>a.chapterChecklist?.queries)),requiredFacts:m(...b.map(a=>a.chapterChecklist?.requiredFacts)),tableSections:m(...b.map(a=>a.chapterChecklist?.tableSections)),tableRequirements:m(...b.map(a=>a.chapterChecklist?.tableRequirements)),pinnedEvidenceFilePaths:m(...b.map(a=>a.chapterChecklist?.pinnedEvidenceFilePaths))};for(let a of(c&&(d.purpose=c),Object.keys(d))){let b=d[a];Array.isArray(b)&&0===b.length&&delete d[a]}return d}(j),forbidden:function(a){let b=[...a].sort((a,b)=>a.id<b.id?-1:+(a.id>b.id)),c=new Set,d=[];for(let a of b)for(let b of a.forbidden??[]){let a=("string"==typeof b?b:b.phrase).trim();0===a.length||c.has(a)||(c.add(a),d.push(a))}return d}(j),conflicts:l.conflicts})}let n=[...g].sort(),o=b.filter(a=>g.has(a.id));return{poolSize:b.length,matchReads:i,matchedSkillIds:n,chapters:f,...l(o)?{outputTitle:l(o)}:{},exportSettings:(0,j.b2)(a.formatRules),formatRulesPresent:!!a.formatRules}}({skills:a.skills??function(){try{let a=(0,n.loadSkills)();return a.length>0?a:h.d7}catch{return h.d7}}(),chapters:z.map(a=>({title:a.title,sections:a.sections})),projectType:D,maxChapters:a.maxChapters}),{chapters:F,perChapter:G}=function(a,b){let c=new Map(b.chapters.map(a=>[a.title.trim(),a])),d=[];return{chapters:a.map(a=>{let b=c.get(a.title.trim()),e=(a.sections??[]).filter(Boolean),f=new Set(e.map(t)),g=(b?.sections??[]).map(a=>a.title.trim()).filter(Boolean).filter(a=>!f.has(t(a))),h=s(a.queries,b?.checklist.queries,b?.sections.map(a=>a.title)),i=b?.checklist.purpose?.trim(),j=function(a){let b=(a||"").trim();return 0===b.length||u.test(b)}(a.purpose)&&i?i:a.purpose;return d.push({title:a.title,domains:b?.domains??[],skillIds:b?.skillIds??[],sectionsFromOutline:e,sectionsFromSkills:g,conflicts:b?.conflicts.length??0}),{...a,purpose:j,queries:h,requiredFacts:s(a.requiredFacts,b?.checklist.requiredFacts),...s(e,g).length>0?{sections:s(e,g)}:{},...b?.checklist.tableSections?.length?{tableSections:s(a.tableSections,b.checklist.tableSections)}:{},...b?.checklist.tableRequirements?.length?{tableRequirements:s(a.tableRequirements,b.checklist.tableRequirements)}:{},...b?.checklist.pinnedEvidenceFilePaths?.length?{pinnedEvidenceFilePaths:s(a.pinnedEvidenceFilePaths,b.checklist.pinnedEvidenceFilePaths)}:{}}}),perChapter:d}}(z,E),H=(b=`${a.title||""} ${C} ${B.join(" ")} ${q} ${v}`,(0,f.E6)(b)?f.IB.name:(0,g.rs)(b,g.nt)||"文档"),{title:I,source:J}=function(a){let b=(a.title||"").trim();if(b)return{title:b,source:"human"};let c=(a.plan.outputTitle||"").trim(),d=c||a.documentType,e=a.projectName.trim();return{title:e?`${e}${d}`:d,source:c?"skill":"derived"}}({title:a.title,projectName:C,documentType:H,plan:E});return{id:function(a,b,c){let f=(0,d.createHash)("sha1").update(JSON.stringify({root:(0,e.computeProjectId)(a.projectRoot),title:b,prompt:c,requirement:a.requirement||""})).digest("hex").slice(0,12);return`doc-spec-${f}`}(a,I,v),title:I,documentType:H,chapters:F,derivation:{skillPoolSize:E.poolSize,matchReads:E.matchReads,matchedSkillIds:E.matchedSkillIds,outlineSource:A,projectType:D,titleSource:J,projectName:C,promptChars:v.length,requirementChars:q.length,prompts:c.map(a=>({id:a.id,name:a.name,category:a.category,chars:a.content.length})),perChapter:G}}}function w(a){return a instanceof r?[{level:"error",message:a.message,missing:a.missing}]:a instanceof Error?[{level:"error",message:a.message,missing:[]}]:[{level:"error",message:String(a),missing:[]}]}},38049:(a,b,c)=>{c.d(b,{$6:()=>k,Tg:()=>f,_u:()=>m});var d=c(7148);let e=new Map([["工程名称、建设地点、建设规模、计划工期、质量标准等资料已确认事实",{spec:{kind:"keywordGroups",groups:[["工程名称","项目名称"],["建设地点","工程地点","项目地点","位于"],["建设规模","建筑面积","总建筑面积","占地面积"],["计划工期","工期"],["质量标准","质量目标","合格标准"]],min:3},blocking:!0}],["现场条件与招标范围边界",{spec:{kind:"keywordGroups",groups:[["现场条件","场地条件","周边环境","交通条件","地质条件","地勘"],["招标范围","承包范围","施工范围","范围边界"]],min:2},blocking:!0}],["编制依据与适用范围(按五类逐项列全:招标文件及补疑补遗、国家法律法规、国家/行业现行规范标准、地方法规规章、企业管理体系;地方法规规章必须结合工程所在地属地的现行地方性法规与政府规章,不得只写笼统一句话)",{spec:{kind:"keywordGroups",groups:[["招标文件","补疑","补遗","答疑","澄清"],["法律法规","《中华人民共和国","法律、行政法规","建筑法","安全生产法"],["规范","标准","GB","JGJ","GB/T"],["地方","省","市.*条例","地方性法规","政府规章"],["企业管理体系","企业标准","质量、环境、职业健康安全","管理体系"]],min:4},blocking:!0}],["B5 专业工程清单:资料识别的专业工程逐个展开(不少于 5 个,每个专业工程写明作业对象与工程量、工序顺序、施工方法三方面要素,落到工程量与工艺参数)",{spec:{kind:"countDistinct",pattern:/^(?:#{3,5}\s*|[((]?\d{1,2}[)).、]\s*)([一-龥]{2,20}(?:工程|系统|分部|分项|安装|结构|装饰|管道|道路|桥梁|绿化))/gmu,min:5},blocking:!0}],["资料识别的专业工程(不少于5个)",{spec:{kind:"countDistinct",pattern:/^(?:#{3,5}\s*|[((]?\d{1,2}[)).、]\s*)([一-龥]{2,20}(?:工程|系统|分部|分项|安装|结构|装饰|管道|道路|桥梁|绿化))/gmu,min:5},blocking:!0}],["每个专业工程的作业对象与工程量/工序顺序/施工方法三方面要素",{spec:{kind:"keywordGroups",groups:[["工艺|工序|流程|顺序|先.*后|→"],["工程量|数量|面积为|长度为|共计|合计"],["采用|施工方法|工艺参数|做法"]],min:3},blocking:!1}],["工程量、材料设备规格、检测验收与资料闭环",{spec:{kind:"keywordGroups",groups:[["工程量|数量|面积|长度|体积"],["规格|型号|强度等级|管径|厚度"],["验收|检验|检测|复试"],["资料|台账|归档|记录"]],min:3},blocking:!1}],["资料明确的专业工程范围(逐项展开分项工程方案)",{spec:{kind:"countDistinct",pattern:/^#{3,5}\s*([一-龥]{2,24}(?:工程|系统|分部|分项|方案))/gmu,min:3},blocking:!0}],["每个分项方案的作业对象与工程量/工序顺序/施工方法三方面要素",{spec:{kind:"keywordGroups",groups:[["工艺|工序|流程|顺序|先.*后|→"],["工程量|数量|面积为|长度为|共计|合计"],["采用|施工方法|工艺参数|做法"]],min:3},blocking:!1}],["每个分项方案不少于4个工艺参数与至少1处3环节以上工序顺序表达",{spec:{kind:"paramDensity",min:1.5},blocking:!0}],["工艺参数来自绑定材料或行业通用规范值,不得编造",{spec:{kind:"keywordGroups",groups:[],min:0},blocking:!1}],["重点难点成因与影响范围",{spec:{kind:"keywordGroups",groups:[["成因|风险来源|风险源于|致险因素|由于|原因"],["影响|风险|后果|危害"]],min:2},blocking:!0}],["对应施工内容与专项措施",{spec:{kind:"keywordGroups",groups:[["措施|方案|对策"],["专项|针对性|具体做法"]],min:2},blocking:!0}],["责任岗位、检查频次、整改闭环",{spec:{kind:"keywordGroups",groups:[["责任|岗位|负责人"],["频次|每.*次|每周|每月|每日|巡查"],["整改|闭环|复查|复核"]],min:2},blocking:!1}],["施工区段与流水划分",{spec:{kind:"keywordGroups",groups:[["施工段|区段|流水段|作业面|分区"],["流水|平行|搭接|穿插"]],min:2},blocking:!0}],["各阶段施工顺序与穿插关系",{spec:{kind:"keywordGroups",groups:[["阶段|顺序|先后|先.*后|→"],["穿插|搭接|交叉|衔接"]],min:2},blocking:!1}],["资源动态调配机制",{spec:{kind:"keywordGroups",groups:[["资源"],["调配|动态|平衡|周转|调度"]],min:2},blocking:!1}],["总进度计划与关键节点",{spec:{kind:"keywordGroups",groups:[["总进度|进度计划|工期计划|里程碑"],["节点|控制点|关键线路"]],min:2},blocking:!0}],["周/日计划分解",{spec:{kind:"keywordGroups",groups:[["周计划|月度计划|月计划|日计划|季计划|年计划|旬计划"],["分解|细化|滚动|编制"]],min:1},blocking:!1}],["进度偏差识别与纠偏措施",{spec:{kind:"keywordGroups",groups:[["偏差|滞后|延误|对比"],["纠偏|赶工|调整|补救"]],min:2},blocking:!1}],["质量目标与验收依据",{spec:{kind:"keywordGroups",groups:[["质量目标|质量标准|合格率|一次验收合格"],["验收|GB|规范|标准"]],min:2},blocking:!0}],["三检制度与样板引路",{spec:{kind:"keywordGroups",groups:[["三检|自检|互检|专检"],["样板|首件|示范|引路"]],min:2},blocking:!0}],["隐蔽工程验收与材料复试",{spec:{kind:"keywordGroups",groups:[["隐蔽"],["验收|记录|影像|签证"],["复试|见证取样|送检"]],min:2},blocking:!0}],["见证取样送检、试块养护、分部分项报验等质量保障制度逐项落位",{spec:{kind:"keywordGroups",groups:[["见证取样|见证员|送检"],["试块|标养|同条件|养护"],["报验|分部分项|验收程序"]],min:2},blocking:!0}],["质量通病防治与闭环整改",{spec:{kind:"keywordGroups",groups:[["通病|常见问题|易发"],["防治|预防|治理|措施"],["整改|闭环|复查"]],min:2},blocking:!1}],["保修与缺陷责任期承诺",{spec:{kind:"keywordGroups",groups:[["保修"],["缺陷责任期|保修期|保修年限|保修期限"]],min:2},blocking:!0}],["安全目标与量化控制指标(如杜绝重伤及以上事故、轻伤事故频率控制值、安全达标率),须以承诺句式明确写出",{spec:{kind:"keywordGroups",groups:[["安全目标|安全生产目标|安全指标"],["杜绝|控制|达标率|不高于|不超过|为零|事故率"]],min:2},blocking:!0}],["危险源辨识与风险分级",{spec:{kind:"keywordGroups",groups:[["危险源|危害因素|风险源"],["辨识|识别|清单|台账"],["分级|等级|级别"]],min:2},blocking:!0}],["危大工程辨识清单逐项完整(按项目实际情况覆盖基坑支护与降水、模板支撑、脚手架、起重吊装、吊篮、拆除等适用项,逐项写明辨识依据,不得遗漏)",{spec:{kind:"keywordGroups",groups:[["基坑|降水|支护"],["模板|支撑体系|支模"],["脚手架"],["起重|吊装|塔吊|吊篮"],["拆除|爆破"]],min:2},blocking:!0}],["B6 危大分级参数—判定绑定(硬要求):每一类危大工程的判定必须写「本项目实际参数 + 判定阈值对照 + 结论」三要素(如「本项目基坑开挖深度 1.75m,对照《危险性较大的分部分项工程安全管理规定》开挖深度超过 3m 属危大工程的阈值,判定本工程基坑不属于危大工程」);**禁止只抄规范阈值**(如只写「开挖深度超过 3m 的沟槽土方开挖工程」而不给本项目实际深度);参数取自资料原文,不得编造",{spec:{kind:"keywordGroups",groups:[["超过|不小于|大于|阈值|限值"],["本项目|本工程|实际"],["判定|属于|不属于|不构成|构成|认定为"]],min:3},blocking:!0}],["危大工程专项方案编制与审批程序",{spec:{kind:"keywordGroups",groups:[["专项施工方案|专项方案"],["编制|审批|论证|审核|审批程序"]],min:2},blocking:!0}],["安全交底与隐患排查闭环",{spec:{kind:"keywordGroups",groups:[["交底"],["隐患排查|检查|巡查"],["闭环|整改|复查|销项"]],min:2},blocking:!1}],["施工现场临时用电三级配电两级保护:总配电箱/分配电箱/开关箱三级配电,两级漏电保护(总箱与开关箱各一级,漏电动作电流与动作时间参数落位),TN-S 接零保护系统,漏电保护器每周试跳 1 次",{spec:{kind:"keywordGroups",groups:[["三级配电|总配电箱|分配电箱|开关箱"],["两级保护|漏电保护|漏电动作"],["TN-S|接零保护|三级五线"],["试跳|检测|试验"]],min:3},blocking:!0}],["B5 生产安全事故应急预案与应急演练(八部分结构:总则、组织机构及职责、风险分析与危险源辨识、应急物资设备与通讯保障、专项应急预案、应急响应、后期处置、培训演练):逐部分展开,演练频次量化(如每半年 1 次),物资储备清单化",{spec:{kind:"keywordGroups",groups:[["总则|目的|编制目的"],["组织机构|应急组织|职责"],["风险分析|危险源辨识"],["物资|设备|通讯"],["专项应急预案"],["应急响应"],["后期处置|善后"],["培训|演练"]],min:5},blocking:!0}],["机械设备投入计划",{spec:{kind:"keywordGroups",groups:[["机械|设备"],["进场|投入|计划|台|数量"]],min:2},blocking:!0}],["分阶段劳动力计划",{spec:{kind:"keywordGroups",groups:[["劳动力|人员|工种|班组"],["阶段|基础|主体|装饰|收尾"]],min:2},blocking:!0}],["材料进场计划与验收",{spec:{kind:"keywordGroups",groups:[["材料"],["进场|采购|计划"],["验收|检验|复试|合格证"]],min:2},blocking:!1}],["扬尘治理六个百分百逐项落位(施工工地周边 100% 围挡、物料堆放 100% 覆盖、出入车辆 100% 冲洗、施工现场地面 100% 硬化、拆迁工地 100% 湿法作业、渣土车辆 100% 密闭运输;不涉及拆迁的写明豁免理由)",{spec:{kind:"keywordGroups",groups:[["围挡"],["覆盖|苫盖"],["冲洗|洗车"],["硬化"],["湿法|洒水"],["密闭运输|密闭"]],min:4},blocking:!0}],["扬尘噪声分时段管控",{spec:{kind:"keywordGroups",groups:[["扬尘"],["噪声|噪音"],["时段|夜间|白天|分时"]],min:2},blocking:!1}],["监测预警与台账",{spec:{kind:"keywordGroups",groups:[["监测|监控|检测"],["台账|记录|档案"]],min:2},blocking:!1}],["绿色施工与四节一环保措施:绿色施工按《绿色施工评价标准》GB/T 50640 分阶段评价(每阶段不少于 1 次,评价记录归档)",{spec:{kind:"keywordGroups",groups:[["绿色施工"],["GB/T 50640|绿色施工评价标准|评价"],["阶段|归档|记录"]],min:2},blocking:!1}],["B5 四节一环保量化指标:节水(非传统水源利用率/用水量控制)、节材(材料损耗率/废弃物回收率)、节地(土方平衡率)、节能(能耗指标)各至少 1 项带单位量化指标,附录八基准对照项逐项量化响应",{spec:{kind:"keywordGroups",groups:[["节水|用水量|水循环|非传统水源"],["节材|损耗率|回收率"],["节地|土方平衡|占地"],["节能|能耗|用电量"]],min:3},blocking:!0}],["应急组织架构",{spec:{kind:"keywordGroups",groups:[["应急"],["组织|机构|小组|职责|指挥"]],min:2},blocking:!0}],["应急物资储备",{spec:{kind:"keywordGroups",groups:[["应急物资|物资储备|救援物资|储备"],["清单|台账|数量|配备"]],min:1},blocking:!1}],["专项预案与演练计划",{spec:{kind:"keywordGroups",groups:[["专项.*预案|专项应急预案"],["演练|演习"],["频次|每.*次|每半年|每年"]],min:2},blocking:!1}],["竣工清理与垃圾外运",{spec:{kind:"keywordGroups",groups:[["竣工|完工|收尾"],["清理|清运|垃圾|外运"]],min:2},blocking:!0}],["缺陷修补与复验",{spec:{kind:"keywordGroups",groups:[["缺陷|整改|修补"],["复验|复查|验收"]],min:2},blocking:!1}],["验收移交与保修响应",{spec:{kind:"keywordGroups",groups:[["验收|移交|交接"],["保修|响应|回访"]],min:2},blocking:!0}],["建筑工人实名制管理(实名登记率 100%、实名制管理平台考勤)",{spec:{kind:"keywordGroups",groups:[["实名制|实名登记"],["平台|考勤|系统"],["100%"]],min:2},blocking:!0}],["农民工工资专用账户与银行代发(专用账户开设、按月足额代发、工资保证金)",{spec:{kind:"keywordGroups",groups:[["工资专用账户|专用账户"],["银行代发|代发|按月足额"],["保证金"]],min:2},blocking:!0}],["考勤与工资支付台账",{spec:{kind:"keywordGroups",groups:[["考勤"],["台账|记录|公示"],["工资|支付"]],min:2},blocking:!1}],["工伤保险办理与参保信息管理(作业人员工伤保险按项目参保、参保信息纳入实名制管理、工伤事故申报处置流程)",{spec:{kind:"keywordGroups",groups:[["工伤保险|参保"],["申报|处置|流程|理赔"]],min:2},blocking:!1}],["现状交通与地下管线调查(交通流量、沿线单位出入口、管线权属与埋深)",{spec:{kind:"keywordGroups",groups:[["交通流量|交通量|流量调查|现状交通"],["出入口|沿线单位|路口|交叉口"],["管线|权属|埋深|物探|图纸"]],min:2},blocking:!0}],["分阶段导改方案与围挡设置(导改阶段划分、导改路线、通行能力校核、围挡撤除条件)",{spec:{kind:"keywordGroups",groups:[["阶段|分期|分幅|分步|一期|二期"],["导改|导行|绕行|改道|路线"],["围挡|隔离|水马|护栏"],["通行能力|车道|宽度|校核|限速"]],min:2},blocking:!0}],["行人与沿线单位通行保障(人行通道、无障碍通行、出入口保通)",{spec:{kind:"keywordGroups",groups:[["行人|人行|无障碍"],["通道|便道|过街|栈桥"],["出入口|保通|通行|绕行"]],min:2},blocking:!1}],["地下管线探测与保护措施(探测方法、保护形式、监护与应急)",{spec:{kind:"keywordGroups",groups:[["物探|探测|探沟|开挖样洞|管线调查"],["保护|加固|悬吊|迁改|包封"],["监护|旁站|应急|报警|联动"]],min:2},blocking:!0}],["导改标志标线与夜间警示设施(标志、标线、夜间警示)",{spec:{kind:"keywordGroups",groups:[["标志|标牌|指示牌|导向"],["标线|轮廓标|隔离墩"],["夜间|警示|反光|照明"]],min:2},blocking:!1}],["受影响居民与诉求调查(受影响户数、诉求清单、调查方式)",{spec:{kind:"keywordGroups",groups:[["户数|居民|住户|栋"],["诉求|意见|需求|建议"],["调查|走访|座谈|问卷|排查"]],min:2},blocking:!0}],["扰民因素识别与控制措施(噪声、扬尘、振动、作业时段)",{spec:{kind:"keywordGroups",groups:[["噪声|噪音"],["扬尘|粉尘|垃圾"],["振动|震动"],["时段|夜间|作业时间|休息"]],min:2},blocking:!0}],["分区施工与居民通行保障(施工分区、通行路线、临时通道)",{spec:{kind:"keywordGroups",groups:[["分区|分段|分片|作业面|流水"],["通行|出行|通道|便道|路线"],["居民|住户|单元|楼道"]],min:2},blocking:!0}],["既有设施保护措施(既有管线、既有构筑物、保护形式)",{spec:{kind:"keywordGroups",groups:[["既有|原有|现状|保留"],["管线|管网|构筑物|设施|树木"],["保护|防护|加固|监测|恢复"]],min:2},blocking:!1}],["沟通公示与投诉响应(公示方式、联系渠道、响应时限)",{spec:{kind:"keywordGroups",groups:[["公示|公告|告知|张贴|通知"],["联系|电话|渠道|接待"],["响应|时限|处置|回复|办结"]],min:2},blocking:!0}],["成品保护策划与责任划分(保护对象清单、责任岗位、交接制度)",{spec:{kind:"keywordGroups",groups:[["成品|半成品|保护对象"],["清单|台账|一览表"],["责任|岗位|责任人|班组"],["交接|移交|签认"]],min:2},blocking:!0}],["交接验收与责任转移时点(交接条件、交接记录、责任转移时点)",{spec:{kind:"keywordGroups",groups:[["交接|移交|接收"],["验收|检查|确认"],["记录|签认|单"],["时点|责任转移"]],min:2},blocking:!1}],["分部位成品保护措施(地面、墙面、吊顶、门窗、设备)",{spec:{kind:"keywordGroups",groups:[["地面|楼面|地砖|石材|地板"],["墙面|墙柱|墙纸|涂料"],["吊顶|天棚|风口"],["门窗|门扇|玻璃"],["设备|面板|开关|插座|灯具"]],min:3},blocking:!0}],["交叉施工作业面协调(工序穿插顺序、作业面移交、冲突处理)",{spec:{kind:"keywordGroups",groups:[["交叉|穿插|平行作业"],["工序|顺序|先后"],["作业面|工作面|移交|协调|界面"]],min:2},blocking:!1}],["成品损坏责任认定与修复(损坏记录、责任认定、修复与复验)",{spec:{kind:"keywordGroups",groups:[["损坏|破损|污染|损伤|划伤"],["责任|认定|赔偿|追责"],["修复|更换|复验|整改"]],min:2},blocking:!1}]]),f={spec:{kind:"quantifiedRatio",min:.5},blocking:!0},g=RegExp(`\\d+(?:\\.\\d+)?\\s*(?:${d.wA}|mm|cm|kW|kV|MPa|kN|kPa|d|h|min|s|V|A|%|‰|度|毫米|厘米|公斤|千克|小时|分钟|日历天|天|日|年|月|周|旬|次|遍|人|项|份|层|栋|区|名|位|批|点|元|万元|立|标|级|段|处|道)(?![一-龥])`,"gu"),h=/([一-龥]{2,16}(?:工程|系统|分部|分项))(?=[、,,;;])/gu,i=new Set(["本工程","该工程","全部工程","所有工程","各工程","此项工程","整个工程","本系统"]);function j(a,b){switch(a.kind){case"keywordGroups":{if(0===a.groups.length)return{satisfied:!0,detail:"未设确定性判据(交由其它层)"};let c=a.groups.filter(a=>a.some(a=>RegExp(a,"u").test(b))).length;return{satisfied:c>=a.min,detail:`命中义务要素 ${c}/${a.groups.length}(线 ${a.min})`}}case"countDistinct":{let c=new Set;for(let d of b.matchAll(new RegExp(a.pattern.source,a.pattern.flags.includes("u")?a.pattern.flags:`${a.pattern.flags}u`))){let a=(d[1]||d[0]).replace(/\s+/gu,"");a&&!i.has(a)&&c.add(a)}if(c.size<a.min)for(let a of b.matchAll(RegExp(h.source,"gu"))){let b=(a[1]||"").replace(/\s+/gu,"");b&&!i.has(b)&&c.add(b)}return{satisfied:c.size>=a.min,detail:`逐项展开 ${c.size} 项(线 ${a.min})`}}case"sectionPresence":{let c=a.titles.filter(a=>RegExp(`^#{2,5}\\s*[\\d..]*\\s*${a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}`,"mu").test(b)).length;return{satisfied:c>=a.min,detail:`小节存在 ${c}/${a.titles.length}(线 ${a.min})`}}case"quantifiedRatio":{let c=b.split(/\n{2,}/u).map(a=>a.trim()).filter(Boolean);if(0===c.length)return{satisfied:!1,detail:"无段落"};let d=c.filter(a=>RegExp(g.source,"u").test(a)).length/c.length;return{satisfied:d>=a.min,detail:`量化段落占比 ${(100*d).toFixed(0)}%(线 ${(100*a.min).toFixed(0)}%)`}}case"paramDensity":{let c=b.replace(/\s+/gu,"").length;if(0===c)return{satisfied:!1,detail:"无正文"};let d=(b.match(RegExp(g.source,"gu"))||[]).length/c*1e3;return{satisfied:d>=a.min,detail:`工艺参数密度 ${d.toFixed(2)}/千字(线 ${a.min})`}}default:return{satisfied:!0,detail:`未知规格 ${String(a)}`}}}function k(a){let b=[];return a.mustCover.forEach((c,d)=>{let g=e.get(c)??(c.includes("每条重点难点必须写成")?f:void 0);if(!g)return;if(g===f){let e=function(a){let b=a.split("\n"),c=[];for(let a=0;a<b.length;a+=1)/^#{2,5}\s*[\d..]*\s*[^\n]*?(?:重点|难点)/u.test(b[a]||"")&&c.push(a);if(0===c.length)return null;let d=[];for(let a of c){let c=(b[a]?.match(/^#+/u)?.[0]||"#").length,e=a+1;for(;e<b.length;){let a=b[e]?.match(/^(#+)\s/u);if(a&&a[1].length<=c)break;e+=1}d.push(b.slice(a+1,e).join("\n"))}let e=d.join("\n\n").trim();return e.length>0?e:null}(a.chapterText);if(null===e)return;let f=j(g.spec,e);if(f.satisfied)return;b.push(l(a,c,d,g.blocking,f.detail));return}let h=j(g.spec,a.chapterText);h.satisfied||b.push(l(a,c,d,g.blocking,h.detail))}),b}function l(a,b,c,d,e){return{level:d?"error":"info",severity:d?"blocker":"suggestion",category:"professional_chain",message:`${a.chapterTitle} 章型义务未落位(${c+1}/${a.mustCover.length}):${b.slice(0,40)}${b.length>40?"…":""}——${e}`,suggestion:`按本章写作重点逐项补齐:${b}`,sectionTitle:a.chapterTitle,provenance:{detectorId:"chapter-focus-mustcover",fingerprint:`${a.chapterId}\u0000mustcover\u0000${c}`}}}function m(){return[...e.keys()]}},39372:(a,b,c)=>{c.d(b,{DR:()=>k,EG:()=>m,EK:()=>n,G2:()=>t,Il:()=>r,M6:()=>h,NJ:()=>s,R_:()=>j,_8:()=>o,bz:()=>q,gq:()=>g,md:()=>i});var d=c(76760),e=c(78217),f=c(3063);function g(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} 字`}}function h(a,b,c,d){let e=[],f=[];for(let b of a)0===b.evidence.length&&e.push(`${b.title} 未检索到资料证据`),b.content.length<80&&e.push(`${b.title} 内容较短,建议人工补充或重新生成`);return c&&a.length<c.chapters.length&&f.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===d.length&&f.push("本次生成没有生效的提示词(未选择)"),{passed:0===f.length,warnings:e,errors:f}}function i(a,b,c=[]){return a<=0||c.some(a=>/未返回有效章节正文|生成失败/u.test(a))||c.some(a=>/空小节|缺少规划小节/u.test(a))?"failed":"success"}function j(a){return(0,f.ap)(a)}function k(a,b){let c=(0,e.V7)(a.content);return c<=0?"failed":"number"==typeof b&&Number.isFinite(b)&&b>0&&c<.85*b?"partial":"completed"}function l(a,b,c=12){if(0===b.length)return[];let e=b.slice(0,c).map(a=>d.basename(a)),f=b.length>c?` 等 ${b.length} 个文件`:"";return[`${a}:${e.join("、")}${f}`]}function m(a){return a?({ready:"就绪",pending:"待构建",partial:"部分就绪",error:"异常",unavailable:"不可用"})[a]??"未知":"未知"}function n(a,b){let c=new Set(b.filter(Boolean)),d=(a.listFiles?.()||[]).filter(a=>0===c.size||c.has(a.relativePath)),e=new Set(d.map(a=>a.relativePath)),f=[...c].filter(a=>!e.has(a)),g=d.filter(a=>0===Math.max(0,Math.ceil(Number(a.chunkCount)||0))).map(a=>a.relativePath),h=d.filter(a=>"error"===a.status).map(a=>a.relativePath),i="function"==typeof a.countPendingIndexJobs?a.countPendingIndexJobs():0,j="function"==typeof a.getVectorStatus?a.getVectorStatus():void 0,k=d.filter(a=>"error"!==a.status&&Math.max(0,Math.ceil(Number(a.chunkCount)||0))>0),n=k.map(a=>a.relativePath),o=k.reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0),p=[...l("部分绑定文件未完成索引,已自动跳过",f),...l("部分绑定文件没有可用切片,已自动跳过",g),...l("部分绑定文件索引失败,已自动跳过",h)],q=c.size>0&&0===o?["所有绑定文件均无可用切片"]:[],r=[...p,...i>0?[`仍有 ${i} 个待索引任务,建议等待索引完成后生成`]:[],...j&&"ready"!==j.status?[`向量索引状态为${m(j.status)},当前召回质量可能下降`]:[]];return{scopedRecords:d,usablePaths:n,missingFiles:f,emptyFiles:g,errorFiles:h,pendingJobs:i,vectorStatus:j,usableChunkCount:o,blockingIssues:q,warnings:r}}function o(a){return[...a].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>`${a.name} ${Math.round(a.durationMs/1e3)}秒`).join(",")}function p(a,b=5){return a?Object.entries(a).sort((a,b)=>b[1].inputChars-a[1].inputChars).slice(0,b):[]}function q(a,b=5){return p(a,b).map(([a,b])=>`${a} ${b.calls}次/${(b.inputChars/1e4).toFixed(1)}万字${b.schemaFailures?`(schema失败${b.schemaFailures})`:""}`).join(",")}function r(a){return a.filter(a=>a.name.startsWith("phase:")).sort((a,b)=>a.startedAt-b.startedAt).map(a=>`${a.name}:${(a.durationMs/1e3).toFixed(1)} 秒`)}function s(a,b=5){return p(a,b).map(([a,b])=>{let c=b.cacheHitTokens+b.cacheMissTokens,d=c>0?`,缓存命中 ${Math.round(b.cacheHitTokens/c*100)}%(${b.cacheHitTokens}/${c} token)`:"",e=b.schemaFailures?`,schema 失败 ${b.schemaFailures} 次`:"";return`${a}:${b.calls} 次,输入 ${(b.inputChars/1e4).toFixed(1)} 万字(L3 ${(b.l3Chars/1e4).toFixed(1)} 万字)${d}${e}`})}function t(a,b,c){if(Number.isFinite(c)&&c>0)return Math.ceil(c);let d=new Set(b.filter(Boolean)),e=a.listFiles?.().filter(a=>0===d.size||d.has(a.relativePath)).reduce((a,b)=>a+Math.max(0,Math.ceil(Number(b.chunkCount)||0)),0)??0;return e>0?e:Math.max(1,d.size)}},40693:(a,b,c)=>{c.d(b,{Av:()=>L,CS:()=>U,DK:()=>aa,FI:()=>B,Fw:()=>C,Hl:()=>E,Ls:()=>A,Qe:()=>z,U4:()=>n,b7:()=>M,db:()=>G,eS:()=>V,iX:()=>F,jW:()=>$,l5:()=>_,ot:()=>D,y1:()=>K});var d=c(29055),e=c(3063),f=c(22157),g=c(41991);let h=a=>a.split(/\n(?=#{1,3}\s)/u)[0].trim(),i=/按设计图纸执行|按设计文件执行|详见设计图纸|按.{0,10}设计总说明执行|详见图纸|以设计图纸为准/u,j=/按设计确定/u,k=/\d+(?:\.\d+)?\s*(?:㎡|m²|m2|m3|m³|mm|cm|m|MPa|kPa|%|日历天|天|小时|层|台|套|个|座|次|kN|t|N|颗|樘|扇)/giu,l=/(?:间距|偏差|坡度|养护|搭接|试验压力|含水率|饱满度|压实度|厚度|饱满)[^\n]{0,10}\d/giu;function m(a,b){return!!i.test(a)||!!j.test(a)&&(a.match(k)||[]).length+(a.match(l)||[]).length<b}let n=["精心组织","科学管理","精益求精","全力保障","高效推进","力争一流","最大限度","显著提升","大力落实","充分确保","严格把控"],o=RegExp(n.join("|"),"u"),p=["精心组织科学管理确保工程质量","严格把控质量安全进度各项指标","最大限度提升项目管理水平","全力保障项目顺利推进","大力落实各项管理措施"],q=["精心组织劳动力分批进场并登记交底","每道工序完成后实测实量并记录数据","混凝土浇筑后每天洒水养护不少于两次"];async function r(a){return(0,g.A)({prototypes:[...p],negativePrototypes:[...q],lexicalHints:o,embedDocuments:a})}let s=[{pattern:/质量|验收|隐蔽|样板|通病/u,label:"质量闭环",concepts:[{label:"班组自检",any:/自检|自查|自验/u},{label:"工序互检",any:/互检/u},{label:"交接检",any:/交接检|工序交接|交接验收/u},{label:"问题整改",any:/整改|返工|返修|纠正|消缺/u},{label:"整改验证",any:/复查|复验|复核|复测|验证|销项|销号/u},{label:"资料归档",any:/归档|台账|资料留存|记录留存|签认/u}],prompt:"质量类内容须写清质量问题的发现、处置与验证过程:谁检查、发现问题怎么处置、处置结果由谁验证认可、留下什么记录;各环节落到具体工序与岗位,不要把环节名称罗列成串。",ownerRe:/质量/u},{pattern:/安全|风险|危大|临电|消防|吊装|高处/u,label:"安全闭环",concepts:[{label:"风险辨识",any:/辨识|识别|危险源/u},{label:"安全交底",any:/交底/u},{label:"现场检查",any:/检查|巡查|排查|验收/u},{label:"隐患整改",any:/整改|处置|消除|纠正|返工/u},{label:"整改验证",any:/复查|复核|复验|验证|销项|销号|闭合/u}],prompt:"安全类内容须写清风险识别、交底、现场检查、隐患处置与处置后验证的完整过程:每步落到具体岗位、频次与记录,不要把环节名称罗列成串。"},{pattern:/进度|工期|节点|计划/u,label:"进度闭环",concepts:[{label:"计划分解",any:/计划分解|总进度计划|月计划|周计划|节点计划/u},{label:"过程检查",any:/检查|核查|统计|对比/u},{label:"偏差识别",any:/偏差|滞后|延误|差距/u},{label:"资源纠偏",any:/纠偏|调整|增派|调配|赶工/u},{label:"节点复核",any:/复核|核对|确认|校准/u}],prompt:"进度类内容须写清计划分解、过程检查、偏差识别、资源纠偏与节点复核:每步落到具体岗位、周期与记录。",ownerRe:/进度|工期/u},{pattern:/文明|扬尘|噪声|绿色|环保|垃圾/u,label:"环保闭环",concepts:[{label:"监测",any:/监测|检测|观测|测定/u},{label:"预警",any:/预警|报警|阈值|超标/u},{label:"联动处置",any:/处置|整改|停工|覆盖|洒水|降尘/u},{label:"台账记录",any:/台账|记录|归档|留存/u}],prompt:"文明环保类内容须写清监测、预警、联动处置与台账记录:监测点位、频次、阈值与处置动作落到具体岗位。"},{pattern:/工资|劳务|实名/u,label:"工资闭环",concepts:[{label:"实名登记",any:/实名|进场登记|用工登记/u},{label:"考勤",any:/考勤|打卡|出勤/u},{label:"工资核算",any:/核算|计量|结算|工资表/u},{label:"公示",any:/公示|公开|张榜/u},{label:"银行代发",any:/代发|银行发放|专用账户/u},{label:"资料归档",any:/归档|留存|备查|台账/u}],prompt:"工资保障类内容须写清实名登记、考勤、工资核算、公示、银行代发与资料归档:每步落到具体岗位、周期与留存凭证。",ownerRe:/劳务|工资|劳动力|实名|用工/u},{pattern:/应急|预案|救援|事故/u,label:"应急闭环",concepts:[{label:"险情发现",any:/发现|报告|报警|监测/u},{label:"警戒疏散",any:/警戒|疏散|隔离|撤离/u},{label:"初期处置",any:/处置|抢救|救护|抢险/u},{label:"救援上报",any:/上报|报告|请求救援|拨打/u},{label:"复盘整改",any:/复盘|总结|整改|改进/u}],prompt:"应急类内容须写清险情发现、警戒疏散、初期处置、救援上报与事后复盘:每步落到具体岗位与时限。"}],t={building:{label:"房建工程",chain:["施工准备","土方/基础","主体结构","二次结构/砌体","防水","机电安装","装饰装修","室外工程","竣工验收"],forbidden:["管道闭水试验","沥青摊铺","水稳层","交通导改"],prompt:"房建类章节应按“施工准备—基础—主体—二次结构—防水—机电—装饰—室外—验收”组织,不得混入市政道路工序。"},municipal:{label:"市政工程",chain:["测量放线","管线探测","围挡导行","沟槽/路基","管道/管涵/检查井","回填","水稳/沥青/铺装","标线/标志/路灯","验收移交"],forbidden:["主体结构","二次结构","塔吊","外脚手架","屋面防水"],prompt:"市政类章节应按“测量放线—管线探测—围挡导行—沟槽/路基—管道/结构—回填—路面恢复—验收移交”组织,不得写成房建主体结构逻辑。"},renovation:{label:"老旧小区改造",chain:["居民沟通","分区施工","既有保护","外墙/屋面/管网改造","扰民控制","竣工恢复"],forbidden:["大面积深基坑","高支模","大体量主体结构","长距离交通导改"],prompt:"老旧小区改造类章节必须体现“居民沟通—分区施工—既有保护—改造作业—扰民控制—竣工恢复”,不得忽略居民通行和既有设施保护。"},decoration:{label:"装饰装修工程",chain:["基层处理","防水/闭水","吊顶/龙骨","墙地面/铺装","收口/收边","成品保护","空气质量/环境检测"],forbidden:["深基坑","路基压实","水稳层","沥青摊铺","大体量土方"],prompt:"装饰装修类章节应按“基层处理—防水闭水—吊顶墙面—地面铺装—细部收口—成品保护—空气质量验收”组织,不得混入基坑、路基等无关内容。"},general:{label:"通用工程",chain:["施工准备","工艺流程/施工工艺","施工方法","验收标准/验收要求"],forbidden:[],prompt:"未判别出具体专业类型的章节,仍须按“施工准备—工艺流程—施工方法—验收标准”的次序把工艺内容写实:先写作业条件准备与确认,再写工艺流程与工序步骤,再写各步骤的施工方法与过程控制要求,最后写质量验收要求(检验项目、方法与频次);不得只写管理口号、或整章只罗列工艺名称而无过程叙述。"}},u=[{title:"招标评分项响应索引",pattern:/技术标|施工组织设计|评分|响应/u,prompt:"设置招标评分项响应索引,逐项对应章节、响应内容和位置。"},{title:"主要工程量一览表",pattern:/工程量|清单|土方|钢筋|混凝土|管道|路面/u,prompt:"将主要工程量表格化,关联资源配置和进度节点。"},{title:"影像资料留存",pattern:/隐蔽|危大|整改|验收|样板/u,prompt:"隐蔽、危大、材料验收、样板和整改前后对比必须留存影像资料。"},{title:"变更签证管理",pattern:/改造|市政|工期紧|变更|签证/u,prompt:"改造、市政或工期紧项目应补充变更识别、技术核定、签证资料和影响跟踪。"},{title:"危险品专项管理",pattern:/装修|装饰|动火|油漆|稀释剂|氧气|乙炔/u,prompt:"涉及动火、油漆、稀释剂、氧气乙炔时应补充危险品分区存放与动火审批。"},{title:"材料损耗与周转控制",pattern:/钢筋|模板|周转|材料|大体量/u,prompt:"体量大或材料占比高时应补充钢筋翻样、模板周转、余料回收和限额领料。"},{title:"分户验收",pattern:/住宅|住户|交付|分户/u,prompt:"住宅项目应补充分户实测实量、问题清单、整改与复验记录、交付资料。",projectTypes:["building","renovation"]}];function v(a){let b=a.map(a=>({id:a.id||a.title,title:`${a.title} ${(a.sections||[]).join(" ")}`.trim(),purpose:"",queries:[],requiredFacts:[]}));return(0,d.un)({template:{id:"runtime",name:"",outputTitle:"",description:"",category:"",chapters:b},chapters:b})}function w(a){return a.replace(/\s+/gu,"").toLowerCase()}function x(a,b){return a.split("/").some(a=>b.includes(w(a)))}function y(a){return a.split("/")[0]}function z(a){let b=[];for(let c of a.chapters)for(let a of String(c.content||"").split(/(?=^#{3}\s)/mu)){if(!a.trim())continue;let e=a.match(/^#{1,6}\s*(.+)$/mu);if(!e)continue;let f=e[1].trim().slice(0,40);if(!f)continue;let g=w(a);for(let{type:a,pattern:e}of d.s8){if(!e.test(f))continue;let d=t[a],h=d.forbidden.filter(a=>g.includes(w(a)));h.length>=1&&b.push({chapter:c,kind:"mixed",domain:a,label:d.label,sectionTitle:f,hits:[...h],missing:[],prompt:d.prompt})}}let c=w(a.documentText),e=Object.keys(t).filter(a=>"general"!==a).filter(b=>{let d=t[b];return RegExp(d.label,"u").test(a.documentText)||d.chain.filter(a=>x(a,c)).length>=3});for(let d of e.length?e:["general"]){let e=t[d],f=e.chain.filter(a=>x(a,c));if(f.length>=Math.min(3,e.chain.length))continue;let g=[...a.chapters].map(a=>({chapter:a,hits:e.chain.filter(b=>x(b,w(`${a.title} ${a.content||""}`))).length})).sort((a,b)=>b.hits-a.hits)[0];g&&0!==g.hits&&b.push({chapter:g.chapter,kind:"insufficient",domain:d,label:e.label,hits:f.map(y),missing:e.chain.filter(a=>!x(a,c)).map(y),prompt:e.prompt})}return b.push(...function(a){let b=[];for(let c of Object.keys(t).filter(a=>"general"!==a)){let d=t[c],e=d.chain.map((b,c)=>({node:b,chainOrder:c,at:function(a,b){let c=w(b),d=a.split("/").map(a=>c.indexOf(w(a))).filter(a=>a>=0);return d.length>0?Math.min(...d):-1}(b,a.documentText)})).filter(a=>a.at>=0);if(e.length<3)continue;let f=e.filter((a,b)=>b>0&&a.at<(e[b-1]?.at??-1));if(0===f.length)continue;let g=[...a.chapters].map(a=>({chapter:a,hits:d.chain.filter(b=>x(b,w(`${a.title} ${a.content||""}`))).length})).sort((a,b)=>b.hits-a.hits)[0];g&&0!==g.hits&&b.push({chapter:g.chapter,kind:"order",domain:c,label:d.label,hits:e.map(a=>y(a.node)),missing:f.map(a=>y(a.node)),prompt:d.prompt})}return b}(a)),b}function A(a){let b=`${a.title} ${(a.sections||[]).join(" ")}`;if(!/施工组织设计|施工组织|施组|技术标|施工方案|质量|安全|文明施工/u.test(b))return"";let c=v([a]);return["【施工组织设计专项写作规则】","- 禁止空话套话:不要只写“加强管理、严格控制、确保质量、精心组织、科学管理、周密部署、狠抓落实、统筹兼顾”等零信息口号(全文质检会按语义原型拦截并要求重写),每条措施要能回答“谁来做、做什么、什么标准、多久一次、不达标怎么处置”——按这五问写成句子,不要套用固定字词表或固定收尾。","- 落地措施范例:“由质检员每周不少于1次对级配碎石层压实度抽检,不足95%的当日返工复验”——每句措施要能回答“谁、做什么、什么标准、多久一次、不达标怎么办”;项目特有数据必须来自资料或图谱。",...(0,d.V5)(s,c).filter(a=>a.pattern.test(b)).map(a=>`- ${a.prompt}`),...(0,d.V5)(u,c).filter(a=>a.pattern.test(b)).map(a=>`- 高分补充:${a.prompt}`)].join("\n")}function B(a){let b={id:"runtime",name:a.templateName,outputTitle:a.outputTitle||"",description:"",category:"",chapters:[]},c=a.chapters.map(a=>({...a,title:`${a.title} ${(a.sections||[]).join(" ")}`.trim()})),e=(0,d.yt)({template:{...b,name:"",outputTitle:""},chapters:c}).filter(a=>"general"!==a),f=(e.length?e:(0,d.yt)({template:b,chapters:[],requirement:a.requirement,materialText:a.materialText})).filter(a=>"general"!==a).map(a=>t[a].prompt),g=f.length?f:[t.general.prompt];return`【专业工序链约束】
199
199
  ${g.map(a=>`- ${a}`).join("\n")}`}async function C(a,b){let c=[],d=await r(b);for(let b of a){let a=b.content.split(/[。;;\n]/u).map(a=>a.trim()).filter(a=>a.length>=8);if(0===a.length)continue;let e=await d(a),f=new Set;a.forEach((a,b)=>{if(e[b])for(let b of n)a.includes(b)&&f.add(b)}),f.size>0&&c.push({level:"warning",message:`${b.title} 存在施工组织设计空泛套话:${[...f].slice(0,8).join("、")}`,suggestion:"请按“谁来做+做什么+什么标准+多久一次+不达标怎么处置”重写相关措施(写清执行主体、时限与记录,不要套用固定收尾)。"})}return c}function D(a){let b=[],c=v(a);for(let e of(0,d.V5)(s,c)){if(!e.ownerRe)continue;let c=a.find(a=>e.ownerRe.test(a.title));if(!c)continue;let d=e.concepts.filter(a=>!a.any.test(c.content)).map(a=>a.label);0!==d.length&&b.push({chapter:c,deficit:{label:e.label,concepts:e.concepts.map(a=>a.label),missing:d,prompt:e.prompt}})}return b}function E(a){let b=[];for(let{chapter:c,deficit:d}of D(a))b.push({level:"warning",severity:"warning",category:"control_loop",message:`${c.title} 缺少${d.label}关键链条:${d.missing.join("、")}`,suggestion:`${d.prompt}链条要素缺失须补写:在该章对应小节内自然融入缺失环节,保持既有内容与结构不变。`,chapterId:c.id,provenance:{detectorId:"construction-org-control-loop",fingerprint:(0,f.c6)(`${d.label}\u0000${c.id}`)}});for(let c of(0,d.V5)(s,v(a)))if(!c.ownerRe)for(let d of a){let a=`${d.title} ${(d.sections||[]).join(" ")}`;if(!c.pattern.test(a))continue;let e=c.concepts.filter(a=>!a.any.test(d.content)).map(a=>a.label);e.length>=Math.ceil(c.concepts.length/2)&&b.push({level:"warning",message:`${d.title} 缺少${c.label}关键链条:${e.join("、")}`,suggestion:c.prompt})}return b}function F(a){let b=`${a.factsModel.project.map(a=>a.value).join(" ")} ${a.factsModel.preciseFacts.map(a=>a.value).join(" ")}`,c=`${a.markdown} ${b}`,d=[];if(a.chapters.length>0)for(let b of z({chapters:a.chapters,documentText:c})){let a=t[b.domain];"mixed"===b.kind?d.push({level:"warning",severity:"warning",category:"professional_chain",message:`${b.chapter.title}「${b.sectionTitle}」疑似${a.label}内容混入不匹配工序:${b.hits.join("、")}`,suggestion:a.prompt,chapterId:b.chapter.id,provenance:{detectorId:"construction-org-professional-chain",fingerprint:(0,f.c6)(`mixed\u0000${b.domain}\u0000${b.chapter.id}\u0000${b.sectionTitle}`)}}):"order"===b.kind?d.push({level:"warning",severity:"warning",category:"professional_chain",message:`${a.label}工序链次序颠倒:正文出现顺序 ${b.hits.join(" → ")},乱序环节 ${b.missing.join("、")}`,suggestion:a.prompt,chapterId:b.chapter.id,provenance:{detectorId:"construction-org-professional-chain",fingerprint:(0,f.c6)(`order\u0000${b.domain}\u0000${b.chapter.id}`)}}):d.push({level:"warning",severity:"warning",category:"professional_chain",message:`${a.label}工序链覆盖不足:仅识别到 ${b.hits.join("、")||"未识别到关键工序"}`,suggestion:a.prompt,chapterId:b.chapter.id,provenance:{detectorId:"construction-org-professional-chain",fingerprint:(0,f.c6)(`insufficient\u0000${b.domain}\u0000${b.chapter.id}`)}})}return d}function G(a){let b=`${a.title} ${(a.sections||[]).join(" ")} ${(a.queries||[]).join(" ")}`,c=(0,d.V5)(u,v([a])).filter(a=>a.pattern.test(b));return 0===c.length?"":["【隐藏高分模块触发】",...c.map(a=>`- ${a.title}:${a.prompt}`)].join("\n")}function H(a){let b=a.split("\n"),c=b.findIndex(a=>/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目主要施工\s*内容|主要施工\s*内容)\s*$/u.test(a.trim()));if(c<0){let a=b.findIndex(a=>/^###\s+(?:\d+(?:\.\d+)*\s+)?[^\n]*主要施工\s*内容[^\n]*$/u.test(a.trim()));if(a>=0){let d=b.length;for(let c=a+1;c<b.length;c+=1)if(/^#{2,3}\s+/u.test(b[c].trim())){d=c;break}let e=b.slice(a,d).join("\n").split(/^####\s+/gmu).slice(1).map(a=>a.trim()).filter(Boolean);e.length>=5&&e.every(f.az)&&(c=a)}if(c<0)return""}let d=b.length;for(let a=c+1;a<b.length;a+=1)if(/^#{2,3}\s+/u.test(b[a].trim())){d=a;break}return b.slice(c,d).join("\n").replace(/^\*\*([^*\n]{2,50})\*\*\s*$/gmu,"#### $1").replace(/承包人法(?=[::])/gu,"施工方法")}function I(a){let b=a.replace(/^####\s+(?:\d+(?:\.\d+)*\s+)?(?:项目主要施工\s*内容|主要施工\s*内容)\s*\n+/mu,""),c=(b.match(/^####\s+(?:\d+(?:\.\d+)*\s+)?[一二三四五六七八九十\d]*[、..]?\s*\S+/gmu)||[]).length||(b.match(/^[一二三四五六七八九十]+、\S+/gmu)||[]).length,d=b.split(/^####\s+/gmu).slice(1).map(a=>h(a)).filter(Boolean),g=d.filter(a=>!O(a)&&!(0,f.az)(a)),i=d.filter(a=>/资料内容事实|#{2,6}\s+|^\*\*[^*]+\*\*$|未尽事宜|专业施工内容统筹|招标范围还包含|具备有效的.*资质/um.test(a)),j=d.filter(a=>{if(!/施工方法[::]/u.test(a))return!1;let b=a.match(/施工方法[::]([\s\S]*?)(?=\n施工|$)/u)?.[1]||"";return b.length<30||(b.match(/工程|维修|改造|安装|设备/gu)||[]).length>=4&&!/\d|㎡|m2|m²|mm|厚|验收|检测|调试|试验|复试|记录|报告/u.test(b)}),k=d.filter(a=>{let b=a.match(/施工流程[::]([\s\S]*?)(?=\n施工方法|$)/u)?.[1]||"";return/未尽事宜|本项目为|总建筑面积|保留现状|专业施工内容统筹|招标文件列明|招标范围/u.test(b)}),l=d.map(a=>(a.split("\n")[0]||"").replace(/^\d+(?:\.\d+)*\s+/u,"").replace(/工程$/u,"").replace(/[、..]/gu,"").trim()),n=[...new Set(l.filter((a,b)=>a&&l.indexOf(a)!==b))],o=d.filter(a=>m(a,e.Ck.minParamsPerPackage)),p=!(0,f.Z1)(a),q=(a.match(/\d+(?:\.\d+)?\s*(?:㎡|m²|mm|cm|m|MPa|kPa|%|日历天|层|台|套|个|座|项|批|次|小时|年)/giu)||[]).length,r=(a.match(/工程量|材料|设备|范围|流程|验收|检测|复试|调试|隐蔽|检验批|资料|记录|系统|部位|接口|规格|标准/gu)||[]).length,s=a.split(/\r?\n/u).filter(a=>/^\s*\|.+\|\s*$/u.test(a.trim())),t=a.split(/\r?\n/u).filter(a=>!/^\s*\|.+\|\s*$/u.test(a.trim())).join("").replace(/[\s#*_`>-]/gu,"").length;return{packageCount:c,packageBlocks:d,incompletePackages:g,duplicateTitles:n,genericReferencePackages:o,dirtyPackages:i,weakMethodPackages:j,dirtyProcessPackages:k,missingProcessSequence:p,parameterCount:q,factDetailCount:r,tableCarried:s.length>=3&&t<50}}function J(a){return Math.max(0,3-a.packageCount)+a.incompletePackages.length+a.genericReferencePackages.length+a.dirtyPackages.length+a.weakMethodPackages.length+a.dirtyProcessPackages.length+a.duplicateTitles.length+ +!!a.missingProcessSequence+ +(a.parameterCount<2||a.factDetailCount<12)+ +!!a.tableCarried}function K(a,b=""){let c=b||a.map(a=>`${a.title}
200
200
  ${(a.sections||[]).join("\n")}
201
201
  ${a.content}`).join("\n\n"),d=a.filter(a=>/项目主要施工内容|主要施工内容/u.test(`${a.title} ${(a.sections||[]).join(" ")}`)),e=/施工组织设计|施工组织|计划工期|质量标准|项目经理|工程概况/u.test(c)&&/施工/u.test(c),f=0;if(0===d.length&&e){let a=H(c);return a?J(I(a)):1}for(let a of d){let b=H(a.content)||H(c);if(!b){f+=1;continue}f+=J(I(b))}return f}function L(a,b=""){let c=[],d=b||a.map(a=>`${a.title}
@@ -208,15 +208,15 @@ ${a.content}`).join("\n\n"),g=a.filter(a=>e.gG.test(`${a.title} ${(a.sections||[
208
208
  ${a.content}`);if(!e){c.push({level:"error",severity:"blocker",message:`${a.title} 分部分项工程施工方案小节缺失或标题结构异常`,suggestion:"主要施工方法章下必须逐项展开分项工程方案:既可用「### 主要分部分项工程施工方案」包装后在内部使用「#### 分项工程方案」,也可章下 H3 小节直接承载各分项方案。",chapterId:a.id,provenance:{detectorId:"construction-org-division-section",fingerprint:(0,f.c6)(a.title)}});continue}h(a.title,e,a.id)}return c}function V(a,b=""){let c=b||a.map(a=>`${a.title}
209
209
  ${(a.sections||[]).join("\n")}
210
210
  ${a.content}`).join("\n\n"),d=a.filter(a=>e.gG.test(`${a.title} ${(a.sections||[]).join(" ")}`));if(0===d.length){let a=N(c);return a?T(S(a)):0}let f=0;for(let a of d){let b=N(/^##\s+/mu.test(a.content)?a.content:`## ${a.title}
211
- ${a.content}`);f+=b?T(S(b)):1}return f}let W=/^####\s+(?:\d+(?:\.\d+)*\s+)?(?:施工概况|施工流程|施工方法|工艺流程)(?:[::]|\s*$)/u;function X(a){let b=[];return a.scope||b.push("作业对象与工程量"),a.process||b.push("工序顺序"),a.method||b.push("施工方法"),b.join("、")}function Y(a){let b=a.split(/\r?\n/u),c=[],d=(a,c)=>{for(let d=a;d<b.length;d+=1){let a=/^(#{1,6})\s+/u.exec(b[d].trim());if(a&&a[1].length<=c)return d}return b.length};for(let a=0;a<b.length;a+=1){let f=/^##\s+(.+)$/u.exec(b[a].trim());if(f){let g=f[1].trim();if(!e.Yp.test(g)&&!e.gG.test(g))continue;let h=d(a+1,2),i=[];for(let c=a+1;c<h;c+=1)/^###\s+/u.test(b[c].trim())&&i.push(c);if(0===i.length){c.push({title:g,startLine:a+1,endLine:h});continue}for(let a=0;a<i.length;a+=1){let d=i[a],e=a+1<i.length?i[a+1]:h;c.push({title:b[d].trim().replace(/^###\s+/u,""),startLine:d+1,endLine:e})}continue}let g=/^###\s+(.+)$/u.exec(b[a].trim());if(g){let b=g[1].trim();if(!e.Yp.test(b)&&!e.gG.test(b))continue;let f=d(a+1,3);c.push({title:b,startLine:a+1,endLine:f})}}return c}function Z(a){let b=a.split(/\r?\n/u);return Y(a).map(a=>({title:a.title,bodyLines:b.slice(a.startLine,a.endLine)}))}function $(a){let b=[],c=(a,c,d)=>{let e=d.includes("作业对象")?"作业对象与工程量(本项目部位、规模/工程量、系统边界,工程量取工程量清单汇总值)":"",f=d.includes("工序")?"工序顺序(先后清晰,至少 1 处不少于 4 个环节的工序顺序表达)":"",g=d.includes("施工方法")?"施工方法(工具机具、工艺参数、验收闭环)":"";b.push({level:"error",severity:"blocker",message:c?`「${a}」${c}专业工程块缺少三要素:${d}`:`「${a}」小节缺少三要素:${d}`,suggestion:`请在「${c||a}」补写缺失要素:${[e,f,g].filter(Boolean).join(";")}。要素融入连贯段落叙述,禁止以“施工概况/施工流程/施工方法”等结构标签充当标题或段落开头引导。`})};for(let b of Z(a)){let a=b.bodyLines.map((a,b)=>({line:a.trim(),offset:b})).filter(a=>/^####\s+/u.test(a.line));if(0===a.length||a.every(a=>W.test(a.line))){let a=X((0,f.se)(b.bodyLines.join("\n")));a&&c(b.title,"",a);continue}for(let d=0;d<a.length;d+=1){let e=a[d].offset,g=d+1<a.length?a[d+1].offset:b.bodyLines.length;if(W.test(a[d].line))continue;let h=a[d].line.replace(/^####\s+(?:\d+(?:\.\d+)*\s+)?/u,"").replace(/[::]\s*$/u,""),i=b.bodyLines.slice(e,g).join("\n"),j=X((0,f.se)(i));j&&c(b.title,h,j)}}return b}function _(a){let b=[];for(let c of Z(a)){let a=c.bodyLines.join("\n");if(!a.trim())continue;let d=a.split(/\r?\n/u).filter(a=>/^\s*\|.+\|\s*$/u.test(a.trim())),e=a.split(/\r?\n/u).filter(a=>!/^\s*\|.+\|\s*$/u.test(a.trim())).join("").replace(/[\s#*_`>-]/gu,"").length;d.length>=3&&e<50&&b.push({level:"error",severity:"blocker",message:`「${c.title}」小节不应使用 Markdown 表格承载专业工程正文`,suggestion:"主要施工内容/主要施工方法应采用三级小节与段落式专业工程写法:每个专业工程一个 #### 小节,覆盖作业对象与工程量、工序顺序、施工方法三方面要素;表格数据改写成连贯叙述。"});let f=[...new Set((a.match(/[^\n]{0,18}(?:分部小计|本页小计|按实(?!际|测|\d)|暂估|综合单价|规费|税金)[^\n]{0,18}/gu)||[]).map(a=>a.trim()))],g=[...new Set([...f,...new Set((a.match(/[^\n]{0,18}(?:措施项目费|措施项目[^\n]{0,8}(?:清单|计价|费率))[^\n]{0,18}/gu)||[]).map(a=>a.trim())),...new Set((a.match(/[^\n]{0,10}(?:合计|小计)[^\n]{0,16}(?:㎡|m²|m2|m³|m3|吨|t|项|处|座|樘)/gu)||[]).map(a=>a.trim()))])];g.length>0&&b.push({level:"error",severity:"blocker",message:`「${c.title}」小节正文含工程量清单内部口径词:${g.slice(0,6).join(";")}`,suggestion:"“分部小计/本页小计/合计/按实/暂估/综合单价/措施项目费/规费/税金”等清单计价表专用口径不得进入正式正文:工程量只写清单汇总的项目总量(数值与工程量清单一致),删除全部清单内部口径行。"})}return b}function aa(a){let b=Y(a);if(0===b.length)return{markdown:a,fixedCount:0,details:[]};let c=a.split(/\r?\n/u),d=[];for(let a of b)for(let b=a.startLine;b<Math.min(a.endLine,c.length);b+=1){let a=c[b];if(!a||/^\s*\|.+\|\s*$/u.test(a.trim())||/^#{1,6}\s+/u.test(a.trim()))continue;let e=a.replace(/(合计|小计)(?=[^\n]{0,16}(?:㎡|m²|m2|m³|m3|吨|t|项|处|座|樘))/gu,"");e!==a&&(d.push(`「${a.trim().slice(0,36)}」→「${e.trim().slice(0,36)}」`),c[b]=e)}return 0===d.length?{markdown:a,fixedCount:0,details:[]}:{markdown:c.join("\n"),fixedCount:d.length,details:d}}},41618:(a,b,c)=>{c.r(b),c.d(b,{FIGURE_DIR_NAME:()=>h,default:()=>j});var d=c(73024),e=c(76760),f=c(48661),g=c(89900);let h="figures",i=/^[A-Za-z0-9._-]+\.svg$/u;function j(a,b){try{let c="string"==typeof a.query.id?a.query.id:"",j="string"==typeof a.query.name?a.query.name:"";if(!c||!j)return b.status(400).json({error:"id and name required"});if(!i.test(j))return b.status(400).json({error:"图件名不合法(只允许 [A-Za-z0-9._-]+.svg)"});let k="string"==typeof a.query.projectRoot?a.query.projectRoot:void 0,l=e.resolve((0,f.Gl)(k),"assets"),m=e.resolve(l,h,j);if(!(0,g.kq)(m,l))return b.status(403).json({error:"PATH_DENIED"});if(!d.existsSync(m)||!d.statSync(m).isFile())return b.status(404).json({error:"figure not found"});let n=d.readFileSync(m);return b.setHeader("Content-Type","image/svg+xml; charset=utf-8"),b.setHeader("Cache-Control","no-store"),b.status(200).send(n)}catch(c){return console.error(`[api] documents/generated/[id]/figure/[name] doc=${a.query.id}`,c),b.status(500).json({error:c instanceof Error?c.message:"Internal server error"})}}},42750:(a,b,c)=>{c.d(b,{G0:()=>w,Qg:()=>x,d8:()=>s});var d=c(37047),e=c(30836),f=c(11628);let g=RegExp(String.raw`([\u4e00-\u9fa5A-Za-z0-9()()]{1,12}?)(\d+(?:\.\d+)?)\s*(${f.YC})([\u4e00-\u9fa5A-Za-z0-9()()]{0,8})`,"gu"),h=["直径","厚度","宽度","长度","高度","深度","间距","距离","标高","偏差","数量","面积","体积","重量","压力","温度","强度","等级","坡度","规格","尺寸","层数","次数","跨度","半径","总长","全长"],i=["以内","以外","以上","以下","之间","左右","以前","以后","之前","之后"],j=/^(?:主要|本工程|本项目|全项目)?(?:作业对象|作业内容|施工内容|工作内容|工程内容|施工对象|施工范围|工程规模|建设内容|建设规模)为/u,k=/^(?:由)?责任[\u4e00-\u9fa5]{0,4}在(?:内)?完成/u,l=/自然村|村组|标段|区域|点位|养护|地上|地下|建筑高度|[\u4e00-\u9fa5]{1,4}组$/u,m=/^(?:局部|个别|少数|多数|大部分)/u,n=["开挖","封闭","回填","浇筑","铺筑","摊铺","供应","编制","提交","签订","安装","养护","试验","拆除","砌筑"],o=["直径","半径","穴径","胸径","地径","冠幅","厚度","宽度","长度","高度","深度","穴深","间距","距离","标高","坡度","跨度","株距","行距"];function p(a){return a.replace(/(?:mm|cm|m|MPa|kN|kV|kW|℃|元|万元|人|天|日|个|层|樘|处|套|台|t|吨)/gu,"").replace(/[\s,,、;;::()()]/gu,"")}function q(a,b){if(/[、/](?:与)?[A-Za-z]?\d/u.test(a))return!0;for(let c of a.matchAll(/[、/](?:与|和|及)?([\p{Script=Han}A-Za-z]{1,8})\d/gu))if(function(a,b){let c=p(a),d=p(b);return 0!==c.length&&0!==d.length&&!c.includes(d)&&!d.includes(c)}(c[1]||"",b))return!0;return!1}function r(a,b){let c=["。",";",";","\n"],d=0;for(let e of c){let c=a.lastIndexOf(e,b-1);c+1>d&&(d=c+1)}let e=a.length;for(let d of c){let c=a.indexOf(d,b);c>=0&&c<e&&(e=c)}return a.slice(d,e)}async function s(a){let b=function(a){let b=new Map,c=0;for(let d of a.split("\n")){let a=d.trim(),e=c;if(c+=d.length+1,!(/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a)))for(let a of d.matchAll(RegExp(g.source,"gu"))){let c=(a[1]||"").trim(),g=a[2],n=/\d+$/u.exec(c);if(n&&(c=c.slice(0,n.index).trim(),g=`${n[0]}${g}`),/月\s*$/u.test(c))continue;let o=Number(g),q=a[3]||"",r=a.index||0,s=(0,f.hr)(d,r),t=d.slice(s,(0,f.s6)(d,r+a[0].length,s)),u=r-s+(a[1]||"").length-(n?n[0].length:0),v=t.slice(u+g.length),w=v.indexOf(q),x=w>=0&&w<=2?v.slice(w+q.length):v,y=/[与和及][^与和及]{0,24}?\d/u.exec(x),z=y?x.slice(0,y.index):x,A=`${t.slice(0,u)}${z}`.replace(/[\s,,、;;::]/gu,""),B=A.replace(j,"").replace(k,""),C=B.length>=2?B:A;if(C.length<2||!/[\u4e00-\u9fa5A-Za-z]{2,}/u.test(C)||!Number.isFinite(o)||o<=0||h.some(a=>C===a||p(C)===a)||i.some(a=>p(C)===a)||l.test(C)||m.test(C))continue;if((0,f.b3)(t)){let a=(0,f.mc)(d,t);console.warn(`[gen] parameter-concept-conflict 残片跳过:对象名窗口「${t.trim()}」${a?`是「${a}」的截断`:"含未配对闭括号且本行找不到截断源"},数值 ${g}${q} 不参与口径互斥`);continue}let D={matchIndex:e+(a.index||0),valueOffset:function(a,b,c){if(!c)return a.indexOf(b);let d=a.lastIndexOf(c);if(d>=0){let c=d-b.length;if(c>=0&&a.slice(c,d)===b)return c;let e=RegExp(`(${b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")})\\s*$`,"u").exec(a.slice(0,d));if(e&&void 0!==e.index)return e.index}return a.indexOf(b)}(a[0],g,a[3]||""),valueText:g},E=b.get(a[0]);if(E){E.occurrences.push(D);continue}b.set(a[0],{concept:C,value:o,unit:q,raw:a[0],occurrences:[D]})}}return[...b.values()].slice(0,60)}(a);if(b.length<3)return{groups:[]};let c=[...new Set(b.map(a=>a.concept))];if(c.length<2)return{groups:[]};let s=await (0,d.VN)().embedDocuments(c);if(s.length!==c.length){let a=`本地语义模型嵌入数量不一致:期望 ${c.length} 条,实际 ${s.length} 条`;return console.warn(`[gen] parameter-concept-conflict degraded: ${a}`),{groups:[],degraded:{level:"warning",severity:"warning",category:"format",owner:"system",repairability:"manual_review",message:`参数概念口径冲突检测已降级跳过:${a}`,suggestion:"语义模型输出异常,本轮未执行该检测维度;可稍后重新生成复核。"}}}let t=new Map(c.map((a,b)=>[a,s[b]])),u=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=t.get(a),d=t.get(b);if(!c||!d||0===c.length||0===d.length)return 0;let e=Math.min(c.length,d.length),f=0;for(let a=0;a<e;a+=1)f+=c[a]*d[a];return f}),v=a=>{let b=a;for(;(u.get(b)||b)!==b;)b=u.get(b)||b;return b},w=new Map;for(let a of b){let b=v(a.concept),c=w.get(b)||[];c.push(a),w.set(b,c)}let x=[];for(let b of w.values()){if(b.length<2||Math.max(...b.map(a=>a.value))>4*Math.min(...b.map(a=>a.value)))continue;let c=new Map;for(let a of b){let b=c.get(a.unit)||[];b.push(a),c.set(a.unit,b)}for(let b of c.values()){if(b.length<2)continue;let c=new Map;for(let a of b){let b=o.find(b=>a.raw.includes(b))||"",d=c.get(b)||[];d.push(a),c.set(b,d)}for(let d of[...c.keys()].filter(a=>""!==a).length>=2&&!c.has("")?[...c.values()]:[b]){if(d.length<2)continue;let b=d.map(a=>n.find(b=>a.raw.includes(b))||"");if(b.length>=2&&b.every(a=>""!==a)&&new Set(b).size===b.length)continue;let c=d.map(a=>/^([\u4e00-\u9fa5]{2,})([一二三四五六七八九十]|\d+)$/u.exec(a.concept)).filter(a=>null!==a);if(c.length===d.length&&c.length>=2&&1===new Set(c.map(a=>a[1])).size&&new Set(c.map(a=>a[2])).size===c.length)continue;let f=d.map(a=>{let b=a.raw.indexOf("按每");return b>=0?a.raw.slice(0,b):null});if(f.every(a=>null!==a)&&!f.some((a,b)=>!!a&&f.some((c,d)=>b!==d&&!!c&&(a===c||a.includes(c)||c.includes(a))))||d.every(b=>b.occurrences.some(c=>/违约金|解除合同|提高至|自第|逾期超过/u.test(a.slice(Math.max(0,c.matchIndex-30),c.matchIndex+b.raw.length+40)))))continue;let g=[...new Set(d.map(a=>a.value))];if(g.length<2)continue;let h=Math.max(...g);if(h-Math.min(...g)<=.02*h)continue;let i=g.reduce((a,b)=>a+b,0);if([...new Set(d.flatMap(b=>b.occurrences.map(b=>r(a,b.matchIndex))))].some(b=>/(?:总量|合计|总计|共计)/u.test(b)&&/(?:其中|分别为|分为)/u.test(b)&&d.every(c=>c.occurrences.some(c=>r(a,c.matchIndex)===b))&&[...b.matchAll(/\d+(?:\.\d+)?/gu)].some(a=>Math.abs(Number(a[0])-i)<=Math.max(.5,.01*i)))||d.filter(b=>b.occurrences.some(c=>{let d=a.slice(c.matchIndex,c.matchIndex+b.raw.length+12),e=a.slice(Math.max(0,c.matchIndex-12),c.matchIndex);return q(d,b.concept)||q(e,b.concept)})).length>=2||d.length>=2&&d.every((a,b)=>d.every((c,d)=>{if(b>=d||a.value===c.value)return!0;let f=a.concept.length<=c.concept.length?a.concept:c.concept,g=a.concept.length<=c.concept.length?c.concept:a.concept;if(f.length>=4&&f.length<g.length&&g.endsWith(f)&&/^[板梁柱墙底顶]/u.test(f))return!0;let h=(0,e.Qk)(a.concept,c.concept);if(h.length<2)return!1;let i=a.concept.slice(h.start,h.end),j=a.concept.replace(i,""),k=c.concept.replace(i,"");return j.length>0&&k.length>0&&!j.includes(k)&&!k.includes(j)})))continue;let j=d.map(b=>new Set(b.occurrences.map(b=>r(a,b.matchIndex))));if(j.length>=2&&j.every(a=>a.size>0)&&j.every(a=>a.size===j[0].size&&[...a].every(a=>j[0].has(a)))){let a=[...new Set(d.map(a=>p(a.concept)))];if(a.length===d.length&&a.every((b,c)=>a.every((a,d)=>c===d||!b.includes(a)&&!a.includes(b))))continue}if(x.push({concept:d[0].concept,values:d}),x.length>=4)break}if(x.length>=4)break}if(x.length>=4)break}return{groups:x}}function t(a){return a.replace(/㎡/gu,"m2").replace(/m²/giu,"m2").replace(/m³/giu,"m3").replace(/\s+/gu,"").toLowerCase()}function u(a){return a.replace(/[((][^))]*[))]/gu,"").replace(/[\s,,、;;::]/gu,"")}function v(a,b){let c=b.entries??b.billFactLock?.entries??[];if(0===c.length)return[];let d=Math.max(.01,.001*a.value),e=t(function(a){let b=a.occurrences[0];if(!b)return a.unit;let c=a.raw.indexOf(b.valueText);return c<0?a.unit:a.raw.slice(c+b.valueText.length)||a.unit}(a)),f=a.occurrences.map(a=>b.markdown.slice(Math.max(0,a.matchIndex-48),a.matchIndex+a.valueOffset+a.valueText.length+48)).join("\n"),g=[];for(let b of c){if(!Number.isFinite(b.quantity)||b.quantity<=0||Math.abs(b.quantity-a.value)>d)continue;let c=t(b.unit);if(e&&c&&e!==c)continue;let h=function(a,b){let c=u(a),d=u(b);if(c.length<2||d.length<2)return!1;if(c===d)return!0;let e=c.length<=d.length?c:d,f=c.length<=d.length?d:c;return e.length>=3&&f.includes(e)}(b.name,a.concept),i=b.villageGroup.trim().length>=2&&f.includes(b.villageGroup.trim());if((h||i)&&(g.push({entry:b,nameRelated:h}),g.length>=8))break}return g}function w(a,b){if(a.values.length<2)return{verdict:"no-anchor"};let c=b.billFactLock?.entries??[],d=function(a){if(!a)return[];let b=[],c=1,d=(a,d,e,f,g)=>{b.push({seq:c,name:a,description:"",quantity:d,unit:e,section:"",subsection:g,villageGroup:g,sourceFile:f,specQuantityPairs:[]}),c+=1};for(let[b,c]of Object.entries(a)){let a=c.unit||"",e=c.sourceFile||"";for(let f of(Number.isFinite(c.value)&&c.value>0&&d(b,c.value,a,e,""),c.groups||[]))Number.isFinite(f.value)&&!(f.value<=0)&&d(`${b}(${f.group})`,f.value,a,e,f.group)}return b}(b.blueprintQuantities);if(0===c.length&&0===d.length)return{verdict:"no-anchor"};let e=a.values.map(a=>({value:a,matches:v(a,{markdown:b.markdown,entries:[...c,...d]}),billMatches:v(a,{markdown:b.markdown,entries:c})}));if(e.every(a=>a.matches.length>0)&&e.every((a,b)=>e.every((c,d)=>b===d||!a.matches.some(a=>c.matches.some(b=>b.entry.seq===a.entry.seq)))))return{verdict:"distinct-lock-entries",entries:e.map(a=>`「${a.matches[0].entry.name}」(${a.value.value}${a.value.unit})`).join("、")};let f=e.filter(a=>a.billMatches.length>0),g=e.filter(a=>0===a.matches.length);if(1===f.length&&g.length>0&&f.length+g.length===e.length){let a=f[0].billMatches.find(a=>a.nameRelated);if(a)return{verdict:"single-lock-entry",lockValue:a.entry.quantity,lockUnit:a.entry.unit,entryName:a.entry.name,nonLock:g.map(a=>a.value)}}return{verdict:"no-anchor"}}async function x(a,b){let c=await s(a);if(c.degraded)return[c.degraded];if(0===c.groups.length)return[];let d=[],e=[];for(let f of c.groups){let c=w(f,{markdown:a,billFactLock:b?.billFactLock,blueprintQuantities:b?.blueprintQuantities});"distinct-lock-entries"===c.verdict?e.push({group:f,entries:c.entries}):d.push(f)}let f=[];if(d.length>0){let a=d.map(a=>`“${a.concept}”出现多个口径:${[...new Set(a.values.map(a=>a.raw))].slice(0,3).join("、")}`);f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`同一参数概念出现多口径数值冲突:${a.join(";")}`,suggestion:"以绑定资料(图纸/清单/规范)裁决口径为准统一数值表述:每个参数概念全文只保留一个口径数值,删除矛盾表述。"})}return e.length>0&&f.push({level:"info",severity:"suggestion",category:"fact_consistency",owner:"system",repairability:"not_repair_needed",message:`参数概念多口径已裁决为不同清单条目口径(不构成冲突):${e.map(({group:a,entries:b})=>`“${a.concept}”对应${b}`).join(";")}`,suggestion:"各数值分别对应不同的工程量清单条目,正文已带条目名区分,无需处理。"}),f}},44505:(a,b,c)=>{c.d(b,{$$:()=>e.$$,$h:()=>f.$h,AD:()=>e.AD,BR:()=>f.BR,CJ:()=>e.CJ,Co:()=>f.Co,Dq:()=>d.Dq,EJ:()=>f.EJ,EN:()=>f.EN,Et:()=>e.Et,Fd:()=>f.Fd,Fr:()=>e.Fr,GG:()=>d.GG,GI:()=>f.GI,H:()=>e.H,IJ:()=>e.IJ,Ih:()=>e.Ih,JF:()=>f.JF,KE:()=>e.KE,LA:()=>e.LA,MM:()=>e.MM,N$:()=>f.N$,ON:()=>e.ON,P3:()=>d.P3,Pl:()=>f.Pl,Pt:()=>d.Pt,QM:()=>f.QM,Qc:()=>f.Qc,RD:()=>f.RD,Rv:()=>e.Rv,SZ:()=>f.SZ,Tz:()=>e.Tz,Vc:()=>f.Vc,Vl:()=>e.Vl,Vw:()=>f.Vw,WB:()=>f.WB,WY:()=>e.WY,X_:()=>e.X_,Xc:()=>e.Xc,Y4:()=>f.Y4,YN:()=>e.YN,_D:()=>f._D,__:()=>f.__,a8:()=>e.a8,bq:()=>e.bq,br:()=>f.br,cJ:()=>e.cJ,cT:()=>e.cT,cf:()=>e.cf,cl:()=>e.cl,cv:()=>e.cv,dF:()=>e.dF,dW:()=>f.dW,dc:()=>d.dc,eS:()=>e.eS,ek:()=>e.ek,ev:()=>e.ev,ex:()=>e.N$,fE:()=>f.fE,fI:()=>f.fI,fK:()=>f.fK,fQ:()=>e.fQ,fg:()=>e.fg,g4:()=>f.g4,gD:()=>f.gD,gk:()=>f.gk,hI:()=>d.hI,hu:()=>e.hu,iY:()=>e.iY,ir:()=>f.ir,iy:()=>e.iy,jP:()=>e.jP,kp:()=>f.kp,l4:()=>e.l4,lR:()=>f.lR,m6:()=>e.m6,mB:()=>e.mB,mC:()=>e.Ve,mG:()=>f.mG,nL:()=>f.nL,nW:()=>f.nW,nm:()=>e.nm,qE:()=>e.qE,qG:()=>f.qG,qj:()=>f.qj,r8:()=>e.r8,rA:()=>e.rA,rU:()=>f.rU,r_:()=>f.r_,s3:()=>e.s3,sn:()=>e.sn,u2:()=>e.u2,uL:()=>f.uL,ub:()=>e.ub,vH:()=>e.vH,x5:()=>e.x5,xR:()=>e.xR,y2:()=>e.y2,y4:()=>f.y4,yV:()=>f.yV,z4:()=>d.z4,zP:()=>e.zP,zj:()=>f.zj});var d=c(12863),e=c(35547),f=c(32691)},45304:(a,b,c)=>{c.d(b,{LU:()=>t,O$:()=>s,T$:()=>q,l1:()=>u,mf:()=>r,t1:()=>l});var d=c(73024),e=c.n(d),f=c(48161),g=c.n(f),h=c(76760),i=c.n(h),j=c(32374),k=c(89759);let l=1;function m(a){return i().join(function(a){if(a&&a.trim().length>0)return i().resolve(a);let b=process.env.CUSTOMIZE_AGENT_HOME;return b&&b.trim().length>0?i().resolve(b):g().homedir()}(a),".customize-agent","skills")}function n(a,b){return i().join(m(b),`${a}.json`)}let o=["match","requires","structure","forbidden","knowledge","acceptance","examples"];function p(a){var b;if(a.skill)return{skill:{...a.skill,enabled:a.enabled},kind:"user"};let c=(0,j.LB)(a.id);if(c)return{skill:{...(b=a.overrides??{},{...c,...void 0!==b.match?{match:b.match}:{},...void 0!==b.requires?{requires:b.requires}:{},...void 0!==b.structure?{structure:b.structure}:{},...void 0!==b.forbidden?{forbidden:b.forbidden}:{},...void 0!==b.knowledge?{knowledge:b.knowledge}:{},...void 0!==b.acceptance?{acceptance:b.acceptance}:{},...void 0!==b.examples?{examples:b.examples}:{},enabled:c.enabled}),enabled:a.enabled},kind:"override"}}function q(a,b){let c=j.d7.some(b=>b.id===a.id),d=function(a,b){let c=[];if(("string"!=typeof a.id||0===a.id.trim().length)&&c.push({code:"record-id-invalid",message:"记录 id 不得为空"}),a.v!==l&&c.push({code:"record-version-invalid",message:`记录版本须为 ${l},当前 ${String(a.v)}`}),"boolean"!=typeof a.enabled&&c.push({code:"override-shape",message:'enabled 必须显式为布尔值("没写"与"禁用"不能同形)'}),void 0!==a.overrides)for(let b of Object.keys(a.overrides))o.includes(b)||c.push({code:"override-unknown-field",message:`覆盖字段「${b}」不合法(合法字段:${o.join("/")})`});return void 0!==a.skill&&b.isBuiltin&&c.push({code:"builtin-skill-not-persistable",message:`「${a.id}」是内置技能:F.3 要求内置技能不落盘(随应用版本),只落用户的覆盖/禁用——请改用 overrides 或 enabled`}),void 0!==a.skill&&(a.skill.id!==a.id&&c.push({code:"stored-skill-id-mismatch",message:`记录 id「${a.id}」与技能 id「${a.skill.id}」不一致(文件名即 id,不一致会让读取定位到别的技能)`}),"user"!==a.skill.source&&c.push({code:"stored-skill-source",message:`落盘的自建技能 source 必须为 'user',当前 '${a.skill.source}'`})),void 0===a.skill&&void 0===a.overrides&&!1!==a.enabled&&c.push({code:"stored-skill-missing",message:"记录既没有 skill(自建)也没有 overrides(覆盖),且 enabled 不是 false——这样一条空记录落盘只会污染技能库"}),void 0!==a.skill||void 0===a.overrides||b.isBuiltin||c.push({code:"overrides-not-applicable",message:`overrides 只用于覆盖**内置**技能,而「${a.id}」不是内置 id——用户自建技能请写完整契约(skill 字段)`}),c}(a,{isBuiltin:c}),f=0===d.length?p(a):void 0;if(0===d.length)if(f)for(let a of(0,k.Yb)(f.skill).errors)d.push({code:"skill-invalid",message:`${a.path||"(root)"}:${a.message}`});else d.push({code:"stored-skill-missing",message:`既不是内置 id「${a.id}」,记录里也没有 skill 字段——无法确定这条记录要覆盖谁`});if(d.length>0)return{ok:!1,errors:d};let g=m(b),h=n(a.id,b),i={v:l,id:a.id,enabled:a.enabled,...a.skill?{skill:a.skill}:{},...a.overrides?{overrides:a.overrides}:{},updatedAt:a.updatedAt??Date.now()};try{e().mkdirSync(g,{recursive:!0});let a=`${h}.tmp`;e().writeFileSync(a,`${JSON.stringify(i,null,2)}
212
- `,"utf8"),e().renameSync(a,h)}catch(a){return d.push({code:"skill-invalid",message:`写入 ${h} 失败:${a instanceof Error?a.message:String(a)}`}),{ok:!1,errors:d}}return{ok:!0,path:h,record:i}}function r(a,b){try{let c=e().readFileSync(n(a,b),"utf8"),d=JSON.parse(c);if(d?.v!==l||"string"!=typeof d.id)return;return d}catch{return}}function s(a,b){try{return e().unlinkSync(n(a,b)),!0}catch{return!1}}function t(a){let{records:b,invalid:c}=function(a){let b,c=m(a),d=[];try{b=e().readdirSync(c).filter(a=>a.endsWith(".json"))}catch{return{records:[],invalid:d}}let f=[];for(let a of b.sort()){let b=i().join(c,a);try{let c=JSON.parse(e().readFileSync(b,"utf8"));if(c?.v!==l){d.push({file:b,reason:`记录版本 ${String(c?.v)} 与当前 ${l} 不符`});continue}if("string"!=typeof c.id||0===c.id.length){d.push({file:b,reason:"记录缺少 id"});continue}if(c.id!==a.replace(/\.json$/u,"")){d.push({file:b,reason:`文件名与记录 id「${c.id}」不一致`});continue}f.push(c)}catch(a){d.push({file:b,reason:`解析失败:${a instanceof Error?a.message:String(a)}`})}}return{records:f,invalid:d}}(a),d=new Map;for(let a of b)d.set(a.id,a);let f=[];for(let a of j.d7){let b=d.get(a.id);if(!b){f.push(a);continue}let c=p(b);f.push(c?c.skill:{...a,enabled:b.enabled})}for(let a of b){if(j.d7.some(b=>b.id===a.id))continue;let b=p(a);b&&f.push(b.skill)}return{skills:f,records:b,invalid:c}}function u(a){return t(a).skills}},45984:(a,b,c)=>{c.d(b,{l:()=>n});var d=c(30355),e=c(44505),f=c(85016),g=c(40299),h=c(23760),i=c(22157),j=c(69527);let k=[...d.P9.filter(a=>!i.Kd.includes(a)),...f.D$.source.split("|")],l=["WRITER_MISSING_SECTION","Writer 未完成"],m=[/:\s*:/u,/;:/u,/。:/u,/。;/u,/;。/u,/。,/u,/,。/u,/。{2,}/u,/、{2,}/u];function n(a,b){let c=[];g.kt.test(a)&&c.push("资料来源罗列句");let d=k.filter(b=>a.includes(b));for(let b of(d.length>0&&c.push(`内部术语“${d.join("”“")}”`),a.matchAll(e.eS)))c.push(`具体日历日期“${b[1]}年${b[2]}月${b[3]}日”`);let f=[...new Set(a.match(e.Ih)||[])];f.length>0&&c.push(`叠词“${f.join("”“")}”`);let i=l.filter(b=>a.includes(b));i.length>0&&c.push(`未完成小节标记“${i.join("”“")}”`),(0,e.nm)(a).length>0&&c.push("元话语声明句"),(0,e.ON)(a).length>0&&c.push("公式形态残留"),(0,e.WY)(a).length>0&&c.push("装饰层工艺参数异常"),(j.IA.filter(b=>b.test(a)).length>0||(0,h.Qm)(a).length>0)&&c.push("占位符"),m.some(b=>b.test(a))&&c.push("截断句残留双冒号"),(0,h.vZ)(a).length>0&&c.push("句读标点叠用/括号不闭合");let n=a.split(/\r?\n/u).map(a=>a.trim()).filter(Boolean),o=n.filter(a=>/^#{2,6}\s+\S/u.test(a)),p=o.filter(a=>/[((]\s*(?:\d{1,3}|[一二三四五六七八九十]{1,3})\s*[))]\s*$/u.test(a));p.length>0&&c.push(`防撞名后缀标题“${p[0]}”`);let q=o.filter(a=>/^####\s+\d+\.\d+(?!\.)\s+\S/u.test(a));if(q.length>0&&c.push(`小节标题降级形态“${q[0]}”`),n.some((a,b)=>b>0&&/^#{2,6}\s+\S/u.test(a)&&/^#{2,6}\s+\S/u.test(n[b-1]))&&c.push("连续标题堆叠(空节风险)"),n.length>1&&/^#{2,6}\s+\S/u.test(n[n.length-1])&&c.push("尾部裸标题(空节风险)"),b){let d=a=>[...a.matchAll(/^###\s+(\S.*)$/gmu)].map(a=>(a[1]||"").trim()),e=d(b),f=d(a);if(f.length<e.length)c.push("删除小节标题");else if(e.length>0){let b=a=>a.replace(/^\d+(?:\.\d+)*\s+/u,"").trim(),d=new Set(f.map(b)),g=[...a.matchAll(/^#{4,6}\s+(.+)$/gmu)].map(a=>b(a[1]||"")),h=[...a.matchAll(/^\*\*(.+)\*\*\s*$/gmu)].map(a=>(a[1]||"").trim()),i=e.map(b).filter(a=>a&&!d.has(a)&&(g.includes(a)||h.includes(a)));i.length>0&&c.push(`小节标题降级“${i[0]}”`)}}return c}},47843:(a,b,c)=>{c.d(b,{y:()=>h});var d=c(37047),e=c(23760),f=c(52437),g=c(98632);async function h(a){let b=a.items.map(a=>a.trim()).filter(Boolean);if(0===b.length)return{total:0,met:0,partial:0,missing:0,simulatedScore:0,criteria:[]};let c=(0,g.KP)(a.markdown),h=(0,g.Uv)(a.markdown).map(a=>a.heading).filter(Boolean),i=(0,f.Js)(a.markdown).join(""),j=await (0,d.Mv)([...c,...h],b,a.embedDocuments),k=b.map((a,b)=>{let f=(0,e.pG)(a),g=f.length>0&&f.some(a=>i.includes(a)),k="",l=0;for(let b of c){let c=j(b,a);c>l&&(l=c,k=b)}if(g||l>=d.Eh)return{index:b,title:a,status:"met",similarity:l,anchor:k?k.split("\n")[0].replace(/^#{1,6}\s+/u,"").slice(0,80):void 0};let m="",n=0;for(let b of h){let c=j(b,a);c>n&&(n=c,m=b)}return n>=d.Eh?{index:b,title:a,status:"partial",similarity:n,anchor:m.replace(/^#{1,6}\s+/u,"").slice(0,80)}:{index:b,title:a,status:"missing",similarity:n}}),l=k.filter(a=>"met"===a.status).length,m=k.filter(a=>"partial"===a.status).length,n=k.filter(a=>"missing"===a.status).length,o=Math.round((l+.5*m)/k.length*100);return{total:k.length,met:l,partial:m,missing:n,simulatedScore:o,criteria:k}}},48479:(a,b,c)=>{c.d(b,{Ng:()=>y,T1:()=>i,Ts:()=>j,Wl:()=>x,bg:()=>m,bv:()=>p,ku:()=>k,sI:()=>h,sf:()=>t});var d=c(51750),e=c(66764),f=c(80439);let g={prepare:{type:"prepare",title:"准备"},understand:{type:"understand",title:"理解资料"},plan:{type:"plan",title:"规划结构"},blueprint:{type:"blueprint",title:"派生蓝图"},write:{type:"write",title:"逐章写作"},close:{type:"close",title:"全篇收口"},deliver:{type:"deliver",title:"交付"}};function h(a,b,c="completed"){let d=g[b];x(a,{batch:{prepare:"generation.prepare",understand:"generation.understanding",plan:"generation.planning",blueprint:"generation.blueprint",write:"generation.write",close:"finalize.pipeline",deliver:"finalize.delivery"}[b],id:i(b),type:d.type,title:d.title,status:c})}function i(a){return`phase:${a}`}function j(a){return`chapter:${a}`}function k(a,b){return void 0===b?`round:${a}`:`round:${a}#${b}`}let l={running:"running",success:"completed",failed:"failed",partial:"repairing",skipped:"blocked"};function m(a,b={}){let c;try{c=(0,d.g0)(a,b.baseDir)}catch{return 0}let f=new Map;for(let a of c){if(!a?.id)continue;let b=f.get(a.id);f.set(a.id,b?{...b,...a}:a)}let g=new Map;for(let a of f.values())a.parentId&&g.set(a.parentId,[...g.get(a.parentId)??[],a]);let h=new Set(["round.decide","round.observe"]),i=0;for(let[c,j]of f){if("running"!==j.status)continue;let f=g.get(c)??[];if(0===f.length){if(!h.has(j.type))continue;(0,d.Rr)(a,{id:c,status:"completed",metrics:{closedBySweep:!0,closedRecordNode:!0}},{baseDir:b.baseDir}),i+=1;continue}if(f.some(a=>!n.has(a.status)))continue;let k=(0,e.TY)(f.map(a=>a.status))??"completed";(0,d.Rr)(a,{id:c,status:k,metrics:{closedBySweep:!0,closedChildren:f.length}},{baseDir:b.baseDir}),i+=1}return i}let n=new Set(["completed","failed","blocked","paused"]),o={"generation.prepare":{phase:"prepare",typeByStageType:{role_binding:"prepare",validation:"prepare",file_understanding:"prepare"},fallbackType:"prepare",parent:"phase",perRound:!1},"generation.understanding":{phase:"understand",typeByStageType:{knowledge_retrieval:"understand",file_understanding:"understand",fact_extraction:"understand",validation:"understand",reference:"understand"},fallbackType:"understand",parent:"phase",perRound:!1},"generation.planning":{phase:"plan",typeByStageType:{validation:"plan",role_binding:"plan",knowledge_retrieval:"plan",fact_extraction:"plan"},fallbackType:"plan",parent:"phase",perRound:!1},"generation.blueprint":{phase:"blueprint",typeByStageType:{validation:"blueprint",file_understanding:"blueprint",chapter_generation:"blueprint"},fallbackType:"blueprint",parent:"phase",perRound:!1},"generation.write":{phase:"write",typeByStageType:{chapter_generation:"write",knowledge_retrieval:"understand"},fallbackType:"write",parent:"phase",perRound:!1},"finalize.rebuild":{phase:"close",typeByStageType:{validation:"close",fact_extraction:"close",reference:"close",knowledge_retrieval:"close"},fallbackType:"close",parent:"phase",perRound:!1},"finalize.repairRounds":{phase:"close",typeByStageType:{validation:"round.fix",reference:"round.fix",llm_review:"round.decide"},fallbackType:"round.fix",parent:"round-by-role",perRound:!1},"finalize.repairHistory":{phase:"close",typeByStageType:{validation:"round.fix",reference:"round.fix",llm_review:"round.decide"},fallbackType:"round.fix",parent:"round-by-role",perRound:!0},"finalize.qualityGates":{phase:"close",typeByStageType:{validation:"close",llm_review:"close",reference:"close",fact_extraction:"close"},fallbackType:"close",parent:"phase",perRound:!1},"finalize.delivery":{phase:"deliver",typeByStageType:{validation:"deliver",reference:"deliver",fact_extraction:"deliver"},fallbackType:"deliver",parent:"phase",perRound:!1},"finalize.pipeline":{phase:"deliver",typeByStageType:{reference:"deliver",validation:"deliver",fact_extraction:"deliver"},fallbackType:"deliver",parent:"phase",perRound:!1},"document.lifecycle":{phase:"prepare",typeByStageType:{validation:"prepare",reference:"prepare"},fallbackType:"prepare",parent:"phase",perRound:!1}};function p(a,b,c){if(a)return v(a,c).seqById.get(b)}function q(a){let b=a.replace(/[^A-Za-z0-9._-]+/gu,"-").replace(/^-+|-+$/gu,"");return b.length>0?b.slice(0,48):"none"}function r(a){let b=0x811c9dc5;for(let c=0;c<a.length;c+=1)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193)>>>0;return b.toString(16).padStart(8,"0")}function s(a){return"chapter_generation"===a.type||/^agent-chapter-task-/u.test(a.roleId||"")}function t(a){return`st.${q(a.type)}.${q(a.roleId||"none")}.${r(s(a)?[a.type,a.roleId||"",a.promptId||"",a.subtitle||"",a.order??""].join("::"):[a.type,a.roleId||"",a.promptId||""].join("::"))}`}let u=new Map;function v(a,b){let c=u.get(a);if(c)return c;let e=(0,d.g0)(a,b),f=new Map,g=0;for(let a of e)f.set(a.id,a.seq),Number.isFinite(a.seq)&&(g=Math.max(g,a.seq+1));let h={nodes:new Map(e.map(a=>[a.id,a])),seqById:f,nextSeq:g};return u.set(a,h),h}function w(a){return"string"!=typeof a||0===a.length?{}:a.length<=160?{note:a,noteChars:a.length}:{note:`${a.slice(0,160)}…`,noteChars:a.length}}function x(a,b){let c=function(a){let b=o[a];if(!b)throw new d.fd("node-log-node-invalid",`批次「${String(a)}」未在迁移台账内(S10.1:逐批迁移)。要迁移新的一批:先在 emitNode.ts 的台账注释与 EMIT_NODE_BATCHES 里登记,再改调用点——半个批次(同一事实两个写入者)比不迁移更糟。`);return b}(b.batch),e=b.stage,h=c.perRound,m=b.baseDir??a.nodeLogBaseDir,p=function(a){let b="string"==typeof a.documentId&&a.documentId.length>0?a.documentId:void 0,c=a.global?.input?.diversitySeed;return b??("string"==typeof c&&c.length>0?c:void 0)}(a),u=p?v(p,m):void 0,x=e?.roleId,y=b.round??(h&&e&&x&&u?function(a,b){let c,d=0;for(let e of a.nodes.values()){let a=/^round:(.+)#(\d+)$/u.exec(e.id);if(!a||a[1]!==b)continue;let f=Number(a[2]);f>d&&(d=f,c=e.status)}return 0===d?1:void 0!==c&&n.has(c)?d+1:d}(u,x):void 0),A=b.type??c.typeByStageType[e?.type??""]??c.fallbackType,B=b.title??(e?"string"==typeof e.title&&e.title.length>0?e.title:String(e.type):void 0)??String(A),C=void 0!==y&&y>1&&!B.includes(`第 ${y} 轮`)?`${B} \xb7 第 ${y} 轮`:B,D=b.status??(e?l[e.status]:void 0)??"running",E=b.progress??e?.progress,F=E&&"completed"===D&&"number"==typeof E.total&&E.total>0&&"number"==typeof E.current&&E.current<E.total?{...E,current:E.total}:E,G=b.issues??function(a){let b=a?.details;if(Array.isArray(b)&&0!==b.length)return b.map(a=>({level:"info",message:a,source:f.BI}))}(e),H={...w(e?.message),...e?{stageType:e.type,stageRoleId:e.roleId||"",...void 0!==e.promptId?{stagePromptId:e.promptId}:{},...void 0!==e.subtitle?{stageSubtitle:e.subtitle}:{},...void 0!==e.order?{stageOrder:e.order}:{}}:{},...void 0!==y?{roundIteration:y}:{},...b.metrics??{}};if(!p||!u)return{...void 0!==y?{round:y}:{},skippedNodes:"no-doc-id"};let I=b.chapterId??(e&&s(e)?function(a){let b=/^agent-chapter-task-(.+)$/u.exec(a.roleId||"");return b?.[1]}(e):void 0),J=b.parentId??(I?j(I):void 0)??("round-by-role"===c.parent&&e?.roleId?k(e.roleId):void 0)??i(c.phase),K=b.id??(e?x&&void 0!==y?k(x,y):t(e):`${q(A)}.${r(`${J}::${C}`)}`),L=m?{baseDir:m}:{},M=J.startsWith("chapter:")?b.chapterTitle:J.startsWith("round:")?b.parentTitle??e?.subtitle??e?.title:b.parentTitle;!function a(b,c,e,f){if(e.nodes.has(c))return;let h=function(a){let b=/^phase:(.+)$/u.exec(a);if(b){let a=g[b[1]];if(a)return{type:a.type,title:a.title}}return a.startsWith("chapter:")?{type:"chapter",title:a.slice(8),parentId:i("write")}:a.startsWith("round:")?{type:"round",title:a.slice(6),parentId:i("close")}:void 0}(c);if(!h)throw new d.fd("node-log-node-invalid",`parentId「${c}」不是本桥认识的结构化 id(phase:* / chapter:* / round:* 三种前缀)。裸 id 的父节点必须先由某个调用点自己 emit 出来——否则补丁会打在空气上(node-log-patch-target-missing)。要新增结构层:在 parseStructuralId 与 PHASE_ROOTS 里显式登记,不要就地拼字符串。`);h.parentId&&a(b,h.parentId,e,{baseDir:f.baseDir});let j=e.nextSeq;e.nextSeq+=1;let k={id:c,...void 0!==h.parentId?{parentId:h.parentId}:{},type:h.type,title:f.title??h.title,seq:j,status:"running",startedAt:Date.now()};(0,d.tS)(b,k,f.baseDir?{baseDir:f.baseDir}:{}),e.nodes.set(k.id,k),e.seqById.set(k.id,j)}(p,J,u,{...void 0!==M?{title:M}:{},...L});let N=u.nodes.get(K),O=b.startedAt??N?.startedAt??Date.now(),P=void 0!==N&&!n.has(N.status),Q=n.has(D)&&!P,R=b.completedAt??(n.has(D)?Q?O:Date.now():void 0),S=Q?{...H,instantEvent:!0}:H;if(N){let a={id:K,status:D,...N.title!==C?{title:C}:{},...void 0!==F?{progress:F}:{},...Object.keys(S).length>0?{metrics:S}:{},...void 0!==G?{issues:G}:{},...void 0!==b.payloadRef?{payloadRef:b.payloadRef}:{},...void 0!==R?{completedAt:R}:{}};(0,d.Rr)(p,a,L),u.nodes.set(K,z(N,a))}else{let a={id:K,parentId:J,type:A,title:C,seq:u.nextSeq,status:D,startedAt:O,...void 0!==R?{completedAt:R}:{},...void 0!==F?{progress:F}:{},...Object.keys(S).length>0?{metrics:S}:{},...void 0!==G?{issues:G}:{},...void 0!==b.payloadRef?{payloadRef:b.payloadRef}:{}};return(0,d.tS)(p,a,L),u.seqById.set(K,a.seq),u.nextSeq+=1,u.nodes.set(K,a),{nodeId:K,seq:a.seq,status:D,...void 0!==y?{round:y}:{}}}return{nodeId:K,seq:u.seqById.get(K)??N.seq,status:D,...void 0!==y?{round:y}:{}}}function y(a,b,c){if("string"!=typeof a||0===a.length)return 0;let e=v(a,c),f=c?{baseDir:c}:{},g=Date.now(),h=w(b),i=0;for(let b of[...e.nodes.values()]){if("running"!==b.status)continue;let c={...b.metrics,...h},j={id:b.id,status:"failed",...Object.keys(c).length>0?{metrics:c}:{},completedAt:g};(0,d.Rr)(a,j,f),e.nodes.set(b.id,z(b,j)),i+=1}return i}function z(a,b){let c=Object.fromEntries(Object.entries(b).filter(([,a])=>void 0!==a));return{...a,...c,id:a.id,startedAt:a.startedAt}}},48661:(a,b,c)=>{c.d(b,{$v:()=>aj,BH:()=>an,BT:()=>af,Gl:()=>H,JU:()=>ar,Jz:()=>as,Oy:()=>R,QG:()=>am,QH:()=>Q,SE:()=>S,UE:()=>ad,YL:()=>aC,Yf:()=>ab,a6:()=>ac,getGeneratedDocument:()=>Y,im:()=>az,jA:()=>ai,listGeneratedDocuments:()=>X,r:()=>ah,v7:()=>al,x7:()=>ag,yE:()=>aq});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(78403),i=c(70610),j=c(37047),k=c(23760),l=c(30055),m=c(87942),n=c(48479),o=c(19898),p=c(44533),q=c(16040),r=c(78217),s=c(80572),t=c(37095);function u(a){return a.title&&"生成中"!==a.title&&"排队中"!==a.title?a.title:`${a.templateName||"文档"}生成失败`}function v(...a){let b=new Map;for(let c of a)for(let a of c||[])a.id&&a.content?.trim()&&b.set(a.id,a);return[...b.values()]}function w(a){return(a||[]).map(a=>({id:a.id,title:a.title,chars:(0,r.V7)(a.content),status:a.inProgress?"in_progress":a.content.trim().length>0?"completed":"failed",updatedAt:Date.now(),timedOut:a.timedOut,elapsedMs:a.elapsedMs}))}let x=globalThis,y=x.__generatedDocumentTasks??=new Map,z=x.__generatedDocumentQueue??=[],A=Math.max(36e5,Number(process.env.DOCUMENT_ABANDONED_RECORD_STALE_MS??864e5)),B=x.__generatedDocumentProcessStartedAt??=Date.now();function C(){return Math.max(3e4,Math.min(3e5,Number(process.env.DOCUMENT_PROGRESS_HEARTBEAT_SAVE_INTERVAL_MS??3e4)))}let D=x.__pausedHeartbeats??=new Map,E=Math.max(Math.max(3e4,Number(process.env.DOCUMENT_RECENT_UPDATE_GRACE_MS??18e4)),3*C()),F=function(a){if(!a||!Number.isFinite(a)||a<=0)return!1;try{return process.kill(a,0),!0}catch(a){return a?.code==="EPERM"}};function G(a){if("generating"!==a.status&&"queued"!==a.status)return{stale:!1};let b=Date.now();if(b-a.updatedAt<E)return{stale:!1};if(a.ownerPid)return F(a.ownerPid)?b-a.updatedAt<A?{stale:!1}:{stale:!0,reason:"heartbeat-lost"}:{stale:!0,reason:"process-exited"};return a.updatedAt<B||b-a.updatedAt>=A?{stale:!0,reason:"owner-unknown"}:{stale:!1}}function H(a=(0,p.aY)()){let b=g.join(f.homedir(),".customize-agent","projects",function(a=(0,p.aY)()){return(0,o.computeProjectId)(g.resolve(a))}(a),"generatedDocuments");return e.mkdirSync(g.join(b,"drafts"),{recursive:!0}),e.mkdirSync(g.join(b,"assets"),{recursive:!0}),b}function I(a=(0,p.aY)()){return g.join(H(a),"index.json")}function J(a=(0,p.aY)()){return g.join(H(a),"assets.json")}function K(a,b=(0,p.aY)()){return g.join(H(b),"drafts",`${a}.json`)}function L(a,b=(0,p.aY)()){return g.join(H(b),"drafts",`${a}.meta.json`)}function M(a,b,c){var d;let e=(0,q.B1)(a,{baseDir:H(b||(0,p.aY)())});return e.noNodeLog?(c&&c.length>0&&(d=a,N.has(d)||(N.add(d),console.warn(`[gen][stages] doc=${d} 读不到节点日志(drafts/${d}.nodes.jsonl):执行阶段视图**保持记录原值**,不拿空表顶替。旧归档(阶段流退役前落盘的文档)没有该文件,属预期;新生成请查节点日志写入路径。`))),c):e.stages}let N=new Set;function O(a,b,c,d){try{(0,n.Ng)(a,c,H(b))}catch(b){console.error(`[gen][stages] doc=${a} 终止标注写节点日志失败(记录照常归档):`,b)}return M(a,b,d)}function P(a,b,c,d,e="success"){(0,n.Wl)({documentId:a},{batch:"document.lifecycle",baseDir:H(b),stage:(0,h.X5$)({type:"validation",roleId:c,status:e,message:d})})}function Q(a,b=(0,p.aY)()){let c=T(L(a,b),null);return c&&Number.isFinite(c.updatedAt)?c:null}function R(a){return!!a&&G(a).stale}function S(a,b=(0,p.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(H(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join((0,p.NW)(b),a.path):null}function T(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function U(a,b){e.mkdirSync(g.dirname(a),{recursive:!0});let c=`${a}.${process.pid}.${Date.now()}.tmp`;e.writeFileSync(c,JSON.stringify(b)),e.renameSync(c,a)}function V(a){for(let b of y.values())if(b.documentId===a)return b;return null}function W(a,b=(0,p.aY)()){if("generating"!==a.status&&"queued"!==a.status||V(a.id)||"queued"===a.status&&z.some(b=>b.documentId===a.id))return a;let c=G(a);if(!c.stale)return a;let d="queued"===a.status?"排队任务未执行(生成进程已退出或服务重启),请重新发起生成":"生成任务已中断,请点击继续生成或重新生成",e=a.checkpointChapters?.length?"warning":"failed";console.warn(`[gen] interrupted: doc=${a.id} reason=${c.reason} ownerPid=${a.ownerPid??"none"} lastHeartbeat=${new Date(a.updatedAt).toISOString()}`);let f={...a,title:u(a),status:e,error:a.error||d,executionStages:O(a.id,b,d,a.executionStages),completedAt:Date.now(),interruptedAt:Date.now(),interruptionReason:c.reason,warningIssues:a.checkpointChapters?.length?[...a.warningIssues||[],d]:a.warningIssues};return a.taskId&&ax(b,{taskId:a.taskId,title:`生成 ${f.title}`,status:"warning"===e?"warning":"error",percent:100,message:d,stages:f.executionStages,error:d}),f}function X(a=(0,p.aY)()){return T(I(a),[]).map(b=>{if("generating"!==b.status&&"queued"!==b.status)return b;let c=T(K(b.id,a),null);if(!c)return b;let d=W(c,a),e=d!==c?ab(d,a,{preserveUpdatedAt:!0}):d;return{...au(e),queuePosition:"queued"===e.status?az(e.id):void 0}}).sort((a,b)=>(b.createdAt||b.updatedAt)-(a.createdAt||a.updatedAt))}function Y(a,b=(0,p.aY)()){var c;let d=T(K(a,b),null);if(!d)return null;let e=W(d,b);return(c=function(a,b=(0,p.aY)()){if("generating"===a.status||!(a.editedMarkdown||a.markdown)?.trim())return a;let c=`document-${a.id}`;if(a.assets?.some(a=>a.id===c&&a.path))return a;let d=ap(a,b);return d?ab({...a,assets:[d,...(a.assets||[]).filter(a=>a.id!==d.id)]},b):a}(e!==d?ab(e,b,{preserveUpdatedAt:!0}):e,b)).draft?{...c,draft:{...c.draft,executionStages:c.draft.executionStages??c.executionStages??[],reviewMetadata:c.draft.reviewMetadata??c.reviewMetadata,checkpointChapters:c.draft.checkpointChapters??c.checkpointChapters??c.draft.chapters}}:c}let Z=(()=>{let a=Number(process.env.DOCUMENT_INDEX_SAVE_INTERVAL_MS);return Number.isFinite(a)&&a>=0?Math.floor(a):3e4})(),$=new Map,_=new Map,aa=new Set(["completed","completed_with_issues","failed","aborted","warning","queued","paused"]);function ab(a,b=(0,p.aY)(),c){let d=Date.now(),e=aw({...a,updatedAt:c?.preserveUpdatedAt?a.updatedAt:d});return U(K(e.id,b),function(a){if(!a.draft)return a;let{executionStages:b,reviewMetadata:c,checkpointChapters:d,...e}=a.draft;return{...a,draft:e}}(e)),U(L(e.id,b),{updatedAt:e.updatedAt,status:e.status,completedAt:e.completedAt,ownerPid:e.ownerPid,ownerStartedAt:e.ownerStartedAt}),!function(a,b,c){let d=I(b),e=Date.now(),f=_.get(d);f||(f=new Set(T(d,[]).map(a=>a.id)),_.set(d,f));let g=$.get(d)??0;if(!(c?.force||aa.has(a.status)||!f.has(a.id))&&e-g<Z)return;let h=T(d,[]).filter(b=>b.id!==a.id);h.unshift(au(a)),U(d,h),$.set(d,e),_.set(d,new Set(h.map(a=>a.id)))}(e,b,{force:c?.forceIndex}),e}function ac(a,b,c=(0,p.aY)()){let d=Y(a,c);return d?ab({...d,...b,id:a},c):null}class ad extends Error{constructor(a,b,c,d){super(a),this.file=b,this.documentId=c,this.hash=d,this.name="RepairSnapshotMissingError"}}function ae(a,b,c){return g.join(function(a,b=(0,p.aY)()){return g.join(H(b),"drafts",`${a}.snapshots`)}(a,c),`${b.replace(/^sha256:/u,"")}.json`)}function af(a,b=(0,p.aY)()){let c=Y(a,b);if(!c)throw new ad(`快照失败:文档不存在 ${a}`,"",a,"");if("generating"===c.status||"queued"===c.status)throw new ad(`快照失败:文档仍在生成中(status=${c.status}),此时拍快照会在回滚时覆盖生成进度`,"",a,"");let f={v:1,documentId:a,capturedAt:Date.now(),recordUpdatedAt:c.updatedAt,markdown:c.markdown||"",editedMarkdown:c.editedMarkdown,wordCount:c.wordCount,status:c.status,warningIssues:c.warningIssues,chapters:(c.draft?.chapters||[]).map(a=>({id:a.id,title:a.title,content:a.content})),draftMarkdown:c.draft?.markdown,validationIssues:c.draft?.validationIssues},h=function(a){let{capturedAt:b,recordUpdatedAt:c,...e}=a;return`sha256:${d.createHash("sha256").update(JSON.stringify(e)).digest("hex")}`}(f),i=ae(a,h,b);return e.mkdirSync(g.dirname(i),{recursive:!0}),e.existsSync(i)||U(i,f),{hash:h,snapshot:f}}function ag(a,b,c=(0,p.aY)()){let d=function(a,b,c=(0,p.aY)()){let d=ae(a,b,c),e=T(d,null);if(!e||1!==e.v||e.documentId!==a)throw new ad(`快照不存在或不可用(${b})——不得假装回滚成功`,d,a,b);return e}(a,b,c),e=Y(a,c);if(!e)throw new ad(`回滚失败:文档不存在 ${a}`,"",a,b);let f=(0,r.V7)(e.editedMarkdown||e.markdown||""),g=new Map(d.chapters.map(a=>[a.id,a.content])),h=(e.draft?.chapters||[]).map(a=>g.has(a.id)?{...a,content:g.get(a.id)}:a),i=new Set((e.draft?.chapters||[]).map(a=>a.id)),j=d.chapters.filter(a=>!i.has(a.id)).map(a=>a.id);if(j.length>0)throw new ad(`回滚失败:快照中的章节在当前记录里已不存在(${j.join("、")})——不合并出第三态`,"",a,b);let k=ab({...e,updatedAt:d.recordUpdatedAt??e.updatedAt,markdown:d.markdown,editedMarkdown:d.editedMarkdown,wordCount:d.wordCount??(0,r.V7)(d.editedMarkdown||d.markdown),status:d.status,warningIssues:d.warningIssues,draft:e.draft?{...e.draft,chapters:h,markdown:d.draftMarkdown??e.draft.markdown,validationIssues:d.validationIssues??e.draft.validationIssues}:e.draft},c,{preserveUpdatedAt:!0});return{beforeChars:f,afterChars:(0,r.V7)(k.editedMarkdown||k.markdown||"")}}function ah(a,b=(0,p.aY)()){let c=Y(a,b);if(!c)return null;if("generating"!==c.status&&"queued"!==c.status)return c;let d="queued"===c.status;if(d){let b=z.findIndex(b=>b.documentId===a);b>=0&&z.splice(b,1)}for(let[b,c]of y)c.documentId===a&&(c.status="aborted",c.controller.abort(),y.delete(b));let e="用户中止",f=[...c.executionStages||[]].reverse().find(a=>"running"===a.status),g=d?"生成队列":f?.subtitle||f?.roleName||f?.roleId,h=O(c.id,b,e,c.executionStages),i=ab({...c,status:"aborted",error:e,executionStages:h,completedAt:Date.now(),abortedAt:Date.now(),abortedBy:"user-api",abortedStage:g},b);console.log(`[gen] aborted by user: doc=${a} stage=${g||"unknown"} taskId=${i.taskId||"none"}`);let j=g?`用户中止(阶段:${g})`:e;return i.taskId&&ax(b,{taskId:i.taskId,title:`生成 ${i.title}`,status:"warning",percent:100,message:j,stages:h,error:e}),d&&aA(),i}function ai(a,b=(0,p.aY)()){let c=Y(a,b);if(!c)return null;if("generating"!==c.status)return c;let d=!1;for(let b of y.values())b.documentId===a&&(b.pauseRequested=!0,d=!0);if(!d)return console.warn(`[gen] pause requested but no live task: doc=${a}`),c;P(a,b,"pause-requested","已请求暂停:将在当前节点边界停住并落盘");let e=ab({...c,executionStages:M(a,b,c.executionStages),updatedAt:Date.now()},b,{forceIndex:!0});return console.log(`[gen] pause requested: doc=${a}`),e}function aj(a,b=(0,p.aY)()){let c=Y(a,b);if(!c||"paused"!==c.status)return c;ak(c.id);let d=aC({title:c.templateName,requirement:c.requirement,resumeDocumentId:c.id},c.projectRoot||b);return console.log(`[gen] resumed from pause: doc=${a} taskId=${d.taskId}`),d}function ak(a){let b=D.get(a);b&&(clearInterval(b),D.delete(a))}function al(){return D.size}function am(a,b=(0,p.aY)()){let c=z.findIndex(b=>b.documentId===a);c>=0&&z.splice(c,1);try{e.rmSync(K(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}let d=I(b),f=T(d,[]).filter(b=>b.id!==a);U(d,f),$.set(d,Date.now()),_.set(d,new Set(f.map(a=>a.id)))}function an(a=(0,p.aY)()){return T(J(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function ao(a,b,c=(0,p.aY)()){let d=Date.now(),e=[...an(c)];for(let c of a){let a=e.findIndex(a=>a.id===c.id),f=c.path?.startsWith("generatedDocuments/assets/")||"generated"===c.status||"prompt_ready"===c.status?"generated":"knowledge_base",h={...c,name:g.basename(c.path||c.url||c.id),source:f,indexed:a>=0&&e[a].indexed,usedByDocumentIds:a>=0?[...new Set([...e[a].usedByDocumentIds,b])]:[b],createdAt:a>=0?e[a].createdAt:d,updatedAt:d};a>=0?e[a]={...e[a],...h}:e.push(h)}return U(J(c),e),e}function ap(a,b=(0,p.aY)()){let c=a.editedMarkdown||a.markdown;if(!c?.trim())return null;let d=`generatedDocuments/assets/${a.title.replace(/[\\/:*?"<>|]/gu,"_").slice(0,120)||"generated-document"}-${a.id}.md`,f=g.join(H(b),d.replace(/^generatedDocuments\//u,""));e.mkdirSync(g.dirname(f),{recursive:!0}),e.writeFileSync(f,c,"utf8");let h={id:`document-${a.id}`,type:"file",role:"generated",path:d,status:"generated",message:"模板运行生成的 Markdown 文档,仅登记到生成资源,不进入知识库"};return ao([h],a.id,b).find(a=>a.id===h.id)||null}function aq(a,b=(0,p.aY)()){return an(b).find(b=>b.id===a)||null}function ar(a,b=(0,p.aY)()){let c=aq(a,b);if(!c)return!1;let d=S(c,b);if(d&&d.startsWith(H(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return U(J(b),an(b).filter(b=>b.id!==a)),!0}function as(a,b,c=(0,p.aY)()){let d=aq(a,c);if(!d)return null;let f=S(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function at(a){let b=Math.max(4,Math.floor((0,s.z)().persistEvidenceMaxItems??10)),c=Math.max(300,Math.floor((0,s.z)().persistEvidenceItemChars??900));return{...a,evidence:(a.evidence||[]).slice(0,b).map(a=>({...a,content:"string"==typeof a.content?a.content.replace(/\s+/gu," ").slice(0,c):""}))}}function au(a){let b=[...a.executionStages||a.draft?.executionStages||[]].reverse().find(a=>a.message||a.subtitle||a.roleId),c=a.partialChapters||w(a.checkpointChapters||a.draft?.checkpointChapters||a.draft?.chapters),d=a.draft?.validationIssues||[],e=a.draft?.exportGate?a.draft.exportGate.blockingIssues?.length??0:d.filter(a=>"blocker"===a.severity||"error"===a.level).length,f=d.filter(a=>"warning"===a.severity||"warning"===a.level).length||a.warningIssues?.length||0,g=d.filter(a=>"suggestion"===a.severity||"info"===a.level).length;return{id:a.id,taskId:a.taskId,templateId:a.templateId,templateName:a.templateName,promptIds:a.promptIds,promptHash:a.promptHash,materialRoot:a.materialRoot,title:a.title,requirement:a.requirement,projectRoot:a.projectRoot,projectId:a.projectId,knowledgeBasePath:a.knowledgeBasePath,status:a.status,createdAt:a.createdAt,updatedAt:a.updatedAt,completedAt:a.completedAt,elapsedMs:a.completedAt?a.completedAt-a.createdAt:a.updatedAt-a.createdAt,error:a.error,warningIssues:(a.warningIssues||[]).slice(0,12),warningCount:f,blockerCount:e,suggestionCount:g,wordCount:(0,r.V7)(a.editedMarkdown||a.markdown||a.draft?.markdown||""),chapterCount:c?.length||a.draft?.chapters?.length||0,completedChapterCount:(c||[]).filter(a=>"completed"===a.status).length,latestStage:b?.subtitle||b?.roleName||b?.roleId,latestMessage:b?.message,assets:(a.assets||[]).slice(0,8),partialChapters:c}}function av(a){if(!a)return a;let b=a.chapterTasks?.map(a=>({...a,evidence:(a.evidence||[]).slice(0,Math.max(4,Math.floor((0,s.z)().persistEvidenceMaxItems??10))).map(a=>({...a,content:"string"==typeof a.content?a.content.replace(/\s+/gu," ").slice(0,Math.max(300,Math.floor((0,s.z)().persistEvidenceItemChars??900))):""})),facts:[],factCount:(a.facts||[]).length}));return{...a,chapterTasks:b,facts:[],factCount:(a.facts||[]).length}}function aw(a){let b=a.draft?{...a.draft,chapters:a.draft.chapters?.map(at),checkpointChapters:a.draft.checkpointChapters?.map(at),agentWorkflow:a.draft.agentWorkflow?av(a.draft.agentWorkflow):a.draft.agentWorkflow}:a.draft;return{...a,draft:b,checkpointChapters:a.checkpointChapters?.map(at),agentWorkflow:a.agentWorkflow?av(a.agentWorkflow):a.agentWorkflow}}function ax(a,b){(0,t.Qf)(a,{id:b.taskId,type:"document",title:b.title,stage:"processing"===b.status?"generating":"error"===b.status?"error":"done",status:b.status,percent:b.percent,message:b.message,error:b.error,details:(b.stages||[]).filter(a=>"role_binding"===a.type||"runtime-prompt-rules"===a.roleId||"document-readiness"===a.roleId||"failed"===a.status).flatMap(a=>[`${a.subtitle||a.roleName||a.roleId}:${a.message||a.status}`,...(a.details||[]).slice(0,8).map(a=>` - ${a}`)]).slice(0,80)})}function ay(){return Math.max(1,Number(process.env.DOCUMENT_MAX_CONCURRENT_GENERATIONS??2))}function az(a){let b=z.findIndex(b=>b.documentId===a);return b>=0?b+1:void 0}function aA(){for(;;){if(y.size>=ay())return;let a=z.findIndex(a=>!function(a,b){for(let c of a)if(c.projectRoot===b)return!0;return!1}(y.values(),a.projectRoot));if(a<0)return;let[b]=z.splice(a,1),c=Y(b.documentId,b.projectRoot);if(c&&"queued"===c.status){P(b.documentId,b.projectRoot,"queue-start","排队完成,开始生成"),P(b.documentId,b.projectRoot,"queue-wait","排队已结束(开始生成)");try{aB({taskId:b.taskId,documentId:b.documentId,resolvedProjectRoot:b.projectRoot,specId:b.specId,title:b.title,promptIds:b.promptIds,materialRoot:b.materialRoot??c.materialRoot,requirement:b.requirement??c.requirement,maxEvidencePerChapter:b.maxEvidencePerChapter??c.maxEvidencePerChapter,existing:null,initial:{...c,taskId:b.taskId,title:"生成中",status:"generating",error:void 0,completedAt:void 0,ownerPid:process.pid,ownerStartedAt:B,executionStages:M(b.documentId,b.projectRoot,c.executionStages),updatedAt:Date.now()},startMessage:"排队完成,文档生成任务已启动"})}catch(d){let a=d instanceof Error?d.message:String(d);console.error(`[gen] queue launch failed: doc=${b.documentId} ${a}`);let c=Y(b.documentId,b.projectRoot);c&&"queued"===c.status&&(ab({...c,title:u(c),status:"failed",error:a,executionStages:O(c.id,b.projectRoot,a,c.executionStages),completedAt:Date.now()},b.projectRoot),ax(b.projectRoot,{taskId:b.taskId,title:`生成 ${c.templateName||c.title}`,status:"error",percent:100,message:a,error:a}))}}}}function aB(a){let{taskId:b,documentId:c,resolvedProjectRoot:d,existing:e,initial:f}=a,g={promptIds:a.promptIds,title:a.title,requirement:a.requirement,materialRoot:a.materialRoot,maxEvidencePerChapter:a.maxEvidencePerChapter,resumeDocumentId:a.resumeDocumentId},p=Date.now();ab(f,d),ax(d,{taskId:b,title:`生成 ${f.title}`,status:"processing",percent:1,message:a.startMessage,stages:f.executionStages});let s=new AbortController,t={},x=function(a,b,c){if(!a)return[];let d=a.reviewMetadata?.workflowVersion?.version||a.draft?.reviewMetadata?.workflowVersion?.version,e=a.projectRoot===c&&a.projectId===(0,o.computeProjectId)(c),f=!!a.promptHash&&a.promptHash===b.promptHash;if(!e||!f||d!==m.x.version)return[];let g=new Set((a.draft?.partialChapters||a.partialChapters||[]).filter(a=>"completed"===a.status).map(a=>a.id));return v(a.draft?.chapters,a.checkpointChapters).filter(a=>g.has(a.id)&&!!a.content?.trim()&&!/WRITER_MISSING_SECTION|Writer 未完成/u.test(a.content))}(e,{promptHash:(0,i.oT)(a.promptIds,a.requirement)},d),z="",A=0,E="",F=Math.max(1e3,Math.min(15e3,Number(process.env.DOCUMENT_PROGRESS_SAVE_INTERVAL_MS??5e3))),G=C(),I=(0,j.Iu)().then(()=>(0,h.OXS)({...g,diversitySeed:c,projectRoot:d,resumeChapters:x,signal:s.signal,nodeLogBaseDir:H(d),shouldPause:()=>t.current?.pauseRequested===!0,onProgress:a=>{try{t.current&&(t.current.lastProgressAt=Date.now());let e=(0,q.lH)(c,{baseDir:H(d)});a?.chapters?.length&&(z=a.chapters.map(a=>`# ${a.title}
211
+ ${a.content}`);f+=b?T(S(b)):1}return f}let W=/^####\s+(?:\d+(?:\.\d+)*\s+)?(?:施工概况|施工流程|施工方法|工艺流程)(?:[::]|\s*$)/u;function X(a){let b=[];return a.scope||b.push("作业对象与工程量"),a.process||b.push("工序顺序"),a.method||b.push("施工方法"),b.join("、")}function Y(a){let b=a.split(/\r?\n/u),c=[],d=(a,c)=>{for(let d=a;d<b.length;d+=1){let a=/^(#{1,6})\s+/u.exec(b[d].trim());if(a&&a[1].length<=c)return d}return b.length};for(let a=0;a<b.length;a+=1){let f=/^##\s+(.+)$/u.exec(b[a].trim());if(f){let g=f[1].trim();if(!e.Yp.test(g)&&!e.gG.test(g))continue;let h=d(a+1,2),i=[];for(let c=a+1;c<h;c+=1)/^###\s+/u.test(b[c].trim())&&i.push(c);if(0===i.length){c.push({title:g,startLine:a+1,endLine:h});continue}for(let a=0;a<i.length;a+=1){let d=i[a],e=a+1<i.length?i[a+1]:h;c.push({title:b[d].trim().replace(/^###\s+/u,""),startLine:d+1,endLine:e})}continue}let g=/^###\s+(.+)$/u.exec(b[a].trim());if(g){let b=g[1].trim();if(!e.Yp.test(b)&&!e.gG.test(b))continue;let f=d(a+1,3);c.push({title:b,startLine:a+1,endLine:f})}}return c}function Z(a){let b=a.split(/\r?\n/u);return Y(a).map(a=>({title:a.title,bodyLines:b.slice(a.startLine,a.endLine)}))}function $(a){let b=[],c=(a,c,d)=>{let e=d.includes("作业对象")?"作业对象与工程量(本项目部位、规模/工程量、系统边界,工程量取工程量清单汇总值)":"",f=d.includes("工序")?"工序顺序(先后清晰,至少 1 处不少于 4 个环节的工序顺序表达)":"",g=d.includes("施工方法")?"施工方法(工具机具、工艺参数、验收闭环)":"";b.push({level:"error",severity:"blocker",message:c?`「${a}」${c}专业工程块缺少三要素:${d}`:`「${a}」小节缺少三要素:${d}`,suggestion:`请在「${c||a}」补写缺失要素:${[e,f,g].filter(Boolean).join(";")}。要素融入连贯段落叙述,禁止以“施工概况/施工流程/施工方法”等结构标签充当标题或段落开头引导。`})};for(let b of Z(a)){let a=b.bodyLines.map((a,b)=>({line:a.trim(),offset:b})).filter(a=>/^####\s+/u.test(a.line));if(0===a.length||a.every(a=>W.test(a.line))){let a=X((0,f.se)(b.bodyLines.join("\n")));a&&c(b.title,"",a);continue}for(let d=0;d<a.length;d+=1){let e=a[d].offset,g=d+1<a.length?a[d+1].offset:b.bodyLines.length;if(W.test(a[d].line))continue;let h=a[d].line.replace(/^####\s+(?:\d+(?:\.\d+)*\s+)?/u,"").replace(/[::]\s*$/u,""),i=b.bodyLines.slice(e,g).join("\n"),j=X((0,f.se)(i));j&&c(b.title,h,j)}}return b}function _(a){let b=[];for(let c of Z(a)){let a=c.bodyLines.join("\n");if(!a.trim())continue;let d=a.split(/\r?\n/u).filter(a=>/^\s*\|.+\|\s*$/u.test(a.trim())),e=a.split(/\r?\n/u).filter(a=>!/^\s*\|.+\|\s*$/u.test(a.trim())).join("").replace(/[\s#*_`>-]/gu,"").length;d.length>=3&&e<50&&b.push({level:"error",severity:"blocker",message:`「${c.title}」小节不应使用 Markdown 表格承载专业工程正文`,suggestion:"主要施工内容/主要施工方法应采用三级小节与段落式专业工程写法:每个专业工程一个 #### 小节,覆盖作业对象与工程量、工序顺序、施工方法三方面要素;表格数据改写成连贯叙述。"});let f=[...new Set((a.match(/[^\n]{0,18}(?:分部小计|本页小计|按实(?!际|测|\d)|暂估|综合单价|规费|税金)[^\n]{0,18}/gu)||[]).map(a=>a.trim()))],g=[...new Set([...f,...new Set((a.match(/[^\n]{0,18}(?:措施项目费|措施项目[^\n]{0,8}(?:清单|计价|费率))[^\n]{0,18}/gu)||[]).map(a=>a.trim())),...new Set((a.match(/[^\n]{0,10}(?:合计|小计)[^\n]{0,16}(?:㎡|m²|m2|m³|m3|吨|t|项|处|座|樘)/gu)||[]).map(a=>a.trim()))])];g.length>0&&b.push({level:"error",severity:"blocker",message:`「${c.title}」小节正文含工程量清单内部口径词:${g.slice(0,6).join(";")}`,suggestion:"“分部小计/本页小计/合计/按实/暂估/综合单价/措施项目费/规费/税金”等清单计价表专用口径不得进入正式正文:工程量只写清单汇总的项目总量(数值与工程量清单一致),删除全部清单内部口径行。"})}return b}function aa(a){let b=Y(a);if(0===b.length)return{markdown:a,fixedCount:0,details:[]};let c=a.split(/\r?\n/u),d=[];for(let a of b)for(let b=a.startLine;b<Math.min(a.endLine,c.length);b+=1){let a=c[b];if(!a||/^\s*\|.+\|\s*$/u.test(a.trim())||/^#{1,6}\s+/u.test(a.trim()))continue;let e=a.replace(/(合计|小计)(?=[^\n]{0,16}(?:㎡|m²|m2|m³|m3|吨|t|项|处|座|樘))/gu,"");e!==a&&(d.push(`「${a.trim().slice(0,36)}」→「${e.trim().slice(0,36)}」`),c[b]=e)}return 0===d.length?{markdown:a,fixedCount:0,details:[]}:{markdown:c.join("\n"),fixedCount:d.length,details:d}}},41618:(a,b,c)=>{c.r(b),c.d(b,{FIGURE_DIR_NAME:()=>h,default:()=>j});var d=c(73024),e=c(76760),f=c(48661),g=c(89900);let h="figures",i=/^[A-Za-z0-9._-]+\.svg$/u;function j(a,b){try{let c="string"==typeof a.query.id?a.query.id:"",j="string"==typeof a.query.name?a.query.name:"";if(!c||!j)return b.status(400).json({error:"id and name required"});if(!i.test(j))return b.status(400).json({error:"图件名不合法(只允许 [A-Za-z0-9._-]+.svg)"});let k="string"==typeof a.query.projectRoot?a.query.projectRoot:void 0,l=e.resolve((0,f.Gl)(k),"assets"),m=e.resolve(l,h,j);if(!(0,g.kq)(m,l))return b.status(403).json({error:"PATH_DENIED"});if(!d.existsSync(m)||!d.statSync(m).isFile())return b.status(404).json({error:"figure not found"});let n=d.readFileSync(m);return b.setHeader("Content-Type","image/svg+xml; charset=utf-8"),b.setHeader("Cache-Control","no-store"),b.status(200).send(n)}catch(c){return console.error(`[api] documents/generated/[id]/figure/[name] doc=${a.query.id}`,c),b.status(500).json({error:c instanceof Error?c.message:"Internal server error"})}}},42750:(a,b,c)=>{c.d(b,{G0:()=>w,Qg:()=>x,d8:()=>s});var d=c(37047),e=c(30836),f=c(11628);let g=RegExp(String.raw`([\u4e00-\u9fa5A-Za-z0-9()()]{1,12}?)(\d+(?:\.\d+)?)\s*(${f.YC})([\u4e00-\u9fa5A-Za-z0-9()()]{0,8})`,"gu"),h=["直径","厚度","宽度","长度","高度","深度","间距","距离","标高","偏差","数量","面积","体积","重量","压力","温度","强度","等级","坡度","规格","尺寸","层数","次数","跨度","半径","总长","全长"],i=["以内","以外","以上","以下","之间","左右","以前","以后","之前","之后"],j=/^(?:主要|本工程|本项目|全项目)?(?:作业对象|作业内容|施工内容|工作内容|工程内容|施工对象|施工范围|工程规模|建设内容|建设规模)为/u,k=/^(?:由)?责任[\u4e00-\u9fa5]{0,4}在(?:内)?完成/u,l=/自然村|村组|标段|区域|点位|养护|地上|地下|建筑高度|[\u4e00-\u9fa5]{1,4}组$/u,m=/^(?:局部|个别|少数|多数|大部分)/u,n=["开挖","封闭","回填","浇筑","铺筑","摊铺","供应","编制","提交","签订","安装","养护","试验","拆除","砌筑"],o=["直径","半径","穴径","胸径","地径","冠幅","厚度","宽度","长度","高度","深度","穴深","间距","距离","标高","坡度","跨度","株距","行距"];function p(a){return a.replace(/(?:mm|cm|m|MPa|kN|kV|kW|℃|元|万元|人|天|日|个|层|樘|处|套|台|t|吨)/gu,"").replace(/[\s,,、;;::()()]/gu,"")}function q(a,b){if(/[、/](?:与)?[A-Za-z]?\d/u.test(a))return!0;for(let c of a.matchAll(/[、/](?:与|和|及)?([\p{Script=Han}A-Za-z]{1,8})\d/gu))if(function(a,b){let c=p(a),d=p(b);return 0!==c.length&&0!==d.length&&!c.includes(d)&&!d.includes(c)}(c[1]||"",b))return!0;return!1}function r(a,b){let c=["。",";",";","\n"],d=0;for(let e of c){let c=a.lastIndexOf(e,b-1);c+1>d&&(d=c+1)}let e=a.length;for(let d of c){let c=a.indexOf(d,b);c>=0&&c<e&&(e=c)}return a.slice(d,e)}async function s(a){let b=function(a){let b=new Map,c=0;for(let d of a.split("\n")){let a=d.trim(),e=c;if(c+=d.length+1,!(/^#{1,6}\s/u.test(a)||/^\s*\|/u.test(a)))for(let a of d.matchAll(RegExp(g.source,"gu"))){let c=(a[1]||"").trim(),g=a[2],n=/\d+$/u.exec(c);if(n&&(c=c.slice(0,n.index).trim(),g=`${n[0]}${g}`),/月\s*$/u.test(c))continue;let o=Number(g),q=a[3]||"",r=a.index||0,s=(0,f.hr)(d,r),t=d.slice(s,(0,f.s6)(d,r+a[0].length,s)),u=r-s+(a[1]||"").length-(n?n[0].length:0),v=t.slice(u+g.length),w=v.indexOf(q),x=w>=0&&w<=2?v.slice(w+q.length):v,y=/[与和及][^与和及]{0,24}?\d/u.exec(x),z=y?x.slice(0,y.index):x,A=`${t.slice(0,u)}${z}`.replace(/[\s,,、;;::]/gu,""),B=A.replace(j,"").replace(k,""),C=B.length>=2?B:A;if(C.length<2||!/[\u4e00-\u9fa5A-Za-z]{2,}/u.test(C)||!Number.isFinite(o)||o<=0||h.some(a=>C===a||p(C)===a)||i.some(a=>p(C)===a)||l.test(C)||m.test(C))continue;if((0,f.b3)(t)){let a=(0,f.mc)(d,t);console.warn(`[gen] parameter-concept-conflict 残片跳过:对象名窗口「${t.trim()}」${a?`是「${a}」的截断`:"含未配对闭括号且本行找不到截断源"},数值 ${g}${q} 不参与口径互斥`);continue}let D={matchIndex:e+(a.index||0),valueOffset:function(a,b,c){if(!c)return a.indexOf(b);let d=a.lastIndexOf(c);if(d>=0){let c=d-b.length;if(c>=0&&a.slice(c,d)===b)return c;let e=RegExp(`(${b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")})\\s*$`,"u").exec(a.slice(0,d));if(e&&void 0!==e.index)return e.index}return a.indexOf(b)}(a[0],g,a[3]||""),valueText:g},E=b.get(a[0]);if(E){E.occurrences.push(D);continue}b.set(a[0],{concept:C,value:o,unit:q,raw:a[0],occurrences:[D]})}}return[...b.values()].slice(0,60)}(a);if(b.length<3)return{groups:[]};let c=[...new Set(b.map(a=>a.concept))];if(c.length<2)return{groups:[]};let s=await (0,d.VN)().embedDocuments(c);if(s.length!==c.length){let a=`本地语义模型嵌入数量不一致:期望 ${c.length} 条,实际 ${s.length} 条`;return console.warn(`[gen] parameter-concept-conflict degraded: ${a}`),{groups:[],degraded:{level:"warning",severity:"warning",category:"format",owner:"system",repairability:"manual_review",message:`参数概念口径冲突检测已降级跳过:${a}`,suggestion:"语义模型输出异常,本轮未执行该检测维度;可稍后重新生成复核。"}}}let t=new Map(c.map((a,b)=>[a,s[b]])),u=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=t.get(a),d=t.get(b);if(!c||!d||0===c.length||0===d.length)return 0;let e=Math.min(c.length,d.length),f=0;for(let a=0;a<e;a+=1)f+=c[a]*d[a];return f}),v=a=>{let b=a;for(;(u.get(b)||b)!==b;)b=u.get(b)||b;return b},w=new Map;for(let a of b){let b=v(a.concept),c=w.get(b)||[];c.push(a),w.set(b,c)}let x=[];for(let b of w.values()){if(b.length<2||Math.max(...b.map(a=>a.value))>4*Math.min(...b.map(a=>a.value)))continue;let c=new Map;for(let a of b){let b=c.get(a.unit)||[];b.push(a),c.set(a.unit,b)}for(let b of c.values()){if(b.length<2)continue;let c=new Map;for(let a of b){let b=o.find(b=>a.raw.includes(b))||"",d=c.get(b)||[];d.push(a),c.set(b,d)}for(let d of[...c.keys()].filter(a=>""!==a).length>=2&&!c.has("")?[...c.values()]:[b]){if(d.length<2)continue;let b=d.map(a=>n.find(b=>a.raw.includes(b))||"");if(b.length>=2&&b.every(a=>""!==a)&&new Set(b).size===b.length)continue;let c=d.map(a=>/^([\u4e00-\u9fa5]{2,})([一二三四五六七八九十]|\d+)$/u.exec(a.concept)).filter(a=>null!==a);if(c.length===d.length&&c.length>=2&&1===new Set(c.map(a=>a[1])).size&&new Set(c.map(a=>a[2])).size===c.length)continue;let f=d.map(a=>{let b=a.raw.indexOf("按每");return b>=0?a.raw.slice(0,b):null});if(f.every(a=>null!==a)&&!f.some((a,b)=>!!a&&f.some((c,d)=>b!==d&&!!c&&(a===c||a.includes(c)||c.includes(a))))||d.every(b=>b.occurrences.some(c=>/违约金|解除合同|提高至|自第|逾期超过/u.test(a.slice(Math.max(0,c.matchIndex-30),c.matchIndex+b.raw.length+40)))))continue;let g=[...new Set(d.map(a=>a.value))];if(g.length<2)continue;let h=Math.max(...g);if(h-Math.min(...g)<=.02*h)continue;let i=g.reduce((a,b)=>a+b,0);if([...new Set(d.flatMap(b=>b.occurrences.map(b=>r(a,b.matchIndex))))].some(b=>/(?:总量|合计|总计|共计)/u.test(b)&&/(?:其中|分别为|分为)/u.test(b)&&d.every(c=>c.occurrences.some(c=>r(a,c.matchIndex)===b))&&[...b.matchAll(/\d+(?:\.\d+)?/gu)].some(a=>Math.abs(Number(a[0])-i)<=Math.max(.5,.01*i)))||d.filter(b=>b.occurrences.some(c=>{let d=a.slice(c.matchIndex,c.matchIndex+b.raw.length+12),e=a.slice(Math.max(0,c.matchIndex-12),c.matchIndex);return q(d,b.concept)||q(e,b.concept)})).length>=2||d.length>=2&&d.every((a,b)=>d.every((c,d)=>{if(b>=d||a.value===c.value)return!0;let f=a.concept.length<=c.concept.length?a.concept:c.concept,g=a.concept.length<=c.concept.length?c.concept:a.concept;if(f.length>=4&&f.length<g.length&&g.endsWith(f)&&/^[板梁柱墙底顶]/u.test(f))return!0;let h=(0,e.Qk)(a.concept,c.concept);if(h.length<2)return!1;let i=a.concept.slice(h.start,h.end),j=a.concept.replace(i,""),k=c.concept.replace(i,"");return j.length>0&&k.length>0&&!j.includes(k)&&!k.includes(j)})))continue;let j=d.map(b=>new Set(b.occurrences.map(b=>r(a,b.matchIndex))));if(j.length>=2&&j.every(a=>a.size>0)&&j.every(a=>a.size===j[0].size&&[...a].every(a=>j[0].has(a)))){let a=[...new Set(d.map(a=>p(a.concept)))];if(a.length===d.length&&a.every((b,c)=>a.every((a,d)=>c===d||!b.includes(a)&&!a.includes(b))))continue}if(x.push({concept:d[0].concept,values:d}),x.length>=4)break}if(x.length>=4)break}if(x.length>=4)break}return{groups:x}}function t(a){return a.replace(/㎡/gu,"m2").replace(/m²/giu,"m2").replace(/m³/giu,"m3").replace(/\s+/gu,"").toLowerCase()}function u(a){return a.replace(/[((][^))]*[))]/gu,"").replace(/[\s,,、;;::]/gu,"")}function v(a,b){let c=b.entries??b.billFactLock?.entries??[];if(0===c.length)return[];let d=Math.max(.01,.001*a.value),e=t(function(a){let b=a.occurrences[0];if(!b)return a.unit;let c=a.raw.indexOf(b.valueText);return c<0?a.unit:a.raw.slice(c+b.valueText.length)||a.unit}(a)),f=a.occurrences.map(a=>b.markdown.slice(Math.max(0,a.matchIndex-48),a.matchIndex+a.valueOffset+a.valueText.length+48)).join("\n"),g=[];for(let b of c){if(!Number.isFinite(b.quantity)||b.quantity<=0||Math.abs(b.quantity-a.value)>d)continue;let c=t(b.unit);if(e&&c&&e!==c)continue;let h=function(a,b){let c=u(a),d=u(b);if(c.length<2||d.length<2)return!1;if(c===d)return!0;let e=c.length<=d.length?c:d,f=c.length<=d.length?d:c;return e.length>=3&&f.includes(e)}(b.name,a.concept),i=b.villageGroup.trim().length>=2&&f.includes(b.villageGroup.trim());if((h||i)&&(g.push({entry:b,nameRelated:h}),g.length>=8))break}return g}function w(a,b){if(a.values.length<2)return{verdict:"no-anchor"};let c=b.billFactLock?.entries??[],d=function(a){if(!a)return[];let b=[],c=1,d=(a,d,e,f,g)=>{b.push({seq:c,name:a,description:"",quantity:d,unit:e,section:"",subsection:g,villageGroup:g,sourceFile:f,specQuantityPairs:[]}),c+=1};for(let[b,c]of Object.entries(a)){let a=c.unit||"",e=c.sourceFile||"";for(let f of(Number.isFinite(c.value)&&c.value>0&&d(b,c.value,a,e,""),c.groups||[]))Number.isFinite(f.value)&&!(f.value<=0)&&d(`${b}(${f.group})`,f.value,a,e,f.group)}return b}(b.blueprintQuantities);if(0===c.length&&0===d.length)return{verdict:"no-anchor"};let e=a.values.map(a=>({value:a,matches:v(a,{markdown:b.markdown,entries:[...c,...d]}),billMatches:v(a,{markdown:b.markdown,entries:c})}));if(e.every(a=>a.matches.length>0)&&e.every((a,b)=>e.every((c,d)=>b===d||!a.matches.some(a=>c.matches.some(b=>b.entry.seq===a.entry.seq)))))return{verdict:"distinct-lock-entries",entries:e.map(a=>`「${a.matches[0].entry.name}」(${a.value.value}${a.value.unit})`).join("、")};let f=e.filter(a=>a.billMatches.length>0),g=e.filter(a=>0===a.matches.length);if(1===f.length&&g.length>0&&f.length+g.length===e.length){let a=f[0].billMatches.find(a=>a.nameRelated);if(a)return{verdict:"single-lock-entry",lockValue:a.entry.quantity,lockUnit:a.entry.unit,entryName:a.entry.name,nonLock:g.map(a=>a.value)}}return{verdict:"no-anchor"}}async function x(a,b){let c=await s(a);if(c.degraded)return[c.degraded];if(0===c.groups.length)return[];let d=[],e=[];for(let f of c.groups){let c=w(f,{markdown:a,billFactLock:b?.billFactLock,blueprintQuantities:b?.blueprintQuantities});"distinct-lock-entries"===c.verdict?e.push({group:f,entries:c.entries}):d.push(f)}let f=[];if(d.length>0){let a=d.map(a=>`“${a.concept}”出现多个口径:${[...new Set(a.values.map(a=>a.raw))].slice(0,3).join("、")}`);f.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`同一参数概念出现多口径数值冲突:${a.join(";")}`,suggestion:"以绑定资料(图纸/清单/规范)裁决口径为准统一数值表述:每个参数概念全文只保留一个口径数值,删除矛盾表述。"})}return e.length>0&&f.push({level:"info",severity:"suggestion",category:"fact_consistency",owner:"system",repairability:"not_repair_needed",message:`参数概念多口径已裁决为不同清单条目口径(不构成冲突):${e.map(({group:a,entries:b})=>`“${a.concept}”对应${b}`).join(";")}`,suggestion:"各数值分别对应不同的工程量清单条目,正文已带条目名区分,无需处理。"}),f}},44505:(a,b,c)=>{c.d(b,{$$:()=>e.$$,$h:()=>f.$h,AD:()=>e.AD,BR:()=>f.BR,CJ:()=>e.CJ,Co:()=>f.Co,Dq:()=>d.Dq,EJ:()=>f.EJ,EN:()=>f.EN,Et:()=>e.Et,Fd:()=>f.Fd,Fr:()=>e.Fr,GG:()=>d.GG,GI:()=>f.GI,H:()=>e.H,IJ:()=>e.IJ,Ih:()=>e.Ih,JF:()=>f.JF,KE:()=>e.KE,LA:()=>e.LA,MM:()=>e.MM,N$:()=>f.N$,ON:()=>e.ON,P3:()=>d.P3,Pl:()=>f.Pl,Pt:()=>d.Pt,QM:()=>f.QM,Qc:()=>f.Qc,RD:()=>f.RD,Rv:()=>e.Rv,SZ:()=>f.SZ,Tz:()=>e.Tz,Vc:()=>f.Vc,Vl:()=>e.Vl,Vw:()=>f.Vw,WB:()=>f.WB,WY:()=>e.WY,X_:()=>e.X_,Xc:()=>e.Xc,Y4:()=>f.Y4,YN:()=>e.YN,_D:()=>f._D,__:()=>f.__,a8:()=>e.a8,bq:()=>e.bq,br:()=>f.br,cJ:()=>e.cJ,cT:()=>e.cT,cf:()=>e.cf,cl:()=>e.cl,cv:()=>e.cv,dF:()=>e.dF,dW:()=>f.dW,dc:()=>d.dc,eS:()=>e.eS,ek:()=>e.ek,ev:()=>e.ev,ex:()=>e.N$,fE:()=>f.fE,fI:()=>f.fI,fK:()=>f.fK,fQ:()=>e.fQ,fg:()=>e.fg,g4:()=>f.g4,gD:()=>f.gD,gk:()=>f.gk,hI:()=>d.hI,hu:()=>e.hu,iY:()=>e.iY,ir:()=>f.ir,iy:()=>e.iy,jP:()=>e.jP,kp:()=>f.kp,l4:()=>e.l4,lR:()=>f.lR,m6:()=>e.m6,mB:()=>e.mB,mC:()=>e.Ve,mG:()=>f.mG,nL:()=>f.nL,nW:()=>f.nW,nm:()=>e.nm,qE:()=>e.qE,qG:()=>f.qG,qj:()=>f.qj,r8:()=>e.r8,rA:()=>e.rA,rU:()=>f.rU,r_:()=>f.r_,s3:()=>e.s3,sn:()=>e.sn,u2:()=>e.u2,uL:()=>f.uL,ub:()=>e.ub,vH:()=>e.vH,x5:()=>e.x5,xR:()=>e.xR,y2:()=>e.y2,y4:()=>f.y4,yV:()=>f.yV,z4:()=>d.z4,zP:()=>e.zP,zj:()=>f.zj});var d=c(12863),e=c(35547),f=c(32691)},45304:(a,b,c)=>{c.r(b),c.d(b,{SKILL_HOME_ENV:()=>m,SKILL_STORE_ERROR_CODES:()=>n,SKILL_STORE_VERSION:()=>l,applySkillOverride:()=>s,listStoredSkillRecords:()=>x,loadSkillStore:()=>z,loadSkills:()=>A,readStoredSkillRecord:()=>w,removeStoredSkillRecord:()=>y,resolveSkillHome:()=>o,resolveStoredRecord:()=>t,skillFilePath:()=>q,skillsDir:()=>p,validateStoredRecord:()=>u,writeStoredSkillRecord:()=>v});var d=c(73024),e=c.n(d),f=c(48161),g=c.n(f),h=c(76760),i=c.n(h),j=c(32374),k=c(89759);let l=1,m="CUSTOMIZE_AGENT_HOME",n=["record-id-invalid","record-version-invalid","builtin-skill-not-persistable","stored-skill-missing","stored-skill-source","stored-skill-id-mismatch","override-shape","override-unknown-field","overrides-not-applicable","skill-invalid"];function o(a){if(a&&a.trim().length>0)return i().resolve(a);let b=process.env[m];return b&&b.trim().length>0?i().resolve(b):g().homedir()}function p(a){return i().join(o(a),".customize-agent","skills")}function q(a,b){return i().join(p(b),`${a}.json`)}let r=["match","requires","structure","forbidden","knowledge","acceptance","examples"];function s(a,b){return{...a,...void 0!==b.match?{match:b.match}:{},...void 0!==b.requires?{requires:b.requires}:{},...void 0!==b.structure?{structure:b.structure}:{},...void 0!==b.forbidden?{forbidden:b.forbidden}:{},...void 0!==b.knowledge?{knowledge:b.knowledge}:{},...void 0!==b.acceptance?{acceptance:b.acceptance}:{},...void 0!==b.examples?{examples:b.examples}:{},enabled:a.enabled}}function t(a){if(a.skill)return{skill:{...a.skill,enabled:a.enabled},kind:"user"};let b=(0,j.LB)(a.id);if(b)return{skill:{...s(b,a.overrides??{}),enabled:a.enabled},kind:"override"}}function u(a,b){let c=[];if(("string"!=typeof a.id||0===a.id.trim().length)&&c.push({code:"record-id-invalid",message:"记录 id 不得为空"}),a.v!==l&&c.push({code:"record-version-invalid",message:`记录版本须为 ${l},当前 ${String(a.v)}`}),"boolean"!=typeof a.enabled&&c.push({code:"override-shape",message:'enabled 必须显式为布尔值("没写"与"禁用"不能同形)'}),void 0!==a.overrides)for(let b of Object.keys(a.overrides))r.includes(b)||c.push({code:"override-unknown-field",message:`覆盖字段「${b}」不合法(合法字段:${r.join("/")})`});return void 0!==a.skill&&b.isBuiltin&&c.push({code:"builtin-skill-not-persistable",message:`「${a.id}」是内置技能:F.3 要求内置技能不落盘(随应用版本),只落用户的覆盖/禁用——请改用 overrides 或 enabled`}),void 0!==a.skill&&(a.skill.id!==a.id&&c.push({code:"stored-skill-id-mismatch",message:`记录 id「${a.id}」与技能 id「${a.skill.id}」不一致(文件名即 id,不一致会让读取定位到别的技能)`}),"user"!==a.skill.source&&c.push({code:"stored-skill-source",message:`落盘的自建技能 source 必须为 'user',当前 '${a.skill.source}'`})),void 0===a.skill&&void 0===a.overrides&&!1!==a.enabled&&c.push({code:"stored-skill-missing",message:"记录既没有 skill(自建)也没有 overrides(覆盖),且 enabled 不是 false——这样一条空记录落盘只会污染技能库"}),void 0!==a.skill||void 0===a.overrides||b.isBuiltin||c.push({code:"overrides-not-applicable",message:`overrides 只用于覆盖**内置**技能,而「${a.id}」不是内置 id——用户自建技能请写完整契约(skill 字段)`}),c}function v(a,b){let c=j.d7.some(b=>b.id===a.id),d=u(a,{isBuiltin:c}),f=0===d.length?t(a):void 0;if(0===d.length)if(f)for(let a of(0,k.Yb)(f.skill).errors)d.push({code:"skill-invalid",message:`${a.path||"(root)"}:${a.message}`});else d.push({code:"stored-skill-missing",message:`既不是内置 id「${a.id}」,记录里也没有 skill 字段——无法确定这条记录要覆盖谁`});if(d.length>0)return{ok:!1,errors:d};let g=p(b),h=q(a.id,b),i={v:l,id:a.id,enabled:a.enabled,...a.skill?{skill:a.skill}:{},...a.overrides?{overrides:a.overrides}:{},updatedAt:a.updatedAt??Date.now()};try{e().mkdirSync(g,{recursive:!0});let a=`${h}.tmp`;e().writeFileSync(a,`${JSON.stringify(i,null,2)}
212
+ `,"utf8"),e().renameSync(a,h)}catch(a){return d.push({code:"skill-invalid",message:`写入 ${h} 失败:${a instanceof Error?a.message:String(a)}`}),{ok:!1,errors:d}}return{ok:!0,path:h,record:i}}function w(a,b){try{let c=e().readFileSync(q(a,b),"utf8"),d=JSON.parse(c);if(d?.v!==l||"string"!=typeof d.id)return;return d}catch{return}}function x(a){let b,c=p(a),d=[];try{b=e().readdirSync(c).filter(a=>a.endsWith(".json"))}catch{return{records:[],invalid:d}}let f=[];for(let a of b.sort()){let b=i().join(c,a);try{let c=JSON.parse(e().readFileSync(b,"utf8"));if(c?.v!==l){d.push({file:b,reason:`记录版本 ${String(c?.v)} 与当前 ${l} 不符`});continue}if("string"!=typeof c.id||0===c.id.length){d.push({file:b,reason:"记录缺少 id"});continue}if(c.id!==a.replace(/\.json$/u,"")){d.push({file:b,reason:`文件名与记录 id「${c.id}」不一致`});continue}f.push(c)}catch(a){d.push({file:b,reason:`解析失败:${a instanceof Error?a.message:String(a)}`})}}return{records:f,invalid:d}}function y(a,b){try{return e().unlinkSync(q(a,b)),!0}catch{return!1}}function z(a){let{records:b,invalid:c}=x(a),d=new Map;for(let a of b)d.set(a.id,a);let e=[];for(let a of j.d7){let b=d.get(a.id);if(!b){e.push(a);continue}let c=t(b);e.push(c?c.skill:{...a,enabled:b.enabled})}for(let a of b){if(j.d7.some(b=>b.id===a.id))continue;let b=t(a);b&&e.push(b.skill)}return{skills:e,records:b,invalid:c}}function A(a){return z(a).skills}},45984:(a,b,c)=>{c.d(b,{l:()=>n});var d=c(30355),e=c(44505),f=c(85016),g=c(40299),h=c(23760),i=c(22157),j=c(69527);let k=[...d.P9.filter(a=>!i.Kd.includes(a)),...f.D$.source.split("|")],l=["WRITER_MISSING_SECTION","Writer 未完成"],m=[/:\s*:/u,/;:/u,/。:/u,/。;/u,/;。/u,/。,/u,/,。/u,/。{2,}/u,/、{2,}/u];function n(a,b){let c=[];g.kt.test(a)&&c.push("资料来源罗列句");let d=k.filter(b=>a.includes(b));for(let b of(d.length>0&&c.push(`内部术语“${d.join("”“")}”`),a.matchAll(e.eS)))c.push(`具体日历日期“${b[1]}年${b[2]}月${b[3]}日”`);let f=[...new Set(a.match(e.Ih)||[])];f.length>0&&c.push(`叠词“${f.join("”“")}”`);let i=l.filter(b=>a.includes(b));i.length>0&&c.push(`未完成小节标记“${i.join("”“")}”`),(0,e.nm)(a).length>0&&c.push("元话语声明句"),(0,e.ON)(a).length>0&&c.push("公式形态残留"),(0,e.WY)(a).length>0&&c.push("装饰层工艺参数异常"),(j.IA.filter(b=>b.test(a)).length>0||(0,h.Qm)(a).length>0)&&c.push("占位符"),m.some(b=>b.test(a))&&c.push("截断句残留双冒号"),(0,h.vZ)(a).length>0&&c.push("句读标点叠用/括号不闭合");let n=a.split(/\r?\n/u).map(a=>a.trim()).filter(Boolean),o=n.filter(a=>/^#{2,6}\s+\S/u.test(a)),p=o.filter(a=>/[((]\s*(?:\d{1,3}|[一二三四五六七八九十]{1,3})\s*[))]\s*$/u.test(a));p.length>0&&c.push(`防撞名后缀标题“${p[0]}”`);let q=o.filter(a=>/^####\s+\d+\.\d+(?!\.)\s+\S/u.test(a));if(q.length>0&&c.push(`小节标题降级形态“${q[0]}”`),n.some((a,b)=>b>0&&/^#{2,6}\s+\S/u.test(a)&&/^#{2,6}\s+\S/u.test(n[b-1]))&&c.push("连续标题堆叠(空节风险)"),n.length>1&&/^#{2,6}\s+\S/u.test(n[n.length-1])&&c.push("尾部裸标题(空节风险)"),b){let d=a=>[...a.matchAll(/^###\s+(\S.*)$/gmu)].map(a=>(a[1]||"").trim()),e=d(b),f=d(a);if(f.length<e.length)c.push("删除小节标题");else if(e.length>0){let b=a=>a.replace(/^\d+(?:\.\d+)*\s+/u,"").trim(),d=new Set(f.map(b)),g=[...a.matchAll(/^#{4,6}\s+(.+)$/gmu)].map(a=>b(a[1]||"")),h=[...a.matchAll(/^\*\*(.+)\*\*\s*$/gmu)].map(a=>(a[1]||"").trim()),i=e.map(b).filter(a=>a&&!d.has(a)&&(g.includes(a)||h.includes(a)));i.length>0&&c.push(`小节标题降级“${i[0]}”`)}}return c}},47843:(a,b,c)=>{c.d(b,{y:()=>h});var d=c(37047),e=c(23760),f=c(52437),g=c(98632);async function h(a){let b=a.items.map(a=>a.trim()).filter(Boolean);if(0===b.length)return{total:0,met:0,partial:0,missing:0,simulatedScore:0,criteria:[]};let c=(0,g.KP)(a.markdown),h=(0,g.Uv)(a.markdown).map(a=>a.heading).filter(Boolean),i=(0,f.Js)(a.markdown).join(""),j=await (0,d.Mv)([...c,...h],b,a.embedDocuments),k=b.map((a,b)=>{let f=(0,e.pG)(a),g=f.length>0&&f.some(a=>i.includes(a)),k="",l=0;for(let b of c){let c=j(b,a);c>l&&(l=c,k=b)}if(g||l>=d.Eh)return{index:b,title:a,status:"met",similarity:l,anchor:k?k.split("\n")[0].replace(/^#{1,6}\s+/u,"").slice(0,80):void 0};let m="",n=0;for(let b of h){let c=j(b,a);c>n&&(n=c,m=b)}return n>=d.Eh?{index:b,title:a,status:"partial",similarity:n,anchor:m.replace(/^#{1,6}\s+/u,"").slice(0,80)}:{index:b,title:a,status:"missing",similarity:n}}),l=k.filter(a=>"met"===a.status).length,m=k.filter(a=>"partial"===a.status).length,n=k.filter(a=>"missing"===a.status).length,o=Math.round((l+.5*m)/k.length*100);return{total:k.length,met:l,partial:m,missing:n,simulatedScore:o,criteria:k}}},48479:(a,b,c)=>{c.d(b,{Ng:()=>y,T1:()=>i,Ts:()=>j,Wl:()=>x,bg:()=>m,bv:()=>p,ku:()=>k,sI:()=>h,sf:()=>t});var d=c(51750),e=c(66764),f=c(80439);let g={prepare:{type:"prepare",title:"准备"},understand:{type:"understand",title:"理解资料"},plan:{type:"plan",title:"规划结构"},blueprint:{type:"blueprint",title:"派生蓝图"},write:{type:"write",title:"逐章写作"},close:{type:"close",title:"全篇收口"},deliver:{type:"deliver",title:"交付"}};function h(a,b,c="completed"){let d=g[b];x(a,{batch:{prepare:"generation.prepare",understand:"generation.understanding",plan:"generation.planning",blueprint:"generation.blueprint",write:"generation.write",close:"finalize.pipeline",deliver:"finalize.delivery"}[b],id:i(b),type:d.type,title:d.title,status:c})}function i(a){return`phase:${a}`}function j(a){return`chapter:${a}`}function k(a,b){return void 0===b?`round:${a}`:`round:${a}#${b}`}let l={running:"running",success:"completed",failed:"failed",partial:"repairing",skipped:"blocked"};function m(a,b={}){let c;try{c=(0,d.g0)(a,b.baseDir)}catch{return 0}let f=new Map;for(let a of c){if(!a?.id)continue;let b=f.get(a.id);f.set(a.id,b?{...b,...a}:a)}let g=new Map;for(let a of f.values())a.parentId&&g.set(a.parentId,[...g.get(a.parentId)??[],a]);let h=new Set(["round.decide","round.observe"]),i=0;for(let[c,j]of f){if("running"!==j.status)continue;let f=g.get(c)??[];if(0===f.length){if(!h.has(j.type))continue;(0,d.Rr)(a,{id:c,status:"completed",metrics:{closedBySweep:!0,closedRecordNode:!0}},{baseDir:b.baseDir}),i+=1;continue}if(f.some(a=>!n.has(a.status)))continue;let k=(0,e.TY)(f.map(a=>a.status))??"completed";(0,d.Rr)(a,{id:c,status:k,metrics:{closedBySweep:!0,closedChildren:f.length}},{baseDir:b.baseDir}),i+=1}return i}let n=new Set(["completed","failed","blocked","paused"]),o={"generation.prepare":{phase:"prepare",typeByStageType:{role_binding:"prepare",validation:"prepare",file_understanding:"prepare"},fallbackType:"prepare",parent:"phase",perRound:!1},"generation.understanding":{phase:"understand",typeByStageType:{knowledge_retrieval:"understand",file_understanding:"understand",fact_extraction:"understand",validation:"understand",reference:"understand"},fallbackType:"understand",parent:"phase",perRound:!1},"generation.planning":{phase:"plan",typeByStageType:{validation:"plan",role_binding:"plan",knowledge_retrieval:"plan",fact_extraction:"plan"},fallbackType:"plan",parent:"phase",perRound:!1},"generation.blueprint":{phase:"blueprint",typeByStageType:{validation:"blueprint",file_understanding:"blueprint",chapter_generation:"blueprint"},fallbackType:"blueprint",parent:"phase",perRound:!1},"generation.write":{phase:"write",typeByStageType:{chapter_generation:"write",knowledge_retrieval:"understand"},fallbackType:"write",parent:"phase",perRound:!1},"finalize.rebuild":{phase:"close",typeByStageType:{validation:"close",fact_extraction:"close",reference:"close",knowledge_retrieval:"close"},fallbackType:"close",parent:"phase",perRound:!1},"finalize.repairRounds":{phase:"close",typeByStageType:{validation:"round.fix",reference:"round.fix",llm_review:"round.decide"},fallbackType:"round.fix",parent:"round-by-role",perRound:!1},"finalize.repairHistory":{phase:"close",typeByStageType:{validation:"round.fix",reference:"round.fix",llm_review:"round.decide"},fallbackType:"round.fix",parent:"round-by-role",perRound:!0},"finalize.qualityGates":{phase:"close",typeByStageType:{validation:"close",llm_review:"close",reference:"close",fact_extraction:"close"},fallbackType:"close",parent:"phase",perRound:!1},"finalize.delivery":{phase:"deliver",typeByStageType:{validation:"deliver",reference:"deliver",fact_extraction:"deliver"},fallbackType:"deliver",parent:"phase",perRound:!1},"finalize.pipeline":{phase:"deliver",typeByStageType:{reference:"deliver",validation:"deliver",fact_extraction:"deliver"},fallbackType:"deliver",parent:"phase",perRound:!1},"document.lifecycle":{phase:"prepare",typeByStageType:{validation:"prepare",reference:"prepare"},fallbackType:"prepare",parent:"phase",perRound:!1}};function p(a,b,c){if(a)return v(a,c).seqById.get(b)}function q(a){let b=a.replace(/[^A-Za-z0-9._-]+/gu,"-").replace(/^-+|-+$/gu,"");return b.length>0?b.slice(0,48):"none"}function r(a){let b=0x811c9dc5;for(let c=0;c<a.length;c+=1)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193)>>>0;return b.toString(16).padStart(8,"0")}function s(a){return"chapter_generation"===a.type||/^agent-chapter-task-/u.test(a.roleId||"")}function t(a){return`st.${q(a.type)}.${q(a.roleId||"none")}.${r(s(a)?[a.type,a.roleId||"",a.promptId||"",a.subtitle||"",a.order??""].join("::"):[a.type,a.roleId||"",a.promptId||""].join("::"))}`}let u=new Map;function v(a,b){let c=u.get(a);if(c)return c;let e=(0,d.g0)(a,b),f=new Map,g=0;for(let a of e)f.set(a.id,a.seq),Number.isFinite(a.seq)&&(g=Math.max(g,a.seq+1));let h={nodes:new Map(e.map(a=>[a.id,a])),seqById:f,nextSeq:g};return u.set(a,h),h}function w(a){return"string"!=typeof a||0===a.length?{}:a.length<=160?{note:a,noteChars:a.length}:{note:`${a.slice(0,160)}…`,noteChars:a.length}}function x(a,b){let c=function(a){let b=o[a];if(!b)throw new d.fd("node-log-node-invalid",`批次「${String(a)}」未在迁移台账内(S10.1:逐批迁移)。要迁移新的一批:先在 emitNode.ts 的台账注释与 EMIT_NODE_BATCHES 里登记,再改调用点——半个批次(同一事实两个写入者)比不迁移更糟。`);return b}(b.batch),e=b.stage,h=c.perRound,m=b.baseDir??a.nodeLogBaseDir,p=function(a){let b="string"==typeof a.documentId&&a.documentId.length>0?a.documentId:void 0,c=a.global?.input?.diversitySeed;return b??("string"==typeof c&&c.length>0?c:void 0)}(a),u=p?v(p,m):void 0,x=e?.roleId,y=b.round??(h&&e&&x&&u?function(a,b){let c,d=0;for(let e of a.nodes.values()){let a=/^round:(.+)#(\d+)$/u.exec(e.id);if(!a||a[1]!==b)continue;let f=Number(a[2]);f>d&&(d=f,c=e.status)}return 0===d?1:void 0!==c&&n.has(c)?d+1:d}(u,x):void 0),A=b.type??c.typeByStageType[e?.type??""]??c.fallbackType,B=b.title??(e?"string"==typeof e.title&&e.title.length>0?e.title:String(e.type):void 0)??String(A),C=void 0!==y&&y>1&&!B.includes(`第 ${y} 轮`)?`${B} \xb7 第 ${y} 轮`:B,D=b.status??(e?l[e.status]:void 0)??"running",E=b.progress??e?.progress,F=E&&"completed"===D&&"number"==typeof E.total&&E.total>0&&"number"==typeof E.current&&E.current<E.total?{...E,current:E.total}:E,G=b.issues??function(a){let b=a?.details;if(Array.isArray(b)&&0!==b.length)return b.map(a=>({level:"info",message:a,source:f.BI}))}(e),H={...w(e?.message),...e?{stageType:e.type,stageRoleId:e.roleId||"",...void 0!==e.promptId?{stagePromptId:e.promptId}:{},...void 0!==e.subtitle?{stageSubtitle:e.subtitle}:{},...void 0!==e.order?{stageOrder:e.order}:{}}:{},...void 0!==y?{roundIteration:y}:{},...b.metrics??{}};if(!p||!u)return{...void 0!==y?{round:y}:{},skippedNodes:"no-doc-id"};let I=b.chapterId??(e&&s(e)?function(a){let b=/^agent-chapter-task-(.+)$/u.exec(a.roleId||"");return b?.[1]}(e):void 0),J=b.parentId??(I?j(I):void 0)??("round-by-role"===c.parent&&e?.roleId?k(e.roleId):void 0)??i(c.phase),K=b.id??(e?x&&void 0!==y?k(x,y):t(e):`${q(A)}.${r(`${J}::${C}`)}`),L=m?{baseDir:m}:{},M=J.startsWith("chapter:")?b.chapterTitle:J.startsWith("round:")?b.parentTitle??e?.subtitle??e?.title:b.parentTitle;!function a(b,c,e,f){if(e.nodes.has(c))return;let h=function(a){let b=/^phase:(.+)$/u.exec(a);if(b){let a=g[b[1]];if(a)return{type:a.type,title:a.title}}return a.startsWith("chapter:")?{type:"chapter",title:a.slice(8),parentId:i("write")}:a.startsWith("round:")?{type:"round",title:a.slice(6),parentId:i("close")}:void 0}(c);if(!h)throw new d.fd("node-log-node-invalid",`parentId「${c}」不是本桥认识的结构化 id(phase:* / chapter:* / round:* 三种前缀)。裸 id 的父节点必须先由某个调用点自己 emit 出来——否则补丁会打在空气上(node-log-patch-target-missing)。要新增结构层:在 parseStructuralId 与 PHASE_ROOTS 里显式登记,不要就地拼字符串。`);h.parentId&&a(b,h.parentId,e,{baseDir:f.baseDir});let j=e.nextSeq;e.nextSeq+=1;let k={id:c,...void 0!==h.parentId?{parentId:h.parentId}:{},type:h.type,title:f.title??h.title,seq:j,status:"running",startedAt:Date.now()};(0,d.tS)(b,k,f.baseDir?{baseDir:f.baseDir}:{}),e.nodes.set(k.id,k),e.seqById.set(k.id,j)}(p,J,u,{...void 0!==M?{title:M}:{},...L});let N=u.nodes.get(K),O=b.startedAt??N?.startedAt??Date.now(),P=void 0!==N&&!n.has(N.status),Q=n.has(D)&&!P,R=b.completedAt??(n.has(D)?Q?O:Date.now():void 0),S=Q?{...H,instantEvent:!0}:H;if(N){let a={id:K,status:D,...N.title!==C?{title:C}:{},...void 0!==F?{progress:F}:{},...Object.keys(S).length>0?{metrics:S}:{},...void 0!==G?{issues:G}:{},...void 0!==b.payloadRef?{payloadRef:b.payloadRef}:{},...void 0!==R?{completedAt:R}:{}};(0,d.Rr)(p,a,L),u.nodes.set(K,z(N,a))}else{let a={id:K,parentId:J,type:A,title:C,seq:u.nextSeq,status:D,startedAt:O,...void 0!==R?{completedAt:R}:{},...void 0!==F?{progress:F}:{},...Object.keys(S).length>0?{metrics:S}:{},...void 0!==G?{issues:G}:{},...void 0!==b.payloadRef?{payloadRef:b.payloadRef}:{}};return(0,d.tS)(p,a,L),u.seqById.set(K,a.seq),u.nextSeq+=1,u.nodes.set(K,a),{nodeId:K,seq:a.seq,status:D,...void 0!==y?{round:y}:{}}}return{nodeId:K,seq:u.seqById.get(K)??N.seq,status:D,...void 0!==y?{round:y}:{}}}function y(a,b,c){if("string"!=typeof a||0===a.length)return 0;let e=v(a,c),f=c?{baseDir:c}:{},g=Date.now(),h=w(b),i=0;for(let b of[...e.nodes.values()]){if("running"!==b.status)continue;let c={...b.metrics,...h},j={id:b.id,status:"failed",...Object.keys(c).length>0?{metrics:c}:{},completedAt:g};(0,d.Rr)(a,j,f),e.nodes.set(b.id,z(b,j)),i+=1}return i}function z(a,b){let c=Object.fromEntries(Object.entries(b).filter(([,a])=>void 0!==a));return{...a,...c,id:a.id,startedAt:a.startedAt}}},48661:(a,b,c)=>{c.d(b,{$v:()=>aj,BH:()=>an,BT:()=>af,Gl:()=>H,JU:()=>ar,Jz:()=>as,Oy:()=>R,QG:()=>am,QH:()=>Q,SE:()=>S,UE:()=>ad,YL:()=>aC,Yf:()=>ab,a6:()=>ac,getGeneratedDocument:()=>Y,im:()=>az,jA:()=>ai,listGeneratedDocuments:()=>X,r:()=>ah,v7:()=>al,x7:()=>ag,yE:()=>aq});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(74281),i=c(70610),j=c(37047),k=c(23760),l=c(30055),m=c(87942),n=c(48479),o=c(19898),p=c(44533),q=c(16040),r=c(78217),s=c(80572),t=c(37095);function u(a){return a.title&&"生成中"!==a.title&&"排队中"!==a.title?a.title:`${a.templateName||"文档"}生成失败`}function v(...a){let b=new Map;for(let c of a)for(let a of c||[])a.id&&a.content?.trim()&&b.set(a.id,a);return[...b.values()]}function w(a){return(a||[]).map(a=>({id:a.id,title:a.title,chars:(0,r.V7)(a.content),status:a.inProgress?"in_progress":a.content.trim().length>0?"completed":"failed",updatedAt:Date.now(),timedOut:a.timedOut,elapsedMs:a.elapsedMs}))}let x=globalThis,y=x.__generatedDocumentTasks??=new Map,z=x.__generatedDocumentQueue??=[],A=Math.max(36e5,Number(process.env.DOCUMENT_ABANDONED_RECORD_STALE_MS??864e5)),B=x.__generatedDocumentProcessStartedAt??=Date.now();function C(){return Math.max(3e4,Math.min(3e5,Number(process.env.DOCUMENT_PROGRESS_HEARTBEAT_SAVE_INTERVAL_MS??3e4)))}let D=x.__pausedHeartbeats??=new Map,E=Math.max(Math.max(3e4,Number(process.env.DOCUMENT_RECENT_UPDATE_GRACE_MS??18e4)),3*C()),F=function(a){if(!a||!Number.isFinite(a)||a<=0)return!1;try{return process.kill(a,0),!0}catch(a){return a?.code==="EPERM"}};function G(a){if("generating"!==a.status&&"queued"!==a.status)return{stale:!1};let b=Date.now();if(b-a.updatedAt<E)return{stale:!1};if(a.ownerPid)return F(a.ownerPid)?b-a.updatedAt<A?{stale:!1}:{stale:!0,reason:"heartbeat-lost"}:{stale:!0,reason:"process-exited"};return a.updatedAt<B||b-a.updatedAt>=A?{stale:!0,reason:"owner-unknown"}:{stale:!1}}function H(a=(0,p.aY)()){let b=g.join(f.homedir(),".customize-agent","projects",function(a=(0,p.aY)()){return(0,o.computeProjectId)(g.resolve(a))}(a),"generatedDocuments");return e.mkdirSync(g.join(b,"drafts"),{recursive:!0}),e.mkdirSync(g.join(b,"assets"),{recursive:!0}),b}function I(a=(0,p.aY)()){return g.join(H(a),"index.json")}function J(a=(0,p.aY)()){return g.join(H(a),"assets.json")}function K(a,b=(0,p.aY)()){return g.join(H(b),"drafts",`${a}.json`)}function L(a,b=(0,p.aY)()){return g.join(H(b),"drafts",`${a}.meta.json`)}function M(a,b,c){var d;let e=(0,q.B1)(a,{baseDir:H(b||(0,p.aY)())});return e.noNodeLog?(c&&c.length>0&&(d=a,N.has(d)||(N.add(d),console.warn(`[gen][stages] doc=${d} 读不到节点日志(drafts/${d}.nodes.jsonl):执行阶段视图**保持记录原值**,不拿空表顶替。旧归档(阶段流退役前落盘的文档)没有该文件,属预期;新生成请查节点日志写入路径。`))),c):e.stages}let N=new Set;function O(a,b,c,d){try{(0,n.Ng)(a,c,H(b))}catch(b){console.error(`[gen][stages] doc=${a} 终止标注写节点日志失败(记录照常归档):`,b)}return M(a,b,d)}function P(a,b,c,d,e="success"){(0,n.Wl)({documentId:a},{batch:"document.lifecycle",baseDir:H(b),stage:(0,h.X5$)({type:"validation",roleId:c,status:e,message:d})})}function Q(a,b=(0,p.aY)()){let c=T(L(a,b),null);return c&&Number.isFinite(c.updatedAt)?c:null}function R(a){return!!a&&G(a).stale}function S(a,b=(0,p.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(H(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join((0,p.NW)(b),a.path):null}function T(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function U(a,b){e.mkdirSync(g.dirname(a),{recursive:!0});let c=`${a}.${process.pid}.${Date.now()}.tmp`;e.writeFileSync(c,JSON.stringify(b)),e.renameSync(c,a)}function V(a){for(let b of y.values())if(b.documentId===a)return b;return null}function W(a,b=(0,p.aY)()){if("generating"!==a.status&&"queued"!==a.status||V(a.id)||"queued"===a.status&&z.some(b=>b.documentId===a.id))return a;let c=G(a);if(!c.stale)return a;let d="queued"===a.status?"排队任务未执行(生成进程已退出或服务重启),请重新发起生成":"生成任务已中断,请点击继续生成或重新生成",e=a.checkpointChapters?.length?"warning":"failed";console.warn(`[gen] interrupted: doc=${a.id} reason=${c.reason} ownerPid=${a.ownerPid??"none"} lastHeartbeat=${new Date(a.updatedAt).toISOString()}`);let f={...a,title:u(a),status:e,error:a.error||d,executionStages:O(a.id,b,d,a.executionStages),completedAt:Date.now(),interruptedAt:Date.now(),interruptionReason:c.reason,warningIssues:a.checkpointChapters?.length?[...a.warningIssues||[],d]:a.warningIssues};return a.taskId&&ax(b,{taskId:a.taskId,title:`生成 ${f.title}`,status:"warning"===e?"warning":"error",percent:100,message:d,stages:f.executionStages,error:d}),f}function X(a=(0,p.aY)()){return T(I(a),[]).map(b=>{if("generating"!==b.status&&"queued"!==b.status)return b;let c=T(K(b.id,a),null);if(!c)return b;let d=W(c,a),e=d!==c?ab(d,a,{preserveUpdatedAt:!0}):d;return{...au(e),queuePosition:"queued"===e.status?az(e.id):void 0}}).sort((a,b)=>(b.createdAt||b.updatedAt)-(a.createdAt||a.updatedAt))}function Y(a,b=(0,p.aY)()){var c;let d=T(K(a,b),null);if(!d)return null;let e=W(d,b);return(c=function(a,b=(0,p.aY)()){if("generating"===a.status||!(a.editedMarkdown||a.markdown)?.trim())return a;let c=`document-${a.id}`;if(a.assets?.some(a=>a.id===c&&a.path))return a;let d=ap(a,b);return d?ab({...a,assets:[d,...(a.assets||[]).filter(a=>a.id!==d.id)]},b):a}(e!==d?ab(e,b,{preserveUpdatedAt:!0}):e,b)).draft?{...c,draft:{...c.draft,executionStages:c.draft.executionStages??c.executionStages??[],reviewMetadata:c.draft.reviewMetadata??c.reviewMetadata,checkpointChapters:c.draft.checkpointChapters??c.checkpointChapters??c.draft.chapters}}:c}let Z=(()=>{let a=Number(process.env.DOCUMENT_INDEX_SAVE_INTERVAL_MS);return Number.isFinite(a)&&a>=0?Math.floor(a):3e4})(),$=new Map,_=new Map,aa=new Set(["completed","completed_with_issues","failed","aborted","warning","queued","paused"]);function ab(a,b=(0,p.aY)(),c){let d=Date.now(),e=aw({...a,updatedAt:c?.preserveUpdatedAt?a.updatedAt:d});return U(K(e.id,b),function(a){if(!a.draft)return a;let{executionStages:b,reviewMetadata:c,checkpointChapters:d,...e}=a.draft;return{...a,draft:e}}(e)),U(L(e.id,b),{updatedAt:e.updatedAt,status:e.status,completedAt:e.completedAt,ownerPid:e.ownerPid,ownerStartedAt:e.ownerStartedAt}),!function(a,b,c){let d=I(b),e=Date.now(),f=_.get(d);f||(f=new Set(T(d,[]).map(a=>a.id)),_.set(d,f));let g=$.get(d)??0;if(!(c?.force||aa.has(a.status)||!f.has(a.id))&&e-g<Z)return;let h=T(d,[]).filter(b=>b.id!==a.id);h.unshift(au(a)),U(d,h),$.set(d,e),_.set(d,new Set(h.map(a=>a.id)))}(e,b,{force:c?.forceIndex}),e}function ac(a,b,c=(0,p.aY)()){let d=Y(a,c);return d?ab({...d,...b,id:a},c):null}class ad extends Error{constructor(a,b,c,d){super(a),this.file=b,this.documentId=c,this.hash=d,this.name="RepairSnapshotMissingError"}}function ae(a,b,c){return g.join(function(a,b=(0,p.aY)()){return g.join(H(b),"drafts",`${a}.snapshots`)}(a,c),`${b.replace(/^sha256:/u,"")}.json`)}function af(a,b=(0,p.aY)()){let c=Y(a,b);if(!c)throw new ad(`快照失败:文档不存在 ${a}`,"",a,"");if("generating"===c.status||"queued"===c.status)throw new ad(`快照失败:文档仍在生成中(status=${c.status}),此时拍快照会在回滚时覆盖生成进度`,"",a,"");let f={v:1,documentId:a,capturedAt:Date.now(),recordUpdatedAt:c.updatedAt,markdown:c.markdown||"",editedMarkdown:c.editedMarkdown,wordCount:c.wordCount,status:c.status,warningIssues:c.warningIssues,chapters:(c.draft?.chapters||[]).map(a=>({id:a.id,title:a.title,content:a.content})),draftMarkdown:c.draft?.markdown,validationIssues:c.draft?.validationIssues},h=function(a){let{capturedAt:b,recordUpdatedAt:c,...e}=a;return`sha256:${d.createHash("sha256").update(JSON.stringify(e)).digest("hex")}`}(f),i=ae(a,h,b);return e.mkdirSync(g.dirname(i),{recursive:!0}),e.existsSync(i)||U(i,f),{hash:h,snapshot:f}}function ag(a,b,c=(0,p.aY)()){let d=function(a,b,c=(0,p.aY)()){let d=ae(a,b,c),e=T(d,null);if(!e||1!==e.v||e.documentId!==a)throw new ad(`快照不存在或不可用(${b})——不得假装回滚成功`,d,a,b);return e}(a,b,c),e=Y(a,c);if(!e)throw new ad(`回滚失败:文档不存在 ${a}`,"",a,b);let f=(0,r.V7)(e.editedMarkdown||e.markdown||""),g=new Map(d.chapters.map(a=>[a.id,a.content])),h=(e.draft?.chapters||[]).map(a=>g.has(a.id)?{...a,content:g.get(a.id)}:a),i=new Set((e.draft?.chapters||[]).map(a=>a.id)),j=d.chapters.filter(a=>!i.has(a.id)).map(a=>a.id);if(j.length>0)throw new ad(`回滚失败:快照中的章节在当前记录里已不存在(${j.join("、")})——不合并出第三态`,"",a,b);let k=ab({...e,updatedAt:d.recordUpdatedAt??e.updatedAt,markdown:d.markdown,editedMarkdown:d.editedMarkdown,wordCount:d.wordCount??(0,r.V7)(d.editedMarkdown||d.markdown),status:d.status,warningIssues:d.warningIssues,draft:e.draft?{...e.draft,chapters:h,markdown:d.draftMarkdown??e.draft.markdown,validationIssues:d.validationIssues??e.draft.validationIssues}:e.draft},c,{preserveUpdatedAt:!0});return{beforeChars:f,afterChars:(0,r.V7)(k.editedMarkdown||k.markdown||"")}}function ah(a,b=(0,p.aY)()){let c=Y(a,b);if(!c)return null;if("generating"!==c.status&&"queued"!==c.status)return c;let d="queued"===c.status;if(d){let b=z.findIndex(b=>b.documentId===a);b>=0&&z.splice(b,1)}for(let[b,c]of y)c.documentId===a&&(c.status="aborted",c.controller.abort(),y.delete(b));let e="用户中止",f=[...c.executionStages||[]].reverse().find(a=>"running"===a.status),g=d?"生成队列":f?.subtitle||f?.roleName||f?.roleId,h=O(c.id,b,e,c.executionStages),i=ab({...c,status:"aborted",error:e,executionStages:h,completedAt:Date.now(),abortedAt:Date.now(),abortedBy:"user-api",abortedStage:g},b);console.log(`[gen] aborted by user: doc=${a} stage=${g||"unknown"} taskId=${i.taskId||"none"}`);let j=g?`用户中止(阶段:${g})`:e;return i.taskId&&ax(b,{taskId:i.taskId,title:`生成 ${i.title}`,status:"warning",percent:100,message:j,stages:h,error:e}),d&&aA(),i}function ai(a,b=(0,p.aY)()){let c=Y(a,b);if(!c)return null;if("generating"!==c.status)return c;let d=!1;for(let b of y.values())b.documentId===a&&(b.pauseRequested=!0,d=!0);if(!d)return console.warn(`[gen] pause requested but no live task: doc=${a}`),c;P(a,b,"pause-requested","已请求暂停:将在当前节点边界停住并落盘");let e=ab({...c,executionStages:M(a,b,c.executionStages),updatedAt:Date.now()},b,{forceIndex:!0});return console.log(`[gen] pause requested: doc=${a}`),e}function aj(a,b=(0,p.aY)()){let c=Y(a,b);if(!c||"paused"!==c.status)return c;ak(c.id);let d=aC({title:c.templateName,requirement:c.requirement,resumeDocumentId:c.id},c.projectRoot||b);return console.log(`[gen] resumed from pause: doc=${a} taskId=${d.taskId}`),d}function ak(a){let b=D.get(a);b&&(clearInterval(b),D.delete(a))}function al(){return D.size}function am(a,b=(0,p.aY)()){let c=z.findIndex(b=>b.documentId===a);c>=0&&z.splice(c,1);try{e.rmSync(K(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}let d=I(b),f=T(d,[]).filter(b=>b.id!==a);U(d,f),$.set(d,Date.now()),_.set(d,new Set(f.map(a=>a.id)))}function an(a=(0,p.aY)()){return T(J(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function ao(a,b,c=(0,p.aY)()){let d=Date.now(),e=[...an(c)];for(let c of a){let a=e.findIndex(a=>a.id===c.id),f=c.path?.startsWith("generatedDocuments/assets/")||"generated"===c.status||"prompt_ready"===c.status?"generated":"knowledge_base",h={...c,name:g.basename(c.path||c.url||c.id),source:f,indexed:a>=0&&e[a].indexed,usedByDocumentIds:a>=0?[...new Set([...e[a].usedByDocumentIds,b])]:[b],createdAt:a>=0?e[a].createdAt:d,updatedAt:d};a>=0?e[a]={...e[a],...h}:e.push(h)}return U(J(c),e),e}function ap(a,b=(0,p.aY)()){let c=a.editedMarkdown||a.markdown;if(!c?.trim())return null;let d=`generatedDocuments/assets/${a.title.replace(/[\\/:*?"<>|]/gu,"_").slice(0,120)||"generated-document"}-${a.id}.md`,f=g.join(H(b),d.replace(/^generatedDocuments\//u,""));e.mkdirSync(g.dirname(f),{recursive:!0}),e.writeFileSync(f,c,"utf8");let h={id:`document-${a.id}`,type:"file",role:"generated",path:d,status:"generated",message:"模板运行生成的 Markdown 文档,仅登记到生成资源,不进入知识库"};return ao([h],a.id,b).find(a=>a.id===h.id)||null}function aq(a,b=(0,p.aY)()){return an(b).find(b=>b.id===a)||null}function ar(a,b=(0,p.aY)()){let c=aq(a,b);if(!c)return!1;let d=S(c,b);if(d&&d.startsWith(H(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return U(J(b),an(b).filter(b=>b.id!==a)),!0}function as(a,b,c=(0,p.aY)()){let d=aq(a,c);if(!d)return null;let f=S(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function at(a){let b=Math.max(4,Math.floor((0,s.z)().persistEvidenceMaxItems??10)),c=Math.max(300,Math.floor((0,s.z)().persistEvidenceItemChars??900));return{...a,evidence:(a.evidence||[]).slice(0,b).map(a=>({...a,content:"string"==typeof a.content?a.content.replace(/\s+/gu," ").slice(0,c):""}))}}function au(a){let b=[...a.executionStages||a.draft?.executionStages||[]].reverse().find(a=>a.message||a.subtitle||a.roleId),c=a.partialChapters||w(a.checkpointChapters||a.draft?.checkpointChapters||a.draft?.chapters),d=a.draft?.validationIssues||[],e=a.draft?.exportGate?a.draft.exportGate.blockingIssues?.length??0:d.filter(a=>"blocker"===a.severity||"error"===a.level).length,f=d.filter(a=>"warning"===a.severity||"warning"===a.level).length||a.warningIssues?.length||0,g=d.filter(a=>"suggestion"===a.severity||"info"===a.level).length;return{id:a.id,taskId:a.taskId,templateId:a.templateId,templateName:a.templateName,promptIds:a.promptIds,promptHash:a.promptHash,materialRoot:a.materialRoot,title:a.title,requirement:a.requirement,projectRoot:a.projectRoot,projectId:a.projectId,knowledgeBasePath:a.knowledgeBasePath,status:a.status,createdAt:a.createdAt,updatedAt:a.updatedAt,completedAt:a.completedAt,elapsedMs:a.completedAt?a.completedAt-a.createdAt:a.updatedAt-a.createdAt,error:a.error,warningIssues:(a.warningIssues||[]).slice(0,12),warningCount:f,blockerCount:e,suggestionCount:g,wordCount:(0,r.V7)(a.editedMarkdown||a.markdown||a.draft?.markdown||""),chapterCount:c?.length||a.draft?.chapters?.length||0,completedChapterCount:(c||[]).filter(a=>"completed"===a.status).length,latestStage:b?.subtitle||b?.roleName||b?.roleId,latestMessage:b?.message,assets:(a.assets||[]).slice(0,8),partialChapters:c}}function av(a){if(!a)return a;let b=a.chapterTasks?.map(a=>({...a,evidence:(a.evidence||[]).slice(0,Math.max(4,Math.floor((0,s.z)().persistEvidenceMaxItems??10))).map(a=>({...a,content:"string"==typeof a.content?a.content.replace(/\s+/gu," ").slice(0,Math.max(300,Math.floor((0,s.z)().persistEvidenceItemChars??900))):""})),facts:[],factCount:(a.facts||[]).length}));return{...a,chapterTasks:b,facts:[],factCount:(a.facts||[]).length}}function aw(a){let b=a.draft?{...a.draft,chapters:a.draft.chapters?.map(at),checkpointChapters:a.draft.checkpointChapters?.map(at),agentWorkflow:a.draft.agentWorkflow?av(a.draft.agentWorkflow):a.draft.agentWorkflow}:a.draft;return{...a,draft:b,checkpointChapters:a.checkpointChapters?.map(at),agentWorkflow:a.agentWorkflow?av(a.agentWorkflow):a.agentWorkflow}}function ax(a,b){(0,t.Qf)(a,{id:b.taskId,type:"document",title:b.title,stage:"processing"===b.status?"generating":"error"===b.status?"error":"done",status:b.status,percent:b.percent,message:b.message,error:b.error,details:(b.stages||[]).filter(a=>"role_binding"===a.type||"runtime-prompt-rules"===a.roleId||"document-readiness"===a.roleId||"failed"===a.status).flatMap(a=>[`${a.subtitle||a.roleName||a.roleId}:${a.message||a.status}`,...(a.details||[]).slice(0,8).map(a=>` - ${a}`)]).slice(0,80)})}function ay(){return Math.max(1,Number(process.env.DOCUMENT_MAX_CONCURRENT_GENERATIONS??2))}function az(a){let b=z.findIndex(b=>b.documentId===a);return b>=0?b+1:void 0}function aA(){for(;;){if(y.size>=ay())return;let a=z.findIndex(a=>!function(a,b){for(let c of a)if(c.projectRoot===b)return!0;return!1}(y.values(),a.projectRoot));if(a<0)return;let[b]=z.splice(a,1),c=Y(b.documentId,b.projectRoot);if(c&&"queued"===c.status){P(b.documentId,b.projectRoot,"queue-start","排队完成,开始生成"),P(b.documentId,b.projectRoot,"queue-wait","排队已结束(开始生成)");try{aB({taskId:b.taskId,documentId:b.documentId,resolvedProjectRoot:b.projectRoot,specId:b.specId,title:b.title,promptIds:b.promptIds,materialRoot:b.materialRoot??c.materialRoot,requirement:b.requirement??c.requirement,maxEvidencePerChapter:b.maxEvidencePerChapter??c.maxEvidencePerChapter,existing:null,initial:{...c,taskId:b.taskId,title:"生成中",status:"generating",error:void 0,completedAt:void 0,ownerPid:process.pid,ownerStartedAt:B,executionStages:M(b.documentId,b.projectRoot,c.executionStages),updatedAt:Date.now()},startMessage:"排队完成,文档生成任务已启动"})}catch(d){let a=d instanceof Error?d.message:String(d);console.error(`[gen] queue launch failed: doc=${b.documentId} ${a}`);let c=Y(b.documentId,b.projectRoot);c&&"queued"===c.status&&(ab({...c,title:u(c),status:"failed",error:a,executionStages:O(c.id,b.projectRoot,a,c.executionStages),completedAt:Date.now()},b.projectRoot),ax(b.projectRoot,{taskId:b.taskId,title:`生成 ${c.templateName||c.title}`,status:"error",percent:100,message:a,error:a}))}}}}function aB(a){let{taskId:b,documentId:c,resolvedProjectRoot:d,existing:e,initial:f}=a,g={promptIds:a.promptIds,title:a.title,requirement:a.requirement,materialRoot:a.materialRoot,maxEvidencePerChapter:a.maxEvidencePerChapter,resumeDocumentId:a.resumeDocumentId},p=Date.now();ab(f,d),ax(d,{taskId:b,title:`生成 ${f.title}`,status:"processing",percent:1,message:a.startMessage,stages:f.executionStages});let s=new AbortController,t={},x=function(a,b,c){if(!a)return[];let d=a.reviewMetadata?.workflowVersion?.version||a.draft?.reviewMetadata?.workflowVersion?.version,e=a.projectRoot===c&&a.projectId===(0,o.computeProjectId)(c),f=!!a.promptHash&&a.promptHash===b.promptHash;if(!e||!f||d!==m.x.version)return[];let g=new Set((a.draft?.partialChapters||a.partialChapters||[]).filter(a=>"completed"===a.status).map(a=>a.id));return v(a.draft?.chapters,a.checkpointChapters).filter(a=>g.has(a.id)&&!!a.content?.trim()&&!/WRITER_MISSING_SECTION|Writer 未完成/u.test(a.content))}(e,{promptHash:(0,i.oT)(a.promptIds,a.requirement)},d),z="",A=0,E="",F=Math.max(1e3,Math.min(15e3,Number(process.env.DOCUMENT_PROGRESS_SAVE_INTERVAL_MS??5e3))),G=C(),I=(0,j.Iu)().then(()=>(0,h.OXS)({...g,diversitySeed:c,projectRoot:d,resumeChapters:x,signal:s.signal,nodeLogBaseDir:H(d),shouldPause:()=>t.current?.pauseRequested===!0,onProgress:a=>{try{t.current&&(t.current.lastProgressAt=Date.now());let e=(0,q.lH)(c,{baseDir:H(d)});a?.chapters?.length&&(z=a.chapters.map(a=>`# ${a.title}
213
213
 
214
214
  ${a.content}`).join("\n\n"));let f=Date.now(),g=JSON.stringify({stages:e.map(a=>({type:a.type,roleId:a.roleId,status:a.status,message:a.message,progress:a.progress})),checkpoint:a?.chapters?.map(a=>[a.id,a.content.length,a.sections?.length||0])||[]});if(!a?.chapters&&g===E&&f-A<Math.max(F,G))return;let h=Y(c,d);if(h&&"generating"===h.status){let i=a?.chapters?v(h.checkpointChapters,a.chapters).map(at):h.checkpointChapters,j=i?.length?i.map(a=>`# ${a.title}
215
215
 
216
216
  ${a.content}`).join("\n\n"):h.markdown,k=ab(aw({...h,ownerPid:process.pid,ownerStartedAt:B,executionStages:e,checkpointChapters:i,partialChapters:a?.chapters?w(i):h.partialChapters,markdown:j,wordCount:j?(0,r.V7)(j):h.wordCount}),d),l=[...e].reverse().find(a=>"running"===a.status)||e[e.length-1];ax(d,{taskId:b,title:`生成 ${k.templateName||k.title}`,status:"processing",percent:Math.max(1,Math.min(99,l?.progress?Math.round(l.progress.current/Math.max(1,l.progress.total)*90):30)),message:l?.message||"文档生成中",stages:e});let m=g===E;if(A=f,E=g,console.log(`[gen] progress saved: ${e.length} stages, checkpoint=${i?.length||0}, doc=${c}`),m){let a=process.memoryUsage();console.log(`[gen] memory rss=${Math.round(a.rss/1048576)}MB heap=${Math.round(a.heapUsed/1048576)}MB doc=${c}`)}}}catch(a){console.error("[gen] progress save error:",a)}}})).then(async a=>{t.current&&(t.current.lastProgressAt=Date.now());let e=Y(c,d);if(e?.status==="paused")return!function(a,b){if(D.has(a))return;let c=setInterval(()=>{try{let c=Y(a,b);if(!c||"paused"!==c.status)return void ak(a);ab({...c,ownerPid:process.pid,ownerStartedAt:B,updatedAt:Date.now()},b,{preserveUpdatedAt:!1})}catch(b){console.error(`[gen] paused heartbeat failed: doc=${a}`,b)}},3e4);c.unref?.(),D.set(a,c)}(e.id,d),e;if(!e||"generating"!==e.status)return e??f;let i=/结构化事实读取不足|正文可能未显式覆盖|仅包含文件类型和占位符|不在本次招标范围内|知识库文件索引失败|暂无可检索内容切片|未抽取到结构化事实|兜底片段|资料抽取诊断|无法直接读取文本内容|占位符|缺乏详细的.*具体尺寸|需结合原文件进一步深化|章节生成存在兜底/u,j=a.markdown||"",m=/^##\s+(?!目录$)(?!附录)(?!附表\s*[一二三四五六七八九十\d]{1,3})(?!第[一二三四五六七八九十百千万\d]+章\s+)/gmu.test(j),n=/(?:第?\d+页|P\.?\s*\d+)/iu.test(j),o=/施工方/u.test(j),p=a.validationIssues.filter(a=>"error"===a.level||"warning"===a.level).map(a=>a.suggestion?`${a.message}:${a.suggestion}`:a.message).filter(a=>!/^\s*[[{]/u.test(a)&&!/"status"\s*:/u.test(a)&&!i.test(a)).filter(a=>!/正文存在非正式章二级标题/u.test(a)||m).filter(a=>!/资料页码|文件页码|页码引用/u.test(a)||n).filter(a=>!/禁止内容|施工方/u.test(a)||o).filter(b=>!a.exportGate.passed||!/目录与正文不一致|表格分隔线位置不规范/u.test(b)),q=(0,k.yw)(a.markdown,a.chapters),r=q.filter(a=>"empty"===a.reason),s=q.filter(a=>"too_short"===a.reason);if(r.length>0&&p.unshift(`小节内容补写未完成:仍有 ${r.length} 个空洞小节,请继续生成或补充资料后重试`),s.length>0&&p.unshift(`小节内容偏薄:${s.length} 个小节正文过短(如「${s.slice(0,3).map(a=>a.sectionTitle).join("」「")}」),建议扩写至实质篇幅后重试`),!a.exportGate.passed){let b=a.exportGate.blockingIssues||[],c=a.reviewMetadata?.suspensionChecklist??(0,l.aF)(b,a.chapters);p.unshift((0,l.Fy)(c))}let u=a.pausedByRequest?"paused":a.exportGate.passed?"completed":"completed_with_issues",v=aw({...e,templateName:a.templateName,title:a.title,markdown:a.markdown,status:u,draft:a,executionStages:a.executionStages,partialChapters:a.partialChapters,checkpointChapters:a.chapters,reviewMetadata:a.reviewMetadata,promptProvenance:a.promptProvenance??e.promptProvenance,agentWorkflow:void 0,assets:a.assets||[],completedAt:Date.now(),warningIssues:p}),w=ap(v,d),x=ab({...v,assets:w?[w,...(v.assets||[]).filter(a=>a.id!==w.id)]:v.assets},d);if(a.markdown){let b=(0,h.bsz)(a.markdown);(b.h3.length>0||b.h4.length>0)&&(0,h.Hpz)({documentId:c,templateId:x.templateId||g.title||"document",h3:b.h3,h4:b.h4,createdAt:new Date().toISOString()})}return ao(a.assets||[],c,d),ax(d,{taskId:b,title:`生成 ${x.title}`,status:"completed"===x.status?"success":"warning",percent:100,message:"completed"===x.status?"文档生成完成,已通过导出门禁":`文档生成完成,存在 ${a.exportGate.blockingIssues.length||p.length||1} 项质量提示待人工复核(不影响导出)`,stages:a.executionStages}),x}).catch(a=>{let e=Y(c,d);if(!e||"generating"!==e.status)return e??f;let g=a instanceof Error?a.message:String(a),h=a instanceof Error&&"用户中止"===a.message||s.signal.aborted?"aborted":e.checkpointChapters?.length||z?"warning":"failed",i=z||e.markdown||e.checkpointChapters?.map(a=>`# ${a.title}
217
217
 
218
218
  ${a.content}`).join("\n\n")||"",j=O(c,d,g,e.executionStages),k=ab(aw({...e,title:"failed"===h?u(e):e.title&&"生成中"!==e.title?e.title:`${e.templateName||"文档"}生成未完成`,status:h,error:g,markdown:i,executionStages:j,completedAt:Date.now(),warningIssues:"warning"===h?[...e.warningIssues||[],g]:e.warningIssues}),d);return ax(d,{taskId:b,title:`生成 ${k.title}`,status:"warning"===h?"warning":"error",percent:100,message:g,stages:j,error:g}),k}).finally(()=>{try{let a=(0,n.bg)(c,{baseDir:H(d)});a>0&&console.log(`[gen] 收口清扫:${a} 个容器节点补发终态(子节点已全部终结)`)}catch(a){console.warn("[gen] 收口清扫失败(不影响交付):",a)}y.delete(b),aA()}),J={id:b,documentId:c,specId:a.specId,projectRoot:d,status:"generating",controller:s,promise:I,startedAt:p,lastProgressAt:p};return t.current=J,y.set(b,J),{taskId:b,documentId:c,record:f}}function aC(a,b=(0,p.aY)()){let c=g.resolve(b),e=(0,o.computeProjectId)(c),f=Date.now(),j=a.resumeDocumentId?Y(a.resumeDocumentId,c):null,k=[...new Set((a.promptIds??[]).map(a=>String(a||"").trim()).filter(Boolean))],l=(0,i.oT)(k,a.requirement);if(j){var m;let b=V(j.id),e=b?function(a,b){let c=Y(a.documentId,b);return c&&"generating"===c.status?{taskId:a.id,documentId:a.documentId,record:c,queuePosition:void 0}:null}(b,c):null;if(e)return e;if(y.size>=ay())throw Error(`当前已有 ${y.size} 个文档生成任务在运行(上限 ${ay()}),请等待完成或中止后再运行`);let g=z.findIndex(a=>a.documentId===j.id);g>=0&&z.splice(g,1);let h=`task-${f}-${d.randomBytes(4).toString("hex")}`;P(j.id,c,"resume-generation","已重新进入生成流程;复用通过当前工作流版本、项目与提示词校验的已完成章节,其余章节重新生成");let i=(m={taskId:h,now:f,executionStages:M(j.id,c,j.executionStages)},{...j,taskId:m.taskId,status:"generating",error:void 0,completedAt:void 0,interruptedAt:void 0,interruptionReason:void 0,abortedAt:void 0,abortedBy:void 0,abortedStage:void 0,ownerPid:process.pid,ownerStartedAt:B,executionStages:m.executionStages??j.executionStages,partialChapters:j.partialChapters,checkpointChapters:j.checkpointChapters,draft:void 0,agentWorkflow:void 0,warningIssues:void 0,updatedAt:m.now}),l=(a.requirement||"").trim()?a.requirement:j.requirement||"",n=j.promptIds&&j.promptIds.length>0?j.promptIds:k,o=(a.materialRoot||"").trim()||j.materialRoot,p=(j.templateName||a.title||j.title||"").trim();return{...aB({taskId:h,documentId:j.id,resolvedProjectRoot:c,specId:j.templateId||p||"document",title:p,requirement:l,maxEvidencePerChapter:a.maxEvidencePerChapter,resumeDocumentId:a.resumeDocumentId,promptIds:n,materialRoot:o,existing:j,initial:i,startMessage:"文档生成任务已进入后台队列"}),queuePosition:void 0}}let n=`doc-${f}-${d.randomBytes(4).toString("hex")}`,q=`task-${f}-${d.randomBytes(4).toString("hex")}`,r=(0,h.iAF)({promptIds:k,requirement:a.requirement||"",projectRoot:c,title:a.title}),s={id:n,taskId:q,ownerPid:process.pid,ownerStartedAt:B,templateId:r.id,templateName:r.title,promptIds:k,promptHash:l,materialRoot:(a.materialRoot||"").trim()||void 0,title:"排队中",requirement:a.requirement||"",maxEvidencePerChapter:a.maxEvidencePerChapter,projectRoot:c,projectId:e,knowledgeBasePath:(0,p.NW)(c),markdown:"",status:"queued",assets:[],createdAt:f,updatedAt:f};z.push({taskId:q,documentId:n,specId:r.id,title:r.title,projectRoot:c,requirement:a.requirement,promptIds:k,materialRoot:(a.materialRoot||"").trim()||void 0,maxEvidencePerChapter:a.maxEvidencePerChapter,enqueuedAt:f});let t=az(n)??1;P(n,c,"queue-wait",`已加入生成队列(位次 ${t}):同项目前一任务完成或并发名额空闲后自动开始`,"running");let u={...s,executionStages:M(n,c,void 0)};ab(u,c),ax(c,{taskId:q,title:`生成 ${r.title}`,status:"processing",percent:1,message:`已加入生成队列(位次 ${t}),等待自动接续`,stages:u.executionStages}),aA();let v=V(n);return{taskId:q,documentId:n,record:Y(n,c)||u,queuePosition:v?void 0:az(n)}}},51190:(a,b,c)=>{c.d(b,{nC:()=>k,A:()=>G,GZ:()=>H,qD:()=>I,mN:()=>u,KX:()=>C,UT:()=>t,nD:()=>p,pm:()=>E,Bf:()=>F});var d=c(73024),e=c(76760),f=c(1218),g=c(22157),h=c(48161),i=c(28366),j=c(19898);let k=[{key:"project_name",label:"项目名称",aliases:["项目名称","工程名称","招标项目名称"],valueType:"text"},{key:"project_code",label:"项目编号",aliases:["项目编号","招标项目编号","工程编号"],valueType:"identifier"},{key:"owner",label:"招标人",aliases:["招标人","项目业主","建设单位","发包人","采购人"],valueType:"organization"},{key:"project_location",label:"建设地点",aliases:["建设地点","实施地点","服务地点","交付地点"],valueType:"location"},{key:"project_scale",label:"建设规模",aliases:["建设规模","工程规模","项目规模"],valueType:"scale"},{key:"schedule_requirement",label:"计划工期",aliases:["计划工期","合同工期","总工期","工期","实施周期","服务期限"],valueType:"duration"},{key:"quality_standard",label:"质量标准",aliases:["质量标准","质量目标","验收标准","服务标准"],valueType:"standard"},{key:"project_investment_estimate",label:"合同估算价",aliases:["合同估算价","合同估算价格","投资估算","估算价格","最高投标限价","招标控制价","预算金额"],valueType:"money"},{key:"labor_peak",label:"劳动力高峰人数",aliases:["劳动力高峰","高峰期劳动力","高峰人数","劳动力峰值","高峰期人数","劳动力配置"],valueType:"count"},{key:"assembly_rate",label:"装配率",aliases:["装配率","装配式建筑占比","装配式比例","装配式建筑面积占比"],valueType:"percentage"},{key:"foundation_support_form",label:"基坑支护形式",aliases:["基坑支护形式","基坑支护方式","支护形式","支护方式"],valueType:"text"},{key:"excavation_depth",label:"基坑开挖深度",aliases:["基坑开挖深度","基坑深度","开挖深度","基坑底标高","坑底标高","坡底线","坑底"],valueType:"text"},{key:"award_clause",label:"创优奖惩条款",aliases:["创优奖惩","优质优价","创优目标","奖惩条款","创优奖项"],valueType:"award"}],l=[{pattern:/土钉/u,form:"土钉墙"},{pattern:/锚杆|锚索/u,form:"锚杆支护"},{pattern:/喷锚/u,form:"喷锚支护"},{pattern:/放坡/u,form:"放坡开挖"},{pattern:/地下连续墙/u,form:"地下连续墙"},{pattern:/支护桩/u,form:"支护桩"}];function m(a){return/^(见|详见|参见|按|以).{0,30}(招标公告|招标文件|投标人须知|前附表|合同|附件|图纸|清单|约定|规定|执行)/u.test(a)||/见招标公告|见投标人须知前附表|详见|按.*执行/u.test(a)}function n(a,b){switch(b.valueType){case"duration":if(!/\d+(?:\.\d+)?\s*(?:日历天|天|个月|月|年)/u.test(a))return{rejected:!0,score:-80,reason:"缺少明确工期数值和时间单位"};if(/延误|逾期|违约|赔偿|罚款|处罚|扣除|扣留|切除/u.test(a))return{rejected:!0,score:-90,reason:"命中工期违约条款而非计划工期"};return{rejected:!1,score:45,reason:"包含明确工期数值和时间单位"};case"money":if(!/\d+(?:\.\d+)?\s*(?:万元|元|亿元)/u.test(a))return{rejected:!0,score:-80,reason:"缺少明确金额数值和单位"};if(/综合单价|税率|增值税|利润|报价明细/u.test(a))return{rejected:!0,score:-90,reason:"命中非目标商务明细"};return{rejected:!1,score:45,reason:"包含明确金额数值和单位"};case"standard":if(!/合格|优良|一次性验收|达到|满足|符合/u.test(a))return{rejected:!0,score:-70,reason:"不符合标准类字段表达"};if(/工期|投标|技术标准|有效期/u.test(a))return{rejected:!0,score:-90,reason:"标准字段包含其他字段或投标条款"};return{rejected:!1,score:40,reason:"符合标准类字段表达"};case"location":if(m(a))return{rejected:!1,score:-40,reason:"引用型地点弱值"};if(!/(省|市|区|县|镇|街道|路|园区|大道|巷|内|号)/u.test(a))return{rejected:!1,score:-10,reason:"地点具体性不足"};return{rejected:!1,score:35,reason:"包含具体地址特征"};case"organization":if(/监督管理部门|投标人|中标候选人|评标委员会/u.test(a))return{rejected:!0,score:-90,reason:"组织字段角色串位"};if(/(公司|集团|单位|委员会|机关|中心|局|院|所|政府|运营管理)/u.test(a))return{rejected:!1,score:35,reason:"包含组织名称特征"};return{rejected:!1,score:5,reason:"组织名称特征较弱"};case"identifier":if(!/^[A-Za-z0-9\-_.()()]+$/u.test(a))return{rejected:!0,score:-70,reason:"编号格式不合法"};if(/(?:㎡|m²|m2|m3|m³|平方米|米|万元|元|日历天|个月)/u.test(a))return{rejected:!0,score:-60,reason:"编号中混入量纲单位,疑似字段串位"};return{rejected:!1,score:35,reason:"符合编号格式"};case"scale":if(/\d+(?:\.\d+)?\s*(?:㎡|平方米|m²|米|m|层|栋|座|万元|元)/iu.test(a))return{rejected:!1,score:30,reason:"包含规模数值或单位"};return{rejected:!1,score:5,reason:"规模字段为文本描述"};case"count":if(!/\d+(?:\.\d+)?\s*人/u.test(a))return{rejected:!0,score:-80,reason:"缺少明确人数数值"};if(/面积|工期|金额|报价|万元/u.test(a))return{rejected:!0,score:-70,reason:"人数字段混入其他量纲"};return{rejected:!1,score:40,reason:"包含明确人数数值"};case"percentage":if(!/\d+(?:\.\d+)?\s*(?:%|%)/u.test(a))return{rejected:!0,score:-80,reason:"缺少百分比数值"};if(/工期|金额|报价/u.test(a))return{rejected:!0,score:-70,reason:"百分比字段混入其他量纲"};return{rejected:!1,score:40,reason:"包含百分比数值"};case"award":if(!/(?:杯|奖|万元|优质优价)/u.test(a))return{rejected:!0,score:-70,reason:"缺少奖项或奖惩金额特征"};if(/评标|保证金|报价明细|综合单价/u.test(a))return{rejected:!0,score:-90,reason:"奖项字段串入评标条款"};return{rejected:!1,score:40,reason:"包含奖项/奖惩金额特征"};default:if("project_name"===b.key){if(/存在部位|风险等级|管控措施|监测频次|闭环要求|序号|内容|范围|不适用/u.test(a))return{rejected:!0,score:-90,reason:"项目名称字段串位或表头噪声"};if(!/项目|工程|学院|宿舍|楼|校区|施工总承包/u.test(a))return{rejected:!0,score:-70,reason:"项目名称缺少工程名称特征"};return{rejected:!1,score:35,reason:"符合项目名称特征"}}if("foundation_support_form"===b.key){if(!(l.some(b=>b.pattern.test(a)||a.includes(b.form))||/支护|放坡|锚|桩|喷|开挖|护坡/u.test(a)))return{rejected:!0,score:-70,reason:"基坑支护形式缺少支护工艺特征"};if(/监测|监测频次|闭环/u.test(a))return{rejected:!0,score:-80,reason:"支护形式字段串入监测管控内容"};return{rejected:!1,score:30,reason:"包含支护工艺特征"}}if("excavation_depth"===b.key){if(!/\d+(?:\.\d+)?/u.test(a))return{rejected:!0,score:-70,reason:"基坑开挖深度缺少数值"};if(/监测|监测频次|闭环|验收|支护桩/u.test(a))return{rejected:!0,score:-80,reason:"开挖深度字段串入监测管控内容"};return{rejected:!1,score:30,reason:"包含开挖深度数值"}}return{rejected:!1,score:a.length>=2?10:-20,reason:"文本字段"}}}function o(a,b){let c=(0,f.de)(a.value),d=[],e=30,g=!1;(!c||c.length>260)&&(g=!0,e-=100,d.push("空值或过长")),/###|投标文件的编制|备选投标方案|投标将被否决|投标人提供|投标有效期|电子交易系统|公共资源交易监督管理部门|中标候选|评标委员会|实质性内容作出响应|招标人有权核查/u.test(c)&&(g=!0,e-=100,d.push("大段条款或 Markdown 噪声")),/(?<=[日天])\s*[0-9]+(?:\.[0-9]+)?(?=[\s]*(?:招标|建设|质量|合同|项目|工程|资金|投标|开标|评标|付款|工期|开工|计划|计价|现场|资质|标段|[0-9]{1,3}[.、.]|[,,。;;]|$))/u.test(c)&&(g=!0,e-=100,d.push("值尾部编号粘连,疑似 PDF 编号串行残留")),k.some(a=>a.key!==b.key&&a.aliases.some(a=>c.includes(a)))&&(e-=45,d.push("包含其他字段名,疑似字段串位")),m(c)&&(e-=35,d.push("引用型弱值"));let h=n(c,b);return e+=h.score,d.push(h.reason),h.rejected&&(g=!0),"evidence"===a.sourceType&&(e+=20,d.push("来源为证据原文")),a.sourceName&&/补疑|答疑|澄清|补充|更正|修改/u.test(a.sourceName)&&(e+=35,d.push("补疑/澄清类修正文件,权威最高")),a.sourceName&&/招标文件|招标公告|前附表|合同|需求书|正文/u.test(a.sourceName)&&(e+=15,d.push("来源文件可信")),"generated_markdown"===a.sourceType&&(e-=10),{...a,value:c,confidence:e,rejected:g,reasons:d}}function p(a){let b=`${a.fieldId||""}${a.key||""}${a.fieldName||""}`;return k.find(c=>c.key===a.fieldId||c.aliases.some(a=>b.includes(a)))}let q=/坡底线|坑底标高|基坑底标高|开挖深度|基坑深度/u,r=RegExp(l.map(a=>a.pattern.source).join("|"),"u"),s=/(?:超过|大于|小于|不[大低小]于|不低于|及以上|及以下|以上|以下)/u;function t(a){let b=[],c=new Map,d=new Map;for(let b of a){let a=String(b.content||""),e=b.filePath||b.sectionTitle||"drawing_annotation";if(!("drawing"===b.processingType||/dwg|图纸|CAD/iu.test(`${b.filePath||""} ${b.sectionTitle||""}`))&&!/CAD 语义标注/u.test(a)||!q.test(a)&&!r.test(a))continue;let f=a.split(/\r?\n/u);for(let a=0;a<f.length;a+=1){let b=f[a].trim();if(b){if(q.test(b)&&!/坑底H/u.test(b)&&!s.test(b)){let d=a=>Number.isFinite(a)&&a>=.5&&a<=20,g=b.search(q),h=g<0?0:g+(b.match(q)?.[0].length??0),i=[...b.matchAll(/-?(\d+(?:\.\d{1,3})?)/gu)].filter(a=>{let c=a.index??0,d=b[c-1],e=b.slice(c+a[0].length),f=b[c+a[0].length];return!/^\s*(?:\/|每|m\s*\/\s*s|m2|m²|m3|m³|kg|t|%|℃)/iu.test(e)&&":"!==d&&":"!==f&&"#"!==f}).map(a=>{let b=a.index??0,c=b>=h?b-h:h-(b+a[0].length);return{value:Math.abs(Number(a[1])),distance:c}}).filter(a=>d(a.value));i.sort((a,b)=>a.distance-b.distance||b.value-a.value);let j=i.length>0?i[0].value:NaN,k=!1;if(!Number.isFinite(j)&&a>0&&/^-?[\d.,]+\s*$/u.test(f[a-1].trim())){let b=Math.abs(Number(f[a-1].trim().replace(/,/gu,"")));d(b)&&(j=b,k=!0)}if(Number.isFinite(j)){let d=(k?`${f[a-1].trim()} ${b}`:b).replace(/[|]/gu," ").replace(/\s+/gu," ").trim().slice(0,48),g=`${e}:${j.toFixed(2)}`;c.has(g)||c.set(g,{value:j,context:d})}}if(r.test(b))for(let a of l.filter(a=>a.pattern.test(b)).map(a=>a.form))d.has(a)||d.set(a,{form:a,context:b.replace(/\s+/gu," ").slice(0,60)})}}}if(c.size>0){let a=Math.max(...[...c.values()].map(a=>a.value)),d=[...c.values()].map(a=>a.context).slice(0,3).join(";");b.push({key:"基坑开挖深度",fieldId:"excavation_depth",fieldName:"基坑开挖深度",value:`${a}m(图纸标注:${d})`,sourceFile:"图纸标注",roleId:"drawing",processingType:"drawing",confidence:90})}if(d.size>0){let a=[...d.values()],c=a.map(a=>a.context).slice(0,3).join(";");b.push({key:"基坑支护形式",fieldId:"foundation_support_form",fieldName:"基坑支护形式",value:`${a.map(a=>a.form).join("、")}(图纸标注:${c})`,sourceFile:"图纸标注",roleId:"drawing",processingType:"drawing",confidence:90})}return b}function u(a){return function(a,b=k){let c=new Map;for(let d of b){let b=a.filter(a=>a.fieldKey===d.key).sort((a,b)=>b.confidence-a.confidence),e=b.find(a=>!a.rejected&&a.confidence>0);e&&c.set(d.key,{fieldKey:d.key,label:d.label,value:e.value,source:e.sourceName||e.sourceType,confidence:e.confidence,candidates:b,selectedReason:e.reasons.join(";")})}return c}([...function(a){let b=[];for(let c of a){let a=p(c);if(!a)continue;let d=(0,g.lG)(c.value);b.push(o({fieldKey:a.key,label:a.label,value:d,sourceType:"structured_fact",sourceName:c.sourceFile||c.sourceRef?.sectionTitle||"structured_fact"},a))}let c=k.find(a=>"excavation_depth"===a.key);if(c)for(let d of a){if("excavation_depth"===d.fieldId)continue;let a=(0,g.lG)(d.value),e=`${d.fieldId||""}${d.key||""}${d.fieldName||""} ${a}`;if(!/坡底线|坑底|电梯井|坑底标高/u.test(e))continue;let f=[/±\s*(\d+(?:\.\d{2,3})?)/gu,/-(\d+\.\d{2,3})(?!\d)/gu,/(\d+(?:\.\d+)?)\s*(?:米|m(?![m²³a-zA-Z0-9]))/gu].flatMap(b=>[...a.matchAll(b)].map(a=>Math.abs(Number(a[1])))).filter(a=>Number.isFinite(a)&&a>.5&&a<50);if(0===f.length)continue;let h=Math.max(...f);b.push(o({fieldKey:"excavation_depth",label:c.label,value:`${h}m(图纸标注:${a.slice(0,60)})`,sourceType:"structured_fact",sourceName:d.sourceFile||d.sourceRef?.sectionTitle||"drawing_annotation"},c))}return b}(a.facts),...function(a,b="generated_markdown"){let c=[];for(let d of a.split(/\r?\n/u)){if(!/^\|.*\|\s*$/u.test(d)||/^\|\s*:?-{3,}:?/u.test(d))continue;let a=d.trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>a.replace(/\*\*/gu,"").trim());if(a.length<2)continue;let e="序号"===a[0]&&a.length>=3?a[1]:a[0],f="序号"===a[0]&&a.length>=3?a[2]:a[1],g="序号"===a[0]&&a.length>=4?a[3]:a[2],h=k.find(a=>a.aliases.some(a=>e.includes(a))||a.label===e);!h||!f||/内容|参数|资料未明确|系统暂未确认|暂未从知识库确认/u.test(f)||c.push(o({fieldKey:h.key,label:h.label,value:f,sourceType:"generated_markdown",sourceName:g||b},h))}return c}(a.markdown||"")])}let v={addendum:"clarification",contract:"tender-clause",tender:"tender-clause",boq:"boq-quantity",drawing:"drawing-note",standard:"code"},w={user:100,evidence:55,structured_fact:50,projectGraph:40,generated_markdown:30,derived:20,unknown:10};function x(a,b){let c=v[a];return c?(0,j.carrierStrength)((0,j.domainForAttribute)(b),c):w[a]??10}function y(a){let b=e.join(process.env.HOME||process.cwd(),".customize-agent","cache","document-workflow",(0,g.c6)(a||"default"));return d.mkdirSync(b,{recursive:!0}),b}let z=new Map;function A(a){let b=z.get(a);return b||(b=RegExp(a,"u"),z.set(a,b)),b}function B(a,b,c){let d=`${a||""} ${b||""}`;return(0,j.sourcePriorityOf)(d,c)}function C(a,b=(0,i.bC)()){let c=[];for(let d of["area","cost","duration","floors","parkingSpaces"]){let e=new Set,f=[];for(let c of a){let a=(0,g.lG)(c.value),h=B(c.sourceFile,c.roleId);for(let g of function(a,b,c,d){let e=[],f="area"===b?/(?<![地上地下门卫室值班室配电室配电房泵房水泵房锅炉房公厕车库车棚岗亭传达室警卫室样板房售楼处门房])总?建筑面积|建设规模/u:"cost"===b?/合同估算价|合同估算价格|投资估算|最高投标限价|招标控制价|工程总投资|总投资|工程造价/u:"floors"===b?/总?层数|建筑层数|地上层数|地下层数|楼层数/u:"parkingSpaces"===b?/总?车位|停车位|机动车位|车位数/u:/计划工期|合同工期|总工期|施工周期/u,g="floors"===b||"parkingSpaces"===b?"\\d+(?:[.,]\\d+)?":"\\d{2,}(?:[.,]\\d+)?",h=RegExp(`(?:${f.source})(?:[^0-9\\n]{0,14}?)(${g})\\s*${"area"===b?"(万?㎡|万?m\xb2|万?m2|万?平方米)":"cost"===b?"(万元|亿元|万?元)":"floors"===b?"(层)":"parkingSpaces"===b?"(个|个车位|个停车位)":"(日历天|天|个月|月)"}`,"giu"),i=RegExp(g,"u");for(let g of a.matchAll(h)){let h,j=g[0].match(f),k=j?.[0]||"",l=g[1].replace(/[,,]/gu,"").trim(),m=(g[2]||"").trim();if(!k||!l||!i.test(l))continue;let n=(g.index??0)+(j?.index??0),o=(g.index??0)+g[0].indexOf(g[1]),p=o-(n+k.length),q=a.slice(n+k.length,o);if("area"===b&&/占地|用地/u.test(q))continue;let r=function(a,b,c,d,e,f){let g=a.slice(Math.max(0,b-10),b),h=a.slice(b+c,d),i=`${g}${h}`,{addendumSource:j,amendmentContext:k,thresholdComparison:l,aspirationalPrefix:m}=f.factGovernance;return A(j).test(e||"")&&A(k).test(i)?"amendment":A(l).test(i)?"threshold":A(m).test(g)?"aspirational":"ontological"}(a,n,k.length,o,c,d);if("threshold"!==r&&"aspirational"!==r){if("duration"===b||"floors"===b||"parkingSpaces"===b)h=`${l}|${m}`;else{let a=+!!/万/u.test(m),b=Number(l)*(a?1e4:1);if(!Number.isFinite(b))continue;h=String(/亿元/u.test(m)?1e8*b:/万元/u.test(m)?1e4*b:b)}e.push({scope:k,value:l,unit:m,compareKey:h,contextClass:r,anchorScore:(p<=3?3:p<=9?2:1)+("ontological"===r||"amendment"===r?2:1),gapLength:p})}}return e}(a,d,c.sourceFile,b)){let a=`${c.sourceFile||""}|${g.scope}|${g.compareKey}`;e.has(a)||(e.add(a),f.push({...g,sourceFile:c.sourceFile,priority:h}))}}if(!(f.length<2))for(let[a,e]of f.reduce((a,b)=>{let c=b.scope.replace(/^总/u,""),d=a.get(c)||[];return d.push(b),a.set(c,d),a},new Map)){let f;if(new Set(e.map(a=>a.compareKey)).size<2||new Set(e.map(a=>a.sourceFile).filter(Boolean)).size<2)continue;let g=Math.max(...e.map(a=>a.priority)),h=e.filter(a=>a.priority===g),i=Math.max(...h.map(a=>a.anchorScore)),j=h.filter(a=>a.anchorScore===i),k=1===new Set(j.map(a=>a.compareKey)).size?j[0]:void 0;if(k){let a=k.gapLength>b.factGovernance.weakAnchorGapThreshold;f="amendment"===k.contextClass?a?"medium":"high":a?"low":"medium"}c.push({kind:d,scope:`${a}(${"area"===d?"面积":"cost"===d?"金额":"floors"===d?"层数":"parkingSpaces"===d?"车位数":"工期"}口径)`,values:[...new Map(e.map(a=>[`${a.value}${a.unit}|${a.sourceFile||""}`,{value:a.value,unit:a.unit,sourceFile:a.sourceFile,priority:a.priority}])).values()],resolution:k?`${k.value}${k.unit}`:void 0,...f?{confidence:f}:{}})}}return c}function D(a){let b=new Map;for(let c of a){if(!c.resolution||"low"===c.confidence||b.has(c.kind))continue;let a=c.values.find(a=>`${a.value}${a.unit}`===c.resolution),d=a?a.value.replace(/[,,]/gu,""):"",e=c.values.filter(a=>`${a.value}${a.unit}`!==c.resolution).map(a=>({value:a.value.replace(/[,,]/gu,""),unit:a.unit}));d&&0!==e.length&&b.set(c.kind,{winnerNum:d,losers:e})}return b}function E(a,b){return b?.length?a.map(a=>{let c=function(a,b){let c=a;for(let{winnerNum:a,losers:d}of D(b).values())for(let b of d)b.unit&&c.includes(`${b.value}${b.unit}`)?c=c.split(`${b.value}${b.unit}`).join(`${a}${b.unit}`):c.includes(b.value)&&(c=c.split(b.value).join(a));return c}(a.content,b);return c===a.content?a:{...a,content:c}}):a}function F(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}function G(a,b){let c=D(b);if(0===c.size)return a;let d={area:/建设规模|工程规模|建筑面积|用地面积|占地面积|project_scale|scale/u,cost:/合同估算|投资估算|最高投标限价|招标控制价|总投资|工程造价|project_cost|cost|price|amount/u,duration:/计划工期|合同工期|总工期|施工周期|duration|schedule/u,floors:/总层数|建筑层数|地上层数|地下层数|楼层数|project_floors|floors/u,parkingSpaces:/总车位|停车位|机动车位|车位数|project_parking|parking/u};return a.map(a=>{let b=[...c.keys()].find(b=>d[b].test(a.key)||d[b].test(a.value));if(!b)return a;let{winnerNum:e,losers:f}=c.get(b),g=a.value,h=!1;for(let a of f)a.unit&&g.includes(`${a.value}${a.unit}`)?(g=g.split(`${a.value}${a.unit}`).join(`${e}${a.unit}`),h=!0):g.includes(a.value)&&(g=g.split(a.value).join(e),h=!0);return h?{...a,value:g}:a})}function H(a,b){if(a.length<=1)return a;let c=C(a,(0,i.bC)(b)),d=G(a,c),e=/项目名称|工程名称|招标人|建设单位|建设地点|质量标准|合同价格形式|绿色建筑等级|投标有效期|质保期|劳动力高峰|装配率|支护形式|创优奖惩|结构形式|总层数|建筑层数|建筑面积|建设规模|计划工期|合同工期|总工期/u,h=a=>e.test(`${a.key||""}${a.fieldName||""}${a.fieldId||""}`),j=a=>a.fieldId||a.key||a.fieldName||"",k=new Map;for(let a of d){if(!h(a))continue;let b=j(a),c=k.get(b);if(!c){k.set(b,a);continue}let d=a=>({priority:B(a.sourceFile,a.roleId),normalized:(0,f.de)((0,g.lG)(a.value))}),e=d(c),i=d(a);(i.priority>e.priority||i.priority===e.priority&&i.normalized!==e.normalized&&i.normalized.length<e.normalized.length)&&k.set(b,a)}if(0===k.size)return d;let l=new Set;for(let a of d)h(a)&&k.get(j(a))!==a&&l.add(a);return 0===l.size?d:d.filter(a=>!l.has(a))}function I(a){var b;let c=(0,g.c6)({version:"canonical-facts-v7",rulesHash:(0,i.TG)(a.projectRoot),requirement:a.requirement||"",templateId:a.templateId||"",requiredKeys:a.requiredKeys||[],facts:a.facts.map(a=>({key:a.key,fieldId:a.fieldId,fieldName:a.fieldName,value:a.value,sourceFile:a.sourceFile,roleId:a.roleId,confidence:a.confidence})).sort((a,b)=>`${a.sourceFile}${a.key}${a.value}`.localeCompare(`${b.sourceFile}${b.key}${b.value}`)),graphHash:a.projectGraph?(0,g.c6)(a.projectGraph):"",markdownHash:a.markdown?(0,g.c6)(a.markdown.slice(0,2e4)):""}),j=function(a,b){let c=y(a);if(c)try{let a=JSON.parse(d.readFileSync(e.join(c,`canonical-facts-${b}.json`),"utf8"));return a&&a.byKey&&Array.isArray(a.scopeConflicts)?a:void 0}catch{return}}(a.projectRoot,c);if(j)return j;let l=a.facts||[],m=C(l,(0,i.bC)(a.projectRoot));for(let a of m.map(a=>({caseType:"scope_conflict_arbitration",recordedAt:Date.now(),kind:a.kind,scope:a.scope,values:a.values.map(a=>({value:a.value,unit:a.unit,sourceFile:a.sourceFile,priority:a.priority})),winner:a.resolution,confidence:a.confidence,manualReviewRequired:!a.resolution})))try{d.appendFileSync(e.join(function(){let a=e.join(h.homedir(),".customize-agent","cache","document-workflow","case-log");return d.mkdirSync(a,{recursive:!0}),a}(),"arbitration-cases.jsonl"),`${JSON.stringify(a)}
219
- `,"utf-8")}catch{}let o=G(l,m),p=u({facts:o,markdown:a.markdown}),q={};for(let[a,b]of p.entries())q[a]=function(a){let b=a.source.includes("generated_markdown")?"generated_markdown":a.source.includes("evidence")?"evidence":"structured_fact";return{key:a.fieldKey,label:a.label,value:a.value,normalizedValue:(0,f.de)(a.value),sourceType:b,sourceFile:a.source,confidence:a.confidence,priority:x(b),locked:x(b)>=80,selectedReason:a.selectedReason}}(b);if(q.project_scale){let a=q.project_scale;if(/占地|用地/u.test(a.value)&&/建筑面积/u.test(a.value)){let b=a.value.search(/(?:单体)?总?建筑面积/u);if(b>0){let c=(0,f.wj)(a.value.slice(b)).trim();q.project_scale={...a,value:c,normalizedValue:(0,f.de)(c),selectedReason:`${a.selectedReason};混合口径已净化,scale 只取建筑面积段`}}}}let r=[];for(let a of[{key:"project_name",label:"项目名称",pattern:/项目名称|工程名称|招标项目名称|project_name/u,bucket:"projectIdentity",valueType:"text"},{key:"project_code",label:"项目编号",pattern:/项目编号|招标项目编号|project_code/u,bucket:"projectIdentity",valueType:"identifier"},{key:"owner",label:"招标人",pattern:/招标人|建设单位|发包人|owner/u,bucket:"projectIdentity",valueType:"organization"},{key:"project_location",label:"建设地点",pattern:/建设地点|实施地点|project_location/u,bucket:"projectIdentity",valueType:"location"},{key:"project_scale",label:"建设规模",pattern:/建设规模|工程规模|project_scale/u,bucket:"projectScope",valueType:"scale"},{key:"construction_scope",label:"施工范围",pattern:/施工范围|招标范围|工程范围/u,bucket:"projectScope",valueType:"text"},{key:"duration",label:"计划工期",pattern:/计划工期|合同工期|总工期|schedule_requirement|duration/u,bucket:"schedule",valueType:"duration"},{key:"quality_target",label:"质量目标",pattern:/质量标准|质量目标|quality_standard/u,bucket:"quality",valueType:"standard"}]){let b=function(a,b,c,d,e){let h=k.find(a=>a.key===b);return a.filter(a=>d.test(`${a.fieldId||""}${a.key||""}${a.fieldName||""}`)).map(a=>(function(a,b,c){let d=(0,f.iG)((0,g.lG)(a.value)),e=function(a){let b=`${a.sourceFile||""} ${a.sourceRef?.sectionTitle||""} ${a.roleId||""}`;return/补疑|答疑|澄清|补充|更正|修改/u.test(b)?"addendum":/合同/u.test(b)?"contract":/招标|公告|前附表|需求书/u.test(b)?"tender":/清单|工程量|BOQ|报价/u.test(b)?"boq":/图纸|设计|CAD|DWG/u.test(b)?"drawing":/规范|标准/u.test(b)?"standard":"structured_fact"}(a);return{key:b,label:c,value:d,normalizedValue:(0,f.de)(d),sourceType:e,sourceFile:a.sourceFile,sourceRef:a.sourceRef?.sectionTitle,confidence:(()=>{let b=Number(a.confidence)||.5;return Math.round(100*("rule"===a.processingType&&b>1?.5:Math.min(b,.99)))})(),priority:x(e),locked:x(e)>=80,selectedReason:"按资料来源优先级和字段置信度决策"}})(a,b,c)).filter(a=>a.value&&!/资料未明确|系统暂未确认/u.test(a.value)).filter(a=>{let d=e??h?.valueType;return!d||"text"===d||!n(a.value,{key:b,label:c,aliases:[],valueType:d}).rejected}).sort((a,b)=>b.priority-a.priority||b.confidence-a.confidence||a.value.length-b.value.length)}(o,a.key,a.label,a.pattern,a.valueType);!q[a.key]&&b.length>0&&(q[a.key]=b[0]);let c=function(a,b,c){let d=[...new Map(c.map(a=>[a.normalizedValue,a])).values()];if(d.length<=1)return;let e=Math.max(...d.map(a=>a.priority)),f=d.filter(a=>a.priority===e);return{key:a,label:b,values:d.map(a=>({value:a.value,sourceFile:a.sourceFile,priority:a.priority,confidence:a.confidence})),decision:1===f.length?"highest_priority_selected":"manual_review_required"}}(a.key,a.label,b);c&&r.push(c)}let s=(b=a.projectGraph)?[...(b.resources||[]).map(a=>({key:`resource_${a.type}_${a.name}`,label:"equipment"===a.type?"机械设备":"labor"===a.type?"劳动力":"材料资源",value:[a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" "),normalizedValue:(0,f.de)([a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:x("projectGraph"),locked:!1,selectedReason:"来自项目图谱资源节点"})).filter(a=>a.value),...(b.risks||[]).map(a=>({key:`risk_${a.risk}`,label:"风险源",value:[a.risk,a.level,a.mitigation].filter(Boolean).join(" "),normalizedValue:(0,f.de)([a.risk,a.level,a.mitigation].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:x("projectGraph"),locked:!1,selectedReason:"来自项目图谱风险节点"})).filter(a=>a.value)]:[],t=s.filter(a=>/resource_/u.test(a.key)),v=s.filter(a=>/risk_/u.test(a.key));for(let a of s)q[a.key]||(q[a.key]=a);let w=(a.requiredKeys||[]).filter(a=>!q[a]).map(a=>({key:a,label:k.find(b=>b.key===a)?.label||a,reason:"未从用户输入、招标资料、清单、图纸或项目图谱中确认该事实"})),z={projectIdentity:{projectName:q.project_name,projectCode:q.project_code,owner:q.owner,location:q.project_location},projectScope:{scale:q.project_scale,constructionScope:q.construction_scope},schedule:{duration:q.duration||q.schedule_requirement},quality:{target:q.quality_target||q.quality_standard},safety:{risks:v},resources:{resources:t},environment:{},constraints:{},byKey:q,conflicts:r,gaps:w,scopeConflicts:m},A=y(a.projectRoot);return A&&d.writeFileSync(e.join(A,`canonical-facts-${c}.json`),JSON.stringify(z,null,2)),z}},51750:(a,b,c)=>{c.d(b,{jq:()=>l,fd:()=>m,tS:()=>t,Rr:()=>u,M:()=>o,pc:()=>v,g0:()=>w});var d=c(73024),e=c(76760),f=c(48661),g=c(66764);let h=new Set(["prepare","understand","plan","blueprint","write","close","deliver","chapter","block","turn","turn.generate","turn.selfcheck","turn.act","turn.commit","round","round.observe","round.decide","round.fix","repair.request","repair.localize","repair.impact","repair.transaction","repair.recheck","supervisor","rollback","snapshot","skill.load"]),i=new Set(["failed","paused","repairing","blocked","running","pending","completed"]);function j(a){return"string"==typeof a&&i.has(a)}let k=["id","parentId","type","title","seq","status","startedAt","completedAt","progress","metrics","issues","payloadRef"],l=1;class m extends Error{constructor(a,b,c={},d){super(b,d),this.code=a,this.detail=c,this.name="NodeLogError"}}let n=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;function o(a,b){var c;return e.join((c=b,e.join(c??(0,f.Gl)(),"drafts")),`${p(a)}.nodes.jsonl`)}function p(a){if("string"!=typeof a||!n.test(a))throw new m("node-log-doc-id-invalid",`文档 id 不合法:「${String(a)}」(须为字母数字开头、仅含字母数字/._-、长度 ≤128)`);return a}function q(a){var b;if(!a||"object"!=typeof a)throw new m("node-log-node-invalid","节点必须是对象");let c=new Set(k),d=Object.keys(a).filter(a=>!c.has(a));if(d.length>0)throw new m("node-log-node-invalid",`节点 ${String(a.id)} 含 8.2 之外的字段:${d.join("/")}。硬禁止:节点不得携带载荷(agentWorkflow 已是 p50 2.2 MB / max 94.6 MB)——明细请落 artifacts/<sha256>,节点上只留 payloadRef(附录 F.2)。`);if("string"!=typeof a.id||0===a.id.length)throw new m("node-log-node-invalid","节点 id 不得为空(id 是 rollup 视图的聚合键)");if(void 0!==a.parentId&&("string"!=typeof a.parentId||0===a.parentId.length))throw new m("node-log-node-invalid",`节点 ${a.id} 的 parentId 必须是非空字符串`);if(a.parentId===a.id)throw new m("node-log-node-invalid",`节点 ${a.id} 的 parentId 指向自己(自环会让 children 派生进入死循环)`);if(!("string"==typeof(b=a.type)&&h.has(b)))throw new m("node-log-node-invalid",`节点 ${a.id} 的 type「${String(a.type)}」不在 附录 D.1 的闭集内`);if(!j(a.status))throw new m("node-log-node-invalid",`节点 ${a.id} 的 status「${String(a.status)}」不是合法状态`);if("string"!=typeof a.title)throw new m("node-log-node-invalid",`节点 ${a.id} 缺 title(8.4 的"这个节点做了什么"要靠它)`);if(!Number.isFinite(a.seq))throw new m("node-log-node-invalid",`节点 ${a.id} 的 seq 必须是有限数(节流会 splice 掉数组位置,顺序只能靠它)`);if(!Number.isFinite(a.startedAt))throw new m("node-log-node-invalid",`节点 ${a.id} 的 startedAt 必须是有限数`);if(void 0!==a.completedAt&&!Number.isFinite(a.completedAt))throw new m("node-log-node-invalid",`节点 ${a.id} 的 completedAt 必须是有限数`)}function r(a){if(!a||"object"!=typeof a||"string"!=typeof a.id||0===a.id.length)throw new m("node-log-node-invalid","status/rollup 事件必须带非空 id(补丁要打在谁身上)");if(void 0!==a.startedAt)throw new m("node-log-node-invalid",`补丁不得改写 ${a.id} 的 startedAt(存在事实,不是状态)`);if(void 0!==a.status&&!j(a.status))throw new m("node-log-node-invalid",`补丁 ${a.id} 的 status「${String(a.status)}」不是合法状态`);let b=new Set([...k,"id"]);b.delete("startedAt");let c=Object.keys(a).filter(a=>!b.has(a));if(c.length>0)throw new m("node-log-node-invalid",`补丁 ${a.id} 含 8.2 之外的字段:${c.join("/")}`)}function s(a,b){let c,f=p(a.docId),g=o(f,b),h=a.t??Date.now();if("upsert"===a.op){var i;q(a.node),c={v:l,t:h,op:"upsert",node:{id:(i=a.node).id,...void 0!==i.parentId?{parentId:i.parentId}:{},type:i.type,title:i.title,seq:i.seq,status:i.status,startedAt:i.startedAt,...void 0!==i.completedAt?{completedAt:i.completedAt}:{},...void 0!==i.progress?{progress:i.progress}:{},...void 0!==i.metrics?{metrics:i.metrics}:{},...void 0!==i.issues?{issues:i.issues}:{},...void 0!==i.payloadRef?{payloadRef:i.payloadRef}:{}}}}else r(a.node),c={v:l,t:h,op:a.op,node:{...a.node}};let j=`${JSON.stringify(c)}
219
+ `,"utf-8")}catch{}let o=G(l,m),p=u({facts:o,markdown:a.markdown}),q={};for(let[a,b]of p.entries())q[a]=function(a){let b=a.source.includes("generated_markdown")?"generated_markdown":a.source.includes("evidence")?"evidence":"structured_fact";return{key:a.fieldKey,label:a.label,value:a.value,normalizedValue:(0,f.de)(a.value),sourceType:b,sourceFile:a.source,confidence:a.confidence,priority:x(b),locked:x(b)>=80,selectedReason:a.selectedReason}}(b);if(q.project_scale){let a=q.project_scale;if(/占地|用地/u.test(a.value)&&/建筑面积/u.test(a.value)){let b=a.value.search(/(?:单体)?总?建筑面积/u);if(b>0){let c=(0,f.wj)(a.value.slice(b)).trim();q.project_scale={...a,value:c,normalizedValue:(0,f.de)(c),selectedReason:`${a.selectedReason};混合口径已净化,scale 只取建筑面积段`}}}}let r=[];for(let a of[{key:"project_name",label:"项目名称",pattern:/项目名称|工程名称|招标项目名称|project_name/u,bucket:"projectIdentity",valueType:"text"},{key:"project_code",label:"项目编号",pattern:/项目编号|招标项目编号|project_code/u,bucket:"projectIdentity",valueType:"identifier"},{key:"owner",label:"招标人",pattern:/招标人|建设单位|发包人|owner/u,bucket:"projectIdentity",valueType:"organization"},{key:"project_location",label:"建设地点",pattern:/建设地点|实施地点|project_location/u,bucket:"projectIdentity",valueType:"location"},{key:"project_scale",label:"建设规模",pattern:/建设规模|工程规模|project_scale/u,bucket:"projectScope",valueType:"scale"},{key:"construction_scope",label:"施工范围",pattern:/施工范围|招标范围|工程范围/u,bucket:"projectScope",valueType:"text"},{key:"duration",label:"计划工期",pattern:/计划工期|合同工期|总工期|schedule_requirement|duration/u,bucket:"schedule",valueType:"duration"},{key:"quality_target",label:"质量目标",pattern:/质量标准|质量目标|quality_standard/u,bucket:"quality",valueType:"standard"}]){let b=function(a,b,c,d,e){let h=k.find(a=>a.key===b);return a.filter(a=>d.test(`${a.fieldId||""}${a.key||""}${a.fieldName||""}`)).map(a=>(function(a,b,c){let d=(0,f.iG)((0,g.lG)(a.value)),e=function(a){let b=`${a.sourceFile||""} ${a.sourceRef?.sectionTitle||""} ${a.roleId||""}`;return/补疑|答疑|澄清|补充|更正|修改/u.test(b)?"addendum":/合同/u.test(b)?"contract":/招标|公告|前附表|需求书/u.test(b)?"tender":/清单|工程量|BOQ|报价/u.test(b)?"boq":/图纸|设计|CAD|DWG/u.test(b)?"drawing":/规范|标准/u.test(b)?"standard":"structured_fact"}(a);return{key:b,label:c,value:d,normalizedValue:(0,f.de)(d),sourceType:e,sourceFile:a.sourceFile,sourceRef:a.sourceRef?.sectionTitle,confidence:(()=>{let b=Number(a.confidence)||.5;return Math.round(100*("rule"===a.processingType&&b>1?.5:Math.min(b,.99)))})(),priority:x(e),locked:x(e)>=80,selectedReason:"按资料来源优先级和字段置信度决策"}})(a,b,c)).filter(a=>a.value&&!/资料未明确|系统暂未确认/u.test(a.value)).filter(a=>{let d=e??h?.valueType;return!d||"text"===d||!n(a.value,{key:b,label:c,aliases:[],valueType:d}).rejected}).sort((a,b)=>b.priority-a.priority||b.confidence-a.confidence||a.value.length-b.value.length)}(o,a.key,a.label,a.pattern,a.valueType);!q[a.key]&&b.length>0&&(q[a.key]=b[0]);let c=function(a,b,c){let d=[...new Map(c.map(a=>[a.normalizedValue,a])).values()];if(d.length<=1)return;let e=Math.max(...d.map(a=>a.priority)),f=d.filter(a=>a.priority===e);return{key:a,label:b,values:d.map(a=>({value:a.value,sourceFile:a.sourceFile,priority:a.priority,confidence:a.confidence})),decision:1===f.length?"highest_priority_selected":"manual_review_required"}}(a.key,a.label,b);c&&r.push(c)}let s=(b=a.projectGraph)?[...(b.resources||[]).map(a=>({key:`resource_${a.type}_${a.name}`,label:"equipment"===a.type?"机械设备":"labor"===a.type?"劳动力":"材料资源",value:[a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" "),normalizedValue:(0,f.de)([a.name,a.spec,a.quantity,a.unit].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:x("projectGraph"),locked:!1,selectedReason:"来自项目图谱资源节点"})).filter(a=>a.value),...(b.risks||[]).map(a=>({key:`risk_${a.risk}`,label:"风险源",value:[a.risk,a.level,a.mitigation].filter(Boolean).join(" "),normalizedValue:(0,f.de)([a.risk,a.level,a.mitigation].filter(Boolean).join(" ")),sourceType:"projectGraph",sourceFile:a.sourceFiles?.[0],confidence:55,priority:x("projectGraph"),locked:!1,selectedReason:"来自项目图谱风险节点"})).filter(a=>a.value)]:[],t=s.filter(a=>/resource_/u.test(a.key)),v=s.filter(a=>/risk_/u.test(a.key));for(let a of s)q[a.key]||(q[a.key]=a);let w=(a.requiredKeys||[]).filter(a=>!q[a]).map(a=>({key:a,label:k.find(b=>b.key===a)?.label||a,reason:"未从用户输入、招标资料、清单、图纸或项目图谱中确认该事实"})),z={projectIdentity:{projectName:q.project_name,projectCode:q.project_code,owner:q.owner,location:q.project_location},projectScope:{scale:q.project_scale,constructionScope:q.construction_scope},schedule:{duration:q.duration||q.schedule_requirement},quality:{target:q.quality_target||q.quality_standard},safety:{risks:v},resources:{resources:t},environment:{},constraints:{},byKey:q,conflicts:r,gaps:w,scopeConflicts:m},A=y(a.projectRoot);return A&&d.writeFileSync(e.join(A,`canonical-facts-${c}.json`),JSON.stringify(z,null,2)),z}},51750:(a,b,c)=>{c.d(b,{jq:()=>l,fd:()=>m,tS:()=>t,Rr:()=>u,M:()=>o,pc:()=>v,g0:()=>w});var d=c(73024),e=c(76760),f=c(48661),g=c(66764);let h=new Set(["prepare","understand","plan","blueprint","write","close","deliver","chapter","block","turn","round","round.observe","round.decide","round.fix","repair.request","repair.localize","repair.impact","repair.transaction","repair.recheck","supervisor","skill.load"]),i=new Set(["failed","paused","repairing","blocked","running","pending","completed"]);function j(a){return"string"==typeof a&&i.has(a)}let k=["id","parentId","type","title","seq","status","startedAt","completedAt","progress","metrics","issues","payloadRef"],l=1;class m extends Error{constructor(a,b,c={},d){super(b,d),this.code=a,this.detail=c,this.name="NodeLogError"}}let n=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/u;function o(a,b){var c;return e.join((c=b,e.join(c??(0,f.Gl)(),"drafts")),`${p(a)}.nodes.jsonl`)}function p(a){if("string"!=typeof a||!n.test(a))throw new m("node-log-doc-id-invalid",`文档 id 不合法:「${String(a)}」(须为字母数字开头、仅含字母数字/._-、长度 ≤128)`);return a}function q(a){var b;if(!a||"object"!=typeof a)throw new m("node-log-node-invalid","节点必须是对象");let c=new Set(k),d=Object.keys(a).filter(a=>!c.has(a));if(d.length>0)throw new m("node-log-node-invalid",`节点 ${String(a.id)} 含 8.2 之外的字段:${d.join("/")}。硬禁止:节点不得携带载荷(agentWorkflow 已是 p50 2.2 MB / max 94.6 MB)——明细请落 artifacts/<sha256>,节点上只留 payloadRef(附录 F.2)。`);if("string"!=typeof a.id||0===a.id.length)throw new m("node-log-node-invalid","节点 id 不得为空(id 是 rollup 视图的聚合键)");if(void 0!==a.parentId&&("string"!=typeof a.parentId||0===a.parentId.length))throw new m("node-log-node-invalid",`节点 ${a.id} 的 parentId 必须是非空字符串`);if(a.parentId===a.id)throw new m("node-log-node-invalid",`节点 ${a.id} 的 parentId 指向自己(自环会让 children 派生进入死循环)`);if(!("string"==typeof(b=a.type)&&h.has(b)))throw new m("node-log-node-invalid",`节点 ${a.id} 的 type「${String(a.type)}」不在 附录 D.1 的闭集内`);if(!j(a.status))throw new m("node-log-node-invalid",`节点 ${a.id} 的 status「${String(a.status)}」不是合法状态`);if("string"!=typeof a.title)throw new m("node-log-node-invalid",`节点 ${a.id} 缺 title(8.4 的"这个节点做了什么"要靠它)`);if(!Number.isFinite(a.seq))throw new m("node-log-node-invalid",`节点 ${a.id} 的 seq 必须是有限数(节流会 splice 掉数组位置,顺序只能靠它)`);if(!Number.isFinite(a.startedAt))throw new m("node-log-node-invalid",`节点 ${a.id} 的 startedAt 必须是有限数`);if(void 0!==a.completedAt&&!Number.isFinite(a.completedAt))throw new m("node-log-node-invalid",`节点 ${a.id} 的 completedAt 必须是有限数`)}function r(a){if(!a||"object"!=typeof a||"string"!=typeof a.id||0===a.id.length)throw new m("node-log-node-invalid","status/rollup 事件必须带非空 id(补丁要打在谁身上)");if(void 0!==a.startedAt)throw new m("node-log-node-invalid",`补丁不得改写 ${a.id} 的 startedAt(存在事实,不是状态)`);if(void 0!==a.status&&!j(a.status))throw new m("node-log-node-invalid",`补丁 ${a.id} 的 status「${String(a.status)}」不是合法状态`);let b=new Set([...k,"id"]);b.delete("startedAt");let c=Object.keys(a).filter(a=>!b.has(a));if(c.length>0)throw new m("node-log-node-invalid",`补丁 ${a.id} 含 8.2 之外的字段:${c.join("/")}`)}function s(a,b){let c,f=p(a.docId),g=o(f,b),h=a.t??Date.now();if("upsert"===a.op){var i;q(a.node),c={v:l,t:h,op:"upsert",node:{id:(i=a.node).id,...void 0!==i.parentId?{parentId:i.parentId}:{},type:i.type,title:i.title,seq:i.seq,status:i.status,startedAt:i.startedAt,...void 0!==i.completedAt?{completedAt:i.completedAt}:{},...void 0!==i.progress?{progress:i.progress}:{},...void 0!==i.metrics?{metrics:i.metrics}:{},...void 0!==i.issues?{issues:i.issues}:{},...void 0!==i.payloadRef?{payloadRef:i.payloadRef}:{}}}}else r(a.node),c={v:l,t:h,op:a.op,node:{...a.node}};let j=`${JSON.stringify(c)}
220
220
  `;try{d.mkdirSync(e.dirname(g),{recursive:!0}),d.appendFileSync(g,j,"utf8")}catch(a){throw new m("node-log-write-failed",`节点日志写入失败(S3.2:节点日志是唯一真相源,不可静默丢 ⇒ 停止生成并上报):${g}:${a instanceof Error?a.message:String(a)}`,{docId:f,file:g},{cause:a})}return c}function t(a,b,c={}){return s({docId:a,op:"upsert",node:b,...void 0!==c.t?{t:c.t}:{}},c.baseDir)}function u(a,b,c={}){return s({docId:a,op:"status",node:b,...void 0!==c.t?{t:c.t}:{}},c.baseDir)}function v(a,b){let c,e=p(a),f=o(e,b);try{c=d.readFileSync(f,"utf8")}catch(a){if("ENOENT"===a.code)return{nodes:[],records:[],lineCount:0,tornTail:!1};throw a}let h=c.endsWith("\n"),i=!h&&c.length>0,j=c.lastIndexOf("\n"),k=h?c.slice(0,-1):j>=0?c.slice(0,j):"",n=""===k?[]:k.split("\n"),s=[];for(let a=0;a<n.length;a+=1){let b,c=n[a];if(""!==c.trim()){try{b=JSON.parse(c)}catch(b){throw new m("node-log-corrupt",`节点日志第 ${a+1} 行不是合法 JSON(文件损坏或被外部改写):${f}`,{docId:e,file:f,line:a+1},{cause:b})}s.push(function(a,b,c,d){let e=(a,e)=>new m("node-log-corrupt",`节点日志第 ${d} 行${a}:${c}`,{docId:b,file:c,line:d},void 0===e?void 0:{cause:e});if(!a||"object"!=typeof a)throw e("不是对象");if(a.v!==l)throw e(`版本 v=${String(a.v)} 无法识别(本版本只认 ${l})`);if(!Number.isFinite(a.t))throw e("缺时间戳 t");if("upsert"!==a.op&&"status"!==a.op&&"rollup"!==a.op)throw e(`op「${String(a.op)}」未知`);if(!a.node||"object"!=typeof a.node)throw e("缺 node");try{if("upsert"===a.op)return q(a.node),{v:l,t:a.t,op:"upsert",node:a.node};return r(a.node),{v:l,t:a.t,op:a.op,node:a.node}}catch(a){throw e(`的 node 不合法(${a instanceof Error?a.message:String(a)})`,a)}}(b,e,f,a+1))}}return{nodes:function(a,b,c){let d=new Map;for(let e of a){if("upsert"===e.op){d.set(e.node.id,{...e.node});continue}let a=d.get(e.node.id);if(!a)throw new m("node-log-patch-target-missing",`${e.op} 事件指向 ${e.node.id},但它没有 upsert(append-only 日志里节点必须先出现):${c}`,{docId:b,file:c});d.set(e.node.id,function(a,b){let c=Object.fromEntries(Object.entries(b).filter(([,a])=>void 0!==a));return{...a,...c,id:a.id,startedAt:a.startedAt}}(a,e.node))}return[...d.values()].sort(g.o3)}(s,e,f),records:s,lineCount:n.length,tornTail:i}}function w(a,b){return v(a,b).nodes}},52437:(a,b,c)=>{c.d(b,{A5:()=>m,IZ:()=>j,Js:()=>i,Wi:()=>h,dB:()=>k,fC:()=>e,j6:()=>g});var d=c(52922);function e(a){let b=a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim();return!(!b||/[。!?]/u.test(b))&&(b.match(/第[一二三四五六七八九十百千\d]+[章节篇]/gu)||[]).length+(b.match(/\d+(?:\.\d+)+/gu)||[]).length>=3}function f(a){let b=a.split(/[,,、\s]+/u).map(a=>a.trim()).filter(Boolean);return!(b.length<8)&&b.reduce((a,b)=>a+b.length,0)/b.length<8}function g(a){let b=a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim();return!(b.length<12||(0,d.X9)(b)||e(b))&&!f(b)}function h(a){return a.split("\n").map(a=>a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim()).filter(a=>!(!a||/^#{1,6}\s+/u.test(a)||e(a))&&!/^(?:第[一二三四五六七八九十百\d]+[章节篇]|\d+(?:\.\d+){0,3})\s+[^。;;,,]*$/u.test(a)).join("\n")}function i(a){return a.split("\n").filter(a=>!(0,d.X9)(a)&&!e(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.trim()).filter(a=>a.length>=12).filter(a=>{let b=(a.match(/[\u4e00-\u9fff]/gu)||[]).length,c=a.replace(/\s+/gu,"").length;return b>=8&&b/Math.max(1,c)>=.15}).filter(a=>!f(a))}function j(a){return i(a).reduce((a,b)=>a+b.length,0)}function k(a,b){let c=new Set;for(let d of i(a))for(let a of d.match(b)||[])c.add(a);return c}let l=/\d|确保|保证|杜绝|实行|采用|落实|建立|执行|达到|不低于|不少于|控制在|符合|按照|承诺/u;function m(a){return l.test(a)}},52639:(a,b,c)=>{c.d(b,{Lf:()=>u,SD:()=>A,_C:()=>B,b2:()=>v,bh:()=>E,iJ:()=>G,kO:()=>C,nD:()=>D,zs:()=>F});var d=c(71001);let e="[☑√✔✓■●◼☒⊠▣]",f="[\\uFE0E\\uFE0F\\s()()【】\\[\\]〔〕]*";function g(a){let b=[...a],c=`${b[0]}\\s*${b[1]}`;return[RegExp(`${e}${f}${c}`,"u"),RegExp(`${c}${f}${e}`,"u")]}let h=g("暗标"),i=g("明标"),j=[/暗标(?:评审项目)?的?编制要求/u,/(?<!不)按暗标/u,/(?<!不)(?:采用|执行|实行)暗标(?:评审|方式|编制|形式)/u,/暗标(?:评审|编制)(?:方式|办法|程序)/u],k=[/明标(?:评审项目)?的?编制要求/u,/(?<!不)按明标/u,/(?<!不)(?:采用|执行|实行)明标(?:评审|方式|编制|形式)/u,/明标(?:评审|编制)(?:方式|办法|程序)/u];function l(a,b){for(let c of b){let b=c.exec(a);if(b)return(b[0]||"").trim()}}let m={初号:42,小初:36,一号:26,小一:24,二号:22,小二:18,三号:16,小三:15,四号:14,小四:12,五号:10.5,小五:9,六号:7.5,小六:6.5};function n(a){let b=String(a||"").replace(/[((][^))]*[))]/gu,"").trim();if(b)return({仿宋_GB2312:'"仿宋_GB2312", "FangSong_GB2312", "仿宋", FangSong, serif',仿宋:'"仿宋", FangSong, serif',楷体_GB2312:'"楷体_GB2312", "KaiTi_GB2312", "楷体", KaiTi, serif',楷体:'"楷体", KaiTi, serif',宋体:'"宋体", SimSun, serif',黑体:'"黑体", SimHei, sans-serif'})[b]||`"${b}", serif`}function o(a){let b=String(a||"").replace(/\s+/gu,"");if(!b)return;let c=m[b];if(void 0!==c)return`${c}pt`;let d=/([\d.]+)\s*(?:pt|磅)?/iu.exec(b);return d&&Number.isFinite(Number(d[1]))?`${Number(d[1])}pt`:void 0}let p=/(?:纸张|纸型|用纸)\s*(?:规格|大小|型号)?\s*[::]?\s*(A3|A4|A5)\b|(A3|A4|A5)\s*(?:幅面|纸型|纸张)/iu,q=String.raw`([\d.]+\s*(?:cm|mm|厘米|毫米|inch|in|英寸|pt|磅))`,r=/(?:全文|通篇|全篇|统一|一律)[^。;;\n]{0,8}(?:采用|使用|为|用)\s*([一-鿿A-Za-z_0-9]{2,10})\s*字?体/u,s=/(?:不少于|不低于|至少|最少)\s*(\d{1,4})\s*页/u,t=[/(?:总页数|页数|篇幅)\s*(?:约|大约|控制在)?\s*(\d{1,4})\s*页/u,/(\d{1,4})\s*页左右/u];function u(a,b){if(!b)return{settings:a,applied:[]};let c=[],d={...a||{}},e={...d.page||{}},f={...d.typography||{}},g={...d.targetPages||{}},h=n(b.bodyFont);h&&(f.bodyFont=h,c.push(`正文字体=${h}`));let i=n(b.headingFont);i&&(f.headingFont=i,c.push(`标题字体=${i}`));let j=o(b.bodySize);j&&(f.bodySize=j,c.push(`正文字号=${j}`));let k=o(b.headingSize);k&&(f.titleSize=k,c.push(`标题字号=${k}`));let l=function(a){let b=/([\d.]+)/u.exec(String(a||""));return b&&Number.isFinite(Number(b[1]))?`${Number(b[1])}pt`:void 0}(b.lineHeight);if(l&&(f.lineHeight=l,c.push(`行距=${l}`)),b.gutter&&(e.gutter=b.gutter,c.push(`装订线=${b.gutter}`)),"number"==typeof b.pageLimit&&b.pageLimit>0&&(g.max=b.pageLimit,c.push(`页数上限=${b.pageLimit}`)),!h&&!i){let a=n(b.fontFamily);a&&(f.fontFamily=a,c.push(`通用字体=${a}`))}for(let[a,d,f]of(b.paper&&(e.paper=b.paper,c.push(`纸张=${b.paper}`)),[["marginTop",b.marginTop,"上"],["marginRight",b.marginRight,"右"],["marginBottom",b.marginBottom,"下"],["marginLeft",b.marginLeft,"左"]]))d&&(e[a]=d,c.push(`${f}边距=${d}`));return"number"==typeof b.pageMin&&b.pageMin>0&&(g.min=b.pageMin,c.push(`页数下限=${b.pageMin}`)),"number"==typeof b.pageTarget&&b.pageTarget>0&&(g.target=b.pageTarget,c.push(`目标页数=${b.pageTarget}`)),d.page=e,d.typography=f,Object.keys(g).length>0&&(d.targetPages=g),{settings:d,applied:c}}function v(a){return u(void 0,a).settings}function w(a,b){let c=b.exec(a);return c?(c[0]||"").trim():void 0}let x=[/正文(?:部分)?[\s\S]{0,16}?(?:不得|不允许|禁止|严禁)[\s\S]{0,16}?(?:使用|出现|插入|包含|采用|列入|设置|添加|附带|有|存在)[\s\S]{0,8}?(?:任何|所有|全部|其它|其他)?(?:表格|图表|框图)/u,/(?:不得|不允许|禁止|严禁)[\s\S]{0,10}?(?:在)?正文(?:部分|中|内|里)?[\s\S]{0,10}?(?:使用|出现|插入|包含|采用|列入|设置|添加|附带|有|存在)[\s\S]{0,8}?(?:任何|所有|全部|其它|其他)?(?:表格|图表|框图)/u,/(?:任何|所有|全部|其它|其他)?(?:表格|图表|框图)[\s\S]{0,16}?(?:一律|均|全部|都)?(?:不得|不允许|禁止|严禁)[\s\S]{0,12}?(?:出现|写入|进入|列入|使用|用于|插入)[\s\S]{0,12}?正文/u,/正文(?:部分)?[\s\S]{0,12}?(?:一律|均|只能|仅)[\s\S]{0,8}?(?:纯文字|文字表述|文字叙述|文字描述)(?![\s\S]{0,2}?(?:结合|及|与|和))/u],y=/颜色|彩色|单色|黑白|无关|不相干|非文字需要/u,z=[/文字(?:表述|叙述|说明|描述)?[\s\S]{0,4}?(?:结合|相结合)[\s\S]{0,4}?(?:图表|表格|框图)/u,/除(?:采用)?文字(?:表述|叙述)?外[\s\S]{0,4}?(?:可|可以)?附[\s\S]{0,4}?(?:下列|如下|相关|相应)?(?:图表|表格|框图)/u,/(?:横道图|网络图|进度(?:表|图)|平面布置图|框图|表格|图表)[\s\S]{0,26}?(?:自行确定|由投标人自定|不作规定|不作限制|不做要求)/u,/(?:表格|图表|框图)[\s\S]{0,16}?(?:可采用|可用|可以使用|应采用)[\s\S]{0,6}?A3/u,/(?:施工进度(?:表|图)?|总进度(?:表|图|计划)?|进度计划)[\s\S]{0,8}?(?:可|应)?采用[\s\S]{0,6}?(?:网络图|横道图)/u,/(?:图表|框图|表格)[\s\S]{0,10}?(?:一律|均|全部)[\s\S]{0,6}?单(?:黑色|色)/u,/图表及格式要求附后/u];function A(a){let b=[...a.tenderTexts,a.requirement||""].filter(Boolean).join("\n").replace(/\\n/gu,"\n").replace(/\r/gu,""),c=[],e=function(a){let b=[];for(let c of a.matchAll(/施工组织设计\s*采用\s*[::]?/gu)){let d=c.index||0;b.push(a.slice(d,d+320))}return b}(b),f=e.length>0?e.join("\n"):b,g=l(f,h),m=l(f,i),n=l(b,j),o=l(b,k),u="unknown";g?(u="blind",c.push(`标书类型勾选证据:${g}`)):m?(u="open",c.push(`标书类型勾选证据:${m}`)):n?(u="blind",c.push(`结构证据:识别到「${n}」条款(语义判定通道——勾选标记不可见或未被提取时的兜底,招标文件为该标段设定暗标编制条款)`)):o&&(u="open",c.push(`结构证据:识别到「${o}」条款(语义判定通道——按明标口径编制)`));let v=w(b,/正文内不允许[\s\S]{0,24}?出现非文字需要的其他任何符号和标志/u),A=w(b,/不得有图片和扉页|不得有图片/u),B=l(b,x),C=l(b,z),D=B&&!y.test(B)?B:void 0,E=D?"forbidden":"allowed";D?c.push(`正文禁表证据:${D}`):(C&&c.push(`正文表格允许证据:${C}`),v&&c.push(`排版格式证据:${v}(禁与投标内容无关符号标记的排版条款,不构成正文禁表)`));let F="blind"===u||A?"forbidden":"allowed";A&&c.push(`图片口径证据:${A}`);let G=(0,d.eB)(b).titles.map(a=>{let b=a.replace(/^附表\s*/u,"").split(/\s+/u)[0]||"",c=a.replace(/^附表\s*[一二三四五六七八九十\d]{1,3}\s*/u,"").trim();return{no:b,title:a,.../施工设备表|机械设备表|施工机械.*设备/u.test(c)?{kind:"table",dataSource:"blueprint.equipment"}:/试验.*仪器|检测仪器|试验仪器|仪器设备表/u.test(c)?{kind:"table",dataSource:"blueprint.testInstruments"}:/劳动力/u.test(c)?{kind:"table",dataSource:"blueprint.labor"}:/临时用地/u.test(c)?{kind:"table",dataSource:"blueprint.tempLand"}:/网络图|进度图|横道图|开.*竣工/u.test(c)?{kind:"figure",dataSource:"blueprint.schedule"}:/总平面/u.test(c)?{kind:"figure",dataSource:"blueprint.tempLand"}:{kind:"table",dataSource:"manual"}}});G.length>0&&c.push(`文末附表清单 ${G.length} 项:${G.map(a=>a.title).join("、")}`);let H=/正文(?:部分)?(?:一律|均)?采用\s*(小?[一二三四五六七八九十]号)?\s*([\u4e00-\u9fffA-Za-z_]{2,10})/u.exec(b),I=/大标题用\s*([小]?[一二三四五六七八九十]号)\s*([\u4e00-\u9fffA-Za-z_]{2,10})/u.exec(b),J=/装订线\s*([\d.]+\s*[-~-—]\s*[\d.]+\s*cm|[\d.]+\s*cm)/u.exec(b),K=/行间距为固定值\s*(\d+)\s*磅/u.exec(b),L=/(?:总页数上限|页数上限)\s*[::]?\s*(\d+)|不得超过\s*(\d+)\s*页/u.exec(b),M=H?.[2]?`${H[2]}${/GB2312/iu.test(b)?"(GB2312)":""}`:void 0,N=I?.[2]||void 0,O=function(a){let b={},c=(a,c)=>{if(c)for(let d of a)b[d]=c.replace(/\s+/gu,"").replace(/(?:厘米|公分|cm)$/iu,"cm").replace(/(?:毫米|mm)$/iu,"mm").replace(/(?:英寸|inch|in)$/iu,"in").replace(/(?:磅|pt)$/iu,"pt")},d=RegExp(`(?:上下左右|四边|四侧)[^\\d]{0,10}${q}`,"u"),e=RegExp(`(?:上下|上、下)[^\\d]{0,10}${q}`,"u"),f=RegExp(`(?:左右|左、右)[^\\d]{0,10}${q}`,"u"),g=RegExp(`(?:^|[^以上下左右])(上|下|左|右)\\s*(?:页边距|边距)?\\s*[::]?\\s*(?:为|是|均|各)?\\s*${q}`,"u");for(let b of[...a.matchAll(/[^。;;\n]{0,24}(?:页边距|页边空白|边距)[^。;;\n]{0,80}/gu)].map(a=>a[0]||"")){c(["marginTop","marginRight","marginBottom","marginLeft"],d.exec(b)?.[1]),c(["marginTop","marginBottom"],e.exec(b)?.[1]),c(["marginLeft","marginRight"],f.exec(b)?.[1]);let a=g.exec(b);a?.[1]&&a[2]&&c([{上:"marginTop",下:"marginBottom",左:"marginLeft",右:"marginRight"}[a[1]]],a[2])}return b}(b),P=Number(s.exec(b)?.[1])||void 0,Q=P?void 0:t.map(a=>a.exec(b)?.[1]).find(Boolean),R={monoColor:!!/一律单黑色|全部单黑色|均单黑色/u.test(b)||void 0,cover:/不设内封(?:面)?/u.test(b)?"forbidden":void 0,headersFooters:/不需编制页眉、页脚|不编制页眉|不需要页眉|不需编制页眉/u.test(b)?"forbidden":void 0,bodyFont:M,bodySize:H?.[1]||void 0,headingSize:I?.[1]||void 0,headingFont:N,gutter:J?.[1]?.replace(/\s+/gu,"")||void 0,lineHeight:K?.[1]?`固定值${K[1]}磅`:void 0,pageLimit:L&&Number(L[1]||L[2])||void 0,fontFamily:M||N?void 0:function(a){let b=r.exec(a)?.[1]?.trim();if(b)return b.replace(/字$/u,"")||void 0}(b),paper:(p.exec(b)?.[1]||p.exec(b)?.[2])?.toUpperCase()||void 0,...O,pageMin:P&&P>0?P:void 0,pageTarget:Number(Q)>0?Number(Q):void 0},S=[R.marginTop?`上${R.marginTop}`:"",R.marginRight?`右${R.marginRight}`:"",R.marginBottom?`下${R.marginBottom}`:"",R.marginLeft?`左${R.marginLeft}`:""].filter(Boolean),T=[R.paper?`纸张=${R.paper}`:"",S.length>0?`页边距=${S.join("/")}`:"",R.fontFamily?`通用字体=${R.fontFamily}`:"",R.pageMin?`页数下限=${R.pageMin}`:"",R.pageTarget?`目标页数=${R.pageTarget}`:""].filter(Boolean);T.length>0&&c.push(`格式证据:${T.join(";")}`);let U=/明示或暗示具体投标人|以往的施工业绩/u.test(b);U&&c.push("投标人身份禁语证据:任何部位、任何条文出现明示或暗示具体投标人的说明及标记(包括以往的施工业绩等)");let V=[];if("forbidden"===E&&(a.requiredTables||[]).length>0)for(let b of a.requiredTables||[]){let a=b.trim();if(!a)continue;let c=G.find(b=>(function(a,b){let c=a.replace(/^附表\s*[一二三四五六七八九十\d]{1,3}\s*/u,"").replace(/\s+/gu,"").replace(/表$/u,""),d=b.replace(/\s+/gu,"").replace(/表$/u,"");return!!c&&!!d&&(c.includes(d)||d.includes(c))})(b.title,a));V.push({rule:`提示词必需表格《${a}》`,source:"用户提示词",resolution:c?`招标正文禁表(显式禁表句):该表已收敛入文末《${c.title}》,正文不再输出表格`:"招标正文禁表(显式禁表句):该表取消表格形式,数据以对应章节文字表述呈现"})}return{bidType:u,bodyTablePolicy:E,bodyFigurePolicy:F,appendixPlan:G,formatRules:R,identityMarksForbidden:U,conflicts:V,evidence:c}}function B(a){return a?.bodyTablePolicy==="forbidden"}function C(a){return a?.bodyFigurePolicy==="forbidden"}function D(a){if(!a)return"";let b="forbidden"===a.bodyTablePolicy,c="forbidden"===a.bodyFigurePolicy;if(!b&&!c&&!a.formatRules.monoColor&&!a.identityMarksForbidden)return"";let d=["【正文编制口径(招标文件要求,硬性验收项)】"];return b?(d.push("1. 正文一律纯文字表述:不得输出任何 Markdown 表格或管道符表格结构;数据性内容以段落文字表述(人数、台数、工艺参数、计划节点等数值一律原样引用蓝图权威锚点,不得编造或自设)。"),d.push("2. 结构化数据表由系统在文末附表区按招标附表清单统一生成,正文不重复列出表格。")):(d.push("1. 正文表格按系统表格计划输出:只输出任务中明确列出的表格(表格计划),不得自行新增、改名或改变列结构;数据一律原样引用蓝图权威锚点,不得编造或自设。"),d.push("2. 图类数据(进度/网络/横道/平面布置等)以表格化数据表达,不绘制图片;表格与图类数据位置服从任务中给定的表格计划。")),c&&d.push(`${d.length}. 不得插入图片、Markdown 图片语法或图件占位;图类内容由系统统一数据化处理。`),a.formatRules.monoColor&&d.push(`${d.length}. 表格与文字一律单黑色(黑白)表述,不得出现彩色标注、高亮或颜色说明。`),a.identityMarksForbidden&&d.push(`${d.length}. 不得出现任何明示或暗示具体投标人的说明及标记(投标人名称、以往施工业绩、获奖情况等一律不得写入正文)。`),d.join("\n")}function E(a){return`招标正文禁表(显式禁表句,违反即施工组织设计部分不得分):本章正文出现 ${a} 处 Markdown 表格结构。请把每处表格的承载数据改写为段落式连贯叙述(数值、口径保持不变,数据原样保留),删除表格表头与分隔线结构;不得新增或删除其它正文内容。`}function F(a){return`本章正文出现 ${a} 处 Markdown 表格结构,但本章未列入系统表格计划(正文表格须由招标附表清单与评分要求统一规划,不得自设)。请将表格承载数据改写为段落式连贯叙述(数值、口径保持不变),删除表格表头与分隔线结构;确属必要的表格由系统在表格计划中补齐,不得新增其它正文内容。`}function G(a){let b="blind"===a.bidType?"暗标":"open"===a.bidType?"明标":"未识别(按常规口径)",c=[`标书类型:${b}`,`正文表格:${"forbidden"===a.bodyTablePolicy?"禁表格(招标显式禁表句)":"允许(表格按系统表格计划输出)"}`,`正文图片:${"forbidden"===a.bodyFigurePolicy?"禁图片(图类数据化输出)":"允许"}`,a.appendixPlan.length>0?`文末附表 ${a.appendixPlan.length} 项(表类 ${a.appendixPlan.filter(a=>"table"===a.kind).length} / 图类 ${a.appendixPlan.filter(a=>"figure"===a.kind).length})`:"未识别文末附表清单",a.formatRules.pageLimit?`总页数上限 ${a.formatRules.pageLimit} 页`:""].filter(Boolean),d=[...a.evidence.map(a=>`证据:${a}`),..."unknown"===a.bidType?["核查指引:检索招标文件「施工组织设计采用」勾选项(标记字符变体 ☑/√/■/▣ 与「按暗标/采用暗标评审」语义条款均已覆盖)或「暗标编制要求」条款,确认标书类型后重跑以切换编制口径"]:[],...a.appendixPlan.map(a=>`附表${a.no}:${a.title}(${"figure"===a.kind?"图类\xb7编制人补图":`数据源 ${a.dataSource}`})`),a.formatRules.gutter?`格式:装订线 ${a.formatRules.gutter}${a.formatRules.lineHeight?`、行距${a.formatRules.lineHeight}`:""}`:"",a.formatRules.bodyFont?`格式:正文 ${[a.formatRules.bodySize,a.formatRules.bodyFont].filter(Boolean).join(" ")}${a.formatRules.headingSize?`、大标题 ${a.formatRules.headingSize}`:""}`:"","forbidden"===a.formatRules.cover?"格式:不设内封面(终稿移除封面块)":"",a.formatRules.monoColor?"格式:图表一律单黑色":"",a.identityMarksForbidden?"身份禁语:正文不得出现投标人名称/以往业绩等标记":"",...a.conflicts.map(a=>`冲突裁决:${a.rule}——${a.resolution}`)].filter(Boolean);return{status:"unknown"===a.bidType?"skipped":"success",message:"unknown"===a.bidType?"⚠ 标书类型未判定(告警):未识别到「本项目施工组织设计采用:□明标/☑暗标」勾选标记与暗标编制要求语义证据,本次按常规口径生成(正文表格策略按招标证据判定、正文图片允许)——若本项目实为暗标,正文图片与投标人标记可能未被禁止(暗标通常不得出现),请核对招标文件后重跑":`标书编制规格:${c.join(";")}`,details:d}}},52890:(a,b,c)=>{c.d(b,{Iu:()=>j,_P:()=>k});var d=c(51190),e=c(1218),f=c(18292),g=c(22157);let h=["project_name","project_code","owner","project_location","project_scale","schedule_requirement","quality_standard","project_investment_estimate"],i=/资料未明确|系统暂未从知识库确认|项目资料暂未明确|^(?:无|暂无|未确认|待确认)$/u;function j(a){let b=[];if(!a||0===a.length)return b;let c=new Set(h),j=new Set;for(let h of a){if(!h)continue;let a=(0,d.nD)(h);if(!a||!c.has(a.key))continue;let k=`${h.key||""}${h.fieldName||""}${h.fieldId||""}`,l=(0,g.lG)(h.value).trim();if(!l||i.test(l)||/项目名称|工程名称/u.test(k)&&("table"===h.processingType||"structured_data"===h.processingType||/bill_of_quantities/u.test(h.roleId||""))||(0,f.rf)(k,l))continue;let m=(0,e.iG)((0,e.De)(l)).replace(/\s+/gu," ").trim();if(!m)continue;let n=`${a.key}|${m}`;j.has(n)||(j.add(n),b.push({key:a.key,label:a.label,value:m}))}return b}function k(a,b){let c=j(b);if(0===c.length)return;let d=new Map;for(let a of c){let b=d.get(a.key)??{label:a.label,values:[]};b.values.push(a.value),d.set(a.key,b)}let e=0,g=[];for(let b of h){let c=d.get(b);if(c){if(c.values.some(b=>(0,f.AI)(a||"",b))){e+=1;continue}g.push(`${c.label}:${c.values[0].slice(0,60)}`)}}let i=d.size;return{specs:i,placed:e,unplaced:g.slice(0,20),rate:i>0?e/i:null}}},52922:(a,b,c)=>{c.d(b,{Bt:()=>z,Du:()=>F,G5:()=>H,GI:()=>ao,Il:()=>ai,JD:()=>S,L5:()=>aj,Lv:()=>p,Pm:()=>C,T4:()=>N,W0:()=>u,X9:()=>r,Ye:()=>m,_Q:()=>y,bH:()=>V,c8:()=>$,cs:()=>s,e1:()=>x,gE:()=>I,ge:()=>G,h1:()=>E,hr:()=>ak,lk:()=>U,mL:()=>X,nY:()=>Z,pd:()=>T,tq:()=>ah,w7:()=>t});var d=c(37047),e=c(7148),f=c(41991),g=c(68977);let h=["基本满足","大致符合","力争","原则上","大概","左右","尽可能","尽量满足"],i=/基本|大致|力争|原则上|大概|左右|尽可能|尽量/u,j=["基本满足招标文件要求","大致符合相关规范标准","力争达到优良质量标准","原则上按照规范执行","尽可能保证工程质量","尽量满足工期要求"],k=["结构构件左右对称布置","平面布置左右对称合理","力争上游的企业精神"];async function l(a){return(0,f.A)({prototypes:[...j],negativePrototypes:[...k],lexicalHints:i,embedDocuments:a})}function m(a){return h.filter(b=>a.includes(b)).map(b=>({phrase:b,count:a.split(b).length-1}))}let n=["精心组织","科学统筹","科学管理","精益求精","全力保障","高效推进","力争优质","力争一流","一流水平","完善体系","最大限度","显著提升","大力落实","严格把控","充分确保","竭力打造","现代化管理","加强管理","提高意识","强化监督","持续完善","及时处理","全方位","常态化","提质增效","高标准","统筹推进"];[...n];let o=["精心组织、科学管理,确保工程质量","严格执行相关规范和设计要求","根据实际情况适当调整施工安排","建立健全管理体系,加强过程管理","全力保障项目顺利推进","加强管理、严格控制,确保工程质量达到优良标准","精心策划、周密部署,全力以赴完成任务目标","高度重视、狠抓落实,层层压实责任","统筹兼顾、合理安排,确保各项工作有序推进","严格管理、严格要求,确保一次成优","认真贯彻落实各项管理制度,不断提升管理水平","加强安全管理,杜绝各类安全事故发生","合理安排施工工序,确保工程按期完工","坚持质量第一、安全至上,认真做好各项工作"],p=.8,q=/^\s*(?:第[一二三四五六七八九十百\d]+[章节篇]|\d+(?:\.\d+){0,3})\s+[^。;;,,]*$/u;function r(a){let b=a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim();return!!(!b||/^\s*(#{1,6}\s+|\||[-*+]\s|>)/u.test(b))||q.test(b)}function s(a){return a.split("\n").filter(a=>!r(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.trim()).filter(a=>a.length>=12)}async function t(a,b){if(0===a.length)return[];let c=await (0,d.Mv)(a,[...o],b),e=await l(b),f=await e(a);return a.map((a,b)=>{let d=Math.max(...o.map(b=>c(a,b))),e=d>=p,g=f[b];return{sentence:a,semantic:e,vague:g,filler:e||g,similarity:d}})}function u(a){let b=a.replace(/\s+/gu,"");return!(0===b.length||b.length>60||/[0-90-9]/u.test(b)||/项目经理|技术负责人|施工员|质检员|专职安全员|安全员|材料员|资料员|监理|班组|责任人|岗位/u.test(b)||/每日|每周|每月|每季|每年|每\d+|定期|不定期|不少于|不低于|至少/u.test(b)||/合同|约定|承诺|保证金|履约|招标|投标|中标|资质|奖项|证书|备案|报审|报验|审批|签证|变更/u.test(b))}let v=/^(?:#{1,6}\s*)?(?:(?:\d+(?:\.\d+)*)(?:[.、))]|\s)+|(\d+)|[((][一二三四五六七八九十]+[))]|[-*•]\s+)?\s*/u,w=/^(?:(?:本节|本章|本小节|本部分|本(?:文|篇章))(?:将|拟|主要|重点|首先|从|围绕|按|结合|针对|以|通过|对|就|分|共|内容|的|内)|(?:以下|下述|下面)(?:从|将|为|是|内容|主要|就|围绕|介绍|说明)|综上所述|通过以上|由此可见|总的来说|总体而言)/u;function x(a){let b=a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim();return!!b&&w.test(b.replace(v,""))}function y(a){return a.split("\n").map(a=>a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim()).filter(a=>a&&!r(a)).flatMap(a=>a.split(/[。;;]/u)).map(a=>a.trim()).filter(a=>a.length>=12&&x(a))}async function z(a,b){let c=s(a),d=await t(c,b),e=c.filter(a=>i.test(a)).length,f=d.filter(a=>a.vague).length,g=d.map(a=>a.filler),h=g.filter(Boolean).length,j=[...new Set(c.filter((a,b)=>g[b]))].slice(0,40),k=new Set;c.forEach((a,b)=>{if(g[b])for(let b of n)a.includes(b)&&k.add(b)});let l=k.size,m=c.length?h/c.length:0;return{totalSentences:c.length,fillerSentences:h,ratio:m,level:m>=.4?"heavy":m>=.2?"medium":"light",vagueCandidateSentences:e,vagueSemanticSentences:f,forbiddenEmptyPhraseHits:l,fillerSentenceDetails:j}}let A={plan:"制定专项施工方案与管理制度,明确技术措施",process:"施工工序流程与工艺步骤顺序",role:"由项目经理、技术负责人等岗位人员分工负责",frequency:"每日、每周等检查频次与时间节点安排",acceptance:"经检查验收合格后处置闭环并留存检测与验收记录"},B={plan:/专项施工方案|专项方案|施工方案|施工组织设计|技术措施|管理制度|技术交底|作业指导书|操作规程/u,process:/施工工序|工艺流程|施工流程|作业流程|施工顺序|施工步骤|工艺步骤|流水段|流水作业|依次施工|工序/u,role:/项目经理|技术负责人|施工员|质检员|安全员|材料员|资料员|测量员|劳资员|班组长|监理工程师|试验员/u,frequency:/每日|每天|每周|每月|每季度|每批|不少于\s*\d+\s*次|至少\s*\d+\s*次|每周\s*\d+\s*次|每日\s*\d+\s*次|每\s*\d+\s*日/u,acceptance:/验收|检验批|实测实量|复测|送检|抽检|检测|试验|旁站|见证取样|报验|隐蔽|整改|复查|销项|复验|闭环|闭合|返工|返修|核验|复核|评定|归档|台账/u};async function C(a,b){let c=a.split(/\n{2,}/u).filter(a=>a.trim().length>=30),e=Object.values(A),f=await (0,d.Mv)(c,e,b),g=B.role,h=B.frequency,i=B.acceptance,j=B.plan,k=B.process,l=(a,b)=>{let c=(b!==A.plan||!!j.test(a))&&(!!(b===A.plan&&j.test(a))||(b!==A.process||!!k.test(a))&&(!!(b===A.process&&k.test(a))||(b!==A.role||!!g.test(a))&&(!!(b===A.role&&g.test(a))||(b!==A.frequency||!!h.test(a))&&(!!(b===A.frequency&&h.test(a))||(b!==A.acceptance||!!i.test(a))&&(!!(b===A.acceptance&&i.test(a))||void 0)))));return void 0!==c?c:f(a,b)>=d.Eh},m=0,n=0,o=0;for(let a of c)e.filter(b=>l(a,b)).length>=4?m+=1:l(a,A.role)&&l(a,A.frequency)||(n+=1),l(a,A.role)&&l(a,A.frequency)&&l(a,A.acceptance)&&(o+=1);return{blocks:c.length,completeBlocks:m,incompleteBlocks:n,closedLoopBlocks:o}}let D="分析该工程难点的成因与风险来源",E=/\d+(?:\.\d+)?\s*(?:mm|cm|m|米|℃|%|kN|MPa|次|天|日历天|小时|h|Hz|m³|㎡|m²|t|吨|座|套|个)/u;function F(a){let b=a.match(/^#{2,4}\s*[^\n]*(?:重难点|重点难点|工程难点|难点分析)[^\n]*\n/mu);if(b&&void 0!==b.index){let c=b.index+b[0].length,d=a.slice(c),e=b[0].match(/^#+/u)?.[0].length??3,f=RegExp(`^#{2,${Math.max(2,e)}}\\s+`,"mu"),g=d.search(f);return g>=0?d.slice(0,g):d}let c=a.match(/^\|?\s*[^\n]*(?:重难点|重点难点|工程难点|难点分析)[^\n]*\|\s*$/mu);if(!c||void 0===c.index)return"";let d=a.slice(c.index).split(/\n/u),e=[];for(let a of d){let b=a.trim();if(!b||!b.startsWith("|")){if(e.length>0)break;continue}e.push(a)}return e.join("\n")}function G(a){return a.trim().startsWith("|")?a.split(/\n/u).filter(a=>{let b=a.trim();return b.startsWith("|")&&!/^\|\s*-+\s*\|/u.test(b)&&!/重难点/u.test(b.split("|")[1]||"")}).filter(a=>a.trim().length>=20):a.split(/\n{2,}/u).filter(a=>a.trim().length>=20)}async function H(a,b,c={}){let e,f=async c=>k>=0?l(c,k).length>=4:(e??=await (0,d.Mv)(a,[D],b))(c,D)>=d.Eh,g=0,h=0,i=0,j=[],k=c.attributionColumnIndex??-1,l=(a,b)=>(a.split("|").slice(1,-1)[b]??"").trim();for(let b of a){let a=await f(b),c=E.test(b);a&&(g+=1),c&&(h+=1),a&&c&&(i+=1),j.push({text:b,attributed:a,quantified:c})}return{entries:a,attributed:g,quantified:h,bothCount:i,ratio:a.length?i/a.length:0,details:j}}async function I(a,b){let c=G(F(a)),d=(()=>{let a=c.find(a=>a.trim().startsWith("|"));return a?a.split("|").slice(1,-1).map(a=>a.trim()).findIndex(a=>/成因|风险|致险|难点分析/u.test(a)):-1})(),e=await H(c,b,{attributionColumnIndex:d});return{countermeasures:c.length,attributed:e.attributed,quantified:e.quantified,bothCount:e.bothCount,ratio:e.ratio,heavyTemplated:c.length>0&&e.quantified/c.length<.5,entries:e.details.slice(0,24)}}let J=/建筑业10项新技术|10项新技术|新技术推广目录|建设领域推广/u,K=/替代|取代|淘汰.{0,10}(?:工艺|技术|做法)|(?:较|比).{0,10}(?:传统|常规|普通)/u,L=/(?:提升|提高|节省|节约|降低|缩短|减少).{0,10}(?:效率|工期|成本|损耗|能耗|人工|周期)|升级价值|效益显著/u,M=["BIM","铝模","附着式升降脚手架","跳仓法","直螺纹","装配式","灌浆套筒","自动化监测","智慧工地","再生利用","非开挖","CCTV","碳纤维","薄贴法","干法施工","液压提升","预制","光伏一体化","BIPV","模块化"];function N(a){let b=M.filter(b=>a.includes(b)),c=J.test(a),d=K.test(a),e=L.test(a),f=[c,d,e].filter(Boolean).length;return{found:[...b],catalogCited:c,replaceClaimed:d,upgradeClaimed:e,effective:b.length>0&&f>=2}}let O=[/基坑|沟槽/u,/模板支撑|高支模/u,/脚手架|悬挑|附着式/u,/起重吊装|吊装/u,/幕墙/u,/人工挖孔桩/u,/装配式|钢结构安装/u,/拆除工程/u,/顶管|盾构|暗挖/u,/有限空间|水下作业/u,/吊篮/u,/塔吊|施工电梯|升降机/u,/沉井/u],P=/超危大|超规模|专家论证|一般危大/u,Q=/(?:深度|高度|跨度|开挖).{0,8}\d+(?:\.\d+)?\s*(?:m|米)|(?:重量|吊装).{0,8}\d+(?:\.\d+)?\s*(?:kN|千牛)/u,R={"基坑|沟槽":"基坑工程","模板支撑|高支模":"模板工程及支撑体系","脚手架|悬挑|附着式":"脚手架工程","起重吊装|吊装":"起重吊装及起重机械安装拆卸工程"};function S(a){let b=O.filter(b=>b.test(a)).map(a=>a.source.replace(/\\u\w*|\\|\(|\||\)/gu,"")),c=P.test(a),d=Q.test(a),e=Object.entries(R).flatMap(([b,c])=>{let d=function(a,b,c){let d=g.gQ[c].hazardous.find(a=>"numeric"===a.kind&&void 0!==a.value&&a.dimension);if(!d)return;let e=RegExp(b,"u").exec(a);if(!e)return;let f=a.slice(Math.max(0,(e.index??0)-200),(e.index??0)+200),h=RegExp(`(?:${{深度:"深度",高度:"高度",跨度:"跨度",重量:"重量|吊装"}[d.dimension]})[^。;;\\n]{0,10}?(\\d+(?:\\.\\d+)?)\\s*(m|米|kN|千牛)`,"u").exec(f);if(!h)return;let i=Number.parseFloat(h[1]||"0");if(Number.isFinite(i)&&!(i<=0))return{category:b.replace(/\\u\w*|\\|\(|\||\)/gu,""),parameter:h[0],measured:i,threshold:d.value,dimension:d.dimension,reached:i>=d.value}}(a,b,c);return d?[d]:[]});return{categories:b,graded:c,paramMatched:d,thresholdChecks:e,twoStepComplete:b.length>0&&c&&d&&e.every(a=>a.reached)}}let T=[{name:"总则",pattern:/总则/u},{name:"组织机构及职责",pattern:/应急(?:组织|领导)|组织机构|应急指挥部|应急小组/u},{name:"风险分析与危险源辨识",pattern:/风险分析|危险源辨识|风险辨识/u},{name:"应急物资设备通讯保障",pattern:/应急物资|物资.{0,8}(?:保障|储备)|通讯保障|通信保障/u},{name:"专项应急预案",pattern:/专项应急预案|专项预案/u},{name:"应急响应流程",pattern:/应急响应|响应流程|响应程序/u},{name:"后期处置",pattern:/后期处置|善后|事故调查/u},{name:"培训演练",pattern:/(?:应急)?演练|培训.{0,6}演练/u}],U=["高处坠落","物体打击","坍塌","触电","火灾","起重","防汛","防台风","中暑","中毒窒息","管线破坏"];function V(a){let b=T.filter(b=>b.pattern.test(a)).map(a=>a.name),c=T.filter(b=>!b.pattern.test(a)).map(a=>a.name),d=U.filter(b=>a.includes(b));return{coveredParts:[...b],missingParts:[...c],coverage:b.length/T.length,planHits:[...d]}}let W=[{plan:"坍塌",evidence:/基坑|沟槽|模板支撑|高支模|脚手架|支护|边坡|土方开挖|拆除/u,why:"深基坑/沟槽/支护/高支模/脚手架/拆除作业存在坍塌风险"},{plan:"高处坠落",evidence:/高处作业|临边|洞口|吊篮|幕墙|外脚手架|高处安装|攀登/u,why:"高处作业/吊篮/幕墙/外架存在高处坠落风险"},{plan:"起重",evidence:/塔式起重机|塔吊|汽车吊|履带吊|起重吊装|吊装作业|龙门架|物料提升机/u,why:"起重机械与吊装作业存在起重伤害风险"},{plan:"触电",evidence:/临时用电|配电箱|三级配电|漏电保护|TN-S|电焊机|用电设备/u,why:"临时用电与焊接作业存在触电风险"},{plan:"火灾",evidence:/动火|焊接|气割|油漆|稀释剂|易燃|氧气瓶|乙炔|保温材料/u,why:"动火/油漆/易燃材料存在火灾风险"},{plan:"中毒窒息",evidence:/有限空间|受限空间|检查井内|管道内|污水井|化粪池|通风不良/u,why:"有限空间作业存在中毒窒息风险"},{plan:"管线破坏",evidence:/地下管线|既有管线|管线保护|管线探测|顶管|开挖沟槽/u,why:"开挖影响既有地下管线,存在管线破坏风险"},{plan:"物体打击",evidence:/交叉作业|立体交叉|垂直运输|材料转运|基坑周边堆载/u,why:"交叉与垂直运输作业存在物体打击风险"},{plan:"防汛",evidence:/雨期|雨季|汛期|基坑排水|集水井|降水/u,why:"雨季与基坑排水存在防汛风险"},{plan:"中暑",evidence:/高温|夏季施工|防暑降温/u,why:"高温季节施工存在中暑风险"}];function X(a){let b=String(a||"");return b.trim()?W.filter(a=>(function(a,b){let c=new RegExp(b.source,b.flags.includes("g")?b.flags:`${b.flags}g`);for(let b of a.matchAll(c)){let c=b.index??0,d=a.slice(Math.max(0,c-6),c);if(!/(?:无|不涉及|未涉及|不存在|未设置|无此|非|不设)/u.test(d))return!0}return!1})(b,a.evidence)&&!function(a,b){let c=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");return RegExp(`${c}[^。;;
221
221
  ]{0,8}(?:预案|事故|伤害|应急|防范|处置)`,"u").test(a)||RegExp(`(?:预案|事故|伤害|应急|防范|处置)[^。;;
222
222
  ]{0,8}${c}`,"u").test(a)}(b,a.plan)).map(a=>({plan:a.plan,why:a.why})):[]}let Y=[/其他项目/u,/其他标段/u,/其他城市/u,/本公司(?:其他|承建)/u,/某(?:市|县|区|项目)(?:的)?/u,/他项目/u,/兄弟项目/u];function Z(a){let b=a.replace(/及其他项目/gu,"及〔清单列举项〕");return Y.filter(a=>a.test(b)).map(a=>a.source.replace(/\\u/gu,""))}function $(a){let b=[];for(let c of s(a))for(let a of function(a){let b=[];return[...a.replace(/["“”'']([^"“”'']{2,40})["“”'']/gu,(a,c)=>(b.push(c),",")).split(/[,,、]/u).map(a=>a.trim()),...b].filter(a=>a.replace(/\s+/gu,"").length>=6)}(c))(function(a){return n.some(b=>{for(let c=a.indexOf(b);c>=0;c=a.indexOf(b,c+1)){let b=c>0?a[c-1]:"";if(!b||!"最更较尤极超过偏".includes(b))return!0}return!1})})(a)&&u(a)&&b.push({phrase:a,sentence:c,similarity:0,channel:"zero-info"});return b}let _=/(?<![相响适对供感反效因顺])(?:应负责|应当|应(?!用|急|对|酬|诉|邀|允|聘|试|考)|必须|不得|须)/u,aa=`${e.wA}|mm|cm|kW|kV|MPa|kN|kPa|℃|\xb0|%|min|分钟|小时|天|日历天|次|遍|处|户|层|栋|区|名|位|人|项|份|道`,ab=[/[0-90-9]\s*[##号]\s*[厂栋楼座幢区段]/u,/(?:工程量清单|清单)(?:序号|编号|条目|项)|第[0-9]+(?:项|条)|[0-9]+(?:\.[0-9]+)+条/u,RegExp(`[0-90-9](?:\\.[0-9]+)?\\s*(?:万|亿)?(?:${aa})`,"iu"),/(?<![A-Za-z0-9])(?:MU|HRB|HPB|HRBF|Q|C|M)\s?[0-9]{1,4}(?:[..][0-9]+)?(?![A-Za-z0-9])/iu,RegExp(`[一二三四五六七八九十百千两](?:${aa})`),/轴线|标高|层高|跨度|断面|大样|节点|预埋|构件/u],ac=/(?:承担|承诺|保证|确保|负责|配备|投入|设置|提供|办理|填报|报送|报审|报验|完成|按期|保修|维护|满足|服从)[^。;;]{0,24}(?:费用|金额|价款|工期|日历天|质量目标|数量|台|套|份|人|名|次|项|手续|资料|责任|要求|内容|进度|义务)|(?:报|经|由)[^。;;]{0,10}(?:确认|认可|审核|批准|同意|签字|备案)/u,ad=/本(?:工程|项目|设计|方案|标段|项目部)/u,ae=/项目经理|技术负责人|施工员|质检员|专职安全员|安全员|材料员|资料员|试验员|测量员|班组长|监理|责任人|岗位|班组/u,af=/登记|领证|核验|签认|签字|归档|留存|台账|记录|备案|报审|报验/u,ag=/浇筑|养护|摊铺|碾压|回填|砌筑|焊接|绑扎|安装|调试|试压|打压|涂装|降水|开挖|支模|振捣|张拉|防腐|保温|导流|闭水|夯实|铺设|铺贴|抹灰|吊装|测量|放线|取样|送检|检验批|隐蔽验收/u;function ah(a){return s(a).filter(a=>(function(a){let b=a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").replace(/\s+/gu,"");return!(b.length<12||!_.test(b)||ab.some(a=>a.test(b))||ac.test(b)||ad.test(b)||ae.test(b)||af.test(b))&&!ag.test(b)})(a))}let ai="【写作红线】不得整句复述规范/合同/招标文件的条款原文(“应/必须/不得”式义务复述语体,且句中无本项目实体、无可核查承诺)——把条款内容改写为本项目的具体做法:谁执行、何时执行、在哪个部位、频次多少、留什么记录,只写本项目实际执行的内容。",aj=3,ak=.35,al=/《[^《》]{1,60}》/gu,am=/[((]?\s*(?:GB|JGJ|CJJ|CECS|JG|DB|JTG|SL|DL|TB|SH|HG|NB|YS)\s*\/?\s*T?\s*\d{2,5}(?:\s*[-—]\s*\d{2,4})?\s*[))]?/giu,an=/执行|依据|按照|根据|采用|编制|组织|实施|施工|验收|安装|浇筑|检测|检查|管理|控制|负责|承担|落实|开展|进行|完成|建立|设置|确保|保证|满足|符合|规定|要求|参见|详见|遵照|遵守|结合|作为|包括|覆盖/u;function ao(a){return a.split(/\n{2,}/u).map(a=>a.split("\n").map(a=>a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").trim()).filter(a=>a.length>0&&!(/^(?:#{1,6}\s|[-*+]\s|>|\|)/u.test(a)||/[||]/u.test(a))).join("\n")).filter(a=>(function(a){let b=a.replace(/[\u200b-\u200f\u2060\ufeff]/gu,"").replace(/\s+/gu,"");if(!b||(b.match(al)?.length??0)<aj)return!1;let c=b.replace(al,"").replace(am,"");return!(c.length>b.length*ak)&&!an.test(c)})(a))}},55807:(a,b,c)=>{c.d(b,{C_:()=>g.C_,DR:()=>h.DR,EG:()=>h.EG,EK:()=>h.EK,Fc:()=>g.Fc,G2:()=>h.G2,Ht:()=>g.Ht,Il:()=>h.Il,Iu:()=>d.Iu,M6:()=>h.M6,Mz:()=>d.Mz,NJ:()=>h.NJ,QP:()=>d.xs,R_:()=>h.R_,UG:()=>d.UG,Xr:()=>f.Xr,_8:()=>h._8,_k:()=>g._k,br:()=>e.br,bz:()=>h.bz,gq:()=>h.gq,h:()=>f.h,hS:()=>e.hS,hW:()=>d.hW,jO:()=>f.jO,jX:()=>d.jX,md:()=>h.md,t7:()=>d.t7,w_:()=>g.w_,xs:()=>f.xs});var d=c(64753),e=c(18292),f=c(87635),g=c(13145),h=c(39372)},55965:(a,b,c)=>{c.d(b,{hy:()=>m,kE:()=>j});var d=c(22157),e=c(99956);let f=new Map,g={"labor-peak":"项目劳动力峰值(人)","total-days":"项目总工期(日历天)","village-count":"项目自然村数量(个)",quantity:"工程量清单条目汇总工程量"},h=`你是施工组织设计文档的数值引用裁决器。任务:判断正文句中的数值是否「以该项目级数据的口径」陈述(项目级 = 全项目汇总/锁定口径)。
@@ -262,8 +262,7 @@ ${b}
262
262
 
263
263
  返回 JSON。`}(a)].filter(Boolean).join("\n\n")}(d,b,v),{temperature:.1*!c.length,signal:a.signal,diagnostics:a.diagnostics});return(0,g.Te)(a.signal),function(a,b){if(!a)return;let c=new Set(b.map(a=>a.filePath)),d=new Map;for(let a of b){let b=e.basename(a.filePath);d.has(b)||d.set(b,a.filePath)}let f=a=>{if("string"==typeof a&&a)return c.has(a)?a:d.get(e.basename(a))},g=(a,b)=>(Array.isArray(a)?[...new Set(a.map(f).filter(a=>!!a))]:[]).slice(0,b),h=(a,b)=>"string"==typeof a?a.slice(0,b):"number"==typeof a?String(a).slice(0,b):"",i=(a,b)=>(Array.isArray(a)?a.filter(a=>"string"==typeof a&&a.length>0):[]).slice(0,b);return{works:(a.works||[]).filter(a=>"string"==typeof a.name&&"string"==typeof a.scope).map(a=>({name:h(a.name,200),scope:h(a.scope,500),sourceFiles:g(a.sourceFiles,10),relatedItems:i(a.relatedItems,20)})),methods:(a.methods||[]).filter(a=>"string"==typeof a.name).map(a=>({name:h(a.name,200),steps:i(a.steps,12),applicableWorks:i(a.applicableWorks,10),sourceFiles:g(a.sourceFiles,10)})),resources:(a.resources||[]).filter(a=>"string"==typeof a.name).map(a=>({name:h(a.name,200),type:"material"===a.type||"equipment"===a.type||"labor"===a.type?a.type:"material",spec:h(a.spec,200),quantity:h(a.quantity,50),unit:h(a.unit,20),sourceFiles:g(a.sourceFiles,5)})),schedule:(a.schedule||[]).filter(a=>"string"==typeof a.milestone).map(a=>({milestone:h(a.milestone,200),duration:h(a.duration,100),startDate:h(a.startDate,50),endDate:h(a.endDate,50),sourceFiles:g(a.sourceFiles,5)})),standards:(a.standards||[]).filter(a=>"string"==typeof a.code||"string"==typeof a.description).map(a=>({code:h(a.code,100),description:h(a.description,300),sourceFiles:g(a.sourceFiles,5)})),risks:(a.risks||[]).filter(a=>"string"==typeof a.risk).map(a=>({risk:h(a.risk,300),level:"high"===a.level||"medium"===a.level||"low"===a.level?a.level:"medium",mitigation:h(a.mitigation,500),sourceFiles:g(a.sourceFiles,5)})),requirements:(a.requirements||[]).filter(a=>"string"==typeof a.category&&"string"==typeof a.detail).map(a=>({category:h(a.category,100),detail:h(a.detail,500),sourceFiles:g(a.sourceFiles,5)})),siteConditions:(a.siteConditions||[]).filter(a=>"string"==typeof a.condition).map(a=>({condition:h(a.condition,300),impact:h(a.impact,500),sourceFiles:g(a.sourceFiles,5)})),addendumChanges:(a.addendumChanges||[]).filter(a=>"string"==typeof a.original&&"string"==typeof a.revised).map(a=>({originalPath:h(a.originalPath,300),original:h(a.original,300),revised:h(a.revised,500),sourceFile:f(a.sourceFile)||""})),gaps:i(a.gaps,20),generatedAt:Date.now()}}(h,d)}async function y(b=[]){let c=Object.keys(l),d=(await (0,g.l$)(c,async c=>{try{let a=await x(c,b);if(a&&n(a)>0)return a;w.push(`${l[c].title} 未抽取到有效节点`)}catch(b){if(a.signal?.aborted)throw b;w.push(`${l[c].title} LLM 调用失败:${b instanceof Error?b.message:String(b)}`)}},{kind:"llmRepair",targetWords:4e3,concurrency:(0,j.z)().projectGraphDomainConcurrency||2})).filter(a=>!!a);return d.length?function(a){let b={w:new Set,m:new Set,r:new Set,sc:new Set,st:new Set,ri:new Set,rq:new Set,si:new Set,a:new Set};return{works:a.flatMap(a=>a.works).filter(a=>{let c=a.name+a.scope;return!b.w.has(c)&&(b.w.add(c),!0)}),methods:a.flatMap(a=>a.methods).filter(a=>{let c=a.name;return!b.m.has(c)&&(b.m.add(c),!0)}),resources:a.flatMap(a=>a.resources).filter(a=>{let c=a.name+a.spec+a.type;return!b.r.has(c)&&(b.r.add(c),!0)}),schedule:a.flatMap(a=>a.schedule).filter(a=>{let c=a.milestone;return!b.sc.has(c)&&(b.sc.add(c),!0)}),standards:a.flatMap(a=>a.standards).filter(a=>{let c=a.code+a.description;return!b.st.has(c)&&(b.st.add(c),!0)}),risks:a.flatMap(a=>a.risks).filter(a=>{let c=a.risk;return!b.ri.has(c)&&(b.ri.add(c),!0)}),requirements:a.flatMap(a=>a.requirements).filter(a=>{let c=a.category+a.detail;return!b.rq.has(c)&&(b.rq.add(c),!0)}),siteConditions:a.flatMap(a=>a.siteConditions).filter(a=>{let c=a.condition;return!b.si.has(c)&&(b.si.add(c),!0)}),addendumChanges:a.flatMap(a=>a.addendumChanges).filter(a=>{let c=a.original+a.revised;return!b.a.has(c)&&(b.a.add(c),!0)}),gaps:[...new Set(a.flatMap(a=>a.gaps))],generatedAt:Date.now()}}(d):void 0}try{let b=await y(),d=q(b,u);if(d.ok&&b||b&&n(b)>0)return p(a.projectRoot,c,b),{graph:b,stage:r(b)};let e=await y([...d.reasons,...w]);if(e&&n(e)>0)return p(a.projectRoot,c,e),{graph:e,stage:r(e)};return{stage:s([...d.reasons,...w])}}catch(b){if(a.signal?.aborted)throw b;return console.error("[project-graph] failed:",b),{stage:s([b instanceof Error?b.message:String(b),...w])}}}function u(a){let b=["## 项目资料图谱分析结果",""];for(let c of a.works)2===b.length&&b.push("### 主要工程内容"),b.push(`- **${c.name}**:${c.scope}`);for(let c of(a.works.length&&b.push(""),a.methods))b.includes("### 关键施工方法与工艺")||b.push("### 关键施工方法与工艺"),b.push(`- **${c.name}**:${c.steps.filter(Boolean).join(" → ")}`);for(let c of(a.methods.length&&b.push(""),a.resources)){b.includes("### 资源需求")||b.push("### 资源需求");let a={material:"材料",equipment:"设备",labor:"劳动力"}[c.type]||"资源";b.push(`- [${a}] ${c.name}${c.spec?`(${c.spec})`:""}${c.quantity?` ${c.quantity}${c.unit}`:""}`)}for(let c of(a.resources.length&&b.push(""),a.schedule))b.includes("### 工期与关键节点")||b.push("### 工期与关键节点"),b.push(`- ${c.milestone}:${c.duration}(${c.startDate} ~ ${c.endDate})`);for(let c of(a.schedule.length&&b.push(""),a.standards))b.includes("### 技术标准与验收要求")||b.push("### 技术标准与验收要求"),b.push(`- **${c.code}**:${c.description}`);for(let c of(a.standards.length&&b.push(""),a.risks))b.includes("### 重点难点与风险")||b.push("### 重点难点与风险"),b.push(`- **[${c.level}] ${c.risk}**:${c.mitigation}`);for(let c of(a.risks.length&&b.push(""),a.requirements))b.includes("### 特定要求")||b.push("### 特定要求"),b.push(`- [${c.category}] ${c.detail}`);for(let c of(a.requirements.length&&b.push(""),a.siteConditions))b.includes("### 现场条件与约束")||b.push("### 现场条件与约束"),b.push(`- ${c.condition}:${c.impact}`);for(let c of(a.siteConditions.length&&b.push(""),a.addendumChanges))b.includes("### 补疑修正")||b.push("### 补疑修正"),b.push(`- "${c.original}" → "${c.revised}"`);for(let c of(a.addendumChanges.length&&b.push(""),a.gaps))b.includes("### 资料缺口")||b.push("### 资料缺口"),b.push(`- ${c}`);return a.gaps.length&&b.push(""),b.join("\n")}},71536:(a,b,c)=>{c.d(b,{$F:()=>l,Eu:()=>m,gT:()=>k});let d=/安全|文明|质量|绿色施工|环保|扬尘|消防|应急|危大|风险|规范|标准|管理要求|施工工艺|技术措施|验收/u,e=/项目名称|工程名称|建设地点|建设单位|招标人|发包人|建设规模|招标范围|合同工期|计划工期|质量标准|危大工程清单|工程量|材料规格|设备型号|图纸参数|报价|单价|利润|税率|合同金额|联系方式|品牌/u,f=/报价|单价|合价|金额|利润|税率|增值税|招标控制价|最高投标限价|中标价|合同价|暂列金额/u,g=/联网增强|联网检索|网页资料|搜索结果|根据网页|互联网资料|在线资料|浏览器|搜索引擎/u,h=["项目名称","工程名称","建设地点","建设单位","招标人","发包人","建设规模","招标范围","合同工期","计划工期","工程量","报价","单价"];function i(a){return a.replace(/&amp;/gu,"&").replace(/&lt;/gu,"<").replace(/&gt;/gu,">").replace(/&quot;/gu,'"').replace(/&#39;/gu,"'").replace(/<[^>]+>/gu,"").replace(/\s+/gu," ").trim()}async function j(a,b,c,d,h){let j=`https://duckduckgo.com/html/?q=${encodeURIComponent(a)}`,k=new AbortController,l=setTimeout(()=>k.abort(),8e3),m=()=>k.abort();h?.addEventListener("abort",m,{once:!0});let n=await fetch(j,{headers:{"User-Agent":"Mozilla/5.0 compatible; customize-agent web research"},signal:k.signal}).finally(()=>{clearTimeout(l),h?.removeEventListener("abort",m)});return n.ok?[...(await n.text()).matchAll(/<a[^>]+class="result__a"[^>]+href="([^"]+)"[^>]*>([\s\S]*?)<\/a>[\s\S]*?<a[^>]+class="result__snippet"[^>]*>([\s\S]*?)<\/a>/giu)].map(a=>{let b=i(a[1]||""),c=i(a[2]||""),d=i(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||e.test(b)||f.test(b)||g.test(b)||d.some(a=>a&&b.includes(a)))&&(0===c.length||c.some(b=>a.url.includes(b)))}).slice(0,b):[]}async function k(a){if(!a.config.enabled||!function(a,b){let c=`${a} ${b.join(" ")}`;return!(!d.test(c)||/项目概况|工程概况|建设地点|建设规模|招标范围|工程量|报价|造价/u.test(c)&&!/安全|文明|质量|危大|环保|工艺|措施/u.test(c))}(a.chapterTitle,a.sectionTitles))return{evidence:[],queries:[],filtered:0,failedQueries:0,failures:[]};let b=function(a,b,c){let d=`${a} ${b.join(" ")}`,f=[/危大/u.test(d)?"危大工程 专项施工方案 管理规定 安全措施":"",/安全|文明/u.test(d)?"建筑工程 安全文明施工 管理要求":"",/质量|验收/u.test(d)?"建筑工程 质量控制 质量验收 通用要求":"",/扬尘|环保|绿色/u.test(d)?"施工现场 扬尘治理 绿色施工 环保要求":"",/消防|应急/u.test(d)?"施工现场 消防 应急管理 要求":"",/工艺|技术措施/u.test(d)?"建筑工程 施工工艺 技术措施 通用要求":""].filter(Boolean),g=`${a.replace(e,"")} 公开规范 通用要求`.trim();return[...new Set(f.length?f:[g])].slice(0,c)}(a.chapterTitle,a.sectionTitles,a.config.maxQueriesPerChapter),c=[],g=0,i=0,k=[];for(let d of b)try{for(let b of(await j(d,a.config.maxResultsPerQuery,a.config.trustedDomains,a.runtimeRules.forbiddenTerms||[],a.signal))){let d=function(a,b){let c=a;for(let a of h)c=c.replace(RegExp(`${a}[^。;;
264
264
  ]{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(f,"").trim()}(b.snippet,a.localFacts);if(!d||d.length<20){g+=1;continue}c.push({chapterId:a.chapterId,filePath:b.url,score:.42,content:`参考依据:${b.title}
265
- ${d}`,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(a){i+=1,k.push(`${"string"==typeof d?d:"查询"}:${a instanceof Error?a.message:String(a)}`),console.error("[web-research] 检索查询失败(与「被噪声过滤」分列计数)",a)}return{evidence:c,queries:b,filtered:g,failedQueries:i,failures:k}}function l(a){return a?"公开资料补充使用规则:\n1. 公开资料只可用于补充通用规范、政策、工艺和措施。\n2. 不得使用公开资料新增或修改项目名称、建设地点、建设规模、工期、质量标准、工程量、材料规格、图纸参数、商务数据。\n3. 本地项目资料与公开资料冲突时,必须以本地项目资料为准。\n4. 不得在正文中出现任何检索过程、外部页面、工具调用或系统内部过程性表述。\n5. 不得把公开资料中的其他项目案例参数写入本项目正文。":""}function m(a){let b=[];return g.test(a)&&b.push({level:"warning",message:"正文包含联网增强过程性表述",suggestion:"请删除联网检索、网页资料、搜索结果等过程性话术,改为正式交付语言。"}),b}},71678:(a,b,c)=>{c.d(b,{Hf:()=>t,M8:()=>n,Xp:()=>r,a0:()=>m,dn:()=>s,hM:()=>l,mI:()=>v,xb:()=>q});var d=c(37047),e=c(41991),f=c(70208),g=c(30111);let h=["对与评标活动有关的工作人员的纪律要求","评标委员会成员与投标人接触的限制","评标纪律与廉洁从业承诺要求","评审争议处理与投标澄清配合程序","评审结果确认与中标公示流程","评标办法与分值构成说明","异常低价评审与计算方式说明","清单计量与报价口径约定","投标文件实质性响应要求","投标保证金缴纳与退还程序","开标程序与投标文件递交截止时间","评标期间行为管控与资料闭环","预付款与进度款支付比例约定","履约担保与保证金缴纳退还约定","价格波动与合同价款调整约定","暂列金额与暂估价使用约定","税费计取与发票结算约定","违约责任与罚款赔偿条款"],i=["劳动力配置计划与高峰期人数安排","施工质量保证措施与验收标准","安全生产管理与教育培训要求","施工进度计划与关键线路安排","材料设备采购进场计划与检验要求","施工现场文明施工与环境保护管理","劳动纪律与班组作业管理制度","施工机械设备配置与维护保养计划","农民工工资支付保障与劳务实名制管理","材料采购质量证明与进场验收管理","工期承诺与进度考核奖惩管理"],j=/评标|投标|行贿|打招呼|递条子|廉洁|串标|围标|弄虚作假|干扰评标|纪律|澄清|中标|报价|清单计量|评审|保证金|开标|递交|争议|异常低价|评标基准价|预付款|进度款|担保|价格波动|材料调差|暂列金额|暂估价|计税|税金|发票|违约|业绩证明|类似(?:工程)?业绩|获奖|荣获|协会颁发|营业执照|资质证书|安全生产许可证|认证证书|管理体系认证|审计报告|信用等级|信用评价|社保证明|无行贿犯罪|中标查询|中标公示|中标结果|电子交易系统|公共资源交易|质疑投诉|评标委员会/u;function k(a){let b=a.sectionTitle?.trim()||"",c=(a.content||"").replace(/\s+/gu," ").slice(0,400);return b?`${b}。${c}`:c}function l(a){let b=a.sectionTitle?.trim()||a.content.replace(/\s+/gu,"").slice(0,60);return`${a.filePath}::${b}`}async function m(a,b){if(0===a.length)return{safe:[],excluded:[]};let c=a.filter(a=>j.test(k(a)));if(0===c.length)return{safe:[...a],excluded:[]};let e=c.map(k),f=await (0,d.Mv)(e,[...h],b),g=await (0,d.Mv)(e,[...i],b),l=new Set;for(let a of c){let b=k(a),c=Math.max(...h.map(a=>f(b,a))),d=Math.max(...i.map(a=>g(b,a)));c>=.6&&c>d&&l.add(a)}return{safe:a.filter(a=>!l.has(a)),excluded:[...l]}}async function n(a){return(0,e.A)({prototypes:[...h],negativePrototypes:[...i],threshold:.6,embedDocuments:a})}function o(a){return a.replace(/[\s\p{P}\p{S}]+/gu,"").toLowerCase()}let p=/^(?:我公司|本公司|我方|投标人|供应商|承包人)(?:就|对)[^,。;]{0,22}(?:均属|属实|真实有效|承担|负责|无异议|为准)$/u;function q(a){let b=a.trim().replace(/\s+/gu,"");if(!b||(0,f.mq)(b)||p.test(b))return!0;let c=o(b);if(h.some(a=>o(a)===c))return!0;let d=b.replace(/农民工工资保证金|工资保证金/gu,""),e=/评标|投标|开标|中标|评审|保证金|串标|围标|廉洁|询标|递交/u.test(d),g=/纪律|监督|争议|澄清|程序|行为|管控|限制|接触|公示|承诺|响应|办法/u.test(b);return!!(e&&g||/异常低价|评标基准价/u.test(b)||/电子保函|保函|投标保证金|履约担保|履约保证金|保证金(?:的)?(?:缴纳|退还|提交|方式)/u.test(b)&&!/农民工|工资|专用账户|实名|考勤|劳资/u.test(b)||/暂列金额|暂估价|材料调差/u.test(b)||/预付款(?:支付|比例|约定|申请|保函)|进度款(?:支付|申请|计量|约定)|履约担保/u.test(b)||/价格波动(?:调整|约定)|违约金(?:条款|约定)|计税|税金(?:计取|结算)|发票(?:开具|结算)/u.test(b))||r(b)}function r(a){let b=a.trim().replace(/\s+/gu,"");if(!b)return!1;let c=b.replace(/^\d{1,3}(?:[..]\d{1,3})*[、..]?/u,"");return!!(/^具备(?:有效|相应|满足)/u.test(c)||/^(?:须|应|需|得)?提供[^,,。;]{0,12}(?:证明|材料|文件|证件|证书|报告)/u.test(c))||"technical"!==(0,g.m)(b)||!!/营业执照|资质证书|安全生产许可证|资格预审|资格审查|资质审查|财务状况|业绩证明|业绩要求|银行资信|审计报告|信用记录|信用评价|不良行为记录|联合体投标|联合体协议/u.test(b)&&!/施工|技术|方案|措施|管理|控制|验收|工艺|流程|计划|组织|进度|质量|工期|文明|绿色|环保|节能|材料|设备|机械|人员|劳务|检验|检测|试验|保证|落实|制度/u.test(b)}function s(a){let b=a.trim().replace(/\s+/gu,"");return!!b&&(!!/接受分包/u.test(b)||!!/投标人|投标方|投标企业|承包人资格|资格要求|资格审查|资格预审|资质要求|资质条件|资质等级|资格条件|财务状况|业绩要求|业绩证明|信用要求|联合体|社保/u.test(b)&&/营业执照|资质证书|安全生产许可证|级及以上资质|注册建造师|建造师注册证书|安全生产考核合格证书|职称证书|财务状况|财务报告|审计报告|银行资信|业绩证明|类似业绩|信用记录|信用评价|不良行为记录|投标保证金|履约保证金|社保|在建工程|人员组成表/u.test(b))}function t(a){let b=a.trim().replace(/\s+/gu,"");return!!b&&!!(/你方/u.test(b)&&/我方/u.test(b)||/发包人[^。;;]{0,30}?(?:审批|批准|备案|同意|许可)/u.test(b)||/^[\d((、..\s]{0,8}监理人/u.test(b)&&/(?:提交|报送|审批|延期|通知|检查|验收)/u.test(b)||/(?:特别约定|有关约定|的约定)[::]/u.test(b)||/通用(?:合同)?条款/u.test(b)||/(?:承包人|发包人|监理人)/u.test(b)&&/(本合同|报送|提交|审批|备案|更换|违约责任|撤换|拒绝|保管|验收记录|签字|颁发|教育|穿戴|定期检查|授权范围|驻场|在岗)/u.test(b))}async function u(a){let b=a.sections.filter(a=>a?.trim());if(0===b.length)return[];let c=b.filter(a=>!q(a)),e=c.filter(a=>j.test(a));if(0===e.length)return c;let f=`${a.chapterTitle} ${a.chapterPurpose||""}`.trim(),g=await (0,d.Mv)(e,[...h],a.embedDocuments),k=await (0,d.Mv)(e,f?[f]:[],a.embedDocuments),l=await (0,d.Mv)(e,[...i],a.embedDocuments),m=new Set;for(let a of e){let b=Math.max(...h.map(b=>g(a,b))),c=f?k(a,f):0,d=Math.max(...i.map(b=>l(a,b)));b>=.6&&b>c&&b>d&&m.add(a)}return c.filter(a=>!m.has(a))}async function v(a,b){return Promise.all(a.map(async a=>({...a,sections:await u({sections:a.sections||[],chapterTitle:a.title,chapterPurpose:a.purpose,embedDocuments:b})})))}},73859:(a,b,c)=>{c.d(b,{$i:()=>h,E1:()=>l,E6:()=>g,IB:()=>e,d2:()=>k,oC:()=>i,p4:()=>d,rF:()=>j});let d={id:"default_general_document",name:"通用文档",factFields:[{id:"document_identity",name:"对象名称",aliases:["项目名称","工程名称","文档名称","任务名称","招标项目名称","建设项目名称"],category:"identity",cardinality:"single",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.75,minForValidation:.85,allowPathOnly:!1},conflictPolicy:"strict"},{id:"schedule_requirement",name:"周期要求",aliases:["计划工期","工期","周期要求","进度节点要求","开工日期","竣工日期"],category:"schedule",cardinality:"single",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.7,minForValidation:.8,allowPathOnly:!1},conflictPolicy:"strict"},{id:"quality_requirement",name:"质量要求",aliases:["质量要求","质量标准","验收要求","评价标准"],category:"quality",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.65,minForValidation:.75,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"safety_requirement",name:"安全合规要求",aliases:["安全要求","安全合规要求","风险控制要求","合规要求"],category:"safety",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.65,minForValidation:.75,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"technical_parameter",name:"技术参数",aliases:["技术参数","参数规格范围","规格","型号","尺寸","标准编号","材料设备"],category:"technical",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.7,minForValidation:.8,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"resource_plan",name:"资源配置",aliases:["劳动力","机械","检测设备","应急物资","资源配置","人员配置"],category:"resource",cardinality:"multiple",derivationPolicy:"plan_inferable",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.45,minForValidation:.55,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"commercial_data",name:"商务数据",aliases:["报价","单价","合价","综合单价","预留金","税率","金额","利润"],category:"commercial",cardinality:"multiple",derivationPolicy:"forbidden",usagePolicy:"do_not_use",confidencePolicy:{minForGeneration:1,minForValidation:1,allowPathOnly:!1},conflictPolicy:"ignore"},{id:"rule_requirement",name:"规则要求",aliases:["规则要求","变更说明","实施范围","对象范围","结构化数据范围"],category:"compliance",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.6,minForValidation:.7,allowPathOnly:!1},conflictPolicy:"allow_multiple"}],forbiddenValuePatterns:[/投标报价|报价明细|单价|合价|综合单价|预留金|暂列金额|税率|增值税|利润|结算/u],diagnosticValuePatterns:[/OCR|识别错误|乱码|无法确认|疑似|不确定|绑定片段|兜底|知识库|提示词|后台|文件路径|PDF|DWG|Excel/u,/^#+\s*/u,/^见(?:招标|投标人|前附|补疑|图纸|清单|文件|资料|公告|须知)/u],lowConfidenceValuePatterns:[/无法确认|疑似|不确定|需复核|文字模糊|语义断裂|识别错误|乱码/u]},e={...d,id:"construction_organization_design",name:"施工组织设计"},f=/施工组织设计|施工方案|危大工程|人、材、机|安全文明施工/u;function g(a){return f.test(a)}function h(a,b=""){return g(`${a?.id||""} ${a?.name||""} ${a?.category||""} ${a?.description||""} ${a?.outputTitle||""} ${b}`)?e:d}function i(a,b){if(b)return a.factFields.find(a=>a.name===b||a.aliases.some(a=>b.includes(a)||a.includes(b)))}function j(a,b){return a.forbiddenValuePatterns.some(a=>a.test(b))}function k(a,b){return a.diagnosticValuePatterns.some(a=>a.test(b))}function l(a,b){return a.lowConfidenceValuePatterns.some(a=>a.test(b))}},75251:(a,b,c)=>{c.d(b,{As:()=>k,C4:()=>E,FW:()=>r,NN:()=>y,az:()=>M,e:()=>J,j9:()=>s,uv:()=>w,w6:()=>z});var d=c(7148);function e(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function f(a){let b=Number.parseFloat(a.replace(/[,,\s]/gu,""));return Number.isFinite(b)?b:void 0}function g(a,b){return Math.abs(a-b)<=.01+1e-6*Math.max(Math.abs(a),Math.abs(b))}function h(a,b){return!!g(a,b)||Number.isInteger(a)&&(Math.trunc(b)===a||Math.round(b)===a)}function i(a){return a.replace(/\s+/gu,"").toLowerCase()}function j(a){return(0,d.Sn)(String(a||""))}let k=/(?:每|厚度|宽度|高度|深度|长度|直径|间距|净距|坡度|标高|偏差|误差|系数|等级|龄期|温度|含水率|压实度|密度|功率|电压|照度|色温|耐火|强度|抗渗|配合比|搭接|错缝|含水|埋深|覆土|预留|预埋|伸缩|沉降|变形|垂直度|平整度|倾角|坡度|模数|螺距|壁厚|净空|层高|埋设|位置|距离|半径|周长|坡度|距地|距墙|距顶|距梁|距楼|离地|离墙)/u,l=/^(?:以上|以下|以内|左右|及[^。;;,,]{0,8}(?:以上|以下|以内|左右))/u;function m(a){let b=[],c=[],d=new Map,e=new Map,h=a.billFactLock;if(h)for(let a of h.entries){let e=Number.isFinite(a.quantity)?a.quantity:void 0;for(let g of(void 0!==e&&(b.push({name:(a.name||"").trim(),value:e,unit:(a.unit||"").trim(),description:a.description||"",source:"bill"}),c.push(e)),a.specQuantityPairs||[])){let b=(g.spec||"").replace(/\s+/gu,"").toLowerCase(),e=/^([\d,,]+(?:\.\d+)?)\s*(.*)$/u.exec((g.quantity||"").trim()),h=e?f(e[1]):void 0;if(!b||void 0===h)continue;let i=d.get(b)||[];i.push({value:h,unit:(e?.[2]||"").trim(),entryName:a.name,spec:(g.spec||"").trim()}),d.set(b,i),c.push(h)}}for(let[d,f]of Object.entries(a.blueprintData?.quantities??{})){if("number"!=typeof f?.value||!Number.isFinite(f.value))continue;for(let a of(b.push({name:d.trim(),value:f.value,unit:(f.unit||"").trim(),description:"",source:"blueprint"}),c.push(f.value),f.groups??[]))c.push(a.value);let a=f.specBreakdown??[];if(a.length>=2){let b=a.reduce((a,b)=>a+b.value,0);for(let h of(e.set(d.trim(),{value:f.value,unit:(f.unit||"").trim(),specs:new Map(a.map(a=>[i(a.spec),a.value])),breakdown:a.map(a=>({spec:a.spec,value:a.value})),partitioned:g(b,f.value)}),a))c.push(h.value)}}return!function(a,b){if(!a)return;let c=a=>{if("number"==typeof a){Number.isFinite(a)&&b.push(a);return}if("string"==typeof a){for(let c of a.matchAll(/\d+(?:\.\d+)?/gu))b.push(Number.parseFloat(c[0]));return}if(Array.isArray(a))return void a.forEach(c);a&&"object"==typeof a&&Object.values(a).forEach(c)};[a.project,a.schedule,a.quality,a.safety,a.resources,a.preciseFacts,a.bills,a.drawings,a.rules,a.specifications,a.tables].forEach(c)}(a.factsModel,c),{entries:b,numberPool:c,specValues:d,aggregateSpecs:e}}let n=/(?:合计|共计|总计|总共|总量|总数|总长|全长|总长度|总数量|总面积|总重量|小计)(?:为|达|约|共|计)?\s*([\d,,]+(?:\.\d+)?)\s*(立方米|m³|m3|平方米|㎡|m²|m2|公里|千米|km|kg|吨|t|座|个|套|处|盏|棵|株|樘|扇|根|块|片|组|件|孔|间|栋|幢|户|米|m)(?![a-zA-Z0-9²³])/gu;function o(a,b,c=2){if(!a||!b)return!1;let d=Math.min(a.length,8);for(let e=d;e>=c;e-=1)for(let c=0;c+e<=a.length;c+=1)if(b.includes(a.slice(c,c+e)))return!0;return!1}function p(a,b){let c=function(a){switch(j(a)){case"m":return"(?:m|米)";case"km":return"(?:km|公里|千米)";case"m2":return"(?:m2|m\xb2|㎡|平方米)";case"m3":return"(?:m3|m\xb3|立方米)";case"t":return"(?:t|吨)";case"kg":return"(?:kg|千克)";default:return e((a||"").trim())}}(b.unit);for(let d of function(a){let b=`${a}`,c=new Set([b]),[d,e]=b.split(".");return d.length>=4&&c.add(`${d.replace(/\B(?=(\d{3})+(?!\d))/gu,",")}${e?`.${e}`:""}`),[...c]}(b.value)){let f=e(d);if(RegExp(`${f}\\s*(?:${c})|(?:${c})\\s*${f}`,"u").test(a)||b.value>=100&&RegExp(`(?<![\\d.])${f}(?![\\d])`,"u").test(a))return!0}return!1}function q(a,b,c){let d=a.filter(a=>a.name.length>=2&&o(a.name,c));if(d.length<2||d.length>24)return[];for(let a=0;a<d.length;a+=1)for(let c=a+1;c<d.length;c+=1){let e=d[a],f=d[c];if(!(e.name===f.name&&g(e.value,f.value))&&g(e.value+f.value,b))return[e,f]}return[]}let r=/(?:合计|共计|总计|总共|总量|总数|总长|全长|总长度|总数量|总面积|总重量|小计)(?:为|达|约|共|计)?\s*$/u;function s(a){let b=j(a.unit);if(!(a.total>0)||!b||!a.context)return null;let c=a.values.filter(c=>c.value>0&&c.name.length>=2&&j(c.unit)===b&&o(c.name,a.context));if(c.length<2)return null;let d=new Map;for(let a of c){let b=`${a.name}\u0000${a.kind??"entry"}`,c=d.get(b);c?c.push(a):d.set(b,[a])}for(let b of d.values())if(!(b.length<2)&&g(b.reduce((a,b)=>a+b.value,0),a.total))return b;let e=new Map;for(let a of c){let b=a.value.toFixed(4),c=e.get(b);c?c.push(a):e.set(b,[a])}for(let b of c)for(let c of e.get((a.total-b.value).toFixed(4))??[])if(c!==b&&c.name!==b.name&&g(b.value+c.value,a.total))return[b,c];return null}function t(a,b,c,d,e){let f=new Map;for(let a of d.entries){if(!(a.value>0)||j(a.unit)!==b)continue;let c=`${a.source}\u0000${a.name}`;f.set(c,(f.get(c)||0)+a.value)}let h=[];for(let[a,b]of f)if(o(a.slice(a.indexOf("\0")+1),c)&&(h.some(a=>g(a,b))||h.push(b),h.length>=24))break;if(0===h.length)return!1;let i=b=>g(b,a)||function(a,b){let c=0,d=a.length;for(;c<d;){let e=c+d>>1;a[e]<b?c=e+1:d=e}for(let d=Math.max(0,c-1);d<=Math.min(a.length-1,c+1);d+=1)if(g(a[d],b))return!0;return!1}(e,a-b);if(h.some(a=>i(a)))return!0;for(let a=0;a<h.length;a+=1)for(let b=a+1;b<h.length;b+=1)if(i(h[a]+h[b]))return!0;return!1}function u(a,b){let c=[];if(0===b.entries.length)return c;let d=new Set,e=[...b.numberPool].sort((a,b)=>a-b);for(let h of a.matchAll(n)){let i=f(h[1]);if(void 0===i)continue;let k=j(h[2]),l=h.index??0,m=l+h[0].length,n=b.entries.filter(a=>a.value>0&&j(a.unit)===k);if(0===n.length)continue;let r=a.slice(Math.max(0,l-40),l+h[0].length+40),s=a.slice(Math.max(0,l-20),l+h[0].length),u=n.filter(a=>a.name.length>=3&&s.includes(a.name)).sort((a,b)=>b.name.length-a.name.length)[0];if(u){if(g(u.value,i)){let b=q(n,i,r);if(b.length>=2){let e=a.slice(Math.max(0,l-150),l+h[0].length+150),f=b.filter(a=>!p(e,a));if(f.length>0){let a=b.map(a=>`「${a.name}」${a.value}${a.unit}`).join(" + "),e=`合计数值应分项显式:「${u.name} ${i}${h[2]}」= ${a},但正文未展示分项(缺 ${f.map(a=>`${a.name} ${a.value}${a.unit}`).join("、")}),无法核对合计来源`;d.has(e)||(d.add(e),c.push({issue:{level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:e,suggestion:`在合计值附近补充分项明细(${a}),使合计数值可逐项核对;分项值必须取自工程量清单原文,不得改动。`},matchStart:l,matchEnd:m}))}}continue}let f=i-u.value,j=n.find(a=>a!==u&&a.name!==u.name&&g(a.value,f));if(j){let b=a.slice(Math.max(0,l-150),l+h[0].length+150);if(p(b,u)&&p(b,j))continue;let e=`合计值与权威不符:「${u.name}」清单权威 ${u.value}${h[2]};正文 ${i}${h[2]} \u2248 ${u.value} + ${j.value}(「${j.name}」)——若「${j.name}」应计入「${u.name}」合计,须在正文显式分项;若不应计入(重复计入),须改回权威值 ${u.value}${h[2]}`;d.has(e)||(d.add(e),c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:e,suggestion:`核对合计口径:「${u.name}」合计为 ${u.value}${h[2]}(清单权威)。若正文需表达 ${u.value} + ${j.value},则显式写成「${u.name} ${u.value}${h[2]}、${j.name} ${j.value}${h[2]},合计 ${i}${h[2]}」;否则将合计改回 ${u.value}${h[2]}(差额 ${Math.round(1e4*f)/1e4}${h[2]} 属「${j.name}」,不得并入)。`},matchStart:l,matchEnd:m}));continue}if(t(i,k,r,b,e))continue;let o=`合计值与权威不符:「${u.name}」合计为 ${u.value}${h[2]}(清单权威),正文写 ${i}${h[2]},且差额不属任何清单条目,需核对合计口径`;d.has(o)||(d.add(o),c.push({issue:{level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:o,suggestion:`核对「${u.name}」的合计口径:若为多分项之和,请写明与权威一致的分项分解;若为单一总量,改为清单权威值 ${u.value}${u.unit||h[2]}。`},matchStart:l,matchEnd:m}));continue}let v=q(n,i,r);if(v.length>=2){let b=a.slice(Math.max(0,l-150),l+h[0].length+150),e=v.filter(a=>!p(b,a));if(e.length>0){let a=v.map(a=>`「${a.name}」${a.value}${a.unit}`).join(" + "),b=`合计数值应分项显式:正文合计 ${i}${h[2]} = ${a},但未展示分项(缺 ${e.map(a=>`${a.name} ${a.value}${a.unit}`).join("、")}),无法核对合计来源`;d.has(b)||(d.add(b),c.push({issue:{level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:b,suggestion:`在合计值附近补充分项明细(${a});分项值必须取自工程量清单原文,不得改动。`},matchStart:l,matchEnd:m}))}continue}{let a=new Map;for(let b of n)a.set(b.name,(a.get(b.name)||0)+b.value);let b=!1;for(let c of a.values())if(g(c,i)){b=!0;break}if(b)continue}if(t(i,k,r,b,e))continue;let w=n.filter(a=>o(a.name,r)),x=n.some(a=>g(a.value,i)),y=b.numberPool.some(a=>g(a,i));if(!x&&!y&&w.length>0){let a=`合计值无权威来源:正文「${h[0].trim()}」在清单事实锁与蓝图参数桶中找不到同值来源,违反无据不写`;if(d.has(a))continue;d.add(a),c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:a,suggestion:"删除该合计数值或改为与清单权威一致的合计值;无权威来源的合计数不得进入交付文本。"},matchStart:l,matchEnd:m})}}return c}function v(a,b,c){let d=Math.max(0,b-60),e=a.slice(d,b),f=-1;for(let a=e.length-1;a>=0;a-=1)if(/[,、;;。!?!?\n]/u.test(e[a])){f=d+a;break}if(-1===f||b-f>40)return null;let g=/[,、;;]/u.test(a[f]),h=g?f:f+1,i=g?c:c+ +!!/[,、;;]/u.test(a[c]||"");return i<=h?null:{start:h,end:i,excerpt:a.slice(h,i).trim()}}function w(a,b){let c=m({markdown:a,...b});if(0===c.entries.length)return{markdown:a,fixedCount:0,details:[]};let d=a,e=[];for(let a=1;a<=4;a+=1){let a=[];for(let b of u(d,c)){if(!b.issue.message.startsWith("合计值无权威来源"))continue;let c=v(d,b.matchStart,b.matchEnd);c&&a.push(c)}if(0===a.length)break;let b=0,f=1/0;for(let c of[...a].sort((a,b)=>b.start-a.start))c.end>f||(d=d.slice(0,c.start)+d.slice(c.end),f=c.start,b+=1,e.push(`删除无源合计「${c.excerpt.slice(0,40)}」`));if(0===b)break}return{markdown:d,fixedCount:e.length,details:e}}function x(a,b,c){let d=m({markdown:a,...b});if(0===d.entries.length)return{markdown:a,fixedCount:0,details:[]};let e=a,f=[];for(let a=1;a<=4;a+=1){let a=[];for(let f of L(e,d,b.billFactLock)){if(!f.issue.message.startsWith(c.prefix))continue;let b=v(e,f.matchStart,f.matchEnd);b&&a.push(b)}if(0===a.length)break;let g=0,h=1/0;for(let b of[...a].sort((a,b)=>b.start-a.start))b.end>h||(e=e.slice(0,b.start)+e.slice(b.end),h=b.start,g+=1,f.push(c.detail(b.excerpt.slice(0,40))));if(0===g)break}return{markdown:e,fixedCount:f.length,details:f}}function y(a,b){return x(a,b,{prefix:"名称-数值绑定无源",detail:a=>`删除无源绑定「${a}」`})}function z(a,b){return x(a,b,{prefix:"名称-数值绑定错位",detail:a=>`删除错位绑定「${a}」`})}let A=/(?:DN|De|Φ|φ|Ø|dn|de)\s*\d+(?:\.\d+)?|(?<![A-Za-z0-9])[CM]\d{2,3}(?![0-9])|HRB\d+|HPB\d+|(?<![A-Za-z0-9])\d{2,4}\s*[×xX*]\s*\d{2,4}(?![0-9])|(?<![A-Za-z0-9])\d+(?:\.\d+)?\s*[kK]?[Ww](?![A-Za-z0-9])/gu,B=/运输车|搅拌车|罐车|挖掘机|挖机|装载机|压路机|摊铺机|打夯机|夯实机|洒水车|浇水车|吊车|起重机|泵车|地泵|发电机组|发电机|电焊机|空压机|水泵|提升泵|潜水泵|雾炮机|充桩|桩机|机械|设备|机具|车辆|机组/u;function C(a,b){for(let[c,d]of a.aggregateSpecs)if(d.specs.has(b))return{entryName:c,info:d}}function D(a,b){let c=[];if(0===b.specValues.size&&0===b.aggregateSpecs.size)return c;let d=new Set;for(let e of a.matchAll(A)){let h,j=i(e[0]),m=b.specValues.get(j)??[],n=C(b,j);if(0===m.length&&!n)continue;let p=(e.index??0)+e[0].length,q=a.slice(p,p+36),r=/^([^。;;\n|]{0,16}?)([\d,,]+(?:\.\d+)?)\s*(座|个|套|盏|台|根|块|樘|扇|片|组|件|孔|米|m|km|公里|平方米|m2|㎡|m²|立方米|m3|m³|吨|t|kg)(?![a-zA-Z0-9²³])/u.exec(q);if(!r||k.test(r[1])||l.test(q.slice(r[1].length+r[2].length+r[3].length))||/不大于|不超过|不得大于|不得超过/.test(r[1]))continue;let s=r[1],t=a.slice(Math.max(0,p+s.length-8),p+s.length);if(/\d\s*[~~至\-—–]\s*$/u.test(t))continue;if(/[、,,]/u.test(s)){let a=s.split(/[、,,]/u).pop()||"";if(/[\u4e00-\u9fa5]/u.test(a)&&!/合计|小计|共计|总计|总量|用量|总长|共/u.test(a))continue}if("台"===r[3]||"套"===r[3]){let b=p+r[1].length+r[2].length+r[3].length;if(B.test(r[1])||B.test(a.slice(b,b+12)))continue}if(/总长|全长|长度|管长|延米/u.test(r[1])&&/^(?:m|米|km|公里)$/u.test(r[3])||/^共$/u.test(r[1]||"")&&/(?:钢筋|配筋|编号)/u.test(a.slice(Math.max(0,(e.index||0)-60),(e.index||0)+60)))continue;let u=f(r[2]);if(void 0===u||0===u||m.some(a=>g(a.value,u)))continue;let v=n?.info.specs.get(j);if(void 0!==v&&g(v,u))continue;let w=new Map;for(let a of m){let b=w.get(a.entryName);b?b.value+=a.value:w.set(a.entryName,{value:a.value,unit:a.unit})}let x=[...w.values()].sort((a,b)=>b.value-a.value);if(m.length>=2&&x.some(a=>g(a.value,u)))continue;if(n?.info.partitioned&&void 0!==v&&g(n.info.value,u)){let a=i(r[1]);if(![...n.info.specs.keys()].some(b=>b!==j&&a.includes(b))){let a=n.info.breakdown.map(a=>`${a.spec} ${a.value}${n.info.unit}`).join(" + "),b=`规格-数值绑定错位:「${e[0]}」处数值 ${u}${r[3]} 是「${n.entryName}」的跨规格名称合计(${a}),不属于单一规格「${e[0]}」——名称合计不得挂给单一规格,须写该规格小计 ${v}${r[3]}(确需写合计须显式分解)`;if(!d.has(b)){d.add(b);let f=p+r[1].length;c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:b,suggestion:`「${e[0]}」的数量须写该规格小计 ${v}${r[3]};名称合计须显式分解为 ${a}(合计 ${n.info.value}${n.info.unit}),不得把合计值挂在单一规格名下。`},specToken:e[0],value:u,unit:r[3],valueStart:f,valueEnd:f+r[2].length,groupSumCandidates:[{value:v,unit:n.info.unit},...x.filter(a=>!g(a.value,u))]})}}continue}for(let[a,c]of b.specValues){if(a===j)continue;let b=c.find(a=>g(a.value,u));if(b){h={spec:b.spec||a,entryName:b.entryName};break}}if(!h||r[1]&&o(h.entryName,r[1]))continue;let y=`规格-数值绑定错位:正文「${e[0]} ${u}${r[3]}」中 ${u}${r[3]} 属规格「${h.spec}」(清单条目「${h.entryName}」),不属于「${e[0]}」的清单数量`;if(d.has(y))continue;d.add(y);let z=p+r[1].length;c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:y,suggestion:`「${e[0]}」的数量必须引用清单中该规格条目的原值(如 ${m.map(a=>`${a.value}${a.unit}`).join("、")});「${h.spec}」的数量不得张冠李戴至「${e[0]}」。`},specToken:e[0],value:u,unit:r[3],valueStart:z,valueEnd:z+r[2].length,groupSumCandidates:x.filter(a=>!g(a.value,u))})}for(let e of a.matchAll(A)){let h=i(e[0]),j=C(b,h);if(!j?.info.partitioned)continue;let l=j.info.specs.get(h);if(void 0===l)continue;let m=e.index??0,n=a.slice(Math.max(0,m-24),m),p=/([\d,,]+(?:\.\d+)?)\s*(座|个|套|盏|台|根|块|樘|扇|片|组|件|孔|米|m|km|公里|平方米|m2|㎡|m²|立方米|m3|m³|吨|t|kg)\s*([^。;;\n|0-9²³]{0,12})$/u.exec(n);if(!p)continue;let q=p[3];if(!/[((]|为|系|采用|型号|规格|灯型|类型/u.test(q)||k.test(q))continue;let r=f(p[1]);if(void 0===r||!g(j.info.value,r)||g(l,r)||!o(j.entryName,n))continue;let s=i(a.slice(Math.max(0,m-60),m+60));if([...j.info.specs.keys()].filter(a=>s.includes(a)).length>=2)continue;let t=m-q.length-p[2].length-p[1].length,u=`${h}@${t}`;if(d.has(u))continue;d.add(u);let v=j.info.breakdown.map(a=>`${a.spec} ${a.value}${j.info.unit}`).join(" + ");c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规格-数值绑定错位:正文「…${r}${p[2]}${q}${e[0]}…」中 ${r}${p[2]} 为「${j.entryName}」的跨规格名称合计(${v}),其后紧随单一规格「${e[0]}」易被读作全部为该规格;名称合计须显式分解`,suggestion:`数量 ${r}${p[2]} 保留不动;把规格表述改为显式分解,如「${r}${p[2]}(${v})」或逐规格列写「${v}」;不得以名称合计搭配单一规格描述。`},specToken:e[0],value:r,unit:p[2],valueStart:t,valueEnd:t+p[1].length,groupSumCandidates:[]})}if(b.aggregateSpecs.size>0){let e=0;for(let h of a.split("\n")){let a=e;if(e+=h.length+1,!h.includes("|")||/^\s*\|?[\s:|-]*\|?\s*$/u.test(h))continue;let j=new Map;for(let a of h.matchAll(A)){let c=i(a[0]),d=C(b,c);if(!d?.info.partitioned)continue;let e=d.info.specs.get(c);if(void 0===e)continue;let f=j.get(d.entryName)||[];f.some(a=>a.key===c)||f.push({key:c,raw:a[0].trim(),specSum:e}),j.set(d.entryName,f)}if(1!==j.size)continue;let[k,l]=[...j.entries()][0];if(1!==l.length)continue;let m=b.aggregateSpecs.get(k);if(!m)continue;let{key:n,raw:p,specSum:q}=l[0];if(o(k,h))for(let e of h.matchAll(/\|([^|\n]*)/gu)){let h=e[1].trim(),i=/^([\d,,]+(?:\.\d+)?)\s*(?:座|个|套|盏|台|根|块|樘|扇|片|组|件|孔|米|m|km|公里|平方米|m2|㎡|m²|立方米|m3|m³|吨|t|kg)?$/u.exec(h);if(!i)continue;let j=f(i[1]);if(void 0===j||!g(m.value,j)||g(q,j)||(b.specValues.get(n)??[]).some(a=>g(a.value,j)))continue;let l=a+(e.index??0)+1+e[1].indexOf(i[1]),o=`${n}@${l}`;if(d.has(o))continue;d.add(o);let r=m.breakdown.map(a=>`${a.spec} ${a.value}${m.unit}`).join(" + ");c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规格-数值绑定错位:表格行「${p}…」的数量 ${j}${m.unit} 是「${k}」的跨规格名称合计(${r}),该行规格为「${p}」应填其小计 ${q}${m.unit}`,suggestion:`该行数量改为 ${q}${m.unit};名称合计请另立「合计」行或显式分解为 ${r}。`},specToken:p,value:j,unit:m.unit,valueStart:l,valueEnd:l+i[1].length,groupSumCandidates:[{value:q,unit:m.unit}]})}}}return c}function E(a,b){let c=m({markdown:a,...b});if(0===c.specValues.size&&0===c.aggregateSpecs.size)return{markdown:a,fixedCount:0,details:[]};let e=a,f=[];for(let a=1;a<=8;a+=1){let a=D(e,c).filter(a=>a.groupSumCandidates.length>0);if(0===a.length)break;let b=0;for(let g of[...a].sort((a,b)=>b.valueStart-a.valueStart)){let a,h,i=g.groupSumCandidates.find(a=>{var b,c;return b=a.unit,(0,d.Sn)(b)===(c=g.unit,(0,d.Sn)(c))});if(i)a=e.slice(0,g.valueStart)+`${i.value}`+e.slice(g.valueEnd),h=`「${g.specToken}」绑定数值 ${g.value}${g.unit} → 组和值 ${i.value}${g.unit}`;else{let b=g.valueStart;for(;b>0&&/\s/u.test(e[b-1]);)b-=1;let c=g.valueEnd+g.unit.length;a=e.slice(0,b)+e.slice(c),h=`「${g.specToken}」移除张冠李戴数值 ${g.value}${g.unit}(无同单位替换候选,值不属该规格)`}D(a,c).some(a=>{let b=a.valueStart-g.valueStart;return b>=-4&&b<=4})||(e=a,b+=1,f.push(h))}if(0===b)break}return{markdown:e,fixedCount:f.length,details:f}}let F=/(?:埋深|覆土(?:厚度|深度)?|管顶覆土)(?:不小于|不大于|不低于|不超过|约|为|达|控制在|一般|宜|应)?[^。;;\n|]{0,10}?([\d,,]+(?:\.\d+)?)\s*(mm|cm|米|m)(?![a-zA-Z0-9²³])/gu,G=/(?:约为|大约|约计|约|将近|近)\s*([\d,,]+(?:\.\d+)?)\s*(点|处|座|个|套|盏|棵|株|樘|扇|根|块|片|组|件|孔|间|栋|幢|户|米|公里|km|m2|㎡|m²|平方米|m3|m³|立方米|kg|吨|t|l|升|kw|w)(?![a-zA-Z0-9²³³])/giu,H=/([\d,,]+(?:\.\d+)?)\s*余\s*(点|处|座|个|套|盏|棵|株|樘|扇|根|块|片|组|件|孔|间|栋|幢|户|米|公里|km|m2|㎡|m²|平方米|m3|m³|立方米|kg|吨|t)(?![a-zA-Z0-9²³])/gu,I=/[节制合履签违公盟密租最接靠邻附距离]/u,J=/^(?:管道|工程|材料|项目|施工|工作|设备|设施|系统|区域|场地|道路|建筑|结构|基础|主体|管网|土建|安装|装饰|装修|土方|绿化|照明|给水|排水|电气|挖方|填方|回填|弃方|外运|运输|检测|试验|测量|清理|拆除|清淤|维护|养护|管理|服务|其他|以上|以下|其中|包括|采用|使用|型号|规格|数量|单位|合计|总计|长度|面积|体积|重量)$/u,K=/(木质|木|铝合金|铝|不锈钢|塑钢|塑料|塑|钢|铁|砼|混凝土|铸铁|铜|复合)(门|窗|井|灯|护栏|围栏|盖板|雨水口)/gu;function L(a,b,c){let d=[],e=new Set,i=new Set,m=new Map;if(c)for(let a of c.entries){let b=(a.name||"").trim();if(b.length<2||!Number.isFinite(a.quantity))continue;let c=`${b}\u0000${j(a.unit)}`,d=m.get(c)||{count:0,samples:[]};d.count+=1;let e=`${a.quantity}${a.unit}`;d.samples.length<3&&!d.samples.includes(e)&&d.samples.push(e),m.set(c,d)}let n=b.entries.map(a=>`${a.name} ${a.description}`).join("\n"),p=new Map;{let a=new Map;for(let c of b.entries){if(!(c.value>0))continue;let b=`${c.source}\u0000${c.name}`,d=a.get(b);d?d.sum+=c.value:a.set(b,{name:c.name,sum:c.value})}for(let b of a.values()){let a=p.get(b.name)||[];a.push(b.sum),p.set(b.name,a)}}let q=new Map,r=new Map,s=new Map,t=(a,c,d)=>{let e=`${a}\u0000${c}`,f=q.get(e);if(f||(f=b.entries.filter(b=>b.name===a&&j(b.unit)===c&&b.value>0).map(a=>Math.round(100*a.value)),q.set(e,f)),f.length<2)return!1;let g=`${e}\u0000${Math.round(100*d)}`,h=r.get(g);if(void 0!==h)return h;let i=function(a,b){if(a.length<2||b<=0)return!1;let c=[...a].sort((a,b)=>a-b);if(c.some(a=>a===b))return!1;let d=c.reduce((a,b)=>a+b,0);if(b>d)return!1;let e=d-b;if(e>0&&e!==b){let a=Math.max(b,e);for(let d=0;d<c.length;d+=1)for(let f=d+1;f<c.length;f+=1){let g=c[d]+c[f];if(g>a)break;if(g===b||g===e)return!0}let d=0,f=c.length-1;for(;d<=f;){let a=d+f>>1;if(c[a]===e)return c.length>=3;c[a]<e?d=a+1:f=a-1}}else for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a]+c[d];if(e>b)break;if(e===b)return!0}if(c.length>40)return!1;let f=Math.ceil(c.length/2),g=c.slice(0,f),h=c.slice(f),i=a=>{let b=new Set([0]);for(let c of a){let a=new Set;for(let d of b)a.add(d),a.add(d+c);b=a}return b},j=i(h);for(let a of i(g))if(j.has(b-a))return!0;return!1}(f,Math.round(100*d));return r.set(g,i),i},u=(a,c)=>{let d=p.get(a)||[];if(0===d.length)return!1;let e=`${a}\u0000${Math.round(100*c)}`,f=s.get(e);if(void 0!==f)return f;let h=d.some(a=>b.numberPool.some(b=>g(a+b,c)));return s.set(e,h),h};if(c)for(let n of c.entries){let c=(n.name||"").trim();if(c.length<2||J.test(c)||!Number.isFinite(n.quantity))continue;let q=0,r=0;for(;r<6;){let s=a.indexOf(c,q);if(s<0)break;if(q=s+c.length,r+=1,/\d$/u.test(c)&&/^[\d.]/u.test(a.slice(s+c.length,s+c.length+1))){q=s+1;continue}if("量"===a.slice(s+c.length,s+c.length+1))continue;let v=a.slice(s+c.length,s+c.length+20),w=/^([^。;;\n|]{0,12}?)([\d,,]+(?:\.\d+)?)\s*(座|个|套|处|盏|棵|株|樘|扇|根|块|片|组|件|孔|间|栋|幢|户|米|m|km|公里|平方米|m2|㎡|m²|立方米|m3|m³|kg|吨|t)(?![a-zA-Z0-9²³])/u.exec(v);if(!w||k.test(w[1])||l.test(v.slice(w[1].length+w[2].length+w[3].length)))continue;let x=f(w[2]);if(void 0===x||0===x||h(x,n.quantity))continue;let y=j(w[3]);if(y!==j(n.unit)||b.entries.some(a=>a.name===c&&h(x,a.value)&&j(a.unit)===y)||(p.get(c)||[]).some(a=>g(a,x))||t(c,y,x)||u(c,x))continue;let z=a.slice(Math.max(0,s-32),s+c.length+20);if(function(a,b,c,d){for(let[e,f]of d)if(e!==b&&(e.includes(b)||b.includes(e)||o(e,c))&&f.some(b=>g(b,a)))return!0;return!1}(x,c,z,p))continue;let A=b.entries.find(a=>a.name!==c&&g(a.value,x)&&j(a.unit)===y);if(A&&o(A.name,z))continue;if(A){let a=`${s}\u0000${x}\u0000${y}`;if(i.has(a))continue;i.add(a);let b=m.get(`${c}\u0000${y}`),f=b&&b.count>1?`名称-数值绑定错位:「${c}」处数值 ${x}${w[3]} 属清单条目「${A.name}」(${A.value}${A.unit}),与同名清单条目(共 ${b.count} 条,如 ${b.samples.join("、")} 等)的权威数量均不符`:`名称-数值绑定错位:「${c}」处数值 ${x}${w[3]} 属清单条目「${A.name}」(${A.value}${A.unit}),与「${c}」清单数量 ${n.quantity}${n.unit} 不符`;if(e.has(f))continue;e.add(f),d.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:f,suggestion:b&&b.count>1?`核对「${c}」的数量口径:同名清单条目共 ${b.count} 条(如 ${b.samples.join("、")} 等),逐一核对后引用对应条目数量;引用「${A.name}」数量时须明确对象名称,不得张冠李戴。`:`核对「${c}」的数量口径:清单权威值为 ${n.quantity}${n.unit};引用「${A.name}」数量时须明确对象名称,不得张冠李戴。`},matchStart:s,matchEnd:s+c.length+w[0].length});continue}if(function(a,b,c,d){let e=a.slice(Math.max(0,b-40),b+c+40),f=[];for(let a of e.matchAll(/\d+(?:\.\d+)?/gu)){let b=Number.parseFloat(a[0]);Number.isFinite(b)&&!g(b,d)&&f.push(b)}for(let a=0;a<f.length;a+=1)for(let b=a+1;b<f.length;b+=1)if(g(f[a]+f[b],d)||g(Math.abs(f[a]-f[b]),d))return!0;return!1}(a,s,c.length,x)||b.numberPool.some(a=>g(a,x)))continue;let B=`${s}\u0000${x}\u0000${y}`;if(i.has(B))continue;i.add(B);let C=m.get(`${c}\u0000${y}`),D=C&&C.count>1?`名称-数值绑定无源:「${c}」处数值 ${x}${w[3]} 与同名清单条目(共 ${C.count} 条,如 ${C.samples.join("、")} 等)的权威数量均不符,且在全部权威数据中找不到同值来源`:`名称-数值绑定无源:「${c}」处数值 ${x}${w[3]} 与清单权威 ${n.quantity}${n.unit} 不符,且在全部权威数据中找不到同值来源`;e.has(D)||(e.add(D),d.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:D,suggestion:C&&C.count>1?`核对「${c}」的数量口径:同名清单条目共 ${C.count} 条(如 ${C.samples.join("、")} 等),逐一核对后引用对应条目的权威数量;无权威来源的数值不得与清单条目名称绑定出现。`:`将「${c}」的数量改为清单权威值 ${n.quantity}${n.unit};无权威来源的数值不得与清单条目名称绑定出现。`},matchStart:s,matchEnd:s+c.length+w[0].length}))}}for(let c of a.matchAll(K)){let h=c[0];if(n.includes(h))continue;let i=c[2],k=a.slice((c.index??0)+h.length,(c.index??0)+h.length+16),l=/^([^。;;\n|]{0,10}?)([\d,,]+(?:\.\d+)?)\s*(樘|扇|套|座|盏|个)(?![a-zA-Z0-9²³])/u.exec(k);if(!l)continue;let m=f(l[2]);if(void 0===m)continue;let o=b.entries.find(a=>a.name.includes(i)&&g(a.value,m)&&j(a.unit)===j(l[3]));if(!o)continue;let p=`名称口径不符:正文「${h} ${m}${l[3]}」——${m}${l[3]} 对应清单「${o.name}」条目,清单中不存在「${h}」,名称与清单权威不符`;if(e.has(p))continue;e.add(p);let q=c.index??0;d.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:p,suggestion:`名称必须与清单条目口径一致:将「${h}」改为「${o.name}」(或清单原文名称);名称与数量绑定不得自行替换材质/类型限定词。`},matchStart:q,matchEnd:q+h.length+l[0].length})}return d}function M(a){let b=a.markdown||"";if(!b)return[];let c=m(a);if(0===c.entries.length&&0===c.numberPool.length)return[];let d=[...u(b,c).map(a=>a.issue),...D(b,c).map(a=>a.issue),...function(a,b){let c=[],d=new Set;for(let e of a.matchAll(F)){let a=f(e[1]);if(void 0===a)continue;let h=e[2];if(("mm"===h?a/1e3:"cm"===h?a/100:a)<=10)continue;let i=b.entries.find(b=>g(b.value,a)&&/总长|全长|总长度|长度|管线/u.test(b.name)),j=`数值语义槽位错位:正文「${e[0].trim()}」——埋深/覆土数值 ${a}${h} 超出物理合理范围(管道埋深一般 <10m)${i?`,且该数值与权威「${i.name}」(${i.value}${i.unit})一致,疑似把总长/长度口径误用作埋深`:",疑似口径混用"}`;d.has(j)||(d.add(j),c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:j,suggestion:`核对槽位语义:埋深/覆土深度应在 0.3~10m 合理区间(以设计图纸为准);总长/长度类数值不得用于埋深描述${i?`(「${i.name}」为 ${i.value}${i.unit})`:""}。`}))}return c}(b,c),...function(a,b){let c=[];if(0===b.numberPool.length)return c;let d=new Set,e=(a,e,g)=>{let h=f(a);if(void 0===h||function(a,b){let c=a>=1e3?Math.max(10,.02*a):a>=100?5:a>=10?1:.5;return b.some(b=>Math.abs(b-a)<=c||Math.abs(b-a)<=Math.max(1e-6,.02*Math.abs(b)))}(h,b.numberPool))return;let i=`近似数值不可推导:正文「${g.trim()}」的 ${h}${e} 在清单/蓝图/事实主表中无同值或近似来源,违反无据不写`;d.has(i)||(d.add(i),c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:i,suggestion:"删除该近似表述,或改用权威数据可推导的数值(清单/蓝图同值口径);「约/近」类近似数值必须可闭合到权威来源。"}))};for(let b of a.matchAll(G)){let c=b.index??0,d=a.slice(Math.max(0,c-1),c);I.test(d)||e(b[1],b[2],b[0])}for(let b of a.matchAll(H))e(b[1],b[2],b[0]);return c}(b,c),...L(b,c,a.billFactLock).map(a=>a.issue)],e=[],h=new Set;for(let a of d){let b=`${a.severity||a.level}|${a.message}`;h.has(b)||(h.add(b),e.push(a))}return e}},76193:(a,b,c)=>{c.d(b,{AM:()=>t,EH:()=>K,HM:()=>w,Id:()=>k,Jq:()=>H,Qi:()=>F,Xh:()=>J,Z8:()=>n,ll:()=>E,rk:()=>A,uM:()=>I,wF:()=>M,yT:()=>C});var d=c(73024),e=c(76760),f=c(51190),g=c(22157),h=c(44505),i=c(10751),j=c(93675);let k=[{id:"schedule",extract:a=>(0,h.GG)(a.factsModel)},{id:"assemblyRate",extract:a=>(0,h.hI)(a.factsModel)},{id:"supportSystem",extract:a=>(0,h.P3)(a.factsModel)},{id:"laborPeak",extract:a=>(0,i.yB)(a.blueprint)},{id:"greeningMaintenance",extract:a=>(0,h.Dq)(a.factsModel)},{id:"blueprint",extract:a=>a.blueprint},{id:"canonicalFacts",extract:a=>(0,f.mN)({facts:a.structuredFacts??[],markdown:a.markdown??""})}],l=new Set(["fixed","exempt","manual"]),m=[],n={"generation-completeness":{kind:"terminal-only",reason:"装配级缺失(章节不齐/提示词未生效/预算中断)——它的成因发生在写作之前或之外,写作期没有可自检的落点;处置是补配置或重跑,不是改正文"},"gating-checklist":{kind:"terminal-only",reason:"交付门禁 checklist 的确定性判据(证据齐备/事实来源/无占位),依赖全稿与资料完备度,写作期不可判"},"chapter-block-degradation":{kind:"terminal-only",reason:'记录"写作期已发生的损失"(块失守 → 章降级成稿):它的写作期对应物是块级质检与重试(已存在),本条是事后如实记账,不重复自检'},"ambiguous-either-or":{kind:"constraint",channel:"块任务卡"},"area-arithmetic":{kind:"constraint",channel:"块任务卡"},"atlas-reference-phrase":{kind:"constraint",channel:"全局约束"},"authority-audit-gap":{kind:"constraint",channel:"块任务卡"},"auto-spec-validation":{kind:"self-check",stage:"章成稿后"},"basic-info-schedule-field":{kind:"constraint",channel:"块任务卡"},"basis-regulations-coverage":{kind:"constraint",channel:"块任务卡"},"basis-regulations-cross":{kind:"terminal-only",reason:"编制依据的跨章比对需全文依据清单集合(单章成稿时其余章的依据尚未产生)"},"bid-composition-body-figure":{kind:"self-check",stage:"章成稿后"},"bid-composition-body-table":{kind:"self-check",stage:"章成稿后"},"bidder-qualification-section":{kind:"constraint",channel:"全局约束"},"block-attribution-quantification":{kind:"constraint",channel:"块任务卡"},"block-fact-density":{kind:"constraint",channel:"块任务卡"},"block-filler-phrase":{kind:"self-check",stage:"块成稿后"},"block-format-constraints":{kind:"constraint",channel:"全局约束"},"block-numeric-reconciliation":{kind:"constraint",channel:"块任务卡"},"block-requirement-anchor":{kind:"self-check",stage:"块成稿后"},"block-structure-contract":{kind:"self-check",stage:"章成稿后"},"block-templating":{kind:"self-check",stage:"块成稿后"},"blueprint-citation-consistency":{kind:"constraint",channel:"块任务卡"},"blueprint-value-placement":{kind:"constraint",channel:"块任务卡"},"boq-division-coverage":{kind:"constraint",channel:"块任务卡"},"boq-placement":{kind:"constraint",channel:"块任务卡"},"boq-row-trace":{kind:"constraint",channel:"块任务卡"},"caliber-consistency":{kind:"constraint",channel:"块任务卡"},"chapter-dependency":{kind:"terminal-only",reason:"章间依赖关系是全文拓扑性质"},"chapter-fact-density":{kind:"constraint",channel:"块任务卡"},"clause-recitation":{kind:"constraint",channel:"块任务卡"},"closed-loop-density":{kind:"self-check",stage:"章成稿后"},"closure-phrase-density-cap":{kind:"constraint",channel:"全局约束"},"collision-numbered-heading":{kind:"terminal-only",reason:"编号冲突需全文标题集合,跨章同名编号在单章内不可见"},"commercial-data-in-body":{kind:"constraint",channel:"全局约束"},"construction-org-bonus-module":{kind:"constraint",channel:"块任务卡"},"construction-org-chapter-data-coverage":{kind:"constraint",channel:"块任务卡"},"construction-org-consistency":{kind:"terminal-only",reason:"施工组织一致性跨章比对"},"construction-org-control-loop":{kind:"self-check",stage:"章成稿后"},"construction-org-division-section":{kind:"self-check",stage:"章成稿后"},"construction-org-generic-language":{kind:"constraint",channel:"全局约束"},"construction-org-major-content":{kind:"constraint",channel:"块任务卡"},"construction-org-professional-audit":{kind:"constraint",channel:"块任务卡"},"construction-org-professional-chain":{kind:"constraint",channel:"块任务卡"},"construction-system-coverage":{kind:"constraint",channel:"块任务卡"},"critical-section-depth":{kind:"self-check",stage:"章成稿后"},"critical-section-fact-density":{kind:"constraint",channel:"块任务卡"},"cross-chapter-consistency":{kind:"terminal-only",reason:"跨章口径一致性本质依赖全章文本"},"cross-chapter-duplicate-section":{kind:"terminal-only",reason:"跨章重复小节需全文小节集合"},"cross-project-value-copy":{kind:"terminal-only",reason:"跨项目值拷贝需与其它项目产物比对"},"cross-section-numeric-conflict":{kind:"terminal-only",reason:"跨小节数值冲突需小节集合比对"},"dangerous-applicability":{kind:"constraint",channel:"块任务卡"},"dangerous-list-consistency":{kind:"constraint",channel:"块任务卡"},"dangling-conjunction":{kind:"self-check",stage:"章成稿后"},"degenerate-content":{kind:"self-check",stage:"块成稿后"},"document-budget":{kind:"terminal-only",reason:"篇幅为全文度量,由预算层与压缩轮收敛"},"document-delivery-score":{kind:"terminal-only",reason:"交付置信度是全文派生评分,不指向具体文本缺陷"},"drawing-pointer-phrase":{kind:"constraint",channel:"块任务卡"},"drawing-reference":{kind:"constraint",channel:"块任务卡"},"duplicate-basic-info":{kind:"terminal-only",reason:"同一基础信息在全文多处出现,需全文扫描"},"duplicate-paragraph":{kind:"terminal-only",reason:"重复段落需全文段落集合"},"duplicate-table":{kind:"terminal-only",reason:"重复表格需全文表格集合"},"emergency-section-depth":{kind:"self-check",stage:"章成稿后"},"equipment-batch-conflict":{kind:"constraint",channel:"块任务卡"},"equipment-entry-timing":{kind:"constraint",channel:"块任务卡"},"evaluation-criteria-coverage":{kind:"constraint",channel:"块任务卡"},"evidence-usage-coverage":{kind:"constraint",channel:"块任务卡"},"excavation-depth-lock":{kind:"constraint",channel:"块任务卡"},"excavation-hazard-classification":{kind:"constraint",channel:"块任务卡"},"fabricated-award":{kind:"constraint",channel:"块任务卡"},"fabricated-start-date":{kind:"constraint",channel:"块任务卡"},"fact-consistency":{kind:"constraint",channel:"块任务卡"},"fact-coverage":{kind:"constraint",channel:"块任务卡"},"fact-reconciliation":{kind:"constraint",channel:"块任务卡"},"field-value-mismatch":{kind:"constraint",channel:"块任务卡"},"figure-substitute-table":{kind:"self-check",stage:"章成稿后"},"finish-thickness":{kind:"constraint",channel:"块任务卡"},"flow-form-repeat":{kind:"constraint",channel:"块任务卡"},"formal-content-integrity":{kind:"constraint",channel:"全局约束"},"formal-heading-hierarchy":{kind:"self-check",stage:"章成稿后"},"formal-placeholder":{kind:"constraint",channel:"全局约束"},"formal-style":{kind:"constraint",channel:"全局约束"},"formal-text-gate":{kind:"constraint",channel:"全局约束"},"formula-residue":{kind:"constraint",channel:"全局约束"},"foundation-form-residue":{kind:"constraint",channel:"块任务卡"},"generated-fact-verification":{kind:"constraint",channel:"块任务卡"},"generic-professional-content":{kind:"constraint",channel:"块任务卡"},"greening-maintenance-mismatch":{kind:"constraint",channel:"块任务卡"},"hazard-exclusion-contradiction":{kind:"constraint",channel:"块任务卡"},"hazard-parameter-binding":{kind:"constraint",channel:"块任务卡"},"heading-duplicate":{kind:"terminal-only",reason:"同名标题需全文标题集合比对"},"heading-uncovered-engineering-items":{kind:"self-check",stage:"章成稿后"},"hollow-table-cell":{kind:"self-check",stage:"章成稿后"},"identity-marks-forbidden":{kind:"constraint",channel:"全局约束"},"innovation-tech-coverage":{kind:"constraint",channel:"块任务卡"},"instruction-like-heading":{kind:"self-check",stage:"章成稿后"},"internal-terminology-anchor":{kind:"constraint",channel:"全局约束"},"inverted-date-range":{kind:"constraint",channel:"块任务卡"},"local-adaptation-keyword":{kind:"constraint",channel:"块任务卡"},"major-content-governance":{kind:"self-check",stage:"章成稿后"},"management-measure-number":{kind:"constraint",channel:"块任务卡"},"meta-discourse-declaration":{kind:"terminal-only",reason:'提示词侧只有「正文末尾不得输出自我总结或合规声明段落」一条(覆盖不到正文中段的"不再另行出现其他口径"句),检测面宽于写作口径;现行处置为确定性同词表清洗器零损失收敛 + 终检复核'},"min-chapter-section":{kind:"terminal-only",reason:"章间小节数均衡属全文结构度量"},"node-schedule-consistency":{kind:"constraint",channel:"块任务卡"},"numeric-traceability":{kind:"constraint",channel:"块任务卡"},"overview-recap":{kind:"terminal-only",reason:"概况段跨章复述需全文概况段集合与位置关系"},"page-target":{kind:"terminal-only",reason:"页数为全文估算度量信号(永远 warning)"},"paragraph-generic":{kind:"constraint",channel:"全局约束"},"paragraph-near-duplicate":{kind:"terminal-only",reason:"近重复需全文段落集合两两比对"},"paragraph-opening-repeat":{kind:"constraint",channel:"全局约束"},"paragraph-tail-repeat":{kind:"self-check",stage:"块成稿后"},"parameter-concept-conflict":{kind:"constraint",channel:"块任务卡"},"parameter-obligation-usage":{kind:"constraint",channel:"块任务卡"},"phase-labor-mixing":{kind:"constraint",channel:"块任务卡"},"planned-auto-spec-gate":{kind:"self-check",stage:"章成稿后"},"planned-section-placement":{kind:"self-check",stage:"章成稿后"},"planned-structure":{kind:"self-check",stage:"章成稿后"},"precise-fact-usage":{kind:"constraint",channel:"块任务卡"},"preliminary-action-timing":{kind:"constraint",channel:"块任务卡"},"process-spec-conflict":{kind:"constraint",channel:"块任务卡"},"professional-content":{kind:"constraint",channel:"块任务卡"},"professional-score":{kind:"terminal-only",reason:"专业评分是全文派生评分"},"project-basic-placeholder":{kind:"constraint",channel:"全局约束"},"project-contamination":{kind:"constraint",channel:"全局约束"},"project-type-consistency":{kind:"constraint",channel:"全局约束"},"prompt-document-rule":{kind:"constraint",channel:"全局约束"},"prompt-example-leak":{kind:"constraint",channel:"全局约束"},"punctuation-artifact":{kind:"constraint",channel:"全局约束"},"repeated-word":{kind:"terminal-only",reason:"重复词需全文词频统计(单块内低频也构成全文高频)"},"requirements-coverage":{kind:"constraint",channel:"块任务卡"},"resource-breakdown-consistency":{kind:"terminal-only",reason:"资源分解与蓝图权威比对,需全章资源陈述集合"},"resource-consistency":{kind:"terminal-only",reason:"资源总量一致性需跨章资源口径比对"},"resource-triad-section-hierarchy":{kind:"terminal-only",reason:"资源三要素章节层级属全文结构"},"schedule-duration-overrun":{kind:"constraint",channel:"块任务卡"},"stage-schedule-consistency":{kind:"constraint",channel:"块任务卡"},"section-content-integrity":{kind:"self-check",stage:"章成稿后"},"section-count-overflow":{kind:"self-check",stage:"章成稿后"},"section-numbering":{kind:"terminal-only",reason:"章节编号连续性依赖全文标题序列(后续章未写时无法判定编号是否断档)"},"self-undermining-candidate":{kind:"terminal-only",reason:'判据依赖 L3 bge 语义锚点(每块一批嵌入且 provider 不可用即抛),负向词闸单独不足以判定(块级上界实测命中系正常风险描述,需语义层否决);按"异常不得等于通过"块级接线会把语义不可用放大为整章块块判否,代价高于收益'},"sentence-pattern-repeat":{kind:"constraint",channel:"全局约束"},"sentence-tail-repeat":{kind:"constraint",channel:"全局约束"},"six-hundred-percent-coverage":{kind:"constraint",channel:"块任务卡"},"skeleton-fingerprint":{kind:"terminal-only",reason:"骨架指纹是跨段/跨章相似度度量"},"source-enumeration":{kind:"constraint",channel:"全局约束"},"spec-gate-rules":{kind:"self-check",stage:"章成稿后"},"spec-location-mismatch":{kind:"constraint",channel:"块任务卡"},"stage-phrasing":{kind:"terminal-only",reason:"阶段表述一致性需跨章比对阶段划分"},"standard-final":{kind:"self-check",stage:"章成稿后"},"street-light-count-mismatch":{kind:"constraint",channel:"块任务卡"},"structure-integrity":{kind:"self-check",stage:"章成稿后"},"support-form-fact-consistency":{kind:"constraint",channel:"块任务卡"},"support-system-conflict":{kind:"constraint",channel:"块任务卡"},"table-arithmetic-consistency":{kind:"constraint",channel:"块任务卡"},"table-caption":{kind:"constraint",channel:"全局约束"},"table-content-leak":{kind:"self-check",stage:"章成稿后"},"table-quality":{kind:"self-check",stage:"章成稿后"},"table-spam":{kind:"self-check",stage:"章成稿后"},"templated-label":{kind:"self-check",stage:"章成稿后"},"tertiary-heading":{kind:"self-check",stage:"章成稿后"},"title-integrity":{kind:"self-check",stage:"章成稿后"},"toc-consistency":{kind:"terminal-only",reason:"目录与正文标题需全文双向比对,单章成稿时正文其余部分尚未产生"},"truncated-sentence":{kind:"constraint",channel:"全局约束"},"web-evidence-leakage":{kind:"constraint",channel:"全局约束"},"writer-missing-section":{kind:"self-check",stage:"章成稿后"},"chapter-focus-mustcover":{kind:"self-check",stage:"章成稿后"},"emergency-plan-coverage":{kind:"terminal-only",reason:"风险源证据跨章分布(基坑在土方章、临时用电在临电章、有限空间在排水章),单章成稿时判不出「本项目有哪些风险源」"},"field-value-authority":{kind:"terminal-only",reason:"真值层裁决结果在全文收口后才定型(答疑值级覆盖/被取代值都在链上变化),单章成稿时比对基准尚不稳定"},"four-news-substance":{kind:"terminal-only",reason:"须与全文的项目实体清单比对(实体来自各章),单章成稿时实体清单不完整"},"criteria-substantive-attainment":{kind:"terminal-only",reason:"承接审计的输入是招标评分表条目 \xd7 全文正文,单章成稿时正文其余部分尚未产生"},"hazard-grade-consistency":{kind:"terminal-only",reason:"危大分级结论跨章分布(危大清单章 + 安全章 + 各专业章),单章成稿时全文其余部分尚未产生,写作期判不出「正文有没有给这个类别结论」"}},o=[],p=new Set(["structure","table","fact_consistency","evidence_coverage","professional_chain","control_loop","format","style","scope"]),q=[{id:"spec-gate-rules",scope:"full-document",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"配置门禁容器(事实/章节/表格/图片/页数/文本多族混合,规则随模板与提示词动态生成),无单一可锚定修复目标"},{id:"auto-spec-validation",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"仅唯一阻断族(后台流程话术)由 WORKFLOW_PHRASE_RE 清洗覆盖;后台优化建议/基础事实候选/材料未提供 3 词未入清洗表"},{id:"fact-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"多值冲突源于绑定材料组内同名不同值,只能由用户确认绑定范围/资料侧裁决,正文改写不可能消除"},{id:"figure-substitute-table",scope:"full-document",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"图类要求无承载(既无图题也无等效数据表)需补写数据表并加题注,属内容补写而非确定性改写;写入侧应由图类呈现计划同时下达「图 or 等效表」二选一,本检测器为交付前兜底"},{id:"project-type-consistency",scope:"full-document",category:"scope",fixerDisposition:"manual",fixerDispositionReason:"项目类型与正文用词矛盾(如产业园标准化厂房项目出现「自然村/村内/多村并行」)属内容性质错误:自动改写会改变叙述口径与上下文语义,须人工确认后按正确策略重新生成;根治在写入侧(resolveDerivationStrategy 类型守卫 + 策略驱动分组称谓),本检测器为交付前安全网"},{id:"project-contamination",scope:"full-document",category:"scope",fixerDisposition:"fixed",fixerDispositionReason:"对象名污染分支由 sanitizeContaminationCandidates 覆盖;文档编号分支(documentContaminationService.ts:18)无修复器"},{id:"project-basic-placeholder",scope:"full-document",category:"format",fixerDisposition:"manual",fixerDispositionReason:"同源专用修复器 repairKnownProjectBasicPlaceholders 已按「删除无用代码」口径移除(全仓零调用、注册表看不见);当前仅表内占位被 canonical 事实替代,表外正文占位无覆盖"},{id:"standard-final",scope:"full-document",category:"structure",fixerDisposition:"exempt",fixerDispositionReason:"standard-final 组整组重跑的结果容器登记,不产出自身 issue;组内子检测器各自锚定即可"},{id:"fact-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"fixed",fixerDispositionReason:"stageFactLanding 与检测同源同池(uncoveredImportantFacts + 同一事实池),接线 documentPipeline.ts:74"},{id:"page-target",scope:"full-document",category:"structure",fixerDisposition:"exempt",fixerDispositionReason:"页数为估算度量信号(永远 warning 不阻断),无独立可修缺陷;超幅族由字数口径的 length-compression-repair 轮收敛"},{id:"document-budget",scope:"full-document",category:"structure"},{id:"formal-text-gate",scope:"full-document",category:"format"},{id:"generation-completeness",scope:"full-document",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"装配级缺失(章节不齐 / 提示词未生效 / 预算中断),非正文改写可解——由用户补配置或重跑;判据自证接线的同一批(A1)"},{id:"gating-checklist",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"交付门禁 checklist 的确定性判据(证据齐备/事实来源/无占位等)转成的阻断,由资料完备度决定"},{id:"chapter-block-degradation",scope:"chapter",category:"structure",fixerDisposition:"manual",fixerDispositionReason:'生成阶段的损失记录(块失守 → 章降级成稿)。刻意不进 SNAPSHOT_DETECTOR_IDS:即便修复轮把该小节补回,这条仍真实(当时确已丢弃)。归因含"基础设施中断(调用未发起)"与"内容缺陷"两类,抬头可辨'},{id:"heading-uncovered-engineering-items",scope:"full-document",category:"structure"},{id:"writer-missing-section",scope:"full-document",category:"structure",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"由 planned-section-repair 轮按 reason=empty 重写清除;planned=false 的小节不入选"},{id:"critical-section-depth",scope:"chapter",category:"structure"},{id:"critical-section-fact-density",scope:"chapter",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"须内容补写,但 issue 无 provenance,按 provenance 过滤的补写轮消费不到(接线 provenance 后可改判 fixed)"},{id:"chapter-fact-density",scope:"chapter",category:"evidence_coverage",fixerDisposition:"exempt",fixerDispositionReason:"质量报告阶段被降级为 info(消息尾句命中 FLOW_DIAGNOSTIC_ISSUE_RE)不阻断;其修复手段是写作期块级重写重试"},{id:"construction-org-professional-audit",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"聚合 issue 无 category/provenance 无法被锚定消费,且 5 通道中 3 通道(参数密度/工作包要素/表格空字段)无修复器"}],r=[{id:"toc-consistency",scope:"full-document",category:"structure",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"fixTocFromBody 按正文实际结构重建目录,检测定位=修复定位,已接线三处"},{id:"hazard-grade-consistency",scope:"chapter",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"本条**无自动消费端**:确定性替换无从下手(重写须落回参数来源/条款号/相邻类别结论),LLM 轮亦刻意不接——危大分级是法定结论(属危大⇒专项方案,超危大⇒专家论证),而同源复检的 oracle(canonical 绑定)实测存在绑定侧取值争议(合工大「搭设高度50m以内」按区间上限取 50m,恰好跨过 ≥50m 档,而正文自述 15m 以内),自动改写会把绑定侧错误写进交付正文。处置=转人工:硬阻断导出 + 人工复核清单(fingerprint=hazard+类别 可精确定位);根治在绑定侧。"},{id:"chapter-focus-mustcover",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"义务未落位的修复动作是「按本章写作重点重写正文」,不存在确定性修复器——这类缺口只能由作者补写,确定性替换无从下手。**无自动消费轮**(原声明的「章级重写轮定向消费」实测不存在,详见上方纠正注):命中经 classifyBlockingIssue 硬阻断导出 + 进人工复核清单;根治在写作期的义务分配。"},{id:"section-numbering",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"section-count-overflow",scope:"chapter",category:"structure"},{id:"heading-duplicate",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"structure-integrity",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"templated-label",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"title-integrity",scope:"full-document",category:"structure"},{id:"evaluation-criteria-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"正文核心词缺位须内容补写且无修复轮消费;上游只有预防性补挂(constructionBidStructure.ts:445)"},{id:"requirements-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"fixed",fixerDispositionReason:"requirement-response-repair 轮按 provenance 定向补写(requirementResponseRepair.ts:51)"},{id:"fabricated-start-date",scope:"full-document",category:"fact_consistency",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"需语义判断该日期是编造还是合法的招标/法规成文日期,确定性删除必误伤;仅 patchGuard 预防式预检,无存量修复"},{id:"field-value-mismatch",scope:"full-document",category:"fact_consistency",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"无实现;权威值在 factsModel 可取属可确定性实现但未实现,现只能转人工"},{id:"area-arithmetic",scope:"full-document",category:"fact_consistency",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"地上/地下/单体哪个是错值须资料裁决;同族 scale 修复器显式声明对该三项不做确定性替换"},{id:"resource-consistency",scope:"full-document",category:"fact_consistency",authorities:["laborPeak"]},{id:"node-schedule-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"fixNodeScheduleConflicts(fixers.ts:1010),挂 applyNumericConsistencyDeterministicFixes steps"},{id:"cross-section-numeric-conflict",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"fixCrossSectionNumericConflicts(fixers.ts:1195),同链 steps"},{id:"fact-reconciliation",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"greening-maintenance-mismatch",scope:"full-document",category:"fact_consistency",authorities:["greeningMaintenance"]},{id:"street-light-count-mismatch",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"正文常为分型号明细而清单只锁总数,确定性替换会写坏;同族 greening-maintenance 有修复器,此其一无"},{id:"spec-location-mismatch",scope:"full-document",category:"fact_consistency"},{id:"blueprint-citation-consistency",scope:"full-document",category:"fact_consistency",authorities:["blueprint"],fixerDisposition:"fixed",fixerDispositionReason:"fixQuantityAuthorityConflicts(fixers.ts:1304)经 quantityAnchors 直连,含链尾重放"},{id:"cross-project-value-copy",scope:"full-document",category:"fact_consistency",authorities:["blueprint"],fixerDisposition:"fixed",fixerDispositionReason:"global-consistency-repair 轮消费(globalQualityGates.ts:1398);无专用确定性修复器"},{id:"phase-labor-mixing",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"equipment-batch-conflict",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"preliminary-action-timing",scope:"full-document",category:"fact_consistency",authorities:["blueprint"],fixerDisposition:"fixed",fixerDispositionReason:"fixPreliminaryActionTimingDeterministically 与检测共用 scanPreliminaryActionTimingFindings 同源单扫描,接线 postReviewSurface.ts:274"},{id:"foundation-form-residue",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"global-consistency-repair 轮消费(globalQualityGates.ts:1407→:1500)"},{id:"ambiguous-either-or",scope:"full-document",category:"fact_consistency",authorities:["supportSystem"]},{id:"excavation-depth-lock",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"global-consistency-repair 轮消费,另有路由特例与权威值注入(:1533/:1580)"},{id:"excavation-hazard-classification",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"需按 canonical 深度补写分级结论句,当前无任何修复路径"},{id:"support-form-fact-consistency",scope:"full-document",category:"fact_consistency",authorities:["supportSystem"],fixerDisposition:"manual",fixerDispositionReason:"与 support-system-conflict 判据不同源(读 canonical.byKey.foundation_support_form),不可复用其修复器"},{id:"equipment-entry-timing",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"fixEquipmentEntryTimingDeterministically(postReviewSurface.ts:287),与检测同源单扫描"},{id:"fabricated-award",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"白名单外奖项须回招标原文逐字比对并整体改写创优叙述,无确定性路径"},{id:"bidder-qualification-section",scope:"full-document",category:"scope",fixerDisposition:"fixed",fixerDispositionReason:"stripTenderClauseFragmentHeadings(markdownCleanup.ts:622)删标题;仅覆盖两条句式规则,资格词表分支未覆盖"},{id:"cross-chapter-duplicate-section",scope:"chapter",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"同名小节归并需判断内容归属,确定性路径被有意排除(dedupeDuplicateSectionHeadings 仅章内)"},{id:"basic-info-schedule-field",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"现有归一化的收场是「非法值被拒收→单元格变空」,属以删除通过门禁(P2-2 同口径禁止),不判 fixed"},{id:"duplicate-table",scope:"full-document",category:"table"},{id:"duplicate-paragraph",scope:"full-document",category:"structure"},{id:"paragraph-near-duplicate",scope:"full-document",category:"style",fixerDisposition:"manual",fixerDispositionReason:"近重复段落之间无从确定「哪份是原稿、哪份是副本」(重复处常含另一处缺失的信息),确定性删除即信息丢失;无定向修复轮消费(不带章锚点)→ 交付前残留即转人工复核清单(provenance 可追溯检测器身份),人工合并去重(保信息完整的一处)后重生成"},{id:"paragraph-tail-repeat",scope:"full-document",category:"style",deterministicSafe:!0},{id:"collision-numbered-heading",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"inverted-date-range",scope:"full-document",category:"fact_consistency",deterministicSafe:!0},{id:"resource-triad-section-hierarchy",scope:"full-document",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"修复需重排章节层级/拆分小节,结构性重写且无确定性路径"},{id:"support-system-conflict",scope:"full-document",category:"fact_consistency",authorities:["supportSystem"],fixerDisposition:"fixed",fixerDispositionReason:"fixSupportSystemConflicts(fixers.ts:38),同链 steps;权威为 slope 才动作(mixed/undefined/pile 均不动作,mixed 因混合体系合法、undefined 因权威未知无从裁决),属部分覆盖"},{id:"dangerous-list-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"两处清单需合并为唯一清单并统一项名与分级,属内容改写"},{id:"hazard-exclusion-contradiction",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"排除声明与清单孰对取决于资料是否真达判定阈值,须资料裁决"},{id:"six-hundred-percent-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"补写型修复器已随 4.41「零确定性正文注入」架构决策删除(fixers.ts:1625),内容缺失只能由生成侧补齐"},{id:"self-undermining-candidate",scope:"full-document",category:"style"},{id:"paragraph-opening-repeat",scope:"full-document",category:"style",deterministicSafe:!0},{id:"flow-form-repeat",scope:"full-document",category:"style"},{id:"skeleton-fingerprint",scope:"full-document",category:"style"},{id:"sentence-pattern-repeat",scope:"full-document",category:"style"},{id:"sentence-tail-repeat",scope:"full-document",category:"style"},{id:"repeated-word",scope:"full-document",category:"style",deterministicSafe:!0},{id:"commercial-data-in-body",scope:"full-document",category:"scope",fixerDisposition:"fixed",fixerDispositionReason:"stripCommercialDataBodyLines(postReviewSurface.ts:209),与检测同口径"},{id:"overview-recap",scope:"full-document",category:"style"},{id:"closure-phrase-density-cap",scope:"full-document",category:"style",fixerDisposition:"manual",fixerDispositionReason:"缺陷是词频密度(语义/文风改写),无修复轮按 provenance 消费;fiveElementClosureBoost 的补句池刻意避开闭环密度词"},{id:"parameter-concept-conflict",scope:"full-document",category:"fact_consistency"},{id:"internal-terminology-anchor",scope:"full-document",category:"style",deterministicSafe:!0},{id:"construction-system-coverage",scope:"chapter",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"某专业系统整章零覆盖须补写施工方案正文,属内容生成"},{id:"dangerous-applicability",scope:"full-document",category:"evidence_coverage"},{id:"innovation-tech-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"缺节场景可被补写轮间接覆盖,但「小节 <200 字的部分成稿」场景无任何路径(补写轮 alsoAnchoredTo 接上后可改判 fixed)"},{id:"instruction-like-heading",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"仅 tender-clause-heading-strip 一支(^#{3,4} 且判据为 isTenderClauseFragmentTitle);主判据 instructionTitleRe(是否涉及/按需生成/视情况/注意事项)与 H2 级碎片无任何正文修复器"},{id:"formal-heading-hierarchy",scope:"full-document",category:"structure",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"非法 H2 的现成修复器 demoteNonFormalH2 已按「删除无用代码」口径移除(全仓零调用);当前无任何生产修复路径"},{id:"formal-content-integrity",scope:"full-document",category:"format",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"截断句须补全句子内容;fixTruncatedSentenceArtifacts 修的是标点叠用且锚在另一个 id 上,非同源"},{id:"punctuation-artifact",scope:"full-document",category:"format",deterministicSafe:!0},{id:"table-quality",scope:"full-document",category:"table",deterministicSafe:!0},{id:"table-spam",scope:"full-document",category:"table",deterministicSafe:!0},{id:"basis-regulations-coverage",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"basis-regulations-cross",scope:"full-document",category:"fact_consistency"},{id:"resource-breakdown-consistency",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"section-content-integrity",scope:"chapter",category:"structure"},{id:"professional-content",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"缺项须补写专业内容,全仓无同源修复函数;且本 issue 无 provenance,按 provenance 过滤的修复轮消费不到,属真孤儿"},{id:"professional-score",scope:"chapter",category:"professional_chain"},{id:"generic-professional-content",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"判据=词面 8 词命中≥6 + bge 语义门;最近的套话修复器(isTemplatePrefixSentence + FILLER_SEMANTIC_QUERIES)判据不同源,不构成覆盖"},{id:"management-measure-number",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"需补责任主体/频次/台账/整改复查的语义补写,确定性路径不存在;且无 provenance,修复轮看不见"},{id:"closed-loop-density",scope:"full-document",category:"control_loop",fixerDisposition:"exempt",fixerDispositionReason:"纯度量信号:判据是闭环块密度对标 max(6,字数/1500),注释自述与评分同口径不阻断门禁;补闭环词还会撞 closure-phrase-density-cap 上限,不宜自动改"},{id:"cross-chapter-consistency",scope:"full-document",category:"fact_consistency"},{id:"process-spec-conflict",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"applyDeterministicConsistencyFixes 与检测端同判据同归属规则(collectLayerNumbers+buildSpecActionGate),已接线两条确定性链"},{id:"evidence-usage-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"缺陷是「未引用该类事实」,只能靠补写正文;fact-distribution-round 与 important-unplaced-facts 轮判据均不同源且不复检本 id"},{id:"paragraph-generic",scope:"full-document",category:"style",fixerDisposition:"manual",fixerDispositionReason:"判据=段落长度 + 10 词泛化表 + bge 具体性门;fillerParagraphIssues 用另一套 17 条词面 + 14 语义原型,同族不同判据"},{id:"construction-org-generic-language",scope:"chapter",category:"style",fixerDisposition:"fixed",fixerDispositionReason:"由 templating-repair 轮消费(该轮走 globalQualityGates 内联的 fillerDensityReport,非本 id 产出的 issue;本 gate 为内联检查的同族检测器,见幻影锚点收口说明)"},{id:"construction-org-control-loop",scope:"chapter",category:"control_loop"},{id:"construction-org-professional-chain",scope:"chapter",category:"professional_chain"},{id:"construction-org-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"需按资料裁决哪个口径为真且涉及跨表改写;同族修复器(fixEquipmentBatchConflicts/fixLaborPeakConflict/resource-breakdown)判据均不同源"},{id:"construction-org-chapter-data-coverage",scope:"chapter",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"属「章内缺项目事实」的补写型缺陷,仅生成侧/人工可解"},{id:"construction-org-major-content",scope:"chapter",category:"professional_chain"},{id:"construction-org-division-section",scope:"chapter",category:"structure"},{id:"major-content-governance",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"仅清单口径词族有修复器(postReviewSurface.ts:313);表格承载正文族无,仍走终门禁"},{id:"construction-org-bonus-module",scope:"chapter",category:"professional_chain",fixerDisposition:"exempt",fixerDispositionReason:"加分项建议而非缺陷(代码自述为避免污染缺陷计分,只产出 info 级「高分模块」建议)"},{id:"chapter-dependency",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"需在指定章补写投入调配/工艺控制/应急闭环内容,属语义补写;且无 provenance"},{id:"document-delivery-score",scope:"full-document",category:"professional_chain",fixerDisposition:"exempt",fixerDispositionReason:"纯评分汇总载体(总分 x/10 的元信息),其内部调用的三个检测器各自已有 id 与处置,本 id 不产出缺陷"},{id:"generated-fact-verification",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"反查失败数值的自动消除即删除式修复(P2-2 已明令禁止),补齐权威属资料侧动作——与 numeric-traceability 同口径"},{id:"numeric-traceability",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"修复器已按 P2-2 停用(删除式修复被明令禁止);补齐权威值属资料/配置侧动作"},{id:"table-arithmetic-consistency",scope:"full-document",category:"evidence_coverage"},{id:"duplicate-basic-info",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"fixDuplicateBasicInfoTables 覆盖重复表族;「表前重复逐项叙述」族未覆盖(已扩展锚定到该修复器)"},{id:"formal-style",scope:"full-document",category:"style"},{id:"tertiary-heading",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"min-chapter-section",scope:"chapter",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"mergeDuplicateThematicSections 与检测共用桶键 classifyThematicSectionKey,接线 duplicate-theme-merge 轮;精确同名小节族另由 heading-duplicate-merge 覆盖"},{id:"planned-section-placement",scope:"chapter",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"链尾确定性提升覆盖「降级为 H4」形态(delivery-structure-closure);整节漏写属写作缺项,交 LLM 定向补写小节(provenance 已打点)"},{id:"hollow-table-cell",scope:"full-document",category:"table",fixerDisposition:"manual",fixerDispositionReason:"按「表\xd7列」聚合报出,交 LLM 按列补真实值(同章正文通常已有同口径数据)"},{id:"schedule-duration-overrun",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"按生效工期重排进度计划与节点天序(源头解析已取变更后口径,残留为写作期漂移)"},{id:"stage-schedule-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"阶段行天序/口径倒挂由 LLM 按生效工期与阶段顺序重排(与 schedule-duration-overrun 同族,同属写作期漂移)"},{id:"caliber-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"被取代值由链尾 delivery-structure-closure 按真值层覆盖表**确定性替换**(不依赖本检测器锚定);本检测器报出的是「生效值整体未落位」类残留,进人工复核清单"},{id:"hazard-parameter-binding",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"content-depth-repair 定向补写:在危大判定处补本项目实际参数 + 阈值对照 + 结论"},{id:"blueprint-value-placement",scope:"full-document",category:"professional_chain",fixerDisposition:"fixed",fixerDispositionReason:"content-depth-repair 定向补写:按蓝图权威值写资源配置具体数值"},{id:"dangling-conjunction",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"content-depth-repair 定向补全被截断的句子成分(标点类残片另有 fixTruncatedSentenceArtifacts)"},{id:"precise-fact-usage",scope:"full-document",category:"fact_consistency"},{id:"parameter-obligation-usage",scope:"full-document",category:"fact_consistency"},{id:"boq-placement",scope:"full-document",category:"evidence_coverage"},{id:"stage-phrasing",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"阶段划分口径统一是跨章语义改写(把异己口径逐句对齐到唯一口径),不存在确定性修复器;provenance 已补,修复轮可按指纹定向消费"},{id:"field-value-authority",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"正文写错基础信息字段值的修复动作是「按真值层裁决值改写该字段」,属语义定位改写;issue 带 provenance 可按字段名定向消费"},{id:"four-news-substance",scope:"full-document",category:"professional_chain",fixerDisposition:"exempt",fixerDispositionReason:'只出 info/suggestion(不阻断、不进人工清单):实体缺失 ⇒ 可移植可判,但"可移植 ⇏ 套话",真判套话须 LLM(templatingReview),故不设修复器'},{id:"emergency-plan-coverage",scope:"full-document",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"补编专项预案属语义写作(要写应急组织/响应流程/物资与演练,不是补一句名词),不存在确定性修复器。issue 带 provenance(fingerprint=plan),修复轮可按预案名定向消费。"},{id:"emergency-section-depth",scope:"full-document",category:"structure"},{id:"boq-row-trace",scope:"full-document",category:"evidence_coverage",fixerDisposition:"exempt",fixerDispositionReason:"只产 warning,既不断阻断也不进人工清单(清单由 blockingIssues 构建);同轴真缺口另有 blocker 通道 boq-placement"},{id:"drawing-reference",scope:"full-document",category:"evidence_coverage"},{id:"drawing-pointer-phrase",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"指向型表述的修复是用具体做法替换指向(须定位蓝图/清单权威值,属语义改写而非字面替换);4.55.24 先建立判据与写作前红线并显性进人工清单,定向改写轮排期 4.55.25"},{id:"web-evidence-leakage",scope:"full-document",category:"scope",fixerDisposition:"exempt",fixerDispositionReason:"warning 级度量信号不阻断、不进人工清单,且全仓不存在该词族的删除/改写函数"},{id:"formal-placeholder",scope:"full-document",category:"format",deterministicSafe:!0},{id:"prompt-example-leak",scope:"full-document",category:"format",fixerDisposition:"manual",fixerDispositionReason:"「疑似样例」删除必误伤(样例块可能撞合法正文);已实现并已接线,但无消费轮(全仓无修复器消费该 id)"},{id:"degenerate-content",scope:"chapter",category:"style",fixerDisposition:"manual",fixerDispositionReason:"唯一可能消费它的章级重扫入口 lightweightChapterIssues 已按「删除无用代码」口径移除(全仓零调用);退化输出的修复等同重新生成小节"},{id:"planned-auto-spec-gate",scope:"full-document",category:"structure"},{id:"bid-composition-body-table",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"dismantleBodyTables 同判据 LLM 拆表改写;finalize 侧只重跑禁表分支(章级授权口径未覆盖)"},{id:"bid-composition-body-figure",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"removeUnwantedDrawingImages(markdownComposer.ts:1905)与检测共用 FIGURE_PLACEHOLDER_RE"},{id:"identity-marks-forbidden",scope:"full-document",category:"format",fixerDisposition:"manual",fixerDispositionReason:"需删/改写业绩获奖证书类敏感句,可自动化但未实现;当前只有写作期与修复提示词约束"},{id:"planned-structure",scope:"full-document",category:"structure"},{id:"table-caption",scope:"full-document",category:"format"},{id:"prompt-document-rule",scope:"full-document",category:"format",fixerDisposition:"fixed",fixerDispositionReason:"applyPromptDocumentRules 覆盖残留封面/目录/缺必需表/禁止词行;指令型标题、缺指定一级章节、缺关键词、字数不足族无实现"},{id:"local-adaptation-keyword",scope:"full-document",category:"evidence_coverage",fixerDisposition:"fixed",fixerDispositionReason:"仅 blocker 通道(工伤保险缺失)有修复器(postReviewSurface.ts:301);另两条属度量/增强项,不阻断"},{id:"boq-division-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"fixed",fixerDispositionReason:"enforceBoqDivisionCoverageInMethodChapters(postReviewSurface.ts:400)链尾确定性补写"}],s=[{id:"table-line-residue",kind:"deterministic",anchoredTo:"table-quality",giveUpOnFailure:!0},{id:"templated-labels",kind:"deterministic",anchoredTo:"templated-label",giveUpOnFailure:!0},{id:"structure-integrity",kind:"deterministic",anchoredTo:"structure-integrity",giveUpOnFailure:!0},{id:"embedded-heading-split",kind:"deterministic",anchoredTo:"planned-structure",giveUpOnFailure:!0},{id:"repeated-words",kind:"deterministic",anchoredTo:"repeated-word",giveUpOnFailure:!0},{id:"duplicate-tables",kind:"deterministic",anchoredTo:"duplicate-table",giveUpOnFailure:!0},{id:"finish-thickness",kind:"deterministic",anchoredTo:"finish-thickness",giveUpOnFailure:!0},{id:"slot-depth-value",kind:"deterministic",anchoredTo:"fact-reconciliation",authorities:["blueprint"],giveUpOnFailure:!0},{id:"spec-quantity-binding",kind:"deterministic",anchoredTo:"fact-reconciliation",authorities:["blueprint"],giveUpOnFailure:!0},{id:"labor-peak",kind:"deterministic",anchoredTo:"resource-consistency",authorities:["laborPeak"],giveUpOnFailure:!0},{id:"phase-labor-values",kind:"deterministic",anchoredTo:"phase-labor-mixing",authorities:["blueprint"],giveUpOnFailure:!0},{id:"resource-breakdown",kind:"deterministic",anchoredTo:"resource-breakdown-consistency",authorities:["blueprint"],giveUpOnFailure:!0},{id:"equipment-batch-values",kind:"deterministic",anchoredTo:"equipment-batch-conflict",authorities:["blueprint"],giveUpOnFailure:!0},{id:"internal-table-row-dup",kind:"deterministic",anchoredTo:"table-spam",giveUpOnFailure:!0},{id:"duplicate-basic-info-tables",kind:"deterministic",anchoredTo:"table-quality",alsoAnchoredTo:["duplicate-basic-info"],giveUpOnFailure:!0},{id:"fallback-placeholder-rows",kind:"deterministic",anchoredTo:"formal-placeholder",giveUpOnFailure:!0},{id:"greening-maintenance",kind:"deterministic",anchoredTo:"greening-maintenance-mismatch",authorities:["greeningMaintenance"],giveUpOnFailure:!0},{id:"paragraph-opening-repeat",kind:"deterministic",anchoredTo:"paragraph-opening-repeat",giveUpOnFailure:!0},{id:"paragraph-tail-repeat",kind:"deterministic",anchoredTo:"paragraph-tail-repeat",giveUpOnFailure:!0},{id:"collision-numbered-heading",kind:"deterministic",anchoredTo:"collision-numbered-heading",giveUpOnFailure:!0},{id:"heading-uncovered-items",kind:"deterministic",anchoredTo:"heading-uncovered-engineering-items",giveUpOnFailure:!0},{id:"inverted-date-range",kind:"deterministic",anchoredTo:"inverted-date-range",giveUpOnFailure:!0},{id:"zero-length-date-range",kind:"deterministic",anchoredTo:"cross-chapter-consistency",giveUpOnFailure:!0},{id:"truncated-sentence",kind:"deterministic",anchoredTo:"truncated-sentence",giveUpOnFailure:!0},{id:"meta-discourse",kind:"deterministic",anchoredTo:"meta-discourse-declaration",giveUpOnFailure:!0},{id:"formula-residue",kind:"deterministic",anchoredTo:"formula-residue",giveUpOnFailure:!0},{id:"self-undermining",kind:"deterministic",anchoredTo:"self-undermining-candidate",giveUpOnFailure:!0},{id:"ambiguous-either-or",kind:"deterministic",anchoredTo:"ambiguous-either-or",authorities:["supportSystem"],giveUpOnFailure:!0},{id:"tender-meta-language",kind:"deterministic",anchoredTo:"formal-style",giveUpOnFailure:!0},{id:"formal-source-residue",kind:"deterministic",anchoredTo:"formal-style",giveUpOnFailure:!0},{id:"forbidden-configuration",kind:"deterministic",anchoredTo:"formal-text-gate",giveUpOnFailure:!0},{id:"duplicate-response-line",kind:"deterministic",anchoredTo:"duplicate-paragraph",giveUpOnFailure:!0},{id:"atlas-reference",kind:"deterministic",anchoredTo:"atlas-reference-phrase",giveUpOnFailure:!0},{id:"tertiary-h4-dedupe",kind:"deterministic",anchoredTo:"tertiary-heading",giveUpOnFailure:!0},{id:"standard-citation-truncation",kind:"deterministic",anchoredTo:"structure-integrity",giveUpOnFailure:!0},{id:"internal-term-heading",kind:"deterministic",anchoredTo:"internal-terminology-anchor",giveUpOnFailure:!0},{id:"skeleton-fingerprint-variants",kind:"deterministic",anchoredTo:"skeleton-fingerprint",giveUpOnFailure:!0},{id:"flow-form-variants",kind:"deterministic",anchoredTo:"flow-form-repeat",giveUpOnFailure:!0},{id:"truncated-title-completion",kind:"deterministic",anchoredTo:"title-integrity",giveUpOnFailure:!0},{id:"sentence-like-heading-split",kind:"deterministic",anchoredTo:"title-integrity",giveUpOnFailure:!0},{id:"heading-duplicate-merge",kind:"deterministic",anchoredTo:"heading-duplicate",giveUpOnFailure:!0},{id:"section-renumber",kind:"deterministic",anchoredTo:"section-numbering",giveUpOnFailure:!0}],t=["autoSpecGateRepair","basisRegulationsCrossRepair","basisRegulationsRepair","contentDepthRepair","controlLoopRepair","dangerousApplicabilityRepair","lengthCompressionRepair","numericVerification","postReviewSurface","professionalChainRepair","quotationBalanceRepair","requirementResponseRepair","requirementVerification"],u=[{id:"numeric-arbiter-concept",kind:"deterministic",anchoredTo:"parameter-concept-conflict",giveUpOnFailure:!0},{id:"numeric-arbiter-spec",kind:"deterministic",anchoredTo:"spec-location-mismatch",giveUpOnFailure:!0}],v=[{id:"numeric-chain-node-schedule",kind:"deterministic",anchoredTo:"node-schedule-consistency",giveUpOnFailure:!0},{id:"numeric-chain-cross-section",kind:"deterministic",anchoredTo:"cross-section-numeric-conflict",giveUpOnFailure:!0},{id:"numeric-chain-support-system",kind:"deterministic",anchoredTo:"support-system-conflict",authorities:["supportSystem"],giveUpOnFailure:!0},{id:"numeric-chain-quantity-authority",kind:"deterministic",anchoredTo:"blueprint-citation-consistency",authorities:["blueprint"],giveUpOnFailure:!0},{id:"equipment-entry-timing-clean",kind:"deterministic",anchoredTo:"equipment-entry-timing",giveUpOnFailure:!0},{id:"commercial-data-body-strip",kind:"deterministic",anchoredTo:"commercial-data-in-body",giveUpOnFailure:!0},{id:"listing-jargon-strip",kind:"deterministic",anchoredTo:"major-content-governance",giveUpOnFailure:!0},{id:"work-injury-statement-fix",kind:"deterministic",anchoredTo:"local-adaptation-keyword",giveUpOnFailure:!0},{id:"boq-division-coverage-closure",kind:"deterministic",anchoredTo:"boq-division-coverage",giveUpOnFailure:!0},{id:"drawing-image-strip",kind:"deterministic",anchoredTo:"bid-composition-body-figure",giveUpOnFailure:!0},{id:"tender-clause-heading-strip",kind:"deterministic",anchoredTo:"bidder-qualification-section",alsoAnchoredTo:["instruction-like-heading"],giveUpOnFailure:!0},{id:"formal-source-phrase-clean",kind:"deterministic",anchoredTo:"source-enumeration",giveUpOnFailure:!0},{id:"toc-consistency-rebuild",kind:"deterministic",anchoredTo:"toc-consistency",giveUpOnFailure:!0},{id:"prompt-document-rules-apply",kind:"deterministic",anchoredTo:"prompt-document-rule",giveUpOnFailure:!0},{id:"workflow-phrase-clean",kind:"deterministic",anchoredTo:"auto-spec-validation",giveUpOnFailure:!0},{id:"contamination-candidate-sanitize",kind:"deterministic",anchoredTo:"project-contamination",giveUpOnFailure:!0},{id:"preliminary-action-timing-clean",kind:"deterministic",anchoredTo:"preliminary-action-timing",authorities:["blueprint"],giveUpOnFailure:!0},{id:"process-spec-conflict-fix",kind:"deterministic",anchoredTo:"process-spec-conflict",giveUpOnFailure:!0}],w={factLanding:"fact-landing",tableRepair:"table-repair",tableArithmeticRepair:"table-arithmetic-repair",tableCaptionRepair:"table-caption-repair",duplicateThemeMerge:"duplicate-theme-merge"},x=[{id:"near-duplicate-section-merge",kind:"deterministic",anchoredTo:"section-count-overflow",giveUpOnFailure:!0},{id:"empty-section-strip",kind:"deterministic",anchoredTo:"section-content-integrity",giveUpOnFailure:!0},{id:"duplicate-theme-merge",kind:"deterministic",anchoredTo:"min-chapter-section",giveUpOnFailure:!0}],y=["source-enumeration","internal-terminology-anchor","fabricated-start-date","repeated-word","writer-missing-section","meta-discourse-declaration","formula-residue","finish-thickness","formal-placeholder","truncated-sentence"],z=[{id:"fact-landing",kind:"llm-patch",anchoredTo:"fact-coverage",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"table-repair",kind:"llm-patch",anchoredTo:"table-quality",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"table-execution-repair",kind:"llm-patch",anchoredTo:"bid-composition-body-table",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"templating-repair",kind:"llm-patch",anchoredTo:"construction-org-generic-language",alsoAnchoredTo:["sentence-pattern-repeat","sentence-tail-repeat"],patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"workpackage-skeleton-repair",kind:"llm-patch",anchoredTo:"construction-org-division-section",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"planned-section-repair",kind:"llm-patch",anchoredTo:"writer-missing-section",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"global-consistency-repair",kind:"llm-patch",anchoredTo:"cross-chapter-consistency",alsoAnchoredTo:["foundation-form-residue","excavation-depth-lock"],patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"cross-project-value-copy-repair",kind:"llm-patch",anchoredTo:"cross-project-value-copy",authorities:["blueprint"],patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"requirement-response-repair",kind:"llm-patch",anchoredTo:"requirements-coverage",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"numeric-verification",kind:"llm-patch",anchoredTo:"authority-audit-gap",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"quotation-balance-repair",kind:"llm-patch",anchoredTo:"punctuation-artifact",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"content-depth-repair",kind:"llm-patch",anchoredTo:"critical-section-depth",alsoAnchoredTo:["emergency-section-depth","construction-org-major-content","construction-org-division-section","precise-fact-usage","parameter-obligation-usage","overview-recap","professional-score","boq-placement","drawing-reference","hazard-parameter-binding","blueprint-value-placement","dangling-conjunction"],patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"control-loop-repair",kind:"llm-patch",anchoredTo:"construction-org-control-loop",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"professional-chain-repair",kind:"llm-patch",anchoredTo:"construction-org-professional-chain",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"basis-regulations-repair",kind:"llm-patch",anchoredTo:"basis-regulations-coverage",authorities:["blueprint"],patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"basis-regulations-cross-repair",kind:"llm-patch",anchoredTo:"basis-regulations-cross",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"dangerous-applicability-repair",kind:"llm-patch",anchoredTo:"dangerous-applicability",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"auto-spec-gate-repair",kind:"llm-patch",anchoredTo:"planned-auto-spec-gate",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"length-compression-repair",kind:"llm-patch",anchoredTo:"document-budget",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"table-caption-repair",kind:"llm-patch",anchoredTo:"table-caption",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"table-arithmetic-repair",kind:"llm-patch",anchoredTo:"table-arithmetic-consistency",patchGuard:{detectors:[...y]},giveUpOnFailure:!0}],A=["fact-landing-round","table-repair-round","semantic-choice-conflict","deterministic-stage5","formal-source-clean","planned-section-final","commercial-strip","table-deterministic-repair","numeric-verification","requirement-response-repair","requirement-verification","content-depth-repair","control-loop-repair","professional-chain-repair","post-review-surface","terminology-strip","regulation-number-typo","quotation-balance-repair","basis-regulations-repair","basis-regulations-cross-repair","dangerous-applicability-repair","auto-spec-gate-repair","toc-consistency","length-compression-repair","fact-distribution-round","table-arithmetic-repair","empty-section-sweep","section-alignment-sweep","templating-sweep","duplicate-theme-merge","table-caption-repair","delivery-structure-closure","sentence-pattern-sweep","duplicate-sentence-collapse","templating-tail-replay"],B=new Set;function C(a,b){return B.add(a),D(a,b())}function D(a,b){if(!Array.isArray(b))return b;let c=!1,d=b.map(b=>b&&"object"==typeof b?"string"!=typeof b.message||b.provenance&&"object"==typeof b.provenance?b:(c=!0,{...b,provenance:{detectorId:a,fingerprint:(0,g.c6)(`${a}\u0000${b.message}`)}}):b);return c?d:b}async function E(a,b){B.add(a);try{return D(a,await b())}catch(c){let b=c instanceof Error?c.message:String(c);return console.error(`[gen] detector degraded: ${a} failed, fallback to warning issue:`,c),G.add(a),[{level:"warning",severity:"warning",category:"format",owner:"system",repairability:"manual_review",provenance:{detectorId:a,fingerprint:""},message:`交付前检测器「${a}」执行失败,已降级为待复核:${b}`,suggestion:`此为检测器基础设施异常,非正文内容缺陷——该检测维度**本次未执行**(已计入降级检测器清单,见「交付前检测器执行情况」节点)。可稍后重新生成复核,或人工复核该检测维度。`}]}}function F(a){return a.filter(a=>{let b=a.provenance?.detectorId;return!!b&&J(b)?.fixerDisposition==="manual"})}let G=new Set;function H(a){let b=("full-validation"===a?q:r).map(a=>a.id);return{executed:b.filter(a=>B.has(a)&&!G.has(a)),degraded:b.filter(a=>G.has(a)),declaredMissing:b.filter(a=>!B.has(a))}}let I=[...q,...r,{id:"criteria-substantive-attainment",scope:"full-document",category:"professional_chain",fixerDisposition:"exempt",fixerDispositionReason:"只出 warning(不阻断):判定依据含嵌入代理量,须人工/后续 N 类机制复核;不设确定性修复器"},{id:"authority-audit-gap",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"numeric-verification 轮收敛(numericVerification.ts:131)。覆盖已被削弱:其确定性兜底 demoteUnsourcedNumericTokens 已按 P2-2 停用,只剩 LLM 一条路"},{id:"source-enumeration",scope:"full-document",category:"style",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"cleanFormalSourcePhrases(deterministicStage5.ts:161)与检测共用同一词表。4.55.36 \xa7L3-11 已接 det()(documentFinalValidation 终检复核)"},{id:"meta-discourse-declaration",scope:"full-document",category:"style",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"fixMetaDiscourseDeclarations(SURFACE_FIX_STEPS meta-discourse 步,与检测同词表 META_DECLARATION_RE)。4.55.36 \xa7L3-11 已接 det() 终检复核"},{id:"finish-thickness",scope:"full-document",category:"fact_consistency",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"fixFinishThickness 除以 10(SURFACE_FIX_STEPS finish-thickness 步,与检测同判据 FINISH_THICKNESS_CONTEXT_WORD)。4.55.36 \xa7L3-11 已接 det() 终检复核"},{id:"formula-residue",scope:"full-document",category:"format",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"fixFormulaResidues(SURFACE_FIX_STEPS formula-residue 步,与检测同判据 FORMULA_FORM_RE)。4.55.36 \xa7L3-11 已接 det() 终检复核"},{id:"truncated-sentence",scope:"full-document",category:"format",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"链尾 cleanStructureDefects→closeTruncatedLineTail 闭合 boundary 形态(SURFACE_FIX_STEPS structure-integrity 步 + truncated-sentence 步标点残片收敛);tail 形态只报不删(尾段是可读正文)交修复轮。4.55.36 \xa7L3-11 已接 det()"},{id:"atlas-reference-phrase",scope:"full-document",category:"format",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"stripDrawingPointerPhrases 经 fixFormalSourceResidue 在 SURFACE_FIX_STEPS formal-source-residue 步(stage5 + round-2 双链)确定性小句级删除。4.55.36 \xa7L3-11 已接 det() 终检复核"},{id:"block-structure-contract",scope:"chapter",category:"structure",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门,返回计数不产出 ValidationIssue,无对象可被 FixerEntry 锚定(重写重试即其修复手段)"},{id:"block-fact-density",scope:"chapter",category:"evidence_coverage",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 BlockDensityAssessment,首轮阻断重写即其修复手段"},{id:"block-templating",scope:"chapter",category:"style",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 BlockTemplatingVerdict;终检侧由 templating-repair 轮承载"},{id:"block-attribution-quantification",scope:"chapter",category:"professional_chain",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 AttributionQuantificationVerdict"},{id:"block-numeric-reconciliation",scope:"chapter",category:"fact_consistency",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 NumericReconciliation,阻断重写即修复手段"},{id:"block-requirement-anchor",scope:"chapter",category:"evidence_coverage",fixerDisposition:"exempt",fixerDispositionReason:'写作期块级执行器门:锚点未落位即阻断本块重写(提示词里同一份锚点已声明"必须逐字落位"),终检侧由 requirements-coverage 复核'},{id:"block-format-constraints",scope:"chapter",category:"format",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回命中行;终检侧同词表门为 formal-text-gate"},{id:"block-filler-phrase",scope:"chapter",category:"style",deterministicSafe:!0,fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 BlockFillerPhraseVerdict,首轮阻断重写即其修复手段(反馈只要求改写命中短语、保留句中实质信息)"},{id:"clause-recitation",scope:"chapter",category:"style",deterministicSafe:!0,fixerDisposition:"exempt",fixerDispositionReason:"写作期块任务卡约束通道:检测结果只用于升级/降级约束措辞(不回写正文、不产出 ValidationIssue),无对象可被 FixerEntry 锚定"},{id:"table-content-leak",scope:"chapter",category:"table",deterministicSafe:!0,fixerDisposition:"exempt",fixerDispositionReason:"章成稿后自检:进章问题清单(待优化 + 诊断),修复动作是结构性改写(改回表格/补主谓),不在确定性修复链内,故无 FixerEntry 可锚定"}];function J(a){return I.find(b=>b.id===a)}function K(){return[...s,...u,...x,...v,...z]}function L(a,b){let c=new Set(a??[]),d=new Set(b??[]);if(c.size!==d.size)return!1;for(let a of c)if(!d.has(a))return!1;return!0}function M(){let a=[],b=[...K()];for(let c of b){let b=J(c.anchoredTo);if(!b){a.push(`修复器 ${c.id} 锚定检测器 ${c.anchoredTo} 未在注册表声明(检测定位=修复定位强制同源)`);continue}for(let d of(L(c.authorities,b.authorities)||a.push(`修复器 ${c.id}(authorities=${JSON.stringify(c.authorities??[])})与锚定检测器 ${c.anchoredTo}(authorities=${JSON.stringify(b.authorities??[])})权威口径不一致`),c.alsoAnchoredTo??[])){let b=J(d);b?L(c.authorities,b.authorities)||a.push(`修复器 ${c.id}(authorities=${JSON.stringify(c.authorities??[])})与扩展锚定检测器 ${d}(authorities=${JSON.stringify(b.authorities??[])})权威口径不一致`):a.push(`修复器 ${c.id} 扩展锚定检测器 ${d} 未在注册表声明(检测定位=修复定位强制同源)`)}if("llm-patch"===c.kind&&!c.patchGuard){a.push(`LLM patch 修复器 ${c.id} 未声明 patchGuard(修复过程会重新引入已知坏内容,必须预检)`);continue}for(let b of c.patchGuard?.detectors??[]){let d=J(b);d?d.deterministicSafe||a.push(`修复器 ${c.id} patchGuard 引用检测器 ${b} 未标记 deterministicSafe(patchGuard 只收录零误伤确定性检测器)`):a.push(`修复器 ${c.id} patchGuard 引用检测器 ${b} 未在注册表声明`)}}for(let[b,c]of s.entries())s.slice(0,b).some(a=>a.id===c.id)&&a.push(`确定性修复器锚定声明重复:${c.id}`);let c=new Set(j.a.map(a=>a.key));for(let b of c)s.some(a=>a.id===b)||a.push(`确定性修复器 ${b} 已接入 SURFACE_FIX_STEPS 但未在 DETERMINISTIC_FIXER_ANCHORS 声明锚定检测器`);for(let b of s)c.has(b.id)||a.push(`确定性修复器锚定声明 ${b.id} 无对应 SURFACE_FIX_STEPS 键(声明多余或键已改名)`);for(let[b,c]of u.entries())u.slice(0,b).some(a=>a.id===c.id)&&a.push(`数值裁决器修复器声明重复:${c.id}`);for(let[b,c]of x.entries())x.slice(0,b).some(a=>a.id===c.id)&&a.push(`章草稿级修复器声明重复:${c.id}`);for(let[b,c]of v.entries())v.slice(0,b).some(a=>a.id===c.id)&&a.push(`链内确定性修复器声明重复:${c.id}`);let f=new Set([...s,...u,...x,...z].map(a=>a.id));for(let b of v)f.has(b.id)&&a.push(`链内确定性修复器 ${b.id} 与其它声明表重名(FixerEntry.id 须全局唯一,否则按 id 追溯修复器产生歧义)`);for(let b of I)b.category&&p.has(b.category)||a.push(`检测器 ${b.id} 声明了非法 category(当前=${b.category||"缺失"};合法值:${[...p].join("、")})`);if(a.push(...function(a){let b=[],c=new Set;for(let b of a.fixers)for(let a of(c.add(b.anchoredTo),b.alsoAnchoredTo??[]))c.add(a);let d=new Set(a.pending);for(let c of(d.size!==a.pending.length&&b.push("PENDING_FIXER_DISPOSITION 存在重复 id(欠账清单须唯一)"),d))a.detectors.some(a=>a.id===c)||b.push(`PENDING_FIXER_DISPOSITION 声明了未登记的检测器 ${c}(已改名或已删除,请同步移出欠账清单)`);for(let e of a.detectors){let a=c.has(e.id),f=e.fixerDisposition;if(d.has(e.id)){f?b.push(`检测器 ${e.id} 已完成处置声明(${f})却仍在 PENDING_FIXER_DISPOSITION 中——请从欠账清单移出`):a&&b.push(`检测器 ${e.id} 已有修复器锚定却仍在 PENDING_FIXER_DISPOSITION 中——请从欠账清单移出`);continue}if(!f){a?e.fixerDispositionReason&&b.push(`检测器 ${e.id} 写了 fixerDispositionReason 却未声明 fixerDisposition(说明须挂在明确处置上)`):b.push(`检测器 ${e.id} 既无修复器锚定、也未声明 fixerDisposition(孤儿必须显式 'exempt' 或 'manual' 并说明理由,不得沉默)`);continue}if(!l.has(f)){b.push(`检测器 ${e.id} 声明了非法 fixerDisposition(当前=${f};合法值:${[...l].join("、")})`);continue}"fixed"!==f||a||b.push(`检测器 ${e.id} 声明 fixerDisposition='fixed' 但无任何 FixerEntry 锚定它(声明与事实不符)`),"fixed"!==f&&(a&&b.push(`检测器 ${e.id} 声明 fixerDisposition='${f}' 但已有修复器锚定——声明与事实不符(应改为 'fixed' 或移除多余锚定)`),e.fixerDispositionReason?.trim()||b.push(`检测器 ${e.id} 声明 fixerDisposition='${f}' 但未给出理由(exempt/manual 必须书面说明为何不需要修复器)`))}return b}({detectors:I,fixers:b,pending:m})),a.push(...function(a){let b=[],c=new Set(a.pending);c.size!==a.pending.length&&b.push("PENDING_WRITING_TIME_DISPOSITION 存在重复 id(欠账清单须唯一)");let d=new Set(a.detectors.map(a=>a.id));for(let a of c)d.has(a)||b.push(`PENDING_WRITING_TIME_DISPOSITION 声明了未登记的检测器 ${a}(已改名或已删除,请同步移出欠账清单)`);for(let[c,e]of Object.entries(a.dispositions))d.has(c)||b.push(`写作期处置表声明了未登记的检测器 ${c}(已改名或已删除,请同步删除该条)`),"terminal-only"!==e.kind||e.reason.trim()||b.push(`检测器 ${c} 声明 terminal-only 但 reason 为空——「只能终检」必须书面写明理由,否则与沉默缺省无异`);for(let d of a.detectors){let e=a.dispositions[d.id];if(e){c.has(d.id)&&b.push(`检测器 ${d.id} 已声明写作期处置(${e.kind})却仍在欠账清单中——请从欠账清单移出`);continue}c.has(d.id)||b.push(`检测器 ${d.id} 既未声明 writingTimeDisposition 也未进欠账清单——新增检测器必须当场给出写作期处置(constraint / self-check / terminal-only+理由)`)}return b}({detectors:I,dispositions:n,pending:o})),a.push(...function(a){let b=[],c=new Set(a.declared);for(let d of a.rounds){let a=/while\s*\(\s*rounds\s*<|for\s*\(\s*let\s+round\s*=|while\s*\(\s*pending\.length\s*>\s*0\s*&&\s*rounds\s*</u.test(d.source),e=c.has(d.name);a&&!e&&b.push(`修复轮 ${d.name} 实现里含收敛循环,但未登记进 SELF_CONVERGING_REPAIR_ROUNDS——其在 FixerEntry 里被声明为「单轮失败即放弃」(giveUpOnFailure: true),声明与事实相反`),!a&&e&&b.push(`修复轮 ${d.name} 登记在 SELF_CONVERGING_REPAIR_ROUNDS,但实现里没有收敛循环——登记表已漂移,请同步(要么轮真的在收敛,要么从表里删掉)`)}return b}({rounds:function(){try{let a=e.join(__dirname,"finalize","repairRounds");return d.readdirSync(a).filter(a=>a.endsWith(".ts")).map(b=>({name:b.replace(/\.ts$/u,""),source:d.readFileSync(e.join(a,b),"utf8")}))}catch{return[]}}(),declared:t})),a.length>0)throw Error(`检测器/修复器注册表一致性校验失败(${a.length} 项):
266
- ${a.map(a=>`- ${a}`).join("\n")}`)}},77416:(a,b,c)=>{c.d(b,{C$:()=>e,Hz:()=>f,ZS:()=>h});let d={"fact-landing-round":"未覆盖重要事实落地","table-repair-round":"表格缺失或格式错误","semantic-choice-conflict":"语义矛盾数值冲突","deterministic-stage5":"确定性缺陷(来源罗列/内部术语/编造日期)","formal-source-clean":"资料来源罗列话术","planned-section-final":"规划小节内容缺失","commercial-strip":"商务数据泄漏","table-deterministic-repair":"表格数据不一致","post-review-surface":"评审后兜底缺陷","terminology-strip":"内部术语泄漏","toc-consistency":"目录与正文不一致"};function e(a){let b=[],c=[];if(a.length<3)return{retireCandidates:b,constraintSuggestions:c};let d=[...a].sort((a,b)=>a.exportedAt-b.exportedAt),e=d.slice(-3),f=d.slice(0,-3),g=new Set;for(let a of[...f,...e])for(let b of Object.keys(a.repairHeat||{}))g.add(b);for(let a of g){let d=e.map(b=>b.repairHeat?.[a]);if(f.some(b=>(b.repairHeat?.[a]?.hits??0)>0)&&d.every(a=>void 0!==a&&0===a.hits)&&b.push(a),d.every(a=>void 0!==a&&a.hits>0&&a.failed/a.hits>=.5)){let b=d.reduce((a,b)=>a+(b?b.failed/b.hits:0),0)/d.length;c.push(`${a}|${(100*b).toFixed(0)}%|连续3次`)}}return{retireCandidates:b,constraintSuggestions:c}}function f(a){if(0===a.length)return"";let b="【缺陷热力图自进化提醒(历史高频缺陷前置规避)】",c=a.map(a=>{let[b,c="",e=""]=a.split("|"),f=d[b]??g[b]??b,h=c?`(历史修复失败率 ${c})`:"";return`${f}${h}${e}内高频出现,本章写作时前置规避。`}).join(" "),e=`${b} ${c}`;if(e.length<=300)return e;let f=c.slice(0,300-b.length-4).replace(/\s+$/u,"");return`${b} ${f}…`}let g={"repair:detector-missing":"判据漏了(没有任何判据指得出该改哪里)","repair:detector-unwired":"判据有但没接线(判据指得出目标,通道没接上)","repair:writing-capacity":"写作能力不足(定位到、改了,复检仍未改善)","repair:material-insufficient":"材料不足(定位到,资料侧没有可用证据)"};function h(a){let b={"detector-missing":0,"detector-unwired":0,"writing-capacity":0,"material-insufficient":0,unclassified:0},c=[],d=new Map;for(let e of a){if(b[e.attribution]+=1,"detector-missing"===e.attribution&&c.push(e),!e.nodeId)continue;let a=d.get(e.nodeId)??{attempts:0,attributions:new Set};"unclassified"!==e.attribution&&a.attributions.add(e.attribution),("unfixable"===e.outcome||"rolled-back"===e.outcome)&&(a.attempts+=1),d.set(e.nodeId,a)}let e=a.length-b.unclassified,f=[];if(e>0)for(let c of["detector-missing","detector-unwired","writing-capacity","material-insufficient"]){let d=b[c]/e;d<.5||f.push(`repair:${c}|${(100*d).toFixed(0)}%|近${a.length}次修复`)}let g=[...d.entries()].filter(([,a])=>a.attempts>=2).map(([a,b])=>({nodeId:a,attempts:b.attempts,attributions:[...b.attributions]})).sort((a,b)=>b.attempts-a.attempts||a.nodeId.localeCompare(b.nodeId));return{total:a.length,attributionCounts:b,blindSpots:c,stubbornNodes:g,constraintSuggestions:f}}},78403:(a,b,c)=>{let d;c.d(b,{Hpz:()=>dg.Hp,iAF:()=>dX.iA,X5$:()=>k.X5,bsz:()=>dg.bs,OXS:()=>d3,ZRt:()=>db.ZR}),c(77327);var e=c(70610),f=c(22157),g=c(34680),h=c(70933),i=c(16152),j=c(78217),k=c(80439),l=c(48479),m=c(54451);function n(a){let b=new Set(a.map(a=>String(a).trim().toLowerCase()));return b.has("budget_exhausted")||b.has("not_attempted")?"budget":b.has("over-produce")||b.has("numeric")?"format":b.has("missing")||b.has("missing_content")?"materials":b.has("under-produce")||b.has("templating")||b.has("filler")||b.has("fact_density")||b.has("length")?"criteria":"unknown"}function o(a){if(!0===a.budgetStopped)return{kind:"stop_and_preserve",reason:"预算护栏已触发:停止调度后续章,把已产出部分按交付口径收口(缺章走复核清单,不整篇作废)"};let b=new Set((a.requestedSplits??[]).map(a=>String(a).trim())),c=a.chapterOutcomes.find(a=>a.plannedBlocks>0&&a.succeededBlocks<a.plannedBlocks&&"budget"!==n(a.failureKinds)&&!b.has(a.chapterId.trim()));if(c){let a=n(c.failureKinds),b=c.failureKinds.join("、")||"未记录";if("materials"===a&&!0!==c.evidenceSwapped)return{kind:"swap_evidence",chapterId:c.chapterId,chapterTitle:c.chapterTitle,blocks:[],reason:`「${c.chapterTitle}」失守种类为资料类(${b}):按失守块标题重新检索资料并换证据重试一次——同一份资料重写只会重抽骰子,换输入才改变结果(每次生成每章最多换一次)`};let d=function(a){let b=new Set(a.map(a=>String(a).trim().toLowerCase())),c=b.has("over-produce")||b.has("length")||b.has("over_produce"),d=b.has("missing")||b.has("missing_content")||b.has("under-produce")||b.has("under_produce");return c&&!d?.85:d&&!c?1.15:1}(c.failureKinds);if(("criteria"===a||"format"===a)&&1!==d&&!0!==c.depthAdjusted)return{kind:"adjust_depth",chapterId:c.chapterId,chapterTitle:c.chapterTitle,blocks:[],scale:d,reason:`「${c.chapterTitle}」失守种类为判据/篇幅类(${b}):把块目标字数按 \xd7${d.toFixed(2)} 调整后重试一次(偏差方向由失败种类给出,不是猜;每次生成每章最多调一次)`}}let d=a.chapterOutcomes.find(a=>a.plannedBlocks>0&&!a.replanned&&(0===a.succeededBlocks&&"budget"!==n(a.failureKinds)||b.has(a.chapterId.trim())));if(d)return{kind:"replan_chapter",chapterId:d.chapterId,chapterTitle:d.chapterTitle,reason:0===d.succeededBlocks?`「${d.chapterTitle}」${d.plannedBlocks} 个块全部失守(种类:${d.failureKinds.join("、")||"未记录"}),且不是预算原因:按要点把失守块拆开重写一次(每次生成每章最多重切一次)`:`「${d.chapterTitle}」的子智能体在写作期申请过拆节,且已有块失守:按申请把失守块拆开重写一次(每次生成每章最多重切一次)`};let e=function(a){let{batchSize:b,mode:c}=function(a){let b=Math.max(1,Math.floor(a.configured)),c=Math.max(0,Math.floor(a.chaptersLeft));if(0===c)return{batchSize:0,mode:"single"};let d=Math.min(1,Math.max(0,Number.isFinite(a.remainingRatio)?a.remainingRatio:0));return d>=.5?{batchSize:Math.min(b,c),mode:"full"}:d>=.2?{batchSize:Math.max(1,Math.min(c,Math.floor(b/2)||1)),mode:"throttled"}:{batchSize:Math.min(1,c),mode:"single"}}({remainingRatio:1-Math.min(1,Math.max(0,a.usedRatio)),configured:a.configuredConcurrency,chaptersLeft:a.chaptersLeft}),d=a.avgTokensPerChapter;if(!d||d<=0||0===a.chaptersLeft)return{mode:c,batchSize:b,budgetLikelyInsufficient:!1,reason:`按余量降档:${c}(本批 ${b} 章)${d?"":";暂无实测均耗,未做可行性估算(不编数)"}`};let e=Math.max(0,Math.floor(a.remainingTokens/d)),f=e<a.chaptersLeft;return{mode:c,batchSize:b,budgetLikelyInsufficient:f,affordableChapters:e,reason:f?`剩余预算按实测均耗(${Math.round(d)} token/章)**只够写完 ${e} 章**,而还剩 ${a.chaptersLeft} 章;已按余量降档到 ${c}(本批 ${b} 章),并请示人决定缩范围/加预算`:`剩余预算足够写完剩余 ${a.chaptersLeft} 章(可负担 ${e} 章);本批 ${b} 章(${c})`}}({remainingTokens:a.remainingTokens,chaptersLeft:a.chaptersLeft,configuredConcurrency:a.configuredConcurrency,usedRatio:a.usedRatio,...void 0!==a.avgTokensPerChapter?{avgTokensPerChapter:a.avgTokensPerChapter}:{}});return e.budgetLikelyInsufficient?{kind:"request_human",question:`剩余预算按实测均耗只够写完 ${e.affordableChapters??"?"} 章,而还剩 ${a.chaptersLeft} 章。候选:① 加预算重跑剩余章;② 缩范围(减章或降篇幅目标);③ 接受当前成稿、剩余章人工补写。`,reason:e.reason}:"full"!==e.mode?{kind:"throttle",batchSize:e.batchSize,mode:e.mode,reason:e.reason}:{kind:"continue",reason:"读数正常:预算余量充足、无全灭章,按原计划推进"}}var p=c(52639),q=c(30055),r=c(87942),s=c(55807),t=c(76193),u=c(1218),v=c(51190),w=c(44505),x=c(34666);async function y(a){let b=a.chapterDrafts.flatMap(a=>a.evidence||[]);b.length>0&&(a.allEvidence.push(...b),a.allEvidence.splice(0,a.allEvidence.length,...(0,h.QR)(a.allEvidence,{preservePinned:!0}))),(0,f.Te)(a.signal);let c=(0,h.QR)(a.allEvidence,{preservePinned:!0});a.allEvidence.splice(0,a.allEvidence.length,...c),a.facts=(0,u.B2)(a.template,a.allEvidence,a.documentSpec);let{localFacts:d,projectBasicFacts:e,preciseFacts:g,structuredTables:i}=(0,u.d6)({evidence:a.allEvidence,template:a.template,spec:a.documentSpec,profile:a.domainProfile,diagnostics:a.generationDiagnostics}),j=[...d,...e,...g],k={facts:[],stages:[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"已有本地/资料事实覆盖主要必需字段,跳过 LLM 全量事实抽取"}]};if((0,u.N2)(j,a.template,a.documentSpec)){let b=(0,h.QR)(a.allEvidence,{preservePinned:!0});try{k=await (0,u.OQ)(b,a.factExtractionPromptTexts,a.template,a.documentSpec,a.signal,a.generationDiagnostics)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fact extraction failed:",b)}}for(let b of k.stages)(0,l.Wl)(a,{batch:"finalize.rebuild",stage:b});let m=(0,v.UT)(a.allEvidence);for(let b of(a.structuredFacts=[...d,...e,...g,...k.facts,...m],a.governedStructuredFacts=(0,v.A)(a.structuredFacts,a.scopeConflicts??(0,v.KX)(a.structuredFacts)),a.governedStructuredFacts))a.facts[b.key]=`${(0,f.lG)(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;a.factsModel=await (0,u.d7)(a.governedStructuredFacts,i,a.missingItems,a.documentSpec,a.domainProfile);let n=(0,v.qD)({facts:a.governedStructuredFacts,projectRoot:a.projectRoot,requirement:a.requirement||"",templateId:a.template.id});a.factsModel.canonical=n,a.scheduleAuthority=(0,w.GG)(a.factsModel),a.assemblyRateAuthority=(0,w.hI)(a.factsModel),a.scaleSummary=(0,w.Pt)(a.factsModel),a.supportAuthority=(0,w.P3)(a.factsModel),a.decisionLockEntries=(0,x.Pd)({facts:[...d,...e,...g],evidence:a.allEvidence})}var z=c(37126),A=c(82437),B=c(11919),C=c(31920),D=c(19245),E=c(69896);let F=/^\s*(?:[-*•·]|\d{1,4}[.、))]|[一二三四五六七八九十]{1,3}、|(\d{1,4}))?[\s。.;;,,、]*$/u,G=["中华人民共和国","国家标准","标准","规范","规程","技术","工程","施工","质量","验收","设计","安全","管理","方法","要求","统一","国家","及","与","和","的"];function H(a){return(a.match(/[\u4e00-\u9fa5]/gu)||[]).length}function I(a){let b=(0,D.XF)(a);if(0===b.length)return a;let c=new Set;for(let a of b)for(let b=a.start;b<a.end;b+=1)c.add(b);return a.split(/\r?\n/u).filter((a,b)=>!c.has(b)).join("\n")}function J(a,b){let c=I(a);return!!(b.code&&(0,D.ay)(c).some(a=>(0,D._N)(a,b.code))||b.name&&(0,D.bZ)(c).some(a=>(0,D.no)(a,b.name)))}function K(a,b){return!!(b.name&&(0,D.bZ)(a).some(a=>(0,D.no)(a,b.name))||b.code&&(0,D.ay)(a).some(a=>(0,D._N)(a,b.code)))}function L(a,b){if("pair"===a.kind)return`《${a.name}》(${a.code})`;if("name"===a.kind)return`《${a.value}》`;let c=a.code??a.value,d=a.counterpart||function(a,b){let c;for(let d of a.matchAll(D.V2)){if(!(0,D._N)(d[0],b))continue;let e=d.index??0,f=Math.max(0,e-30),g=Math.min(a.length,e+d[0].length+30);for(let b of a.slice(f,g).matchAll(D.RO)){let a=Math.abs(f+(b.index??0)-e);(!c||a<c.distance)&&(c={name:b[0].replace(/《|》/gu,""),distance:a})}}return c?.name}(b,c);return d?`《${d}》(${c})`:c}function M(a,b){let c,d;if(0===b.length)return;let e=(0,D.XF)(a);if(0===e.length)return;let f=a.split(/\r?\n/u);for(let a of e)for(let b=a.start+1;b<a.end;b+=1){let a=f[b];if(!a?.trim())continue;let e=(a.match(D.RO)?.length??0)+(a.match(D.V2)?.length??0);0!==e&&(a.trim().startsWith("|")?(!d||e>=d.score)&&(d={index:b,score:e}):(!c||e>=c.score)&&(c={index:b,score:e}))}let g=b.join("、");if(c)f[c.index]=function(a,b){let c=/([。;;::])\s*$/u.exec(a);if(c){let d=c[1];return"。"===d?`${a.slice(0,c.index)}、${b}。${a.slice(c.index+d.length)}`:`${a}${b}`}return/[、,,]\s*$/u.test(a)?`${a}${b}`:`${a}、${b}`}(f[c.index],g);else if(d){let a=d.index;for(;a+1<f.length&&(f[a+1]??"").trim().startsWith("|");)a+=1;f.splice(a+1,0,g)}else{let a=e[e.length-1];f.splice(Math.max(a.start+1,a.end),0,g)}let h=f.join("\n");if(!(h===a||H(h)<=H(a)))return h}async function N(a){let b=(0,D.hK)(a.finalMarkdown);if(b.stats.declaredCodes+b.stats.declaredNames===0||0===b.declaredNotUsed.length&&0===b.usedNotDeclared.length)return;let c=H(a.finalMarkdown),d=b.declaredNotUsed.length+b.usedNotDeclared.length,e=new Map,f=b=>e.get(b)??a.finalChapterDrafts[b].content,h=b=>{(0,l.Wl)(a,{batch:"finalize.repairHistory",stage:b}),a.emitProgress(a.finalChapterDrafts)},i=a.finalChapterDrafts.findIndex(a=>(0,D.XF)(a.content).length>0);i<0&&h((0,k.X5)({type:"validation",roleId:"basis-regulations-cross-repair",status:"failed",message:"编制依据双向对账收口:全文存在对账缺口但各章均无编制依据区段(区段位于章外结构),确定性插入/移除无定向目标,由终门禁照常复核"},{subtitle:"评审后兜底"}));let j=0;if(i>=0&&b.usedNotDeclared.length>0){let c=f(i),d=(0,D.F9)(c),g=b.usedNotDeclared.filter(a=>!K(d,a));if(g.length>0){let b=M(c,g.map(b=>L(b,a.finalMarkdown)));b?(e.set(i,b),j=g.length,h((0,k.X5)({type:"validation",roleId:"basis-regulations-cross-repair",status:"success",message:`编制依据双向对账:引用未声明 ${j} 条确定性补入编制依据小节(${g.map(D.Dq).join("、")})`},{subtitle:"评审后兜底"}))):h((0,k.X5)({type:"validation",roleId:"basis-regulations-cross-repair",status:"failed",message:`编制依据双向对账:引用未声明 ${g.length} 条确定性补入失败(区段无可用锚点行),由终门禁照常复核`},{subtitle:"评审后兜底"}))}}let m=new Map,n=[];for(let c of b.declaredNotUsed){let b=function(a){let b=(0,D.Pc)(a);for(let a of G)b=b.split(a).join("");let c=new Set;for(let a=0;a+2<=b.length;a+=1){let d=b.slice(a,a+2);/^[\u4e00-\u9fa5]{2}$/u.test(d)&&c.add(d)}return[...c]}(c.name??c.value),d=-1,e=0;if(a.finalChapterDrafts.forEach((a,c)=>{let g=function(a,b){if(0===b.length)return 0;let c=I(a).replace(/[\s\u200b-\u200d\ufeff]/gu,""),d=0;for(let a of b){let b=0,e=0;for(;b<3;){let d=c.indexOf(a,e);if(d<0)break;b+=1,e=d+a.length}d+=b}return d}(f(c),b);g>=3&&g>e&&(d=c,e=g)}),d>=0){let a=m.get(d)??{score:0,gaps:[]};a.gaps.push(c),a.score=Math.max(a.score,e),m.set(d,a)}else n.push(c)}let o=[...m.entries()].sort((a,b)=>b[1].score-a[1].score),p=0,q=0,r=0;for(let[b,c]of o){let d,h=a.finalChapterDrafts[b],i=f(b),j=c.gaps.filter(a=>!J(i,a)).length;if(0===j)continue;let m=i,n=c.gaps.filter(a=>!J(m,a)),o=0,s=!1,t=!1,u=`agent-basis-regulations-cross-repair-${h.id}`;for(;o<4&&n.length>0;){o+=1;let b=(0,k.X5)({type:"llm_review",roleId:u,status:"running",message:`编制依据双向对账应用引用补写中(第 ${o}/4 轮):${h.title}(待落位 ${n.length} 条)`},{subtitle:"评审后兜底"});(0,l.Wl)(a,{batch:"finalize.repairHistory",stage:b}),a.emitProgress(a.finalChapterDrafts);let d=n.length,e=await (0,E.b)({originalContent:m,repairRound:"basis-regulations-cross-repair",diagnostics:a.generationDiagnostics,apply:async()=>{let b=await a.withProgressHeartbeat(()=>(0,g.l8)({template:a.template,chapter:{id:h.id,title:h.title,content:m,evidence:h.evidence,missingFacts:h.missingFacts,sections:h.sections},issues:n.map(a=>`编制依据对账缺口:正文未引用 ${(0,D.Dq)(a)}`),promptTexts:function(a,b,c=b.length){return["【编制依据双向对账定向修复】",`本章(${a})被判定为以下编制依据条目的应用章节:这些标准已在编制依据小节声明,但全文正文缺少实际应用引用。`,c>b.length?`本轮只处理下列 ${b.length} 条(本章共 ${c} 条待落位,其余由后续轮次处理)——请把这 ${b.length} 条全部落位,不要漏项:`:`待落位条目(补写后必须在本章正文出现正式引用——书名号全名;条目带编号时须一并写全编号):`,...b.map(a=>`- ${(0,D.Dq)(a)}`),"修复要求:","1. 在本章对应工序/质量验收要求的既有段落中补写自然应用引用句(写清该标准用于哪个工序环节的什么控制指标或验收要求),引用必须使用《标准名称》(编号)正式形态;","2. 引用形态硬约束(链尾指向型清洗判据单源):《标准名称》(编号)必须写在**小句开头**,例如「《X》(GB 50202-2018)规定,桩位偏差与基底标高按…控制」;**禁止**写成「…按《X》(GB 50202-2018)控制…」「…依据/参照/参见《X》(GB 50202-2018)…」形态——该形态会被链尾「指向型表述」确定性清洗整小句删除(评标人看不到该标准落位,对账缺口复现);","3. 引用句须镶嵌进既有施工或验收语境,不得写成孤立口号句、纯清单句或文末罗列;","4. 不改写、不删除既有内容,不新增/删除小节标题,不调整表格结构;其余内容一字不动。"].join("\n")}(h.title,n.slice(0,5),n.length),requirement:a.requirement,forbidDrawingImages:!1,bidComposition:a.bidComposition,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,g.XG)("basis-regulations-cross-repair",a.generationDiagnostics)}));return b.content&&b.content!==m?b.content:m},recheck:a=>[c.gaps.filter(b=>!J(a,b)).length,-H(a)],shouldRollback:(a,b)=>b[0]>a[0]||b[1]>a[1]+Math.max(40,.05*Math.abs(a[1]))});if(e.rolledBack){s=!0;break}if(e.content===m)break;let f=c.gaps.filter(a=>!J(e.content,a));if(m=e.content,t=!0,f.length>=d){n=f;break}n=f}m!==i?(e.set(b,m),p+=1,q+=j-n.length,r+=n.length):r+=j;let v=n.length;d=0===v?`编制依据双向对账应用引用补写完成:${h.title}(${o} 轮,待落位条目全部获正文引用)`:t?`编制依据双向对账应用引用补写部分生效:${h.title}(已执行 ${o} 轮,残留 ${v} 条未获引用,由终门禁照常复核)`:s?`编制依据双向对账应用引用补写已回滚:${h.title}(复检未通过,保留修复前正文;残留 ${v} 条,由终门禁照常复核)`:`编制依据双向对账应用引用补写未生效:${h.title}(模型未产生有效修改;残留 ${v} 条,由终门禁照常复核)`;let w=(0,k.X5)({type:"llm_review",roleId:u,status:0===v?"success":"failed",message:d,details:v>0?n.map(a=>`未获引用:${(0,D.Dq)(a)}`):["复检:本章待落位编制依据条目全部获正文引用"]},{subtitle:"评审后兜底"});(0,l.Wl)(a,{batch:"finalize.repairHistory",stage:w}),a.emitProgress(a.finalChapterDrafts)}let s=0,t=0;if(i>=0&&n.length>0){let a=f(i),b=[];for(let c of n){let d=function(a,b){let c=a;for(let a=0;a<3;a+=1){let a=function(a,b){let c=(0,D.XF)(a);if(0===c.length)return;let d=function(a){let b=[0];for(let c=0;c<a.length;c+=1)"\n"===a[c]&&b.push(c+1);return b}(a);for(let e of c){let c=d[e.start]??0,f=d[e.end]??a.length,g=function(a,b){let c=b.name?function(a,b){for(let c of a.matchAll(D.RO)){if(!(0,D.no)(c[0],b))continue;let a=c.index??0;return{start:a,end:a+c[0].length}}}(a,b.name):void 0,d=b.code?function(a,b){for(let c of a.matchAll(D.V2)){if(!(0,D._N)(c[0],b))continue;let a=c.index??0;return{start:a,end:a+c[0].length}}}(a,b.code):void 0;if(c&&d){let b=d.start>=c.end&&d.start-c.end<=14,e=c.start>=d.end&&c.start-d.end<=14;if(b||e){let b=Math.max(c.end,d.end);return b<a.length&&(")"===a[b]||")"===a[b])&&(b+=1),[{start:Math.min(c.start,d.start),end:b}]}return[c,d]}return c?[c]:d?d.start>0&&("("===a[d.start-1]||"("===a[d.start-1])&&d.end<a.length&&(")"===a[d.end]||")"===a[d.end])?[{start:d.start-1,end:d.end+1}]:[d]:[]}(a.slice(c,f),b);if(g.length>0)return g.map(a=>({start:c+a.start,end:c+a.end}))}}(c,b);if(!a)break;c=function(a,b){let c=a;for(let a of[...b].sort((a,b)=>b.start-a.start)){let b=a.start,d=a.end,e=0;for(;d<c.length&&e<2&&/[、,,;;]/u.test(c[d]);)d+=1,e+=1;if(0===e){let a=0;for(;b>0&&a<2&&/[、,,;;]/u.test(c[b-1]);)b-=1,a+=1}c=`${c.slice(0,b)}\u0000${c.slice(d)}`}let d=[];for(let a of c.split(/\r?\n/u)){if(!a.includes("\0")){d.push(a);continue}let b=a.split("\0").join("").replace(/、{2,}/gu,"、").replace(/、(?=[。.;;,,])/gu,"");F.test(b)||d.push(b)}return d.join("\n")}(c,a)}if(c!==a&&!(c.length>=a.length)&&0!==(0,D.XF)(c).length&&!K((0,D.F9)(c),b))return c}(a,c);d&&(t+=H(a)-H(d),a=d,b.push(c))}b.length>0&&e.set(i,a),s=b.length;let c=n.length-b.length;h((0,k.X5)({type:"validation",roleId:"basis-regulations-cross-repair",status:0===c?"success":"failed",message:0===c?`编制依据双向对账:不适用声明 ${s} 条确定性移除(正文零引用且无匹配章节:${b.map(D.Dq).join("、")})`:`编制依据双向对账:不适用声明移除 ${s}/${n.length} 条(${c} 条未定位条目 span 保留原文,由终门禁照常复核)`},{subtitle:"评审后兜底"}))}let u=[...e.entries()].filter(([b,c])=>c!==a.finalChapterDrafts[b].content);if(0===u.length){a.generationDiagnostics.llm.lastInfo=`编制依据双向对账收口:无有效变更落地(引用未声明 ${b.usedNotDeclared.length} 条、声明未用 ${b.declaredNotUsed.length} 条残留,由终门禁照常复核)`;return}let v=u.map(([b])=>({index:b,draft:a.finalChapterDrafts[b]}));for(let[b,c]of u)a.finalChapterDrafts[b]={...a.finalChapterDrafts[b],content:c};a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle();let w=(0,D.hK)(a.finalMarkdown),x=w.declaredNotUsed.length+w.usedNotDeclared.length,y=H(a.finalMarkdown),z=x<d&&w.usedNotDeclared.length<=b.usedNotDeclared.length&&w.declaredNotUsed.length<=b.declaredNotUsed.length,A=y>=c-t-Math.max(40,Math.round(.05*c));if(!z||!A){for(let{index:b,draft:c}of v)a.finalChapterDrafts[b]=c;a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle();let b=[...z?[]:["双向缺口未净减少"],...A?[]:["汉字数低于防删除门槛"]].join("且");h((0,k.X5)({type:"validation",roleId:"basis-regulations-cross-repair",status:"failed",message:`编制依据双向对账收口整体回滚:复检未通过(${b})——补写/移除变更全部撤销,缺口由终门禁照常复核`},{subtitle:"评审后兜底"})),a.generationDiagnostics.llm.lastInfo=`编制依据双向对账收口:${u.length} 章变更因复检未通过整体回滚(缺口 ${d} 条残留,由终门禁照常复核)`;return}h((0,k.X5)({type:"validation",roleId:"basis-regulations-cross-repair",status:(0,B.YM)({before:d,after:x}),message:`编制依据双向对账收口完成:补入 ${j} 条、应用 ${p} 章(解决 ${q} 条)、移除 ${s} 条;缺口 ${d}→${x}${x>0?"(残留由终门禁照常复核)":"(双向清零)"}`},{subtitle:"评审后兜底"})),a.generationDiagnostics.llm.lastInfo=`编制依据双向对账收口:引用未声明 ${b.usedNotDeclared.length}→${w.usedNotDeclared.length}、声明未用 ${b.declaredNotUsed.length}→${w.declaredNotUsed.length}(补入 ${j} 条、应用 ${p} 章、移除 ${s} 条;LLM 侧残留 ${r} 条含超预算 0 条)`}function O(a){let b=a.trim();return!!b&&0===(0,C.eI)(b).text.replace(/[,,、;;。.\s]/gu,"").length}function P(a){let b=a.chapterTargets??new Map,c=a.chapters.length,d=a.chapters.map(d=>{let{budgetTarget:e,fallbackNote:f}=(0,j.W4)({chapterTargets:b,chapterId:d.id,chapterTitle:d.title,documentTargetChars:a.documentTargetChars,chapterCount:c}),g=(0,j.V7)(d.content||"");return{chapterId:d.id,title:d.title,target:e,current:g,remaining:e-g,...f?{fallbackNote:f}:{}}}),e=d.reduce((a,b)=>a+b.current,0),f=d.reduce((a,b)=>a+b.target,0),g=Number(a.documentTargetChars),h=Number.isFinite(g)&&g>0?Math.round(g):f,i=void 0!==a.documentCurrentChars?a.documentCurrentChars:e;return{chapters:d,document:{target:h,current:i,remaining:h-i},overBudget:d.filter(a=>a.remaining<0).sort((a,b)=>a.remaining-b.remaining)}}function Q(a){let b=a.current-a.target;return`【章预算账】本章预算 ${a.target} 字、当前 ${a.current} 字、剩余额度 ${a.remaining} 字${b>0?`(已超出章预算 ${b} 字)`:""}。
265
+ ${d}`,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(a){i+=1,k.push(`${"string"==typeof d?d:"查询"}:${a instanceof Error?a.message:String(a)}`),console.error("[web-research] 检索查询失败(与「被噪声过滤」分列计数)",a)}return{evidence:c,queries:b,filtered:g,failedQueries:i,failures:k}}function l(a){return a?"公开资料补充使用规则:\n1. 公开资料只可用于补充通用规范、政策、工艺和措施。\n2. 不得使用公开资料新增或修改项目名称、建设地点、建设规模、工期、质量标准、工程量、材料规格、图纸参数、商务数据。\n3. 本地项目资料与公开资料冲突时,必须以本地项目资料为准。\n4. 不得在正文中出现任何检索过程、外部页面、工具调用或系统内部过程性表述。\n5. 不得把公开资料中的其他项目案例参数写入本项目正文。":""}function m(a){let b=[];return g.test(a)&&b.push({level:"warning",message:"正文包含联网增强过程性表述",suggestion:"请删除联网检索、网页资料、搜索结果等过程性话术,改为正式交付语言。"}),b}},71678:(a,b,c)=>{c.d(b,{Hf:()=>t,M8:()=>n,Xp:()=>r,a0:()=>m,dn:()=>s,hM:()=>l,mI:()=>v,xb:()=>q});var d=c(37047),e=c(41991),f=c(70208),g=c(30111);let h=["对与评标活动有关的工作人员的纪律要求","评标委员会成员与投标人接触的限制","评标纪律与廉洁从业承诺要求","评审争议处理与投标澄清配合程序","评审结果确认与中标公示流程","评标办法与分值构成说明","异常低价评审与计算方式说明","清单计量与报价口径约定","投标文件实质性响应要求","投标保证金缴纳与退还程序","开标程序与投标文件递交截止时间","评标期间行为管控与资料闭环","预付款与进度款支付比例约定","履约担保与保证金缴纳退还约定","价格波动与合同价款调整约定","暂列金额与暂估价使用约定","税费计取与发票结算约定","违约责任与罚款赔偿条款"],i=["劳动力配置计划与高峰期人数安排","施工质量保证措施与验收标准","安全生产管理与教育培训要求","施工进度计划与关键线路安排","材料设备采购进场计划与检验要求","施工现场文明施工与环境保护管理","劳动纪律与班组作业管理制度","施工机械设备配置与维护保养计划","农民工工资支付保障与劳务实名制管理","材料采购质量证明与进场验收管理","工期承诺与进度考核奖惩管理"],j=/评标|投标|行贿|打招呼|递条子|廉洁|串标|围标|弄虚作假|干扰评标|纪律|澄清|中标|报价|清单计量|评审|保证金|开标|递交|争议|异常低价|评标基准价|预付款|进度款|担保|价格波动|材料调差|暂列金额|暂估价|计税|税金|发票|违约|业绩证明|类似(?:工程)?业绩|获奖|荣获|协会颁发|营业执照|资质证书|安全生产许可证|认证证书|管理体系认证|审计报告|信用等级|信用评价|社保证明|无行贿犯罪|中标查询|中标公示|中标结果|电子交易系统|公共资源交易|质疑投诉|评标委员会/u;function k(a){let b=a.sectionTitle?.trim()||"",c=(a.content||"").replace(/\s+/gu," ").slice(0,400);return b?`${b}。${c}`:c}function l(a){let b=a.sectionTitle?.trim()||a.content.replace(/\s+/gu,"").slice(0,60);return`${a.filePath}::${b}`}async function m(a,b){if(0===a.length)return{safe:[],excluded:[]};let c=a.filter(a=>j.test(k(a)));if(0===c.length)return{safe:[...a],excluded:[]};let e=c.map(k),f=await (0,d.Mv)(e,[...h],b),g=await (0,d.Mv)(e,[...i],b),l=new Set;for(let a of c){let b=k(a),c=Math.max(...h.map(a=>f(b,a))),d=Math.max(...i.map(a=>g(b,a)));c>=.6&&c>d&&l.add(a)}return{safe:a.filter(a=>!l.has(a)),excluded:[...l]}}async function n(a){return(0,e.A)({prototypes:[...h],negativePrototypes:[...i],threshold:.6,embedDocuments:a})}function o(a){return a.replace(/[\s\p{P}\p{S}]+/gu,"").toLowerCase()}let p=/^(?:我公司|本公司|我方|投标人|供应商|承包人)(?:就|对)[^,。;]{0,22}(?:均属|属实|真实有效|承担|负责|无异议|为准)$/u;function q(a){let b=a.trim().replace(/\s+/gu,"");if(!b||(0,f.mq)(b)||p.test(b))return!0;let c=o(b);if(h.some(a=>o(a)===c))return!0;let d=b.replace(/农民工工资保证金|工资保证金/gu,""),e=/评标|投标|开标|中标|评审|保证金|串标|围标|廉洁|询标|递交/u.test(d),g=/纪律|监督|争议|澄清|程序|行为|管控|限制|接触|公示|承诺|响应|办法/u.test(b);return!!(e&&g||/异常低价|评标基准价/u.test(b)||/电子保函|保函|投标保证金|履约担保|履约保证金|保证金(?:的)?(?:缴纳|退还|提交|方式)/u.test(b)&&!/农民工|工资|专用账户|实名|考勤|劳资/u.test(b)||/暂列金额|暂估价|材料调差/u.test(b)||/预付款(?:支付|比例|约定|申请|保函)|进度款(?:支付|申请|计量|约定)|履约担保/u.test(b)||/价格波动(?:调整|约定)|违约金(?:条款|约定)|计税|税金(?:计取|结算)|发票(?:开具|结算)/u.test(b))||r(b)}function r(a){let b=a.trim().replace(/\s+/gu,"");if(!b)return!1;let c=b.replace(/^\d{1,3}(?:[..]\d{1,3})*[、..]?/u,"");return!!(/^具备(?:有效|相应|满足)/u.test(c)||/^(?:须|应|需|得)?提供[^,,。;]{0,12}(?:证明|材料|文件|证件|证书|报告)/u.test(c))||"technical"!==(0,g.m)(b)||!!/营业执照|资质证书|安全生产许可证|资格预审|资格审查|资质审查|财务状况|业绩证明|业绩要求|银行资信|审计报告|信用记录|信用评价|不良行为记录|联合体投标|联合体协议/u.test(b)&&!/施工|技术|方案|措施|管理|控制|验收|工艺|流程|计划|组织|进度|质量|工期|文明|绿色|环保|节能|材料|设备|机械|人员|劳务|检验|检测|试验|保证|落实|制度/u.test(b)}function s(a){let b=a.trim().replace(/\s+/gu,"");return!!b&&(!!/接受分包/u.test(b)||!!/投标人|投标方|投标企业|承包人资格|资格要求|资格审查|资格预审|资质要求|资质条件|资质等级|资格条件|财务状况|业绩要求|业绩证明|信用要求|联合体|社保/u.test(b)&&/营业执照|资质证书|安全生产许可证|级及以上资质|注册建造师|建造师注册证书|安全生产考核合格证书|职称证书|财务状况|财务报告|审计报告|银行资信|业绩证明|类似业绩|信用记录|信用评价|不良行为记录|投标保证金|履约保证金|社保|在建工程|人员组成表/u.test(b))}function t(a){let b=a.trim().replace(/\s+/gu,"");return!!b&&!!(/你方/u.test(b)&&/我方/u.test(b)||/发包人[^。;;]{0,30}?(?:审批|批准|备案|同意|许可)/u.test(b)||/^[\d((、..\s]{0,8}监理人/u.test(b)&&/(?:提交|报送|审批|延期|通知|检查|验收)/u.test(b)||/(?:特别约定|有关约定|的约定)[::]/u.test(b)||/通用(?:合同)?条款/u.test(b)||/(?:承包人|发包人|监理人)/u.test(b)&&/(本合同|报送|提交|审批|备案|更换|违约责任|撤换|拒绝|保管|验收记录|签字|颁发|教育|穿戴|定期检查|授权范围|驻场|在岗)/u.test(b))}async function u(a){let b=a.sections.filter(a=>a?.trim());if(0===b.length)return[];let c=b.filter(a=>!q(a)),e=c.filter(a=>j.test(a));if(0===e.length)return c;let f=`${a.chapterTitle} ${a.chapterPurpose||""}`.trim(),g=await (0,d.Mv)(e,[...h],a.embedDocuments),k=await (0,d.Mv)(e,f?[f]:[],a.embedDocuments),l=await (0,d.Mv)(e,[...i],a.embedDocuments),m=new Set;for(let a of e){let b=Math.max(...h.map(b=>g(a,b))),c=f?k(a,f):0,d=Math.max(...i.map(b=>l(a,b)));b>=.6&&b>c&&b>d&&m.add(a)}return c.filter(a=>!m.has(a))}async function v(a,b){return Promise.all(a.map(async a=>({...a,sections:await u({sections:a.sections||[],chapterTitle:a.title,chapterPurpose:a.purpose,embedDocuments:b})})))}},73859:(a,b,c)=>{c.d(b,{$i:()=>h,E1:()=>l,E6:()=>g,IB:()=>e,d2:()=>k,oC:()=>i,p4:()=>d,rF:()=>j});let d={id:"default_general_document",name:"通用文档",factFields:[{id:"document_identity",name:"对象名称",aliases:["项目名称","工程名称","文档名称","任务名称","招标项目名称","建设项目名称"],category:"identity",cardinality:"single",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.75,minForValidation:.85,allowPathOnly:!1},conflictPolicy:"strict"},{id:"schedule_requirement",name:"周期要求",aliases:["计划工期","工期","周期要求","进度节点要求","开工日期","竣工日期"],category:"schedule",cardinality:"single",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.7,minForValidation:.8,allowPathOnly:!1},conflictPolicy:"strict"},{id:"quality_requirement",name:"质量要求",aliases:["质量要求","质量标准","验收要求","评价标准"],category:"quality",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.65,minForValidation:.75,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"safety_requirement",name:"安全合规要求",aliases:["安全要求","安全合规要求","风险控制要求","合规要求"],category:"safety",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.65,minForValidation:.75,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"technical_parameter",name:"技术参数",aliases:["技术参数","参数规格范围","规格","型号","尺寸","标准编号","材料设备"],category:"technical",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"must_use",confidencePolicy:{minForGeneration:.7,minForValidation:.8,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"resource_plan",name:"资源配置",aliases:["劳动力","机械","检测设备","应急物资","资源配置","人员配置"],category:"resource",cardinality:"multiple",derivationPolicy:"plan_inferable",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.45,minForValidation:.55,allowPathOnly:!1},conflictPolicy:"allow_multiple"},{id:"commercial_data",name:"商务数据",aliases:["报价","单价","合价","综合单价","预留金","税率","金额","利润"],category:"commercial",cardinality:"multiple",derivationPolicy:"forbidden",usagePolicy:"do_not_use",confidencePolicy:{minForGeneration:1,minForValidation:1,allowPathOnly:!1},conflictPolicy:"ignore"},{id:"rule_requirement",name:"规则要求",aliases:["规则要求","变更说明","实施范围","对象范围","结构化数据范围"],category:"compliance",cardinality:"multiple",derivationPolicy:"source_only",usagePolicy:"use_if_relevant",confidencePolicy:{minForGeneration:.6,minForValidation:.7,allowPathOnly:!1},conflictPolicy:"allow_multiple"}],forbiddenValuePatterns:[/投标报价|报价明细|单价|合价|综合单价|预留金|暂列金额|税率|增值税|利润|结算/u],diagnosticValuePatterns:[/OCR|识别错误|乱码|无法确认|疑似|不确定|绑定片段|兜底|知识库|提示词|后台|文件路径|PDF|DWG|Excel/u,/^#+\s*/u,/^见(?:招标|投标人|前附|补疑|图纸|清单|文件|资料|公告|须知)/u],lowConfidenceValuePatterns:[/无法确认|疑似|不确定|需复核|文字模糊|语义断裂|识别错误|乱码/u]},e={...d,id:"construction_organization_design",name:"施工组织设计"},f=/施工组织设计|施工方案|危大工程|人、材、机|安全文明施工/u;function g(a){return f.test(a)}function h(a,b=""){return g(`${a?.id||""} ${a?.name||""} ${a?.category||""} ${a?.description||""} ${a?.outputTitle||""} ${b}`)?e:d}function i(a,b){if(b)return a.factFields.find(a=>a.name===b||a.aliases.some(a=>b.includes(a)||a.includes(b)))}function j(a,b){return a.forbiddenValuePatterns.some(a=>a.test(b))}function k(a,b){return a.diagnosticValuePatterns.some(a=>a.test(b))}function l(a,b){return a.lowConfidenceValuePatterns.some(a=>a.test(b))}},74281:(a,b,c)=>{let d;c.d(b,{Hpz:()=>dd.Hp,iAF:()=>dU.iA,X5$:()=>k.X5,bsz:()=>dd.bs,OXS:()=>d0,ZRt:()=>c8.ZR}),c(77327);var e=c(70610),f=c(22157),g=c(34680),h=c(70933),i=c(16152),j=c(78217),k=c(80439),l=c(48479),m=c(54451);function n(a){let b=new Set(a.map(a=>String(a).trim().toLowerCase()));return b.has("budget_exhausted")||b.has("not_attempted")?"budget":b.has("over-produce")||b.has("numeric")?"format":b.has("missing")||b.has("missing_content")?"materials":b.has("under-produce")||b.has("templating")||b.has("filler")||b.has("fact_density")||b.has("length")?"criteria":"unknown"}function o(a){if(!0===a.budgetStopped)return{kind:"stop_and_preserve",reason:"预算护栏已触发:停止调度后续章,把已产出部分按交付口径收口(缺章走复核清单,不整篇作废)"};let b=new Set((a.requestedSplits??[]).map(a=>String(a).trim())),c=a.chapterOutcomes.find(a=>a.plannedBlocks>0&&a.succeededBlocks<a.plannedBlocks&&"budget"!==n(a.failureKinds)&&!b.has(a.chapterId.trim()));if(c){let a=n(c.failureKinds),b=c.failureKinds.join("、")||"未记录";if("materials"===a&&!0!==c.evidenceSwapped)return{kind:"swap_evidence",chapterId:c.chapterId,chapterTitle:c.chapterTitle,blocks:[],reason:`「${c.chapterTitle}」失守种类为资料类(${b}):按失守块标题重新检索资料并换证据重试一次——同一份资料重写只会重抽骰子,换输入才改变结果(每次生成每章最多换一次)`};let d=function(a){let b=new Set(a.map(a=>String(a).trim().toLowerCase())),c=b.has("over-produce")||b.has("length")||b.has("over_produce"),d=b.has("missing")||b.has("missing_content")||b.has("under-produce")||b.has("under_produce");return c&&!d?.85:d&&!c?1.15:1}(c.failureKinds);if(("criteria"===a||"format"===a)&&1!==d&&!0!==c.depthAdjusted)return{kind:"adjust_depth",chapterId:c.chapterId,chapterTitle:c.chapterTitle,blocks:[],scale:d,reason:`「${c.chapterTitle}」失守种类为判据/篇幅类(${b}):把块目标字数按 \xd7${d.toFixed(2)} 调整后重试一次(偏差方向由失败种类给出,不是猜;每次生成每章最多调一次)`}}let d=a.chapterOutcomes.find(a=>a.plannedBlocks>0&&!a.replanned&&(0===a.succeededBlocks&&"budget"!==n(a.failureKinds)||b.has(a.chapterId.trim())));if(d)return{kind:"replan_chapter",chapterId:d.chapterId,chapterTitle:d.chapterTitle,reason:0===d.succeededBlocks?`「${d.chapterTitle}」${d.plannedBlocks} 个块全部失守(种类:${d.failureKinds.join("、")||"未记录"}),且不是预算原因:按要点把失守块拆开重写一次(每次生成每章最多重切一次)`:`「${d.chapterTitle}」的子智能体在写作期申请过拆节,且已有块失守:按申请把失守块拆开重写一次(每次生成每章最多重切一次)`};let e=function(a){let{batchSize:b,mode:c}=function(a){let b=Math.max(1,Math.floor(a.configured)),c=Math.max(0,Math.floor(a.chaptersLeft));if(0===c)return{batchSize:0,mode:"single"};let d=Math.min(1,Math.max(0,Number.isFinite(a.remainingRatio)?a.remainingRatio:0));return d>=.5?{batchSize:Math.min(b,c),mode:"full"}:d>=.2?{batchSize:Math.max(1,Math.min(c,Math.floor(b/2)||1)),mode:"throttled"}:{batchSize:Math.min(1,c),mode:"single"}}({remainingRatio:1-Math.min(1,Math.max(0,a.usedRatio)),configured:a.configuredConcurrency,chaptersLeft:a.chaptersLeft}),d=a.avgTokensPerChapter;if(!d||d<=0||0===a.chaptersLeft)return{mode:c,batchSize:b,budgetLikelyInsufficient:!1,reason:`按余量降档:${c}(本批 ${b} 章)${d?"":";暂无实测均耗,未做可行性估算(不编数)"}`};let e=Math.max(0,Math.floor(a.remainingTokens/d)),f=e<a.chaptersLeft;return{mode:c,batchSize:b,budgetLikelyInsufficient:f,affordableChapters:e,reason:f?`剩余预算按实测均耗(${Math.round(d)} token/章)**只够写完 ${e} 章**,而还剩 ${a.chaptersLeft} 章;已按余量降档到 ${c}(本批 ${b} 章),并请示人决定缩范围/加预算`:`剩余预算足够写完剩余 ${a.chaptersLeft} 章(可负担 ${e} 章);本批 ${b} 章(${c})`}}({remainingTokens:a.remainingTokens,chaptersLeft:a.chaptersLeft,configuredConcurrency:a.configuredConcurrency,usedRatio:a.usedRatio,...void 0!==a.avgTokensPerChapter?{avgTokensPerChapter:a.avgTokensPerChapter}:{}});return e.budgetLikelyInsufficient?{kind:"request_human",question:`剩余预算按实测均耗只够写完 ${e.affordableChapters??"?"} 章,而还剩 ${a.chaptersLeft} 章。候选:① 加预算重跑剩余章;② 缩范围(减章或降篇幅目标);③ 接受当前成稿、剩余章人工补写。`,reason:e.reason}:"full"!==e.mode?{kind:"throttle",batchSize:e.batchSize,mode:e.mode,reason:e.reason}:{kind:"continue",reason:"读数正常:预算余量充足、无全灭章,按原计划推进"}}var p=c(52639),q=c(30055),r=c(87942),s=c(55807),t=c(76193),u=c(1218),v=c(51190),w=c(44505),x=c(34666);async function y(a){let b=a.chapterDrafts.flatMap(a=>a.evidence||[]);b.length>0&&(a.allEvidence.push(...b),a.allEvidence.splice(0,a.allEvidence.length,...(0,h.QR)(a.allEvidence,{preservePinned:!0}))),(0,f.Te)(a.signal);let c=(0,h.QR)(a.allEvidence,{preservePinned:!0});a.allEvidence.splice(0,a.allEvidence.length,...c),a.facts=(0,u.B2)(a.template,a.allEvidence,a.documentSpec);let{localFacts:d,projectBasicFacts:e,preciseFacts:g,structuredTables:i}=(0,u.d6)({evidence:a.allEvidence,template:a.template,spec:a.documentSpec,profile:a.domainProfile,diagnostics:a.generationDiagnostics}),j=[...d,...e,...g],k={facts:[],stages:[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"已有本地/资料事实覆盖主要必需字段,跳过 LLM 全量事实抽取"}]};if((0,u.N2)(j,a.template,a.documentSpec)){let b=(0,h.QR)(a.allEvidence,{preservePinned:!0});try{k=await (0,u.OQ)(b,a.factExtractionPromptTexts,a.template,a.documentSpec,a.signal,a.generationDiagnostics)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fact extraction failed:",b)}}for(let b of k.stages)(0,l.Wl)(a,{batch:"finalize.rebuild",stage:b});let m=(0,v.UT)(a.allEvidence);for(let b of(a.structuredFacts=[...d,...e,...g,...k.facts,...m],a.governedStructuredFacts=(0,v.A)(a.structuredFacts,a.scopeConflicts??(0,v.KX)(a.structuredFacts)),a.governedStructuredFacts))a.facts[b.key]=`${(0,f.lG)(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;a.factsModel=await (0,u.d7)(a.governedStructuredFacts,i,a.missingItems,a.documentSpec,a.domainProfile);let n=(0,v.qD)({facts:a.governedStructuredFacts,projectRoot:a.projectRoot,requirement:a.requirement||"",templateId:a.template.id});a.factsModel.canonical=n,a.scheduleAuthority=(0,w.GG)(a.factsModel),a.assemblyRateAuthority=(0,w.hI)(a.factsModel),a.scaleSummary=(0,w.Pt)(a.factsModel),a.supportAuthority=(0,w.P3)(a.factsModel),a.decisionLockEntries=(0,x.Pd)({facts:[...d,...e,...g],evidence:a.allEvidence})}var z=c(37126),A=c(82437),B=c(11919),C=c(31920),D=c(19245),E=c(69896);let F=/^\s*(?:[-*•·]|\d{1,4}[.、))]|[一二三四五六七八九十]{1,3}、|(\d{1,4}))?[\s。.;;,,、]*$/u,G=["中华人民共和国","国家标准","标准","规范","规程","技术","工程","施工","质量","验收","设计","安全","管理","方法","要求","统一","国家","及","与","和","的"];function H(a){return(a.match(/[\u4e00-\u9fa5]/gu)||[]).length}function I(a){let b=(0,D.XF)(a);if(0===b.length)return a;let c=new Set;for(let a of b)for(let b=a.start;b<a.end;b+=1)c.add(b);return a.split(/\r?\n/u).filter((a,b)=>!c.has(b)).join("\n")}function J(a,b){let c=I(a);return!!(b.code&&(0,D.ay)(c).some(a=>(0,D._N)(a,b.code))||b.name&&(0,D.bZ)(c).some(a=>(0,D.no)(a,b.name)))}function K(a,b){return!!(b.name&&(0,D.bZ)(a).some(a=>(0,D.no)(a,b.name))||b.code&&(0,D.ay)(a).some(a=>(0,D._N)(a,b.code)))}function L(a,b){if("pair"===a.kind)return`《${a.name}》(${a.code})`;if("name"===a.kind)return`《${a.value}》`;let c=a.code??a.value,d=a.counterpart||function(a,b){let c;for(let d of a.matchAll(D.V2)){if(!(0,D._N)(d[0],b))continue;let e=d.index??0,f=Math.max(0,e-30),g=Math.min(a.length,e+d[0].length+30);for(let b of a.slice(f,g).matchAll(D.RO)){let a=Math.abs(f+(b.index??0)-e);(!c||a<c.distance)&&(c={name:b[0].replace(/《|》/gu,""),distance:a})}}return c?.name}(b,c);return d?`《${d}》(${c})`:c}function M(a,b){let c,d;if(0===b.length)return;let e=(0,D.XF)(a);if(0===e.length)return;let f=a.split(/\r?\n/u);for(let a of e)for(let b=a.start+1;b<a.end;b+=1){let a=f[b];if(!a?.trim())continue;let e=(a.match(D.RO)?.length??0)+(a.match(D.V2)?.length??0);0!==e&&(a.trim().startsWith("|")?(!d||e>=d.score)&&(d={index:b,score:e}):(!c||e>=c.score)&&(c={index:b,score:e}))}let g=b.join("、");if(c)f[c.index]=function(a,b){let c=/([。;;::])\s*$/u.exec(a);if(c){let d=c[1];return"。"===d?`${a.slice(0,c.index)}、${b}。${a.slice(c.index+d.length)}`:`${a}${b}`}return/[、,,]\s*$/u.test(a)?`${a}${b}`:`${a}、${b}`}(f[c.index],g);else if(d){let a=d.index;for(;a+1<f.length&&(f[a+1]??"").trim().startsWith("|");)a+=1;f.splice(a+1,0,g)}else{let a=e[e.length-1];f.splice(Math.max(a.start+1,a.end),0,g)}let h=f.join("\n");if(!(h===a||H(h)<=H(a)))return h}async function N(a){let b=(0,D.hK)(a.finalMarkdown);if(b.stats.declaredCodes+b.stats.declaredNames===0||0===b.declaredNotUsed.length&&0===b.usedNotDeclared.length)return;let c=H(a.finalMarkdown),d=b.declaredNotUsed.length+b.usedNotDeclared.length,e=new Map,f=b=>e.get(b)??a.finalChapterDrafts[b].content,h=b=>{(0,l.Wl)(a,{batch:"finalize.repairHistory",stage:b}),a.emitProgress(a.finalChapterDrafts)},i=a.finalChapterDrafts.findIndex(a=>(0,D.XF)(a.content).length>0);i<0&&h((0,k.X5)({type:"validation",roleId:"basis-regulations-cross-repair",status:"failed",message:"编制依据双向对账收口:全文存在对账缺口但各章均无编制依据区段(区段位于章外结构),确定性插入/移除无定向目标,由终门禁照常复核"},{subtitle:"评审后兜底"}));let j=0;if(i>=0&&b.usedNotDeclared.length>0){let c=f(i),d=(0,D.F9)(c),g=b.usedNotDeclared.filter(a=>!K(d,a));if(g.length>0){let b=M(c,g.map(b=>L(b,a.finalMarkdown)));b?(e.set(i,b),j=g.length,h((0,k.X5)({type:"validation",roleId:"basis-regulations-cross-repair",status:"success",message:`编制依据双向对账:引用未声明 ${j} 条确定性补入编制依据小节(${g.map(D.Dq).join("、")})`},{subtitle:"评审后兜底"}))):h((0,k.X5)({type:"validation",roleId:"basis-regulations-cross-repair",status:"failed",message:`编制依据双向对账:引用未声明 ${g.length} 条确定性补入失败(区段无可用锚点行),由终门禁照常复核`},{subtitle:"评审后兜底"}))}}let m=new Map,n=[];for(let c of b.declaredNotUsed){let b=function(a){let b=(0,D.Pc)(a);for(let a of G)b=b.split(a).join("");let c=new Set;for(let a=0;a+2<=b.length;a+=1){let d=b.slice(a,a+2);/^[\u4e00-\u9fa5]{2}$/u.test(d)&&c.add(d)}return[...c]}(c.name??c.value),d=-1,e=0;if(a.finalChapterDrafts.forEach((a,c)=>{let g=function(a,b){if(0===b.length)return 0;let c=I(a).replace(/[\s\u200b-\u200d\ufeff]/gu,""),d=0;for(let a of b){let b=0,e=0;for(;b<3;){let d=c.indexOf(a,e);if(d<0)break;b+=1,e=d+a.length}d+=b}return d}(f(c),b);g>=3&&g>e&&(d=c,e=g)}),d>=0){let a=m.get(d)??{score:0,gaps:[]};a.gaps.push(c),a.score=Math.max(a.score,e),m.set(d,a)}else n.push(c)}let o=[...m.entries()].sort((a,b)=>b[1].score-a[1].score),p=0,q=0,r=0;for(let[b,c]of o){let d,h=a.finalChapterDrafts[b],i=f(b),j=c.gaps.filter(a=>!J(i,a)).length;if(0===j)continue;let m=i,n=c.gaps.filter(a=>!J(m,a)),o=0,s=!1,t=!1,u=`agent-basis-regulations-cross-repair-${h.id}`;for(;o<4&&n.length>0;){o+=1;let b=(0,k.X5)({type:"llm_review",roleId:u,status:"running",message:`编制依据双向对账应用引用补写中(第 ${o}/4 轮):${h.title}(待落位 ${n.length} 条)`},{subtitle:"评审后兜底"});(0,l.Wl)(a,{batch:"finalize.repairHistory",stage:b}),a.emitProgress(a.finalChapterDrafts);let d=n.length,e=await (0,E.b)({originalContent:m,repairRound:"basis-regulations-cross-repair",diagnostics:a.generationDiagnostics,apply:async()=>{let b=await a.withProgressHeartbeat(()=>(0,g.l8)({template:a.template,chapter:{id:h.id,title:h.title,content:m,evidence:h.evidence,missingFacts:h.missingFacts,sections:h.sections},issues:n.map(a=>`编制依据对账缺口:正文未引用 ${(0,D.Dq)(a)}`),promptTexts:function(a,b,c=b.length){return["【编制依据双向对账定向修复】",`本章(${a})被判定为以下编制依据条目的应用章节:这些标准已在编制依据小节声明,但全文正文缺少实际应用引用。`,c>b.length?`本轮只处理下列 ${b.length} 条(本章共 ${c} 条待落位,其余由后续轮次处理)——请把这 ${b.length} 条全部落位,不要漏项:`:`待落位条目(补写后必须在本章正文出现正式引用——书名号全名;条目带编号时须一并写全编号):`,...b.map(a=>`- ${(0,D.Dq)(a)}`),"修复要求:","1. 在本章对应工序/质量验收要求的既有段落中补写自然应用引用句(写清该标准用于哪个工序环节的什么控制指标或验收要求),引用必须使用《标准名称》(编号)正式形态;","2. 引用形态硬约束(链尾指向型清洗判据单源):《标准名称》(编号)必须写在**小句开头**,例如「《X》(GB 50202-2018)规定,桩位偏差与基底标高按…控制」;**禁止**写成「…按《X》(GB 50202-2018)控制…」「…依据/参照/参见《X》(GB 50202-2018)…」形态——该形态会被链尾「指向型表述」确定性清洗整小句删除(评标人看不到该标准落位,对账缺口复现);","3. 引用句须镶嵌进既有施工或验收语境,不得写成孤立口号句、纯清单句或文末罗列;","4. 不改写、不删除既有内容,不新增/删除小节标题,不调整表格结构;其余内容一字不动。"].join("\n")}(h.title,n.slice(0,5),n.length),requirement:a.requirement,forbidDrawingImages:!1,bidComposition:a.bidComposition,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,g.XG)("basis-regulations-cross-repair",a.generationDiagnostics)}));return b.content&&b.content!==m?b.content:m},recheck:a=>[c.gaps.filter(b=>!J(a,b)).length,-H(a)],shouldRollback:(a,b)=>b[0]>a[0]||b[1]>a[1]+Math.max(40,.05*Math.abs(a[1]))});if(e.rolledBack){s=!0;break}if(e.content===m)break;let f=c.gaps.filter(a=>!J(e.content,a));if(m=e.content,t=!0,f.length>=d){n=f;break}n=f}m!==i?(e.set(b,m),p+=1,q+=j-n.length,r+=n.length):r+=j;let v=n.length;d=0===v?`编制依据双向对账应用引用补写完成:${h.title}(${o} 轮,待落位条目全部获正文引用)`:t?`编制依据双向对账应用引用补写部分生效:${h.title}(已执行 ${o} 轮,残留 ${v} 条未获引用,由终门禁照常复核)`:s?`编制依据双向对账应用引用补写已回滚:${h.title}(复检未通过,保留修复前正文;残留 ${v} 条,由终门禁照常复核)`:`编制依据双向对账应用引用补写未生效:${h.title}(模型未产生有效修改;残留 ${v} 条,由终门禁照常复核)`;let w=(0,k.X5)({type:"llm_review",roleId:u,status:0===v?"success":"failed",message:d,details:v>0?n.map(a=>`未获引用:${(0,D.Dq)(a)}`):["复检:本章待落位编制依据条目全部获正文引用"]},{subtitle:"评审后兜底"});(0,l.Wl)(a,{batch:"finalize.repairHistory",stage:w}),a.emitProgress(a.finalChapterDrafts)}let s=0,t=0;if(i>=0&&n.length>0){let a=f(i),b=[];for(let c of n){let d=function(a,b){let c=a;for(let a=0;a<3;a+=1){let a=function(a,b){let c=(0,D.XF)(a);if(0===c.length)return;let d=function(a){let b=[0];for(let c=0;c<a.length;c+=1)"\n"===a[c]&&b.push(c+1);return b}(a);for(let e of c){let c=d[e.start]??0,f=d[e.end]??a.length,g=function(a,b){let c=b.name?function(a,b){for(let c of a.matchAll(D.RO)){if(!(0,D.no)(c[0],b))continue;let a=c.index??0;return{start:a,end:a+c[0].length}}}(a,b.name):void 0,d=b.code?function(a,b){for(let c of a.matchAll(D.V2)){if(!(0,D._N)(c[0],b))continue;let a=c.index??0;return{start:a,end:a+c[0].length}}}(a,b.code):void 0;if(c&&d){let b=d.start>=c.end&&d.start-c.end<=14,e=c.start>=d.end&&c.start-d.end<=14;if(b||e){let b=Math.max(c.end,d.end);return b<a.length&&(")"===a[b]||")"===a[b])&&(b+=1),[{start:Math.min(c.start,d.start),end:b}]}return[c,d]}return c?[c]:d?d.start>0&&("("===a[d.start-1]||"("===a[d.start-1])&&d.end<a.length&&(")"===a[d.end]||")"===a[d.end])?[{start:d.start-1,end:d.end+1}]:[d]:[]}(a.slice(c,f),b);if(g.length>0)return g.map(a=>({start:c+a.start,end:c+a.end}))}}(c,b);if(!a)break;c=function(a,b){let c=a;for(let a of[...b].sort((a,b)=>b.start-a.start)){let b=a.start,d=a.end,e=0;for(;d<c.length&&e<2&&/[、,,;;]/u.test(c[d]);)d+=1,e+=1;if(0===e){let a=0;for(;b>0&&a<2&&/[、,,;;]/u.test(c[b-1]);)b-=1,a+=1}c=`${c.slice(0,b)}\u0000${c.slice(d)}`}let d=[];for(let a of c.split(/\r?\n/u)){if(!a.includes("\0")){d.push(a);continue}let b=a.split("\0").join("").replace(/、{2,}/gu,"、").replace(/、(?=[。.;;,,])/gu,"");F.test(b)||d.push(b)}return d.join("\n")}(c,a)}if(c!==a&&!(c.length>=a.length)&&0!==(0,D.XF)(c).length&&!K((0,D.F9)(c),b))return c}(a,c);d&&(t+=H(a)-H(d),a=d,b.push(c))}b.length>0&&e.set(i,a),s=b.length;let c=n.length-b.length;h((0,k.X5)({type:"validation",roleId:"basis-regulations-cross-repair",status:0===c?"success":"failed",message:0===c?`编制依据双向对账:不适用声明 ${s} 条确定性移除(正文零引用且无匹配章节:${b.map(D.Dq).join("、")})`:`编制依据双向对账:不适用声明移除 ${s}/${n.length} 条(${c} 条未定位条目 span 保留原文,由终门禁照常复核)`},{subtitle:"评审后兜底"}))}let u=[...e.entries()].filter(([b,c])=>c!==a.finalChapterDrafts[b].content);if(0===u.length){a.generationDiagnostics.llm.lastInfo=`编制依据双向对账收口:无有效变更落地(引用未声明 ${b.usedNotDeclared.length} 条、声明未用 ${b.declaredNotUsed.length} 条残留,由终门禁照常复核)`;return}let v=u.map(([b])=>({index:b,draft:a.finalChapterDrafts[b]}));for(let[b,c]of u)a.finalChapterDrafts[b]={...a.finalChapterDrafts[b],content:c};a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle();let w=(0,D.hK)(a.finalMarkdown),x=w.declaredNotUsed.length+w.usedNotDeclared.length,y=H(a.finalMarkdown),z=x<d&&w.usedNotDeclared.length<=b.usedNotDeclared.length&&w.declaredNotUsed.length<=b.declaredNotUsed.length,A=y>=c-t-Math.max(40,Math.round(.05*c));if(!z||!A){for(let{index:b,draft:c}of v)a.finalChapterDrafts[b]=c;a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle();let b=[...z?[]:["双向缺口未净减少"],...A?[]:["汉字数低于防删除门槛"]].join("且");h((0,k.X5)({type:"validation",roleId:"basis-regulations-cross-repair",status:"failed",message:`编制依据双向对账收口整体回滚:复检未通过(${b})——补写/移除变更全部撤销,缺口由终门禁照常复核`},{subtitle:"评审后兜底"})),a.generationDiagnostics.llm.lastInfo=`编制依据双向对账收口:${u.length} 章变更因复检未通过整体回滚(缺口 ${d} 条残留,由终门禁照常复核)`;return}h((0,k.X5)({type:"validation",roleId:"basis-regulations-cross-repair",status:(0,B.YM)({before:d,after:x}),message:`编制依据双向对账收口完成:补入 ${j} 条、应用 ${p} 章(解决 ${q} 条)、移除 ${s} 条;缺口 ${d}→${x}${x>0?"(残留由终门禁照常复核)":"(双向清零)"}`},{subtitle:"评审后兜底"})),a.generationDiagnostics.llm.lastInfo=`编制依据双向对账收口:引用未声明 ${b.usedNotDeclared.length}→${w.usedNotDeclared.length}、声明未用 ${b.declaredNotUsed.length}→${w.declaredNotUsed.length}(补入 ${j} 条、应用 ${p} 章、移除 ${s} 条;LLM 侧残留 ${r} 条含超预算 0 条)`}function O(a){let b=a.trim();return!!b&&0===(0,C.eI)(b).text.replace(/[,,、;;。.\s]/gu,"").length}function P(a){let b=a.chapterTargets??new Map,c=a.chapters.length,d=a.chapters.map(d=>{let{budgetTarget:e,fallbackNote:f}=(0,j.W4)({chapterTargets:b,chapterId:d.id,chapterTitle:d.title,documentTargetChars:a.documentTargetChars,chapterCount:c}),g=(0,j.V7)(d.content||"");return{chapterId:d.id,title:d.title,target:e,current:g,remaining:e-g,...f?{fallbackNote:f}:{}}}),e=d.reduce((a,b)=>a+b.current,0),f=d.reduce((a,b)=>a+b.target,0),g=Number(a.documentTargetChars),h=Number.isFinite(g)&&g>0?Math.round(g):f,i=void 0!==a.documentCurrentChars?a.documentCurrentChars:e;return{chapters:d,document:{target:h,current:i,remaining:h-i},overBudget:d.filter(a=>a.remaining<0).sort((a,b)=>a.remaining-b.remaining)}}function Q(a){let b=a.current-a.target;return`【章预算账】本章预算 ${a.target} 字、当前 ${a.current} 字、剩余额度 ${a.remaining} 字${b>0?`(已超出章预算 ${b} 字)`:""}。
267
266
  超出即须替换/合并,不得追加:本轮补写须在剩余额度内落位——优先改写既有同类段落使其更实,或与既有段落合并去重,不得整段净新增;额度已用尽时先替换/压缩低信息量表述腾出空间,再落位新增内容。
268
267
  真实缺陷一律不得因额度放弃补写:额度不足时以「替换/合并」落位,而不是不补;缺陷优先级高于篇幅。`}function R(a){let b=(0,j.V7)(a.beforeContent||""),c=(0,j.V7)(a.afterContent||"");if(!(c<=a.target))return{chapterId:a.chapterId,title:a.title,target:a.target,before:b,after:c,added:c-b,over:c-a.target}}function S(a){return`【章预算账】${a.title}:本轮新增 ${a.added} 字(${a.before}→${a.after} 字),超出章预算 ${a.over} 字(预算 ${a.target} 字)——后续轮次须以替换/合并回收,不得继续追加。`}function T(a){let b=a.diagnostics?.metrics;if(!Array.isArray(b))return;let c=Date.now();b.push({name:`chapter-budget:${a.round}:${a.report.chapterId}`,startedAt:a.startedAt,endedAt:c,durationMs:Math.max(0,c-a.startedAt),meta:{round:a.round,chapter:a.report.title,target:a.report.target,before:a.report.before,after:a.report.after,added:a.report.added,over:a.report.over}})}var U=c(40693),V=c(11248),W=c(19329),X=c(23760),Y=c(80323),Z=c(31846),$=c(31263),_=c(1358),aa=c(35547);let ab=new Set(["critical-section-depth","emergency-section-depth","construction-org-major-content","construction-org-division-section","precise-fact-usage","parameter-obligation-usage","boq-placement","overview-recap"]),ac=new Set(["precise-fact-usage","parameter-obligation-usage"]),ad={factuality:"资料依据:引用绑定资料、清单与图纸中的具体数值和工程事实,数据口径与绑定资料一致",structure:"实施流程:按施工准备、工艺流程、施工方法、验收标准的顺序组织,写出工序步骤与衔接关系",depth:"专业控制点:写出关键工序控制点、工艺参数、隐蔽工程验收与检验批划分",executable:"可执行性:明确责任主体、检查频次、记录台账与资源进场调配安排",specificity:"项目特异性:结合本项目建设地点、工程规模与计划工期展开,引用本项目工程量数据",consistency:"跨章一致性:工期、质量、安全数据口径与总进度计划和质量目标相互呼应"},ae=[[/GB|JGJ|CJJ|DB|ISO/u,/依据|规范|标准|编制/u],[/日历天|个月|天$/u,/工期|进度|部署|流水/u],[/㎡|m²/u,/概况|施工方法|主要施工|方案|内容/u],[/m3|m³/u,/概况|施工方法|主要施工|方案|内容/u],[/MPa|kPa|kN/u,/质量|材料|施工方法|主要施工|方案/u],[/DN|φ|Φ/u,/管网|给排水|安装|施工方法|主要施工/u]];function af(a,b){return!(0,V.K3)(a).includes((0,V.K3)(b))}let ag=/本项目为|本工程为|该项目为|该工程为/u,ah=a=>a.replace(/\s+/gu,"");function ai(a){return a.validationIssues.filter(a=>"blocker"===a.severity&&a.provenance&&ab.has(a.provenance.detectorId))}function aj(a,b,c){let d=a.finalChapterDrafts;if(d[b])return P({chapterTargets:a.documentBudget?.chapterTargets,chapters:d.map((a,d)=>d===b?{...a,content:c}:a),documentTargetChars:a.documentBudget?.targetChars}).chapters[b]}async function ak(a,b=new Set){let c=a.validationIssues.filter(a=>a.provenance?.detectorId==="professional-score"&&a.chapterId);if(0===c.length)return[];let d=[],e=new Set;for(let b of c){let c=b.chapterId;if(!c||e.has(c))continue;e.add(c);let f=a.finalChapterDrafts.find(a=>a.id===c);if(!f)continue;let g=await a.professionalDepthClassifier.analyze(f.content);if(!g)continue;let h=(0,X.Pu)(g.dimensions);h>=(0,X.lH)(f.title)||d.push({issue:b,chapterId:c,total:h,weakDimensions:(0,X.RX)(g.dimensions)})}d.sort((a,b)=>a.total-b.total);let f=d.filter(a=>!b.has(a.chapterId)),g=(f.length>0?f:d).slice(0,4);for(let a of g)b.add(a.chapterId);return g}function al(a){let{overviewBody:b}=(0,aa.t1)(a.finalMarkdown),c=(b.match(/[\p{Script=Han}]/gu)||[]).join(""),d=new Set;for(let a of b.split("\n"))for(let b of a.split(/[。!?!?]/u)){let a=b.trim().replace(/\s+/gu,"");a.length>=12&&d.add(a)}return{han:c,bodySentences:d}}async function am(a,b,c,d,e,f,g=[],h=[]){let i={...a.finalChapterDrafts[b],content:d};switch(c){case"critical-section-depth":return(0,z.Zd)([i]);case"construction-org-major-content":return(0,U.y1)([i]);case"construction-org-division-section":return(0,U.eS)([i]);case"emergency-section-depth":return(await (0,W.E)(i.content)).filter(a=>"blocker"===a.severity).length;case"precise-fact-usage":case"parameter-obligation-usage":return f.filter(a=>af(d,a)).length;case"boq-placement":{let a=(0,_.y6)(d);return g.filter(b=>!(0,_.a2)(a,b.name,b.code)).length}case"drawing-reference":{let a=(0,$.Ad)(d);return h.filter(b=>!b.tokens.some(b=>a.includes(b))).length}case"overview-recap":if(!e.han)return 0;let j=0;for(let a of d.split("\n")){let b=ag.exec(a);if(!b)continue;let c=a.slice(b.index).split(/[。!?!?]/u)[0];c&&!(c.length<12)&&!e.bodySentences.has(c.replace(/\s+/gu,""))&&(0,aa.oG)(c,e.han)&&(j+=1)}return j;case"professional-score":{let c=await a.professionalDepthClassifier.analyze(d);if(!c)return 0;return Math.max(0,(0,X.lH)(a.finalChapterDrafts[b].title)-(0,X.Pu)(c.dimensions))}default:return 0}}async function an(a,b,c,d,e){let f=new Map;for(let g of c){if(f.has(g.detectorId))continue;let h=c.filter(a=>ac.has(a.detectorId)).flatMap(a=>a.pendingTokens??[]),i=c.filter(a=>"boq-placement"===a.detectorId).flatMap(a=>a.pendingBoqItems??[]),j=c.filter(a=>"drawing-reference"===a.detectorId).flatMap(a=>a.pendingDrawings??[]);f.set(g.detectorId,await am(a,b,g.detectorId,d,e,h,i,j))}let g=0;for(let a of f.values())g+=a;return g}async function ao(a){let b=0,c=0,d=0,e=0,f=0,h=0,i=!1,j=new Set;for(let m=1;m<=8;m+=1){let n=ai(a),o=await ak(a,j),p=function(a){let b=new Map,c=a.finalChapterDrafts,d=a.drawingFactLock,e=a.validationIssues.find(a=>a.provenance?.detectorId==="drawing-reference");if(!e||!d||0===d.groups.length||0===c.length)return{issue:void 0,unrefCount:0,byChapter:b};let{unreferenced:f}=(0,$.SL)(d,a.finalMarkdown);if(0===f.length)return{issue:void 0,unrefCount:0,byChapter:b};let g=c.map(a=>(0,Z.TC)(a.title,a.sections||[]).map(a=>a.toLowerCase()));for(let a of f){let d=a.factLines.slice(0,8).join(" ").toLowerCase(),e=-1,f=0;if(g.forEach((a,b)=>{let c=a.reduce((a,b)=>a+ +!!d.includes(b),0);c>f&&(f=c,e=b)}),e<0&&(e=c.findIndex(a=>/设计|说明|构造|做法|施工方法|施工工艺/u.test(a.title))),e<0&&(e=c.findIndex(a=>/主要施工|分部分项/u.test(a.title))),e<0)continue;let h=a.sourceFile.split("/").pop()||a.sourceFile,i=b.get(e)??[];i.push({name:h,tokens:a.tokens,lines:a.factLines.slice(0,3)}),b.set(e,i)}if(b.size>8){let a=[...b.entries()].sort((a,b)=>b[1].length-a[1].length).slice(0,8);return{issue:e,unrefCount:f.length,byChapter:new Map(a)}}return{issue:e,unrefCount:f.length,byChapter:b}}(a),q=+!!p.issue;if(0===n.length&&0===o.length&&0===q){if(1===m){let b=(0,k.X5)({type:"validation",roleId:"content-depth-repair",status:"success",message:"内容深度验收通过:内容深度检测器与专业评分均未报阻断"},{subtitle:"内容深度补写核验"});(0,l.Wl)(a,{batch:"finalize.repairHistory",stage:b}),a.emitProgress(a.finalChapterDrafts);return}break}1===m&&(b=n.length,c=o.length,d=p.unrefCount);let r=m>1?`(收敛周期 ${m}/8:处理上轮补写后重算新报残留)`:"",s=new Map(o.map(a=>[a.chapterId,a.weakDimensions])),{byChapter:t,unlocated:u}=function(a,b,c,d){let e=new Map,f=0,g=a.finalChapterDrafts,h=b.some(a=>a.provenance?.detectorId&&ac.has(a.provenance.detectorId)),i=h?(0,X.tW)(a.finalMarkdown,a.factsModel,g):[],j=h?(0,Y.R2)(a.finalMarkdown,a.factsModel,g):new Map,k=b.some(a=>a.provenance?.detectorId==="overview-recap"),l=k?(0,aa.t1)(a.finalMarkdown).sentences:[],m=k?al(a):{han:"",bodySentences:new Set},n=b.some(a=>a.provenance?.detectorId==="boq-placement")?function(a){let b=new Map,c=a.finalChapterDrafts;if(0===c.length)return b;let d=(0,_.JV)(a.finalMarkdown,a.factsModel).filter(a=>!a.exempt&&!a.placed&&a.itemName.trim());if(0===d.length)return b;let e=new Map;for(let a of d){let b=a.itemName.slice(0,40),c=e.get(b);c?c.rows+=1:e.set(b,{name:a.itemName,code:a.itemCode,rows:1,sample:a})}for(let a of[...e.values()].sort((a,b)=>b.rows-a.rows)){let d=(0,Z.o7)({name:a.name,description:a.sample.description||""},c),e=d?c.findIndex(a=>a.title===d.chapterTitle):-1,f=e>=0?e:c.findIndex(a=>/主要施工|分部分项|施工方法/u.test(a.title));if(f<0)continue;let g=b.get(f)??[];g.push({name:a.name,code:a.code,rows:a.rows,quantity:`${a.sample.quantity||""}${a.sample.unit||""}`.trim(),section:d?.section}),b.set(f,g)}return b}(a):new Map,o=(a,b)=>{let c=e.get(a)??[];c.push(b),e.set(a,c)};if(d?.issue&&d.byChapter.size>0)for(let[a,b]of d.byChapter)o(a,{detectorId:"drawing-reference",issue:d.issue,pendingDrawings:b});let p=!1,q=!1,r=!1;for(let a of b){let b=a.provenance?.detectorId;if(!b){f+=1;continue}if(a.chapterId){let d=g.findIndex(b=>b.id===a.chapterId);if(d>=0){o(d,{detectorId:b,issue:a,weakDimensions:c.get(a.chapterId)});continue}}if(a.sectionTitle){let c=g.findIndex(b=>b.content.includes(a.sectionTitle));if(c>=0){o(c,{detectorId:b,issue:a});continue}}if(ac.has(b)){if(p)continue;p=!0;let c=!1,d=new Set,e=new Map,h=(a,b)=>{let c=e.get(a)??[];c.push(b),e.set(a,c)};for(let a of i){let b=ae.find(([b])=>b.test(a)),e=b?g.findIndex(a=>b[1].test(a.title)):-1,f=e>=0?e:function(a){if(0===a.length)return -1;let b=a.findIndex(a=>/编制依据|依据|规范|标准|编制/u.test(a.title));if(b>=0)return b;let c=a.findIndex(a=>/概况|概述|总述|总体|部署|工程/u.test(a.title));return c>=0?c:0}(g);f<0||(h(f,a),d.add(a),c=!0)}for(let[a,b]of j)for(let e of b)d.has(e)||(h(a,e),d.add(e),c=!0);for(let[c,d]of e)o(c,{detectorId:b,issue:a,pendingTokens:d});if(c)continue;let k=/正文未体现结构化数据资料/u.test(a.message)?/主要施工|分部分项|施工方法/u:/依据|概况|施工方案|主要施工/u,l=g.findIndex(a=>k.test(a.title));if(l>=0){o(l,{detectorId:b,issue:a});continue}f+=1;continue}if("overview-recap"===b&&!q){q=!0;let c=!1;for(let d of l){if(!m.han||!(0,aa.oG)(d,m.han))continue;let e=ah(d),f=g.findIndex(a=>ah(a.content).includes(e));f<0||(o(f,{detectorId:b,issue:a,pendingSentences:[d]}),c=!0)}if(c)continue;f+=1;continue}if("boq-placement"===b&&!r){r=!0;let c=!1;for(let[d,e]of n)o(d,{detectorId:b,issue:a,pendingBoqItems:e}),c=!0;if(c)continue;f+=1;continue}f+=1}return{byChapter:e,unlocated:f}}(a,[...n,...o.map(a=>a.issue)],s,p);if(e+=u,0===t.size){if(1===m){let b=(0,k.X5)({type:"validation",roleId:"content-depth-repair",status:"failed",message:`内容深度补写无法定位目标章:${n.length+o.length+q} 条缺口均未匹配到章节锚点(由终门禁照常复核)`},{subtitle:"内容深度补写核验"});(0,l.Wl)(a,{batch:"finalize.repairHistory",stage:b}),a.emitProgress(a.finalChapterDrafts);return}break}let v=al(a),w=0;for(let[b,c]of t){let d,e=a.finalChapterDrafts[b],f=e.content,i=await an(a,b,c,f,v);if(0===i)continue;let j=0,m=!1,n=!1,o=c.some(a=>"professional-score"!==a.detectorId&&"drawing-reference"!==a.detectorId)?4:1,p=[i],q=`agent-content-depth-repair-${e.id}`,s=[];for(;j<o;){j+=1;let d=[];for(let e of c)if("professional-score"!==e.detectorId||!(j>1)){if(ac.has(e.detectorId)){let a=(e.pendingTokens??[]).filter(a=>af(f,a));a.length>0&&d.push({...e,pendingTokens:a});continue}if("boq-placement"===e.detectorId){let a=(0,_.y6)(f),b=(e.pendingBoqItems??[]).filter(b=>!(0,_.a2)(a,b.name,b.code));b.length>0&&d.push({...e,pendingBoqItems:b});continue}if("drawing-reference"===e.detectorId){if(j>1)continue;let a=(0,$.Ad)(f),b=(e.pendingDrawings??[]).filter(b=>!b.tokens.some(b=>a.includes(b)));b.length>0&&d.push({...e,pendingDrawings:b});continue}await am(a,b,e.detectorId,f,v,e.pendingTokens??[])>0&&d.push(e)}if(0===d.length)break;let h=Date.now(),t=(0,k.X5)({type:"llm_review",roleId:q,status:"running",message:`内容深度补写中${r}(第 ${j}/${o} 轮):${e.title}(${d.length} 类缺口)`,details:d.map(a=>`缺口:${a.issue.message.slice(0,80)}`)},{subtitle:"内容深度补写核验"});(0,l.Wl)(a,{batch:"finalize.repairHistory",stage:t}),a.emitProgress(a.finalChapterDrafts);let u=await (0,E.b)({originalContent:f,repairRound:"content-depth-repair",diagnostics:a.generationDiagnostics,beforeMetrics:[i],apply:async()=>{let c=aj(a,b,f),h=await a.withProgressHeartbeat(()=>(0,g.l8)({template:a.template,chapter:{id:e.id,title:e.title,content:f,evidence:e.evidence,missingFacts:e.missingFacts,sections:e.sections},issues:d.map(a=>`${a.issue.message}|${a.issue.suggestion||""}`),promptTexts:function(a,b,c,d,e){let f=["【内容深度定向补写修复】",...c>1?[`本轮为第 ${c} 轮(最多 ${d} 轮):上一轮补写后复检仍有残留,请针对下列缺口严格补足。`]:[],`下列内容深度类验收缺陷是《${a.title}》导出前的阻断项,请逐条定向修复:`,"1. 补写内容必须落到绑定资料/清单/图纸中的具体数值与工程事实,保持原始数值与单位,不得编造参数、不得空泛套话;","2. 只做局部修改:优先在对应小节内扩写补实,或在最合适的位置并入补写段落;不得新增、删除或合并小节,不得改动无关内容;","3. 禁止「按招标文件要求:」类条幅前缀与任何元话语,必须是正式施组正文行文。",...e?[Q(e)]:[]];for(let a of b){let b=`- [${a.detectorId}] ${a.issue.message}`,c=a.issue.suggestion?`(补充要求:${a.issue.suggestion})`:"";if(f.push(`${b}${c}`),a.weakDimensions&&a.weakDimensions.length>0&&f.push(` 本章专业深度评分薄弱维度定向补写(按序落实):${a.weakDimensions.map(a=>ad[a]).join(";")}。`),a.pendingTokens&&a.pendingTokens.length>0&&f.push(` 本章负责补齐的关键工程参数:${a.pendingTokens.join("、")}。请自然写入本章对应位置,必须逐字保留原文形态(数字、单位、编号中的连字符与年份不得改写、拆写或省略);规范编号无法确认规范名称时只写编号并表述为现行国家(行业)标准,不得编造规范名称。`),a.pendingBoqItems&&a.pendingBoqItems.length>0){let b=a.pendingBoqItems.slice(0,120);f.push(` 本章负责补齐的未落位清单项(逐项在正文最相关的专业小节写入条目名称与工程量,保持清单原文数值与单位):${b.map(a=>`${a.name}${a.quantity?` ${a.quantity}`:""}${a.rows>1?`(同族${a.rows}行)`:""}${a.section?`[建议小节:${a.section}]`:""}`).join(";")}。`);let c=a.pendingBoqItems.slice(120);c.length>0&&f.push(` 另需覆盖(仅列名,共${c.length}项,按上述同一口径逐项补齐):${c.map(a=>a.name).join("、")}。`)}if(a.pendingSentences&&a.pendingSentences.length>0&&f.push(` 下列句段属概况复述,须删除或改写为本章内容(可保留必要的具体数字引用,不得整段复述概况):${a.pendingSentences.map(a=>`“${a.slice(0,60)}”`).join(";")}`),a.pendingDrawings&&a.pendingDrawings.length>0){let b=a.pendingDrawings.slice(0,12);f.push(` 本章负责补齐的未落位图纸事实(逐份在正文最相关的专业小节写入图纸名称及其规格/构造做法,数值、材料代号与规格逐字照抄原文,不得改写或省略):${b.map(a=>`${a.name}${a.lines.length>0?`[参考事实行:${a.lines.join(";")}]`:""}`).join(";")}。`);let c=a.pendingDrawings.slice(12);c.length>0&&f.push(` 另需覆盖(仅列名,共${c.length}份,按上述同一口径逐份在相关小节补齐):${c.map(a=>a.name).join("、")}。`)}}return f.join("\n")}(e,d,j,o,c),requirement:a.requirement,forbidDrawingImages:!1,bidComposition:a.bidComposition,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,g.XG)("content-depth-repair",a.generationDiagnostics)}));return h.content&&h.content!==f?h.content:f},recheck:async d=>[await an(a,b,c,d,v)]});if(u.rolledBack&&(n=!0),u.rolledBack||u.content===f)break;let w=f;f=u.content,a.finalChapterDrafts[b]={...e,content:f},m=!0;let x=aj(a,b,w),y=x?R({chapterId:e.id,title:e.title,target:x.target,beforeContent:w,afterContent:f}):void 0;y&&(s.push(S(y)),T({diagnostics:a.generationDiagnostics,round:"content-depth-repair",startedAt:h,report:y}));let z=u.afterMetrics[0]??await an(a,b,c,f,v);if(p.push(z),0===z||z>=i||j>=o)break;i=z}m&&(w+=1);let t=m?p[p.length-1]:i;h+=Math.max(0,i-t);let u=`残留深度缺口量 ${t}(各类残差累计:字数缺口/缺陷项数/参数与清单项缺项数),由终门禁照常复核`;d=0===t&&m?`内容深度补写完成${r}:${e.title}(${j} 轮补写后缺口清零)`:m?`内容深度补写部分生效${r}:${e.title}(残留轨迹 ${p.join("→")},已执行 ${j} 轮;${u})`:n?`内容深度补写已回滚${r}:${e.title}(修复后缺口数未下降,保留修复前正文;${u})`:`内容深度补写未生效${r}:${e.title}(模型未产生有效修改;${u})`,s.length>0&&(d=`${d};${s[s.length-1]}`);let x=(0,k.X5)({type:"llm_review",roleId:q,status:(0,B.YM)({before:p[0],after:t,repaired:m}),message:d,details:[...c.map(a=>`缺陷:${a.issue.message.slice(0,90)}`),...t>0?[`残留深度缺口量 ${t}`]:[],...s]},{subtitle:"内容深度补写核验"});(0,l.Wl)(a,{batch:"finalize.repairHistory",stage:x}),a.emitProgress(a.finalChapterDrafts)}if(w>0)f+=w,i=!0,a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle();else break;let x=ai(a),y=(await ak(a)).length;if(x.length+y===0||x.length+y>=n.length+o.length)break}let m=ai(a);if(i||b>0||c>0||d>0){let g=P({chapterTargets:a.documentBudget?.chapterTargets,chapters:a.finalChapterDrafts,documentTargetChars:a.documentBudget?.targetChars}),i=`;${function(a){let{target:b,current:c,remaining:d}=a.document,e=a.overBudget.length>0?`;超额章 ${a.overBudget.length} 个(最大超额 ${Math.abs(a.overBudget[0].remaining)} 字:${a.overBudget[0].title.slice(0,24)})`:"";return`【章预算账\xb7全文】预算 ${b} 字、当前 ${c} 字、剩余额度 ${d} 字${e}`}(g)}${g.overBudget.length>0?`(超额章:${g.overBudget.map(a=>`${a.title.slice(0,16)} 超 ${Math.abs(a.remaining)} 字`).join("、")})`:""}`;a.generationDiagnostics.llm.lastInfo=`内容深度定向补写:初检 ${b} 项深度类阻断${c>0?`、${c} 章专业评分不足(补写线 ${X.Qi}/12,资源类章 10/12)`:""}${d>0?`、${d} 份图纸事实未落位(引用率目标 90%)`:""}(定位 ${b-Math.min(e,b)} 项${e>0?`,未定位 ${e} 项`:""}),章级定向补写(六类每章最多 4 轮 + 专业评分每章最多 1 轮/单周期最多 4 章 + 图纸落位每章最多 1 轮/单周期最多 8 章,收敛周期上限 8),${f} 章次落地,本次消解 ${h} 项缺口,终态残留 ${m.length} 项(由终门禁照常复核)${i}`}(0,g.kD)(a.generationDiagnostics,h)}function ap(a){return(a.match(/[\u4e00-\u9fa5]/gu)||[]).length}function aq(a,b,c){let d=a.finalChapterDrafts;if(d[b])return P({chapterTargets:a.documentBudget?.chapterTargets,chapters:d.map((a,d)=>d===b?{...a,content:c}:a),documentTargetChars:a.documentBudget?.targetChars}).chapters[b]}async function ar(a){let b=a.validationIssues.filter(a=>a.provenance?.detectorId==="construction-org-control-loop"&&a.chapterId),c=(0,U.ot)(a.finalChapterDrafts),d=new Map;for(let e of b){let b=a.finalChapterDrafts.findIndex(a=>a.id===e.chapterId);if(b<0)continue;let f=c.filter(a=>a.chapter.id===e.chapterId).map(a=>a.deficit);0!==f.length&&(d.has(b)||d.set(b,f))}if(0===d.size){let b=(0,k.X5)({type:"validation",roleId:"control-loop-repair",status:"success",message:"闭环链验收通过:质量三检/进度纠偏/工资代发链均已成链"},{subtitle:"闭环链补写核验"});(0,l.Wl)(a,{batch:"finalize.repairHistory",stage:b}),a.emitProgress(a.finalChapterDrafts);return}let e=0,f=0;for(let[b,c]of d){let d,h=a.finalChapterDrafts[b];if(!h)continue;let i=c=>(0,U.ot)(a.finalChapterDrafts.map((a,d)=>d===b?{...a,content:c}:a)).filter(a=>a.chapter.id===h.id).reduce((a,b)=>a+b.deficit.missing.length,0),j=h.content,m=i(j);if(0===m)continue;let n=0,o=!1,p=!1,q=`agent-control-loop-repair-${h.id}`,r=[],s=[m];for(;n<2;){n+=1;let c=(0,U.ot)(a.finalChapterDrafts.map((a,c)=>c===b?{...a,content:j}:a)).filter(a=>a.chapter.id===h.id).map(a=>a.deficit);if(0===c.length)break;let d=Date.now(),e=(0,k.X5)({type:"llm_review",roleId:q,status:"running",message:`闭环链补写中(第 ${n}/2 轮):${h.title}(${c.map(a=>`${a.label}缺${a.missing.length}项`).join("、")})`},{subtitle:"闭环链补写核验"});(0,l.Wl)(a,{batch:"finalize.repairHistory",stage:e}),a.emitProgress(a.finalChapterDrafts);let f=await (0,E.b)({originalContent:j,repairRound:"control-loop-repair",diagnostics:a.generationDiagnostics,beforeMetrics:[m,-ap(j)],apply:async()=>{let d=aq(a,b,j),e=await a.withProgressHeartbeat(()=>(0,g.l8)({template:a.template,chapter:{id:h.id,title:h.title,content:j,evidence:h.evidence,missingFacts:h.missingFacts,sections:h.sections},issues:c.map(a=>`${a.label}未成链,缺失环节:${a.missing.join("、")}`),promptTexts:function(a,b,c){let d=["【评审关注闭环链定向补写】",`《${a.title}》的下列评审关注闭环链未成链(链条要素缺失),请在对应小节内自然补写齐全:`];for(let a of b)d.push(`- ${a.label}(缺:${a.missing.join("、")}):${a.prompt}请在本章对应小节内把缺失环节**按其业务实质**补写清楚。`);return d.push("修复要求:","1. 只做局部修改:在对应小节内扩写补实,或自然融入一段补写文字;不得新增、删除或合并小节,不得改动无关内容;","2. 补写须结合本章既有语境(本工程工序、责任岗位、检查频次、记录方式),写清每个缺失环节“谁执行、何时执行、依据什么判定、留存什么记录”,与既有句子自然衔接;","3. 补写的是**环节本身**(谁、何时、依据、记录),不是环节的名称:不要为了出现某个词而加尾巴,禁止以“复查销项”“整改销项”“复查确认”“验收销项”一类无信息尾词收句;同一收尾表达全文不得超过 4 次;","4. 禁止「按招标文件要求:」类条幅前缀与任何元话语,必须为正式施工组织设计正文行文,不得编造参数。",...c?[Q(c)]:[]),d.join("\n")}(h,c,d),requirement:a.requirement,forbidDrawingImages:!1,bidComposition:a.bidComposition,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,g.XG)("control-loop-repair",a.generationDiagnostics)}));return e.content&&e.content!==j?e.content:j},recheck:a=>[i(a),-ap(a)],shouldRollback:(a,b)=>b[0]>a[0]||b[1]>a[1]+Math.max(40,.03*Math.abs(a[1]))});if(f.rolledBack&&(p=!0),f.rolledBack||f.content===j)break;let t=j;j=f.content,a.finalChapterDrafts[b]={...h,content:j},o=!0;let u=aq(a,b,t),v=u?R({chapterId:h.id,title:h.title,target:u.target,beforeContent:t,afterContent:j}):void 0;v&&(r.push(S(v)),T({diagnostics:a.generationDiagnostics,round:"control-loop-repair",startedAt:d,report:v}));let w=f.afterMetrics[0]??i(j);if(s.push(w),0===w||w>=m||n>=2)break;m=w}o&&(e+=1);let t=o?s[s.length-1]??m:m;t>0&&(f+=1);let u=`残留链缺失 ${t} 项(由终门禁照常复核)`;d=0===t&&o?`闭环链补写完成:${h.title}(${n} 轮补写后缺失清零,链已成链)`:o?`闭环链补写部分生效:${h.title}(残留轨迹 ${s.join("→")},已执行 ${n} 轮;${u})`:p?`闭环链补写已回滚:${h.title}(修复后缺失数未下降或汉字大幅减少,保留修复前正文;${u})`:`闭环链补写未生效:${h.title}(模型未产生有效修改;${u})`,r.length>0&&(d=`${d};${r[r.length-1]}`);let v=(0,k.X5)({type:"llm_review",roleId:q,status:(0,B.YM)({before:s[0],after:t,repaired:o}),message:d,details:[...c.map(a=>`缺陷:${a.label}缺${a.missing.join("、")}`),...r]},{subtitle:"闭环链补写核验"});(0,l.Wl)(a,{batch:"finalize.repairHistory",stage:v}),a.emitProgress(a.finalChapterDrafts)}e>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle());let h=(0,U.ot)(a.finalChapterDrafts).length;a.generationDiagnostics.llm.lastInfo=`评审关注闭环链补写:${d.size} 章不成链定位(质量三检/进度纠偏/工资代发链),${e} 章次落地修复,${f} 章残留,终态残留 ${h} 条未成链(由终门禁照常复核)`}var as=c(95622),at=c(22213),au=c(13145),av=c(70208),aw=c(91943),ax=c(10025);async function ay(a){let b=[],c=(0,as._G)(a.finalMarkdown),d=0;c!==a.finalMarkdown&&(a.finalMarkdown=c,d+=1,b.push("附表区内部话术清洗:内部推导口径已中性化(唯一口径/经验工效区间/清单批注等)"));{let c=(a.effectiveChapters||[]).map(a=>({title:(0,av.GQ)(a.title),sections:(a.sections||[]).filter(Boolean)}));if(c.length>0){let e=a.finalMarkdown.split(/\r?\n/u),f=[];e.forEach((a,b)=>{let c=/^##\s+(.+?)\s*$/u.exec(a.trim());c&&!/^(目录|附表)/u.test(c[1])&&f.push({index:b,title:c[1].replace(/\s+/gu,"")})});let g=0,h=[];for(let a=c.length-1;a>=0;a-=1){let d=c[a],i=d.title.replace(/\s+/gu,""),j=f.find(a=>a.title.includes(i)||i.includes(a.title));if(!j)continue;let k=f.find(a=>a.index>j.index),l=k?k.index:e.length,m=e.slice(j.index+1,l).join("\n"),n=(0,at.zX)(d.sections,m);(0!==n.promoted.length||0!==n.missing.length)&&(n.promoted.length>0&&(e.splice(j.index+1,l-j.index-1,...n.markdown.split(/\r?\n/u)),g+=n.promoted.length,b.push(`规划小节层级提升:${d.title}(${n.promoted.join("、")})`)),n.missing.length>0&&h.push(`${d.title}:${n.missing.join("、")}`))}g>0&&(a.finalMarkdown=e.join("\n"),d+=g),h.length>0&&b.push(`规划小节未落位(交终门禁复核):${h.join(";")}`)}}{let c=function(a){let b=a,c=[];for(let a=0;a<8;a+=1){let a=function(a){let b=a.replace(/\r/gu,"").split("\n"),c=[],d=[];for(let a=0;a<b.length;a+=1){let e=/^(#{3,6})\s+(\S.*)$/u.exec((b[a]||"").trim());if(!e){d.push(b[a]??"");continue}let f=e[1].length,g=a+1;for(;g<b.length&&""===(b[g]||"").trim();)g+=1;let h=g<b.length?/^(#{1,6})\s+\S/u.exec((b[g]||"").trim()):null;if(!(g>=b.length||h&&h[1].length<=f)){d.push(b[a]??"");continue}for(c.push(e[2].trim());a+1<b.length&&""===(b[a+1]||"").trim();)a+=1}return 0===c.length?{markdown:a,dropped:c}:{markdown:d.join("\n").replace(/\n{3,}/gu,"\n\n"),dropped:c}}(b);if(0===a.dropped.length)break;c.push(...a.dropped),b=a.markdown}return{markdown:b,dropped:c}}(a.finalMarkdown);c.dropped.length>0&&(a.finalMarkdown=c.markdown,d+=c.dropped.length,b.push(`空壳标题清除(无直接正文且下一行为同级/更高级标题):${c.dropped.slice(0,8).join("、")}${c.dropped.length>8?` 等 ${c.dropped.length} 处`:""}——按 4.55.25 口径「没有内容就不要出现该标题」,规划小节缺节由终检「规划小节未落位」如实报出并交缺节补写轮`))}let e=(0,au.av)(a.finalMarkdown);e.markdown!==a.finalMarkdown&&(a.finalMarkdown=e.markdown,d+=e.splitCount,b.push(`超长段落切分:消除 >380 字符段落 ${e.splitCount} 处`));{let c=(a.truthValues||[]).flatMap(a=>(a.superseded||[]).map(b=>({superseded:b,effective:a.value,scope:[a.attribute],evidence:a.evidence,kind:"override"})));if(c.length>0){let e=(0,ax.M0)(a.finalMarkdown,c);e.applied.length>0&&(a.finalMarkdown=e.text,d+=e.applied.length,b.push(`现行口径落地:${e.applied.length} 处(${[...new Set(e.applied.map(a=>`${a.from}→${a.to}`))].slice(0,3).join("、")})`))}}{let c=(0,aw.PA)(a.finalMarkdown);c.fixedCount>0&&(a.finalMarkdown=c.markdown,d+=c.fixedCount,b.push(`小节编号重放:${c.fixedCount} 处(删除/合并小节后的编号空档收口)`))}let f=(0,w._D)(a.finalMarkdown);f.fixedCount>0&&(a.finalMarkdown=f.markdown,d+=f.fixedCount,b.push(...f.details)),(0,g.kD)(a.generationDiagnostics,d);let h=b.length>0,i=(0,k.X5)({type:"validation",roleId:"delivery-structure-closure",status:"success",message:h?`交付结构收口:${b.join(";")}`:"交付结构收口核对通过:目录与正文一致、无超长段落",details:h?b:void 0},{subtitle:"交付结构收口"});(0,l.Wl)(a,{batch:"finalize.repairRounds",stage:i}),h&&await a.recomputeFinalValidationBundle(),a.emitProgress(a.finalChapterDrafts)}var az=c(10751),aA=c(40299),aB=c(93675),aC=c(65667);async function aD(a){let b=await (0,X.KI)(a.finalChapterDrafts,a.factsModel,a.scopeConflicts);a.laborPeakAuthority=(0,az.yB)(a.blueprintData),a.greeningMaintenanceAuthority=(0,w.Dq)(a.factsModel),b.fixedCount>0&&(a.finalMarkdown=a.rebuildFinalMarkdown());let c=(0,w.qG)(a.finalChapterDrafts);a.surfaceFixContext={laborPeakAuthority:a.laborPeakAuthority,phaseLaborAuthorities:(0,az.i2)(a.blueprintData),greeningMaintenanceAuthority:a.greeningMaintenanceAuthority,resourceBreakdownAuthority:(0,aC.re)(a.blueprintData,a.billFactLock),supportFormAuthority:"slope"===a.supportAuthority?"放坡":"pile"===a.supportAuthority?"钢板桩":void 0,decisionLockEntries:a.decisionLockEntries,plannedSectionTitles:[...new Set([...(a.effectiveChapters||[]).flatMap(a=>a.sections||[]),...a.template.chapters.flatMap(a=>a.sections||[]),...a.finalChapterDrafts.flatMap(a=>a.sections||[])].filter(Boolean))],equipmentAuthorities:(0,az.Be)(a.blueprintData),reconciliationInput:{billFactLock:a.billFactLock,blueprintData:a.blueprintData,factsModel:a.factsModel}};let d=new Map,e=(a,b)=>{b>0&&d.set(a,(d.get(a)??0)+b)},f=0;for(let b of a.finalChapterDrafts){f+=1;let c={...a.surfaceFixContext,chapterNumber:f};for(let a of aB.a){if(!a.stage5)continue;let d=(0,w.gD)(b=>a.fix(b,c),b.content,2);d.fixedCount>0&&(b.content=d.markdown,e(a.key,d.fixedCount))}}let h=a=>d.get(a)??0,i=h("table-line-residue"),j=h("finish-thickness"),m=h("labor-peak"),n=h("phase-labor-values"),o=h("resource-breakdown"),p=h("ambiguous-either-or"),q=h("self-undermining"),r=h("tender-meta-language"),s=h("formal-source-residue"),t=h("duplicate-response-line"),u=h("atlas-reference"),v=h("meta-discourse"),y=h("formula-residue"),z=h("paragraph-opening-repeat"),A=h("truncated-sentence"),B=h("internal-table-row-dup"),C=h("greening-maintenance"),D=h("paragraph-tail-repeat"),E=h("slot-depth-value"),F=h("duplicate-basic-info-tables"),G=h("fallback-placeholder-rows"),H=h("heading-uncovered-items"),I=h("forbidden-configuration"),J=h("templated-labels"),K=h("structure-integrity"),L=h("repeated-words"),M=h("collision-numbered-heading"),N=h("inverted-date-range"),O=h("internal-term-heading"),P=h("section-renumber");if(c.removedCount>0||d.size>0){a.finalMarkdown=a.rebuildFinalMarkdown();let b=(0,k.X5)({type:"validation",roleId:"deterministic-surface-fix",status:"success",message:`交付前确定性清洗:跨章表格去重 ${c.removedCount} 行、断行残片合并 ${i} 处、装饰层厚度修复 ${j} 处、埋深槽位错位删除 ${E} 处、劳动力峰值统一 ${m} 处、阶段劳动力统一 ${n} 处、资源数值统一 ${o} 处、两可表述归一 ${p} 处、段首机械重复剥离 ${z} 处、截断句残留收敛 ${A} 处、元话语声明清洗 ${v} 处、公式形态清洗 ${y} 处、自伤句式改写 ${q} 处、招标元语言清理 ${r} 处、资料载体残片清理 ${s} 处、重复响应行去重 ${t} 行、图集引用清洗 ${u} 处、表内重复行删除 ${B} 行、基础信息表合并 ${F} 组、兜底话术表行删除 ${G} 行、绿化养护期统一 ${C} 处、标题工程类别覆盖修正 ${H} 处、配置禁用词清洗 ${I} 处、小节编号重放 ${P} 行、段内句级复读剥离 ${D} 处、模板标签清洗 ${J} 处、结构完整性清理 ${K} 处、重复编号标题删除 ${M} 行、倒置日期区间修复 ${N} 处、内部术语标题替换 ${O} 处、叠词收敛 ${L} 处`},{subtitle:"交付前确定性清洗"});(0,l.Wl)(a,{batch:"finalize.repairRounds",stage:b})}let Q=await (0,X.Yb)(a.finalMarkdown,a.factsModel,a.scopeConflicts);Q.fixedCount>0&&(a.finalMarkdown=Q.markdown);let R=[];a.blueprintData&&(R=(await (0,x.AA)(a.finalMarkdown,a.blueprintData,{diagnostics:a.generationDiagnostics,signal:a.signal,onAdjudication:b=>{console.log(`[gen] citation-adjudication(stage5): 候选 ${b.total} 条(冲突 ${b.conflicts}、未决 ${b.uncertain}、一致 ${b.consistent})`);let c=(0,k.X5)({type:"validation",roleId:"citation-adjudication",status:b.conflicts>0?"failed":"success",message:`蓝图引用语义判定:候选 ${b.total} 条(冲突 ${b.conflicts}、未决 ${b.uncertain}、一致 ${b.consistent})${b.unavailable?`;判定不可用:${b.unavailable}`:""}`,details:b.records.filter(a=>"consistent"!==a.conclusion).slice(0,20).map(a=>`[${a.conclusion}] ${a.subject}:${a.rationale}`)},{subtitle:"交付前确定性清洗"});(0,l.Wl)(a,{batch:"finalize.repairRounds",stage:c})}})).anchors);let S=(0,w.fE)(a.finalMarkdown,{authorityIndex:a.blueprintData?(0,az.IV)(a.blueprintData):void 0,scheduleAuthority:a.scheduleAuthority,assemblyRateAuthority:a.assemblyRateAuthority,supportAuthority:a.supportAuthority,quantityAnchors:R});if(S.fixedCount>0&&(a.finalMarkdown=S.markdown),b.fixedCount>0||Q.fixedCount>0||S.fixedCount>0){await a.recomputeFinalValidationBundle();let c=b.fixedCount+Q.fixedCount+S.fixedCount,d=[...new Set([...b.details,...Q.details,...S.details])],e=(0,k.X5)({type:"validation",roleId:"deterministic-consistency-fix",status:"success",message:`交付前确定性清洗:${c} 处(${d.slice(0,4).join("、")})`,details:d.slice(4)},{subtitle:"交付前确定性清洗"});(0,l.Wl)(a,{batch:"finalize.repairRounds",stage:e})}let T=(0,aA.K7)(a.finalMarkdown);if(T!==a.finalMarkdown){a.finalMarkdown=T,(0,g.kD)(a.generationDiagnostics,1),await a.recomputeFinalValidationBundle();let b=(0,k.X5)({type:"validation",roleId:"formal-source-clean",status:"success",message:"来源罗列话术确定性清洗兜底:最终成稿来源罗列残留已收敛"},{subtitle:"交付前确定性清洗"});(0,l.Wl)(a,{batch:"finalize.repairRounds",stage:b})}(0,g.kD)(a.generationDiagnostics,c.removedCount+[...d.values()].reduce((a,b)=>a+b,0)+b.fixedCount+Q.fixedCount+S.fixedCount)}var aE=c(54185),aF=c(98632);async function aG(a){let b=function(a){let b=a.split("\n"),c=[],d="(文首)";b.forEach((a,b)=>{let e=a.trim();/^##\s+/u.test(e)&&(d=e),c[b]=d});let e=[],f=[],g=new Map,h=0,i=0;for(let b of(0,aF.je)(a)){let a=b.occurrences;if(a.length<2)continue;let d=1===new Set(a.map(a=>c[a.lineIndex])).size,j=aE.Lw.test(a[0].raw);if(!d&&!j){f.push(a[0].raw);continue}for(let b of a.slice(1)){let a=g.get(b.lineIndex)||[];a.push({start:b.start,end:b.end}),g.set(b.lineIndex,a),e.push(b.raw),d?h+=1:i+=1}}if(0===e.length)return{markdown:a,removedCount:0,removedSentences:e,keptSentences:f,sameChapterRemoved:h,generalizedRemoved:i};for(let[a,c]of g){let d=b[a];for(let a of c.sort((a,b)=>b.start-a.start)){let b=a.start;for(;b>0&&/\s/u.test(d[b-1]);)b-=1;let c=a.end;for(;c<d.length&&/\s/u.test(d[c]);)c+=1;/[。;;]/u.test(d[c]||"")&&(c+=1),d=d.slice(0,b)+d.slice(c)}b[a]=""===d.trim()?"":d.replace(/^[ \t]+/u,"").replace(/[ \t]+$/u,"")}return{markdown:b.join("\n").replace(/\n{4,}/gu,"\n\n\n"),removedCount:e.length,removedSentences:e,keptSentences:f,sameChapterRemoved:h,generalizedRemoved:i}}(a.finalMarkdown),c=b.removedSentences.slice(0,3).map(a=>`复读坍塌:「${a.slice(0,40)}」`);b.keptSentences.length>0&&c.push(`跨章业务复读保留 ${b.keptSentences.length} 种(合理重申不坍塌)`);let d=(0,k.X5)({type:"validation",roleId:"duplicate-sentence-collapse",status:"success",message:b.removedCount>0?`句级复读坍塌:完全重复句保首次删后续 ${b.removedCount} 处(同章复读 ${b.sameChapterRemoved} 处、跨章泛化归口复读 ${b.generalizedRemoved} 处)`:"句级复读核对通过:无完全重复句残留",details:c.length>0?c:void 0},{subtitle:"模板化清理收口"});(0,l.Wl)(a,{batch:"finalize.repairRounds",stage:d}),b.removedCount>0&&(a.finalMarkdown=b.markdown,await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts)}var aH=c(37047),aI=c(7148),aJ=c(31530),aK=c(42750),aL=c(12863),aM=c(75251);function aN(a,b){return Math.abs(a-b)<=.01+1e-6*Math.max(Math.abs(a),Math.abs(b))}function aO(a,b){return!!aN(a,b)||Number.isInteger(a)&&(Math.trunc(b)===a||Math.round(b)===a)}function aP(a){let b=(a||"").trim().toLowerCase();return(0,aI.Sn)(b)}let aQ=/^([^。;;\n|]{0,12}?)([\d,,]+(?:\.\d+)?)\s*(座|个|套|处|盏|棵|株|樘|扇|根|块|片|组|件|孔|间|栋|幢|户|米|m|km|公里|平方米|m2|㎡|m²|立方米|m3|m³|kg|吨|t)(?![a-zA-Z0-9²³])/u;function aR(a,b){let c=[];if(!b||0===b.entries.length)return c;let d=b.entries.map(a=>({...a,name:(a.name||"").trim()})).filter(a=>a.name.length>=2&&!aM.e.test(a.name)&&Number.isFinite(a.quantity)&&a.quantity>0);if(0===d.length)return c;let e=new Map;for(let a of d){let b=e.get(a.name);b?b.push(a):e.set(a.name,[a])}let f=[];for(let b of e.keys())for(let[c,d]of[[(0,aL.Lp)(b),!0],[(0,aL.nv)(b),!1]]){let e=RegExp(c,"gu");for(let c of a.matchAll(e)){let a=c.index??0;f.push({name:b,start:a,end:a+c[0].length,strict:d})}}f.sort((a,b)=>(a.strict!==b.strict?a.strict?-1:1:0)||a.start-b.start||b.end-b.start-(a.end-a.start)||b.name.length-a.name.length);let g=[];for(let b of f){let f=b.start,h=b.end;if(g.some(a=>f<a.end&&h>a.start)||(g.push({start:f,end:h}),/\d$/u.test(b.name)&&/^[\d.]/u.test(a.slice(h,h+1))||"量"===a.slice(h,h+1)))continue;let i=a.slice(h,h+20),j=aQ.exec(i);if(!j||aM.As.test(j[1]))continue;let k=Number.parseFloat(j[2].replace(/[,,]/gu,""));if(!Number.isFinite(k))continue;let l=aP(j[3]),m=e.get(b.name)??[],n=m.map(a=>a.quantity),o=d.find(a=>a.name!==b.name&&aN(a.quantity,k)&&aP(a.unit)===l),p=j[1].length;c.push({name:b.name,value:k,unit:l,valueText:j[2],valueStart:h+p,sameNameEntries:m,sameNameQuantities:n,foreignEntry:o})}return c}async function aS(a,b){let c=[],d=[],e=[],f=await (0,aK.d8)(a);if(!f.degraded)for(let g of f.groups){let f=(0,aK.G0)(g,{markdown:a,billFactLock:b.billFactLock,blueprintQuantities:b.blueprintQuantities});if("distinct-lock-entries"===f.verdict){d.push(`“${g.concept}”对应${f.entries}`);continue}if("no-anchor"===f.verdict){e.push(`“${g.concept}”:${[...new Set(g.values.map(a=>a.raw))].slice(0,3).join("、")}`);continue}for(let b of f.nonLock)for(let d of b.occurrences){let h=d.matchIndex+d.valueOffset,i=a.slice(Math.max(0,h-40),h+d.valueText.length+40),j=(0,aJ.Rd)({authorityOwner:f.entryName,bodyLocation:g.concept,bodyWindow:i,found:b.raw,authority:`${f.lockValue}${f.lockUnit||""}`});if(!j.allowed){e.push(`“${g.concept}” ${b.raw}→${f.lockValue}${f.lockUnit||""} 未过统一改写闸门(${j.reason}),保留检测不改正文`);continue}c.push({start:h,end:h+d.valueText.length,replacement:String(f.lockValue),detail:`参数口径“${b.concept}” ${b.raw}→${f.lockValue}${f.lockUnit}(以工程量清单条目「${f.entryName}」锁定口径为准)`,concept:g.concept})}}for(let d of(0,w.mB)(a,b.specAuthorityMap))d.replacement&&c.push({...d.replacement,location:d.location});for(let d of aR(a,b.billFactLock)){if(d.sameNameQuantities.some(a=>aO(d.value,a))||!d.foreignEntry)continue;if(1!==d.sameNameEntries.length){let a=[...new Set(d.sameNameEntries.map(a=>`${a.quantity}${a.unit}`))].slice(0,3).join("、");e.push(`“${d.name}”同名清单条目 ${d.sameNameEntries.length} 条(如 ${a} 等),正文 ${d.value}${d.unit} 无法确定性替换,交 LLM 定向修复`);continue}let b=d.sameNameEntries[0];if(aP(d.unit)!==aP(b.unit))continue;let f=(0,aJ.Rd)({authorityOwner:d.name,bodyLocation:d.name,bodyWindow:a.slice(Math.max(0,d.valueStart-40),d.valueStart+d.valueText.length+40),found:`${d.value}${d.unit}`,authority:`${b.quantity}${b.unit}`,bindingKind:"sameName"});if(!f.allowed){e.push(`“${d.name}” ${d.value}${d.unit}→${b.quantity}${b.unit} 未过统一改写闸门(${f.reason}),保留检测不改正文`);continue}c.push({start:d.valueStart,end:d.valueStart+d.valueText.length,replacement:String(b.quantity),detail:`名称-数值绑定「${d.name}」 ${d.value}${d.unit}→${b.quantity}${b.unit}(清单条目「${d.name}」权威口径)`,binding:d.name})}if(0===c.length)return{replacements:[],falsePositiveGroups:d,noAnchorGroups:e,details:[]};let g=(0,w.gk)(a,c).markdown,h=new Set,i=await (0,aK.d8)(g);if(!i.degraded){let a=new Set(i.groups.map(a=>a.concept));for(let b of new Set(c.filter(a=>a.concept).map(a=>a.concept)))a.has(b)&&(c.forEach((a,c)=>{a.concept===b&&h.add(c)}),e.push(`“${b}”锁值替换复检未清零,已回滚交 LLM 定向修复`))}let j=new Map;for(let a of c)a.location&&j.set(a.location,(j.get(a.location)||0)+1);if(j.size>0){let a=(0,w.mB)(g,b.specAuthorityMap),d=new Map;for(let b of a)b.replacement&&d.set(b.location,(d.get(b.location)||0)+1);for(let[a,b]of j)(d.get(a)||0)>=b&&(c.forEach((b,c)=>{b.location===a&&h.add(c)}),e.push(`“${a}”规格替换复检未减数,已回滚交 LLM 定向修复`))}let k=new Set(aR(g,b.billFactLock).filter(a=>1===a.sameNameEntries.length&&a.foreignEntry&&aP(a.unit)===aP(a.sameNameEntries[0].unit)&&!a.sameNameQuantities.some(b=>aO(a.value,b))).map(a=>a.name));for(let a of new Set(c.filter(a=>a.binding).map(a=>a.binding)))k.has(a)&&(c.forEach((b,c)=>{b.binding===a&&h.add(c)}),e.push(`“${a}”名称-数值绑定替换复检未清零,已回滚交 LLM 定向修复`));let l=[...new Set(c.filter((a,b)=>!h.has(b)).map(a=>a.detail))].slice(0,12);return{replacements:c.filter((a,b)=>!h.has(b)).map(a=>({start:a.start,end:a.end,replacement:a.replacement,detail:a.detail})),falsePositiveGroups:d,noAnchorGroups:e,details:l}}var aT=c(71001),aU=c(64297),aV=c(99956);let aW={type:"object",required:["conflicts"],properties:{conflicts:{type:"array",required:!0,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 aX(a,b={}){let c=function(a){let b=[];for(let c of a.split(/\r?\n/u)){let a=c.trim();if(a){if(/^\|/u.test(a)&&/[\d]/u.test(a)){b.push(a.slice(0,160));continue}if(!/^#{1,6}\s/u.test(a))for(let c of a.split(/(?<=[。;;])/u)){let a=c.trim();a.length>=6&&a.length<=160&&/[\d]/u.test(a)&&b.push(a)}}}let c=[...new Set(b)],d=function(){let a=process.env.DOCUMENT_CONSISTENCY_SAMPLE_LIMIT;if(void 0===a||""===a)return 120;if("0"===a)return 200;let b=Number(a);return Number.isFinite(b)&&b>0?Math.floor(b):120}();return c.length<=d?c:c.map((a,b)=>({sentence:a,index:b,density:(a.match(/[\d,]+(?:\.\d+)?/gu)||[]).length})).sort((a,b)=>b.density-a.density||a.index-b.index).slice(0,d).sort((a,b)=>a.index-b.index).map(a=>a.sentence)}(a);if(c.length<2)return{conflicts:[]};let d={},e=await (0,aV.bb)([(0,aA.y4)("你是施工组织设计数据一致性审查器。"),"给定全文含数值的句子/表格行清单(编号与内容),找出互相矛盾的数值对:\n- 同一口径必须一致而实际数值不同:劳动力峰值多处不一致、同一面积两处数字不同、总工期与分项工期冲突、同一节点日期两处不一致、表格合计与明细之和不等、人数\xd7工期与总工日不自洽;\n- 只报确定的矛盾(itemA 与 itemB 明确矛盾且置信度 ≥0.8),不得臆造;\n- 不同口径的数值不算矛盾:建筑面积 vs 占地面积、不同单位的表述;分阶段各期人数互比不算矛盾(各阶段人数不同是正常配置);\n- 但总量控制上限与分阶段峰值必须自洽:“高峰期总人数控制在X人/高峰总人数X人以内/控制在X人以下”与任何“高峰投入Y人/阶段高峰Y人/峰值Y人”(Y>X)构成矛盾,必须上报;\nitemA/itemB 必须是清单中真实出现的原文片段(逐字引用编号对应句子或表格行的关键片段,含数值)。\n只输出 JSON,不得输出其他内容。"].join("\n"),c.map((a,b)=>`${b+1}. ${a}`).join("\n"),{maxTokens:2500,temperature:0,signal:b.signal,diagnostics:b.diagnostics,schema:aW,taskKind:(0,aV.TO)(),outFailure:d});return e?{conflicts:(e.conflicts||[]).filter(a=>"string"==typeof a.itemA&&"string"==typeof a.itemB&&a.itemA.trim()&&a.itemB.trim()).filter(a=>(a.confidence??0)>=.7)}:{conflicts:[],failure:d.value||"LLM 未返回有效结果"}}var aY=c(43378),aZ=c(68402),a$=c(52922),a_=c(3063);let a0=new Set;function a1(a,b,c,d){"no-doc-id"!==(0,l.Wl)({documentId:a?.documentId},{batch:b,stage:c,...void 0!==d?{round:d}:{},...a?.baseDir?{baseDir:a.baseDir}:{}}).skippedNodes||a0.has(b)||(a0.add(b),console.warn(`[p0c] ${b}:本次调用未带 docId,节点日志未写——该批节点在画布上缺席,阶段视图里也不会出现(阶段视图已改为节点日志的投影,没有第二条写入路径兜底)。`))}let a2=/两可|按图纸|资料[^。;;\n]{0,14}(?:未明确|两可|冲突)|支护[^。;;\n]{0,10}并存/u;async function a3(a){let{chapterDraftsFinal:b,emitProgress:c}=a,d=a.globalConsistencyIssues,e=0,f=0;for(let a of b){let b=a.content.split(/\r?\n/u).length,c=(0,w.lR)(a.content),d=(0,w.QM)(c.markdown),g=(0,w.Vc)(d.markdown);b-g.markdown.split(/\r?\n/u).length>0&&(e+=c.removedCount+d.removedCount,f+=g.removedCount,a.content=g.markdown)}if(e>0||f>0){let g=b.map(a=>a.content).join("\n\n"),h=[...(0,w.ub)(g),...(0,w.cl)(g)].map(a=>`${a.message};${a.suggestion||""}`);d=[...new Set([...d.filter(a=>!/表格重复|段落完全重复/u.test(a)),...h])];let i=[e>0?`重复表格 ${e} 行`:"",f>0?`重复段落 ${f} 行`:""].filter(Boolean).join("、");a1(a.nodeEmit,"finalize.qualityGates",(0,k.X5)({type:"llm_review",roleId:"post-table-dedup",status:"success",message:`补表后确定性去重:${i}`},{subtitle:"表格执行率核验"})),c(b)}return d}async function a4(a,b){let{chapterDraftsFinal:c,template:d,repairPromptTexts:e,requirement:f,signal:h,generationDiagnostics:i,emitProgress:j,withProgressHeartbeat:l,bidComposition:m}=a,n=a=>!b||!b.plannedChapterKeys.has((0,av.YZ)(a.title)),o=c.filter(n).map(a=>({chapter:a,tableCount:(0,aA.ao)(a.content),blocks:(0,aA.wV)(a.content)})).filter(a=>a.tableCount>0);if(0===o.length)return{tableFixApplied:!1};let q=b?"无计划表格修复":"正文拆表修复",r=b?"本章未列入系统表格计划(正文表格须来自系统表格计划,不得自设)":"招标正文禁表(显式禁表句)";a1(a.nodeEmit,"finalize.qualityGates",(0,k.X5)({type:"llm_review",roleId:"table-execution-repair",status:"running",message:`${q}:${o.length} 个章节正文残留表格(${r})`},{subtitle:q})),j(c);let s=0,t=[],u=async a=>{let{chapter:c,tableCount:j,blocks:k}=a;return(0,E.b)({originalContent:c.content,repairRound:"table-execution-repair",diagnostics:i,beforeMetrics:[j],apply:async()=>{let a=await l(()=>(0,g.X6)(i,`body-table-dismantle:${c.id}`,()=>(0,g.l8)({template:d,chapter:{id:c.id,title:c.title,content:c.content,evidence:c.evidence||[],missingFacts:c.missingFacts||[],sections:c.sections},issues:[b?(0,p.zs)(j):(0,p.bh)(j)],promptTexts:e,requirement:f,forbidDrawingImages:!b||(0,p.kO)(m),bidComposition:m,diagnostics:i,signal:h,patchGuard:(0,g.XG)("table-execution-repair",i),anchorTexts:k.length>0?k:void 0,maxTokens:Math.min(12e3,Math.max(6e3,1600*k.length))})));return a.content&&a.content!==c.content?a.content:c.content},recheck:a=>[(0,aA.ao)(a)]})};(await Promise.allSettled(o.map(a=>u(a)))).forEach((a,b)=>{if("rejected"===a.status){if(h?.aborted)throw a.reason;t.push(`${o[b].chapter.title}:拆表修复异常(${a.reason instanceof Error?a.reason.message:"未知错误"})`);return}let c=a.value,{chapter:d}=o[b];if(c.rolledBack)return void t.push(`${d.title}:拆表后表格数不降反升,已回滚本轮修改`);c.content&&c.content!==d.content?(d.content=c.content,s+=1):t.push(`${d.title}:拆表 patch 未应用(${i?.llm.lastError||"无产出"})`)});let v=c.filter(n).reduce((a,b)=>a+(0,aA.ao)(b.content),0);return a1(a.nodeEmit,"finalize.qualityGates",(0,k.X5)({type:"llm_review",roleId:"table-execution-repair",status:v>0?"failed":"success",message:v>0?`${q}:${s} 章已改写,${b?"未授权章":"正文"}仍有 ${v} 处表格残留(终检门禁拦截)`:`${q}:${s} 章已改写,${b?"未授权章表格清零":"正文表格清零"}`,details:t},{subtitle:q})),j(c),{tableFixApplied:s>0}}async function a5(a){let{effectiveChapters:b,chapterDraftsFinal:c,template:d,repairPromptTexts:e,requirement:f,signal:h,generationDiagnostics:i,emitProgress:j,withProgressHeartbeat:l}=a;if((0,p._C)(a.bidComposition))return a4(a);let m=new Set(b.filter(a=>(a.tablePlans?.length||0)>0||(a.tableSections?.length||0)>0||(a.diagramRequirements?.length||0)>0).map(a=>(0,av.YZ)(a.title))),n=await a4(a,{plannedChapterKeys:m}),o=(0,aY.Xi)(b,c),q=n.tableFixApplied;if(o.length>0)for(let m=0;m<1&&o.length>0;m+=1){a1(a.nodeEmit,"finalize.repairHistory",(0,k.X5)({type:"llm_review",roleId:"table-execution-repair",status:"running",message:`表格执行率修复第 ${m+1} 轮(${o.length} 个章节缺表)`},{subtitle:"表格执行率修复"}),m+1),j(c);let n=0,p=[],r=o.flatMap(a=>{let b=c.find(b=>b.title===a.chapterTitle||a.chapterTitle.includes(b.title)||b.title.includes(a.chapterTitle));return b?[{gap:a,draft:b}]:[]}),s=async a=>{let{gap:j,draft:k}=a,m=[...new Set(j.plans.map(a=>a.section).filter(Boolean))],n=m.length>0?k.evidence.filter(a=>{let b=a.sectionTitle;return!b||m.some(a=>b===a||b.includes(a)||a.includes(b))}):k.evidence,o={id:k.id,title:k.title,content:k.content,evidence:n.length?n:k.evidence,missingFacts:k.missingFacts||[],sections:k.sections},p=`计划表格缺失(本章计划 ${j.planned} 张,正文实际检出 ${j.actual} 张):${j.plans.map(a=>`${a.title}(表头:${a.fields.map(a=>a.name).join("、")})`).join(";")}。必须按表头字段补齐这些 markdown 表格并紧跟相关小节输出,不得删除已有正文;每个表格前须有 1~2 句引导叙述说明表格作用与关键结论,表格不能替代小节正文;表格内项目特有数字、日期、工程量、规格必须来自项目资料或项目图谱,不得编造;人数、台班、进度时间等计划类数值必须原样引用蓝图权威锚点(劳动力峰值、工种构成、分阶段投入、机械台数、总工期节点),不得基于工程量或定额自行推算另设,不得留空、不得写“按需配置”等空话。`;return(0,E.b)({originalContent:k.content,repairRound:"table-execution-repair",diagnostics:i,beforeMetrics:[j.plans.length],apply:async()=>{let a=await l(()=>(0,g.X6)(i,`table-execution-repair:${k.id}`,()=>(0,g.l8)({template:d,chapter:o,issues:[p],promptTexts:e,requirement:f,forbidDrawingImages:!0,diagnostics:i,signal:h,patchGuard:(0,g.XG)("table-execution-repair",i),maxTokens:Math.min(12e3,Math.max(6e3,1200*j.plans.length))})));return a.content&&a.content!==k.content?a.content:k.content},recheck:a=>{let d=c.map(b=>b.id===k.id?{title:b.title,content:a,sections:b.sections}:b);return[(0,aY.Xi)(b,d).filter(a=>a.chapterTitle===k.title||a.chapterTitle===j.chapterTitle||k.title.includes(a.chapterTitle)||a.chapterTitle.includes(k.title)).reduce((a,b)=>a+b.plans.length,0)]}})},t=await Promise.allSettled(r.map(a=>s(a))),u=new Set;if(t.forEach((a,b)=>{if("rejected"===a.status){if(h?.aborted)throw a.reason;p.push(`${r[b].gap.chapterTitle}:修复异常(${a.reason instanceof Error?a.reason.message:"未知错误"})`);return}let c=a.value,{gap:d,draft:e}=r[b];if(c.rolledBack)return void p.push(`${d.chapterTitle}:修复后计划表格缺口增多,已回滚本轮修改`);c.content&&c.content!==e.content&&!u.has(e.id)?(e.content=c.content,u.add(e.id),n+=1):u.has(e.id)||p.push(`${d.chapterTitle}:缺 ${d.plans.map(a=>a.title).join("、")}(${i?.llm.lastError||"补表 patch 未应用"})`)}),0===n){a1(a.nodeEmit,"finalize.qualityGates",(0,k.X5)({type:"llm_review",roleId:"table-execution-repair",status:"failed",message:`表格执行率修复第 ${m+1} 轮:补表 patch 未应用(${o.length} 个章节缺表)`,details:p},{subtitle:"表格执行率修复"})),j(c);break}q=!0,j(c),o=(0,aY.Xi)(b,c),a1(a.nodeEmit,"finalize.repairHistory",(0,k.X5)({type:"llm_review",roleId:"table-execution-repair",status:o.length>0?"failed":"success",message:o.length>0?`表格执行率修复第 ${m+1} 轮完成,仍有 ${o.length} 个章节缺表`:`表格执行率修复第 ${m+1} 轮完成`},{subtitle:"表格执行率修复"}),m+1),a1(a.nodeEmit,"finalize.qualityGates",(0,k.X5)({type:"llm_review",roleId:"table-execution-review",status:o.length>0?"failed":"success",message:o.length>0?`表格执行率复检:仍有 ${o.length} 个章节缺表`:"表格执行率复检通过"},{subtitle:"表格执行率核验"}))}return{tableFixApplied:q}}function a6(a,b){if(!b)return!1;let c=/^##\s+(.+?)\s*$/mu.exec(a.content)?.[1];return b===a.title||b===c||a.content.includes(b)}async function a7(a){let{chapterDraftsFinal:b,template:c,repairPromptTexts:d,requirement:e,signal:f,generationDiagnostics:h,emitProgress:i,withProgressHeartbeat:j,bidComposition:l}=a,m=!1;for(let n=0;n<2;n+=1){let o=b.map(a=>a.content).join("\n\n"),p=await (0,a$.Bt)(o),q=await (0,a$.gE)(o),r=p.fillerSentences>0,s=q.countermeasures>0&&q.ratio<.5,t=(0,aE.P_)(o),u=(0,aE.C4)(o),v=[...(0,aE.p5)(o),...(0,aE.bo)(o)],w=(0,aE.uj)(o),x=(0,aZ.PW)(b),y=t.length>0,z=u.length>0,A=v.length>0,B=w.length>0,C=x.length>0;if(!r&&!s&&!y&&!z&&!A&&!B&&!C)break;let D=r?await (0,aZ.gf)(b):[];C&&D.push(...x);let F=D.length>0?(0,aZ.hq)(b,D):{deletedCount:0,deletedSentences:[],remaining:D};F.deletedCount>0&&console.error(`[gen][templating] 零信息句(口号/前缀)确定性删除 ${F.deletedCount} 处:${F.deletedSentences.slice(0,3).join(" / ")}${F.deletedSentences.length>3?" 等":""}`);let G=b.map(a=>a.content).join("\n\n"),H=new Map(b.map(a=>[a.id,a.content])),I=(s?q.entries.filter(a=>!a.attributed||!a.quantified).slice(0,20):[]).flatMap(a=>{let c=a.text.replace(/\s+/gu,""),d=b.find(a=>a.content.replace(/\s+/gu,"").includes(c));return d?[{chapter:d,text:a.text,missingAttribution:!a.attributed,missingTarget:!a.quantified}]:[]}),J=b.flatMap(a=>{let b=F.remaining.filter(b=>(b.chapterId||b.chapterTitle)===(a.id||a.title)),c=b.filter(a=>"prefix"!==a.channel).map(a=>a.sentence),d=b.filter(a=>"prefix"===a.channel).map(a=>a.sentence),e=I.filter(b=>b.chapter.id===a.id).map(a=>({text:a.text,missingAttribution:a.missingAttribution,missingTarget:a.missingTarget})),f=t.filter(b=>a6(a,b.chapterTitle)),g=u.filter(b=>a6(a,b.chapterTitle)),h=v.filter(b=>a6(a,b.chapterTitle)),i=w.filter(b=>a6(a,b.chapterTitle));return c.length>0||d.length>0||e.length>0||f.length>0||g.length>0||h.length>0||i.length>0?[{chapter:a,sentences:c,prefixSentences:d,difficulty:e,frames:f,flows:g,patterns:h,titles:i}]:[]});if(0===J.length){F.deletedCount>0&&(m=!0,a1(a.nodeEmit,"finalize.repairHistory",(0,k.X5)({type:"llm_review",roleId:"templating-repair",status:"success",message:`模板化修复第 ${n+1} 轮:确定性删除零信息句(口号/前缀)${F.deletedCount} 处(无剩余重写目标)`},{subtitle:"模板化修复"}),n+1),i(b));break}let K=[r?`套话句占比 ${(100*p.ratio).toFixed(1)}%${F.deletedCount>0?`(已确定性删除零信息句 ${F.deletedCount} 处)`:""}`:"",C?`模板化前缀句 ${x.length} 处`:"",s?`重难点双达标 ${(100*q.ratio).toFixed(0)}%`:"",y?`骨架指纹 ${t.length} 组`:"",z?`工序形式 ${u.length} 处`:"",A?`句模复读 ${v.length} 处`:"",B?`标题缺陷 ${w.length} 处`:""].filter(Boolean).join("、");a1(a.nodeEmit,"finalize.repairHistory",(0,k.X5)({type:"llm_review",roleId:"templating-repair",status:"running",message:`模板化修复第 ${n+1} 轮:${K}(${J.length} 章)`},{subtitle:"模板化修复"}),n+1),i(b);let L=0,M=async a=>{let b=[];a.sentences.length>0&&b.push(`第 1~${a.sentences.length} 条目标原文是本章已检出的空话套话句(零信息纯口号句已由系统确定性删除,此处为含信息或合规承诺类命中句):逐条原地改写为“责任岗位 + 执行动作 + 量化标准 + 检查频次 + 整改时限”式可核查措施,且每条改写句必须嵌入不少于 2 个项目实体(村名/工程量/规格,取自本章证据摘要);禁止以同义空话替换、禁止改写清单外内容、不得凭空编造数值;属必须保留的合规承诺句须具体化到可核查。`);let i=a.sentences.length+1;if(a.prefixSentences.length>0){let c=a.prefixSentences.map(()=>{let a=i;return i+=1,a});b.push(`第 ${c.join("、")} 条目标原文是模板化前缀导语句(句首为“本节/本章将/以下从”式元话语):删除前缀后直接从作业对象、执行动作、量化措施切入改写,句内工程信息(数值/规格/岗位/频次)必须全部保留;禁止以同义导语替换。`)}for(let c of a.difficulty){let a=[c.missingAttribution?"归因句(该难点的成因/风险来源)":"",c.missingTarget?"量化控制目标(数值+单位,来自本章证据摘要或行业规范,不得编造)":""].filter(Boolean).join("与");b.push(`第 ${i} 条目标原文是重难点分析条目,缺少${c.missingAttribution&&c.missingTarget?"成因归因与量化控制目标":a}:保留条目原有事实与数值,在其内补充${a}。`),i+=1}for(let c of a.frames){let a=c.sentences.map(()=>{let a=i;return i+=1,a});b.push(`第 ${a.join("、")} 条目标原文含全篇复读骨架「${c.fingerprintLabel}」(全篇 ${c.totalCount} 处,验收上限 ${c.cap} 处):逐句改写为差异化句式(每条句子的动词与语序不得雷同,禁止集中复用同一替换说法),保留原句全部事实信息(岗位、数值、频次不得丢失)。`)}for(let c of a.flows)b.push(`第 ${i} 条目标原文是小节标题,其所在小节「${c.blockTitle}」的工序顺序表达当前为【${c.currentForm}】形式且与相邻小节同形式:将该小节的工序顺序表达改写为【${c.targetForm}】形式,内容与数值保持不变(工艺参数不得删减)。`),i+=1;for(let c of a.patterns){let a=c.sentences.map(()=>{let a=i;return i+=1,a});b.push(`第 ${a.join("、")} 条目标原文是同一句式模版在全篇复读的句子(该句式全篇 ${c.totalCount} 处,全篇保留额度 ${c.cap} 处):逐句改写为自然多样表达(变换句式结构与连接词组织,或拆分为多句;各句改写方向须彼此不同,禁止集中复用同一替换句式),保持原句全部工序顺序、数值与验收事实不变。`)}for(let c of a.titles)b.push(`第 ${i} 条目标原文是小节标题(${c.reason}):将该小节标题重命名为完整表达本小节内容的正式名称,正文内容不变;禁止使用“施工概况/施工流程/施工方法”等结构标签词充当标题。`),i+=1;return b.push("清单之外的内容一律不得改动;不得删除任何小节标题、表格与数值参数。"),j(()=>(0,g.X6)(h,`templating-repair:${a.chapter.id}`,()=>(0,g.l8)({template:c,chapter:{id:a.chapter.id,title:a.chapter.title,content:a.chapter.content,evidence:a.chapter.evidence||[],missingFacts:a.chapter.missingFacts||[],sections:a.chapter.sections},issues:[b.join("\n")],promptTexts:d,requirement:e,forbidDrawingImages:!0,bidComposition:l,diagnostics:h,signal:f,patchGuard:(0,g.XG)("templating-repair",h),anchorTexts:[...a.sentences,...a.prefixSentences,...a.difficulty.map(a=>a.text),...a.frames.flatMap(a=>a.sentences),...a.flows.map(a=>a.blockTitle),...a.patterns.flatMap(a=>a.sentences),...a.titles.map(a=>a.title)],maxTokens:6e3,evidenceChars:5e3})))},N=await (0,E.b)({originalContent:G,repairRound:"templating-repair",diagnostics:h,beforeMetrics:[p.ratio,q.ratio,t.length,u.length,w.length,(0,a$._Q)(o).length,v.length],apply:async()=>((await Promise.allSettled(J.map(a=>M(a)))).forEach((a,b)=>{if("rejected"===a.status){if(f?.aborted)throw a.reason;console.error("[gen] templating repair failed:",a.reason);return}let c=a.value,{chapter:d}=J[b];c.content&&c.content!==d.content&&(d.content=c.content,L+=1)}),i(b),b.map(a=>a.content).join("\n\n")),recheck:async a=>{let b=await (0,a$.Bt)(a),c=await (0,a$.gE)(a);return[b.ratio,c.ratio,(0,aE.P_)(a).length,(0,aE.C4)(a).length,(0,aE.uj)(a).length,(0,a$._Q)(a).length,(0,aE.p5)(a).length,(0,aE.bo)(a).length]},shouldRollback:(a,b)=>b[0]>a[0]+.01&&!(b[1]>a[1]+.01)||b.slice(2).reduce((a,b)=>a+b,0)>a.slice(2).reduce((a,b)=>a+b,0)});if(0===L&&0===F.deletedCount){a1(a.nodeEmit,"finalize.repairHistory",(0,k.X5)({type:"llm_review",roleId:"templating-repair",status:"failed",message:`模板化修复第 ${n+1} 轮:修复 patch 未落地(${J.length} 章锚点失配或 LLM 未产出)`,details:[`未收敛维度:${K}`]},{subtitle:"模板化修复"}),n+1);break}if(N.rolledBack){for(let a of b){let b=H.get(a.id);void 0!==b&&(a.content=b)}a1(a.nodeEmit,"finalize.repairHistory",(0,k.X5)({type:"llm_review",roleId:"templating-repair",status:"failed",message:`模板化修复第 ${n+1} 轮:修复后指标变差已回滚本轮修改(套话 ${(100*N.beforeMetrics[0]).toFixed(1)}%→${(100*N.afterMetrics[0]).toFixed(1)}%,治理缺陷目标 ${N.beforeMetrics.slice(2).reduce((a,b)=>a+b,0)}→${N.afterMetrics.slice(2).reduce((a,b)=>a+b,0)})`,details:["LLM 重写未收敛,回滚保留修复前正文"]},{subtitle:"模板化修复"}),n+1),i(b);break}m=!0}if(m){let c=b.map(a=>a.content).join("\n\n"),d=await (0,a$.Bt)(c),e=await (0,a$.gE)(c),f=(0,aE.P_)(c),g=(0,aE.C4)(c),h=(0,aE.p5)(c),j=(0,aE.bo)(c),l=(0,aE.uj)(c),m=(0,a$._Q)(c),n=d.ratio<.1&&(!e.heavyTemplated||0===e.countermeasures)&&0===f.length&&0===g.length&&0===h.length&&0===j.length&&0===l.length&&0===m.length,o=[f.length>0?`骨架指纹 ${[...new Set(f.map(a=>`${a.fingerprintLabel}\xd7${a.totalCount}`))].join("、")}`:"",g.length>0?`工序形式相邻重复 ${g.length} 处`:"",h.length>0?`句模复读 ${[...new Set(h.map(a=>`${a.patternLabel}\xd7${a.totalCount}`))].join("、")}`:"",j.length>0?`句尾复读 ${[...new Set(j.map(a=>`${a.patternLabel}\xd7${a.totalCount}`))].join("、")}`:"",l.length>0?`标题缺陷 ${l.length} 处`:"",m.length>0?`模板化前缀句 ${m.length} 处`:""].filter(Boolean).join(";");a1(a.nodeEmit,"finalize.qualityGates",(0,k.X5)({type:"llm_review",roleId:"templating-repair",status:n?"success":"failed",message:`模板化修复完成:套话句占比 ${(100*d.ratio).toFixed(1)}%(达标线 ≤10%),重难点归因+量化双达标 ${(100*e.ratio).toFixed(0)}%(达标线 ≥50%)${o?`,模板化残留:${o}`:""}`,details:n?[]:["未完全收敛:残留项先由确定性修复链(终检前)收敛;复核未清零的残留经终检检测器判定,仍不达标即列入终检复核清单(不阻断导出,宁缺毋假)"]},{subtitle:"模板化修复"})),i(b)}return{templatingFixApplied:m}}async function a8(a){let{chapterDraftsFinal:b,projectContext:c,template:d,repairPromptTexts:e,requirement:f,signal:h,generationDiagnostics:i,emitProgress:j,withProgressHeartbeat:l,bidComposition:m}=a,n=/^#{3,4}\s+(?:\d+(?:\.\d+)*\s+)?(?:项目主要施工\s*内容|主要施工\s*内容|主要分部分项工程施工方案|主要分部分项施工方案|主要施工方法)\s*$/u,o=!1,p=0,q=0,r=(0,at.sh)(c,b.flatMap(a=>a.evidence||[]));if(r.length>0){let a=/项目主要施工内容|主要施工内容|主要分部分项工程施工方案|主要分部分项施工方案|主要施工方法/u;for(let c of b){if(c.content.split("\n").some(a=>n.test(a.trim())))continue;let d=(c.sections||[]).find(b=>a.test(b));if(!d)continue;Array.isArray(c.sections)||(c.sections=[]);let e=c.sections.findIndex(b=>a.test(b)),f=e>=0?e+1:c.sections.length+1,g=`### ${b.indexOf(c)+1}.${f} ${d}`;c.content=`${c.content.replace(/\s+$/u,"")}
269
268
 
@@ -299,41 +298,42 @@ ${o}
299
298
  若表格首行就是分隔线(缺表头行),必须依据表格数据内容补写一行业务表头(每列一个业务字段名),再紧跟分隔线;表头不得使用泛化字段名。
300
299
  合计/小计/总计/累计行的空单元格一律填“—”(不适用语义);**其余单元格(含规格型号列)一律不得为空、不得用“—”等占位符**——规格型号必须写具体型号或额定参数(投标人自行选型的机械,选型结论即为应写的值),不得凭空编造型号。
301
300
  若表头第一列是表名(如“竣工清理与移交计划表”),把表名移到表格上方正文叙述中,表头从业务列名开始,并同步校正数据行列对齐。
302
- 保持表头结构与列数不变,不得新增、删除或合并小节;只修改缺陷表格相关局部文本。`,q=await (0,E.b)({originalContent:b.content,repairRound:"table-repair",diagnostics:a.generationDiagnostics,apply:async()=>{let c=(await a.withProgressHeartbeat(()=>(0,g.l8)({template:a.template,chapter:{id:b.id,title:b.title,content:b.content,evidence:b.evidence,missingFacts:b.missingFacts,sections:b.sections},issues:[f,h],promptTexts:p,requirement:a.requirement,forbidDrawingImages:!1,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,g.XG)("table-repair",a.generationDiagnostics)}))).content||b.content;return(0,bo.RT)(c,i).content},recheck:a=>[(0,X.NS)(a).filter(a=>"error"===a.level&&/空单元格|占位符单元格|列数不一致/u.test(a.message)&&a.message.includes(i)&&(!j||a.message.includes(j))).length]}),r=q.content;q.rolledBack||r===b.content||(a.finalChapterDrafts[d]={...b,content:m?(0,s.w_)(r,m):r},c+=1);let t=q.rolledBack||q.afterMetrics[0]>0,u=(0,k.X5)({type:"llm_review",roleId:`agent-table-fix-${b.id}-${e}`,status:t?"failed":"success",message:q.rolledBack?`表格数据修复已回滚:${b.title}(修复后缺陷增多,保留修复前正文)`:t?`表格数据修复未生效:${b.title}`:`表格数据修复完成:${b.title}`,details:[f]},{subtitle:"表格数据修复"});(0,l.Wl)(a,{batch:"finalize.repairRounds",stage:u}),a.emitProgress(a.finalChapterDrafts)}}))}c>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle())}}async function b2(a){let b=(0,aZ.PW)(a.finalChapterDrafts),c=b.length>0?(0,aZ.hq)(a.finalChapterDrafts,b):{deletedCount:0,deletedSentences:[],remaining:b},d=0;for(let b of a.finalChapterDrafts){if(!b.content?.trim())continue;let a=(0,w.Vc)(b.content);a.removedCount>0&&(b.content=a.markdown,d+=a.removedCount)}let e=c.deletedCount+d,f=(0,k.X5)({type:"validation",roleId:"templating-sweep",status:"success",message:e>0?`模板化链尾清理:零信息前缀句删除 ${c.deletedCount} 处、重复段落去重 ${d} 处`:"模板化链尾核对通过:无零信息前缀句与重复段落残留",details:c.deletedSentences.length>0?c.deletedSentences.slice(0,3).map(a=>`前缀句删除:「${a.slice(0,40)}」`):void 0},{subtitle:"模板化清理收口"});(0,l.Wl)(a,{batch:"finalize.repairRounds",stage:f}),e>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts)}async function b3(a){let b=function(a){let b,c=a.split("\n"),d=[];if(c.forEach((a,e)=>{let f=a.trim();/^##\s+/u.test(f)&&(b&&(b.endLine=e,d.push(b)),b={startLine:e,endLine:c.length,title:f.replace(/^#+\s*/u,"")})}),b&&d.push(b),0===d.length)return{markdown:a,prefixRemoved:0,prefixSentences:[],paragraphRemoved:0,targetCount:0};let e=d.map((a,b)=>({id:`md-chapter-${b}`,title:a.title,content:c.slice(a.startLine,a.endLine).join("\n"),evidence:[],missingFacts:[]})),f=(0,aZ.PW)(e),g=f.length>0?(0,aZ.hq)(e,f):{deletedCount:0,deletedSentences:[],remaining:f},h=0;for(let a of e){if(!a.content?.trim())continue;let b=(0,w.Vc)(a.content);b.removedCount>0&&(a.content=b.markdown,h+=b.removedCount)}if(0===g.deletedCount&&0===h)return{markdown:a,prefixRemoved:0,prefixSentences:[],paragraphRemoved:0,targetCount:f.length};let i=[...c];for(let a=d.length-1;a>=0;a-=1){let b=d[a];i.splice(b.startLine,b.endLine-b.startLine,...e[a].content.split("\n"))}return{markdown:i.join("\n"),prefixRemoved:g.deletedCount,prefixSentences:g.deletedSentences,paragraphRemoved:h,targetCount:f.length}}(a.finalMarkdown),c=b.prefixRemoved+b.paragraphRemoved,d=(0,k.X5)({type:"validation",roleId:"templating-tail-replay",status:"success",message:c>0?`模板化链尾重放(markdown):零信息前缀句删除 ${b.prefixRemoved} 处、重复段落去重 ${b.paragraphRemoved} 处`:"模板化链尾重放核对通过:无零信息前缀句与重复段落残留",details:b.prefixSentences.length>0?b.prefixSentences.slice(0,3).map(a=>`前缀句删除:「${a.slice(0,40)}」`):void 0},{subtitle:"模板化清理收口"});(0,l.Wl)(a,{batch:"finalize.repairRounds",stage:d}),c>0&&(a.finalMarkdown=b.markdown,await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts)}async function b4(a){let b=(0,A.tI)(a.finalMarkdown,a.truthValues||[]);if(0===b.inserted.length)return;a.finalMarkdown=b.markdown;let c=(0,k.X5)({type:"validation",roleId:"caliber-placement-backfill",status:"success",message:`口径链尾回填:${b.inserted.length} 项项目级口径在正文逐字缺位,已按真值层生效值补写(${b.inserted.map(a=>`${a.attribute}=${a.value}`).slice(0,6).join("、")})`},{subtitle:"口径回填"});(0,l.Wl)(a,{batch:"finalize.pipeline",parentId:(0,l.ku)("caliber-placement-backfill"),type:"round.fix",stage:c}),await a.recomputeFinalValidationBundle()}async function b5(a){let b=function(a){let b=a.finalMarkdown;if(!b)return{markdown:b,restored:0,labels:[]};let c=(0,D.F9)(b),e=(0,D.ay)(c),f=(0,D.bZ)(c);if(0===e.length&&0===f.length)return{markdown:b,restored:0,labels:[]};let g=b,h=0,i=[];for(let b of a.finalChapterDrafts)for(let a of(b.content??"").split(/(?<=[。;\n])/u)){let b=a.trim();if(b.length<8)continue;let c=(0,C.eI)(b).text;if(c===b||c.trim().length<8||!((0,D.ay)(b).some(a=>e.some(b=>(0,D._N)(a,b)))||(0,D.bZ)(b).some(a=>f.some(b=>(0,D.no)(a,b)))))continue;let j=function(a){let b=a.split(/([,,、;;])/u),c=[];for(let a=0;a<b.length;a+=2){let e=b[a]??"";if(O(e)&&!function(a){return!!O(a)&&!!((0,D.bZ)(a).length>0||(d||(d=RegExp(D.V2.source,"u")),d.test(a)))&&!O(a.replace(D.RO,"").replace(D.V2,""))}(e))continue;c.push(e);let f=b[a+1];f&&a+2<b.length&&c.push(f)}return c.join("").replace(/^[,,、]+/u,"").replace(/[,,、]+$/u,"")}(b);if(j===c||!g.includes(c)||g.includes(j))continue;let k=(0,D.ay)(j).filter(a=>!(0,D.ay)(c).some(b=>(0,D._N)(b,a)));if(0!==k.length||0!==(0,D.bZ)(j).length)for(let a of(g=g.replace(c,()=>j),h+=1,k)){let b=(0,D.Lb)(a);i.includes(b)||i.push(b)}}return 0===h||H(g)<H(b)?{markdown:b,restored:0,labels:[]}:{markdown:g,restored:h,labels:i}}(a);if(0===b.restored)return;a.finalMarkdown=b.markdown,await a.recomputeFinalValidationBundle();let c=`链尾编制依据引用回补:${b.restored} 处被链尾指向型清洗误删的标准引用小句按章草稿恢复(覆盖 ${b.labels.slice(0,6).join("、")}${b.labels.length>6?" 等":""})`;a.generationDiagnostics.llm.lastInfo=c,(0,l.Wl)(a,{batch:"finalize.pipeline",parentId:(0,l.ku)("basis-regulations-tail-citation-replay"),type:"round.fix",stage:(0,k.X5)({type:"reference",roleId:"basis-regulations-tail-citation-replay",status:"success",message:c,details:b.labels.slice(0,12)},{subtitle:"链尾编制依据引用回补"})})}async function b6(a){let b=function(a){let b=(0,D.hK)(a.finalMarkdown);if(0===b.usedNotDeclared.length)return{inserted:0,labels:[]};let c=(0,D.F9)(a.finalMarkdown);if(!c)return{inserted:0,labels:[]};let d=b.usedNotDeclared.filter(a=>!K(c,a));if(0===d.length)return{inserted:0,labels:[]};let e=M(a.finalMarkdown,d.map(b=>L(b,a.finalMarkdown)));return e?{inserted:d.length,labels:d.map(D.Dq),markdown:e}:{inserted:0,labels:[]}}(a);if(0===b.inserted||!b.markdown)return;a.finalMarkdown=b.markdown,await a.recomputeFinalValidationBundle();let c=`链尾编制依据回补:${b.inserted} 条引用未声明的标准补入编制依据小节(${b.labels.slice(0,6).join("、")})`;a.generationDiagnostics.llm.lastInfo=c,(0,l.Wl)(a,{batch:"finalize.pipeline",parentId:(0,l.ku)("basis-regulations-tail-backfill"),type:"round.fix",stage:(0,k.X5)({type:"reference",roleId:"basis-regulations-tail-backfill",status:"success",message:c,details:b.labels.slice(0,12)},{subtitle:"链尾编制依据回补"})})}var b7=c(25018),b8=c(67582);let b9={"fact-coverage":{read:a=>(0,s.br)(a.finalMarkdown,[...a.structuredFacts,...a.factsModel.preciseFacts]).length,caliber:"检测端 rebuildAndRecompute.ts:254 同函数同池(finalMarkdown \xd7 结构化事实池 + preciseFacts)。轮内 recheck 是章级(`uncoveredImportantFacts(content, 该章事实组)`)——**本读数是全文**,章级修完但别章仍缺时本读数不会归零(残余按全文口径登记,宁多不少)。"},"table-quality":{read:a=>(0,X.NS)(a.finalMarkdown).length,caliber:'检测端 documentFinalValidation.ts:367 同函数(finalMarkdown)。轮内 recheck 额外过滤 `level === "error"` 且限「空单元格/占位符单元格/列数不一致」三族 + 表锚点收窄——**本读数因此可能大于轮内残留**(warning 级表格缺陷也算欠活),方向是"宁可多跑一轮幂等修复"。'},"authority-audit-gap":{read:a=>{let b=a.authorityAuditReport;if(b)return(0,b8.Bg)(b).length},recomputeFirst:!0,caliber:"检测端 rebuildAndRecompute.ts:553 同一 issue 产出(审计报告由 recompute 路径刷新——故读数前必须重算)。轮内 recheck 是逐章「无来源数值句」计数,本读数是审计报告全量条目。"},"requirements-coverage":{read:a=>a.validationIssues.filter(a=>"blocker"===a.severity&&a.provenance?.detectorId==="requirements-coverage").length,recomputeFirst:!0,caliber:"与轮内入口过滤器逐字同源(requirementResponseRepair.ts:66 requirementResponseBlockers)。轮内 recheck 是「本章未满足条目数」,本读数是 recompute 后的 blocker 全量。"},"critical-section-depth":{read:a=>(0,z.Om)(a.finalChapterDrafts).length,caliber:"检测端 rebuildAndRecompute.ts:264 同函数(finalChapterDrafts)。轮内 recheck 是六族统一收口的**加权残余和**(含 emergency/major/division/参数义务/清单落位等 13 族),本读数只数主锚定一族——**主锚定清零而扩展锚定仍欠时,本循环不重跑该轮**(残留交终门禁照常复核)。"},"construction-org-control-loop":{read:a=>(0,U.Hl)(a.finalChapterDrafts).length,caliber:'检测端 documentFinalValidation.ts:390 同函数(finalChapterDrafts)。轮内 recheck 是 `controlLoopChainScan` 的缺失环节数(章级收窄),本读数是全量链接口缺陷条数,且**含 warning 级**(该族本身是 warning 通道)——读数比轮内大是可接受的,方向是"多跑一轮幂等修复"。'},"construction-org-professional-chain":{read:a=>(0,U.iX)({markdown:a.finalMarkdown,factsModel:a.factsModel,chapters:a.finalChapterDrafts}).length,caliber:"检测端 documentFinalValidation.ts:391 同函数同参(markdown \xd7 factsModel \xd7 chapters)。轮内 recheck 是 `professionalChainScan` 的加权缺陷数(章级收窄)。"},"document-budget":{read:a=>{let b=(0,j.yJ)(a.documentBudget,a.finalMarkdown);return b?Math.max(0,b.currentChars-b.targetChars):0},caliber:"检测端 budget.ts:341 `documentLengthOverflow`(检测这一族本身就用它),读数取 currentChars - targetChars(超出目标的字数)。"},"table-arithmetic-consistency":{read:a=>(0,w.qE)(a.finalMarkdown).length,caliber:"检测端 documentFinalValidation.ts:409 同函数(finalMarkdown)。轮内 recheck 是章级 `countTableArithmeticFindings(content)`(不自洽处数),本读数是全文 blocker 条数。"},"table-caption":{read:a=>(0,aA.XU)(a.finalMarkdown,(0,p._C)(a.bidComposition)).length,caliber:"检测端 documentFinalValidation.ts:484 同函数同参(markdown \xd7 bodyTableForbidden)。轮内 recheck 是章级 `extractTitlelessTableBlocks(content).length`(无题表数)。"},"planned-auto-spec-gate":{read:a=>(0,X.mR)(a.finalMarkdown,a.template).length,caliber:'检测端 documentFinalValidation.ts:480 同函数同参(markdown \xd7 template)。轮内是"按规格闸规则补齐被点名条目",本读数=全文未落位的规格闸条目数。'},"basis-regulations-coverage":{read:a=>(0,X.AN)(a.finalMarkdown,a.blueprintData,{chapterTitles:(a.effectiveChapters||a.template.chapters||[]).map(a=>a.title)}).length,caliber:"检测端 documentFinalValidation.ts:385 同函数同参(markdown \xd7 blueprintData \xd7 章标题清单)。章节标题清单的取值口径(effectiveChapters 优先、退回 template.chapters)与检测端逐字相同。"},"basis-regulations-cross":{read:a=>(0,D.Yw)(a.finalMarkdown).length,caliber:"检测端 documentFinalValidation.ts:389 同函数(finalMarkdown):编制依据↔正文双向对账缺口数。"},"dangerous-applicability":{read:a=>(0,bw.e6)(a.finalMarkdown).length,caliber:"检测端 documentFinalValidation.ts:373 同函数(finalMarkdown):危大工程兜底适用性缺陷数。"},"punctuation-artifact":{read:a=>(0,X.vZ)(a.finalMarkdown).length,caliber:"检测端 documentFinalValidation.ts:380 同函数(finalMarkdown):括号/书名号成对性与标点叠用残留数。"},"min-chapter-section":{read:a=>(0,X.Ty)(a.finalChapterDrafts).length,caliber:"检测端 documentFinalValidation.ts:427 同函数同参(minChapterSectionIssues,读章草稿的 `title` \xd7 `sections`)。覆盖两族:章内重复小节(同名重复)与**重复主题小节**(同为 `classifyThematicSectionKey` 同桶)——后者正是轮 `duplicateThematicSections` 的合并目标,故本读数是该轮的直接收敛量(桶合并后该桶不再 >1 ⇒ 读数下降)。"},"writer-missing-section":{read:a=>a.finalMarkdown.includes("WRITER_MISSING_SECTION")||a.finalMarkdown.includes("Writer 未完成")?1:0,caliber:"检测端 rebuildAndRecompute.ts:280 同判据(finalMarkdown 是否仍含 WRITER_MISSING_SECTION / Writer 未完成)。读数取 0/1(检测端该支最多一条 issue)。"}};async function ca(a,b){let c=(0,b7.nJ)(a);if(!c)return;let d=b9[c.detector];if(!d)return;d.recomputeFirst&&await b.recomputeFinalValidationBundle();let e=d.read(b);if(void 0!==e)return{detector:c.detector,count:e}}async function cb(a,b){let c,d=(0,b7.nJ)(b);if(!d)return{status:"no-anchor",reason:`「${b}」在注册表里没有锚定检测器(无 FixerEntry / 无 anchoredTo;轮名表 \`CHAIN_ROUND_FIXER_IDS\` 亦未登记该轮)——无残余读源 ⇒ 本循环对它只有基线层,不做残余驱动的重跑(显性声明,不是静默跳过)。`};try{c=await ca(b,a)}catch(a){return{status:"read-error",detector:d.detector,reason:`「${b}」残余读数抛错:${a instanceof Error?a.message:String(a)}(锚定检测器「${d.detector}」)——读数失败**不等于**残余为零,本循环因此不对它做残余驱动的重跑;层 0 基线照跑,残留由终门禁照常复核。`}}return c&&c.detector===d.detector?{status:"anchored",detector:d.detector,count:c.count,scope:(0,t.Xh)(d.detector)?.scope==="chapter"?"chapter":"full-document"}:{status:"no-reader",detector:d.detector,reason:`「${b}」的残余读源与注册表锚定不符:判据函数回报「${c?.detector??"缺失"}」,注册表 anchoredTo「${d.detector}」。检测定位=修复定位是红线——读源被换掉会让「残余下降」变成一个无从核对的结论,故此处显性降级(不按 0 处理,也不猜一个兜底)。`}}function cc(a,b){return a?.status==="anchored"&&b?.status==="anchored"&&b.count>0&&b.count<a.count}function cd(a){return a.finalChapterDrafts.reduce((a,b)=>a+(0,j.V7)(b.content||""),0)}function ce(a){let b=[],c=a.documentBudget?.chapterTargets;if(!c)return{total:0,chapters:b};let d=0;for(let e of a.finalChapterDrafts){let a=c.get(e.id)??c.get(e.title);if(!a||a<=0)continue;let f=(0,j.V7)(e.content||""),g=Math.round(1.15*a),h=f-g;h>0&&(d+=h,b.push({title:e.title,chars:f,limit:g,over:h}))}return b.sort((a,b)=>b.over-a.over),{total:d,chapters:b}}function cf(a){return a.finalChapterDrafts.map(a=>`${a.id}\u0000${a.content||""}`).join("\x01")}async function cg(a,b){let{plan:c}=b,d=(0,m.nY)((0,m.Su)(a.generationDiagnostics)),e=(b.enabled??function(a=process.env){return"off"!==a.REPAIR_CHAIN}())&&!d,f=d?`文档预算已耗尽(${d.kind}:${d.observed}/${d.limit})——补偿链不再起跑,只留收口骨架`:"REPAIR_CHAIN=off:本次生成跳过补偿链(方案 Z5 的 B 组实验口径),已逐轮登记;收口骨架不跳过",g=b.residualLevels??function(a=process.env){let b=a.REPAIR_CHAIN_RESIDUAL_LEVELS;return void 0!==b&&/^\d+$/u.test(b.trim())?Number(b.trim()):1}(),h=function(){let a=[];return{record:b=>{a.push(b)},skippedRounds:()=>[...a]}}(),i=[],j=[],k=new Map,l=new Set;for(let a of c){if(l.has(a.id))throw Error(`修复链计划里出现重复轮 id「${a.id}」——重复 id 会让执行日志与残余读源同时指向错的那一轮,必须先消除歧义`);l.add(a.id)}let n=cd(a),o=async(b,c,d,e)=>{let f,g=b.round??b.id,h=await cb(a,g),l=cd(a),m=ce(a),n={drafts:structuredClone(a.finalChapterDrafts),markdown:a.finalMarkdown};await b.stage(a);let o=ce(a),p=!1;if(o.total>m.total+1){let b=o.chapters[0];a.finalChapterDrafts.splice(0,a.finalChapterDrafts.length,...n.drafts),a.finalMarkdown=n.markdown,p=!0,f=`篇幅合同:本轮使超窗量从 ${m.total} 字增到 ${o.total} 字(最严重:${b?`${b.title} ${b.chars}/${b.limit}`:"—"},窗口=章目标\xd71.15)——本轮改动已整轮回滚(判据只罚"变差",正在压缩篇幅的轮不受影响)`}let q=cd(a),r=await cb(a,g);k.set(b.id,{before:h,after:r});let s={level:c,tier:b.tier,round:b.id,decision:d,reason:p?`${e};⚠ ${f}`:e,...p?{rolledBack:!0,rollbackReason:f}:{},residualBefore:h,residualAfter:r,charsDelta:q-l,charsAfter:q};return i.push(s),b.compensation&&j.push({round:b.id,delta:s.charsDelta,after:q}),s};for(let b of c){if(!e&&b.compensation){h.record(b.id),i.push({level:0,tier:b.tier,round:b.id,decision:"skip",reason:f,charsDelta:0,charsAfter:cd(a)});continue}await o(b,0,"run",b.compensation?"基线层:按声明序执行(与旧链的调用条件逐字相同——不看残余,不跳轮)":"收口骨架:不受 REPAIR_CHAIN 约束(关链关的是补偿链,不是收口骨架)")}for(let b=1;e&&b<=g;b+=1){let d=c.filter(a=>{if("draft"!==a.tier)return!1;let b=k.get(a.id);return!!b&&cc(b.before,b.after)});if(0===d.length){i.push({level:b,tier:"surface",round:"<converged>",decision:"skip",reason:`层 ${b} 不进入:没有「残余仍在下降」的结构层轮——${function(a,b){let c=new Map,d=a=>c.set(a,(c.get(a)??0)+1);for(let c of a){if("draft"!==c.tier)continue;let a=b.get(c.id);if(!a){d("未执行");continue}if("anchored"===a.after.status){d(0===a.after.count?"残余已归零":cc(a.before,a.after)?"仍在下降":"未下降/反增(到能力边界)");continue}d("no-anchor"===a.after.status?"无锚定声明":"no-reader"===a.after.status?"无残余读源":"读数抛错")}return`结构层 ${a.filter(a=>"draft"===a.tier).length} 轮的跑后读数:`+[...c].map(([a,b])=>`${a} ${b}`).join("、")}(c,k)};收敛判据成立,不许多跑一轮,也不拿注定无效的调用去凑层数`,charsDelta:0,charsAfter:cd(a)});break}let e=!1;for(let c of d){let d=a.finalMarkdown,f=cf(a),g=k.get(c.id),h="anchored"===g.before.status&&"anchored"===g.after.status?`判定依据 = 上一跑的读数:${g.before.detector} 还在下降(${g.before.count} → ${g.after.count})`:"判定依据 = 上一跑的读数:读数异常";await o(c,b,"rerun",`层 ${b} 残余驱动:${h}——「跑不跑」由残余决定,不由链的位置决定`),(cf(a)!==f||a.finalMarkdown!==d)&&(e=!0)}if(!e){i.push({level:b,tier:"surface",round:"<converged>",decision:"skip",reason:`层 ${b} 结构层重跑零净变更 ⇒ 收敛,表面层不重跑(表面收口是幂等的,无正文变动时重复调用是纯浪费)`,charsDelta:0,charsAfter:cd(a)});break}for(let a of c)"surface"===a.tier&&await o(a,b,a.compensation?"rerun":"run",`层 ${b}:结构层本轮动过正文(rebuild 已抹掉表面收口),表面层随之重跑——「终门禁所检 = 交付所存」`)}let p=cd(a),q=p-n;return{log:i,skippedRounds:h.skippedRounds(),netChars:{before:n,after:p,delta:q,ratio:n>0?q/n:0,rounds:[...j].sort((a,b)=>Math.abs(b.delta)-Math.abs(a.delta))}}}var ch=c(18274),ci=c(52437),cj=c(27827);function ck(a){return Math.max(0,Math.min(100,Math.round(a)))}async function cl(a){let b=await (0,aZ.JP)(a),c=a.reduce((a,b)=>a+(b.content.match(/本小节围绕|交底覆盖率按100%|24小时内形成整改责任|按施工准备→过程实施→检查验收→问题整改→资料归档的闭环组织|按作业条件确认→技术交底→过程实施|依据本项目已确认资料中的项目边界/gu)||[]).length,0),d=await (0,a$.Bt)(a.map(a=>a.content).join("\n")),e=400*Math.max(0,d.ratio-.1);return{score:ck(100-15*c-25*b.filter(a=>"error"===a.level).length-e),detail:`模板化空话命中 ${c} 处,套话句占比 ${(100*d.ratio).toFixed(1)}%(docx 达标线 ≤10%),废话段问题 ${b.length} 项`}}async function cm(a,b="",c={}){let d=function(a){let b=a.map(a=>`${a.title} ${(a.sections||[]).join(" ")} ${a.content}`).filter(a=>(0,ci.IZ)(a)>=200).join("\n"),c=[{label:"工程概况",pattern:/工程概况|项目概况|基本概况/u},{label:"主要施工内容",pattern:/主要施工内容/u},{label:"重难点分析",pattern:/重点.{0,4}难点/u},{label:"施工部署",pattern:/施工部署|总体部署|流水/u},{label:"进度计划",pattern:/进度计划|工期保障|工期计划/u},{label:"质量保证",pattern:/质量保证|质量管理|质量控制/u},{label:"安全文明",pattern:/安全.{0,8}(?:管理|措施|文明)|文明施工/u},{label:"资源配置",pattern:/劳动力|机械设备|材料.{0,4}计划|资源配置/u},{label:"绿色环保",pattern:/绿色施工|扬尘|噪声|环保/u},{label:"应急管理",pattern:/应急/u}],d=c.filter(a=>a.pattern.test(b)),e=ck(d.length/c.length*100),f=c.filter(a=>!a.pattern.test(b)).map(a=>a.label);return{score:e,detail:`覆盖 ${d.length}/${c.length} 个核心结构组${f.length?`;缺失:${f.join("、")}`:""}`}}(a),e=function(a){let b=a.map(a=>a.content).join("\n"),c=(0,ci.dB)(b,ch.s2),d=(0,ci.dB)(b,/工程量|材料|设备|范围|流程|验收|检测|复试|调试|隐蔽|检验批|资料|记录|系统|部位|接口|规格|标准/gu),e=Math.max(1,b.length),f=c.size/(e/1e3);return{score:ck(Math.min(100,22*f+d.size/18*15)),detail:`量化参数 ${c.size} 项(每千字 ${f.toFixed(1)}),专业事实词 ${d.size}/18 类`}}(a),f=function(a){let b=a.map(a=>a.content).join("\n"),c=(0,ci.dB)(b,ch.aX),d=Math.max(1,b.length),e=c.size/(d/1e3);return{score:ck(Math.min(100,20*e+40)),detail:`工艺参数 ${c.size} 项(每千字 ${e.toFixed(1)})`}}(a),g=function(a,b=""){let c=(b||a.map(a=>a.content).join("\n\n")).split("\n"),d=0,e=0,f=0;for(;f<c.length;){let a=c[f].trim();if(!/^\|.+\|$/u.test(a)){f+=1;continue}let b=[];for(;f<c.length&&/^\|.+\|$/u.test(c[f].trim());)b.push(c[f].trim()),f+=1;b.length<3||(d+=1,0===b.slice(1).filter(a=>a.replace(/\|/gu,"").replace(/[\s\-:]/gu,"").length>0).reduce((a,b)=>{let c=b.split("|").slice(1,-1).map(a=>(0,au.jG)(a.trim())),d=/^[\s|]*\|?\s*(?:合计|小计|总计|累计)/u.test(b);return a+c.filter((a,b)=>(""===a||"-"===a||"—"===a||"/"===a)&&(!d||"—"!==a)).length},0)&&(e+=1))}return{score:0===d?40:ck(e/d*100),detail:`表格 ${d} 个,其中字段完整 ${e} 个`}}(a,b),h=await cl(a),i=function(a){let b=(0,aZ.cl)(a);return{score:ck(100-20*b.length-20*b.filter(a=>"error"===a.level).length),detail:`重复段落问题 ${b.length} 项`}}(a),j=function(a,b=""){let c=b||a.map(a=>a.content).join("\n\n"),d=(0,ci.Js)(c),e=[{label:"质量标准",pattern:/质量标准|质量要求|合格率/u},{label:"计划工期",pattern:/计划工期|工期要求|日历天/u},{label:"保修",pattern:/缺陷责任期|保修|质保/u},{label:"安全目标",pattern:/安全.{0,8}目标|文明.{0,8}目标/u},{label:"项目经理",pattern:/项目经理|项目负责人/u}],f=e.filter(a=>d.some(b=>a.pattern.test(b)&&(0,ci.A5)(b))),g=e.filter(a=>!f.includes(a));return{score:ck(f.length/e.length*100),detail:`招标硬性要求响应 ${f.length}/${e.length} 项${g.length?`(未响应:${g.map(a=>a.label).join("、")})`:""}`}}(a,b),k=function(a){if(!a)return{score:100,detail:"模板化未检测(无信号,按满分计)"};let b=300*Math.max(0,a.fillerRatio-.1),c=Math.min(40,8*a.vagueHitCount),d=a.difficultyCountermeasures>0?a.difficultyQuantifiedCount/a.difficultyCountermeasures:1,e=a.difficultyCountermeasures>0?Math.min(30,60*Math.max(0,.5-d)):0,f=Math.min(30,10*a.crossProjectResidue.length);return{score:ck(100-b-c-e-f),detail:`套话句占比 ${(100*a.fillerRatio).toFixed(1)}%(线 ≤10%)、模糊应答词 ${a.vagueHitCount} 处、重难点量化达标 ${a.difficultyQuantifiedCount}/${a.difficultyCountermeasures}(线 ≥50%)、跨项目残留 ${a.crossProjectResidue.length} 处;扣分 ${b.toFixed(0)}+${c.toFixed(0)}+${e.toFixed(0)}+${f.toFixed(0)}`}}(c.templating),l=[{key:"structure",label:"结构完整度",score:d.score,detail:d.detail,weight:0,baseWeight:.18},{key:"factLanding",label:"事实落位率",score:e.score,detail:e.detail,weight:0,baseWeight:.18},{key:"processParameter",label:"工艺参数密度",score:f.score,detail:f.detail,weight:0,baseWeight:.16},{key:"table",label:"表格完整度",score:g.score,detail:g.detail,weight:0,baseWeight:.12},{key:"filler",label:"废话控制",score:h.score,detail:h.detail,weight:0,baseWeight:.14},{key:"duplication",label:"重复控制",score:i.score,detail:i.detail,weight:0,baseWeight:.12},{key:"reviewResponse",label:"评标响应度",score:j.score,detail:j.detail,weight:0,baseWeight:.1}],m=.2*!!c.templating,n=[...l.map(({baseWeight:a,...b})=>({...b,weight:Number((a*(1-m)).toFixed(4))})),...m>0?[{key:"templating",label:"表述实质性",score:k.score,detail:k.detail,weight:m}]:[]],o=ck(n.reduce((a,b)=>a+b.score*b.weight,0)),p=o>=85?"专业":o>=70?"良好":o>=55?"合格":"待提升",q=[...(0,aZ.cl)(a),...await (0,aZ.JP)(a),...(0,aZ.nU)(a),...(0,aZ.zy)(a)].slice(0,5).map(a=>a.message),r=n.filter(a=>a.score<70).map(a=>`${a.label}(${a.score}分)`);return{total:o,grade:p,dimensions:n,summary:`施工组织设计专业度评分 ${o} 分(${p};从属口径,交付主尺见六维质量报告)${c.templating&&"light"!==c.templating.level?`;模板化等级:${"heavy"===c.templating.level?"重度":"中度"}(已按「表述实质性」维度计分,不再封顶总分)`:""}${r.length?`;待提升:${r.join("、")}`:""}`,topIssues:q,caliber:cj.Yn}}var cn=c(59873),co=c(35008),cp=c(73024),cq=c.n(cp),cr=c(76760),cs=c.n(cr),ct=c(48661);function cu(a){return Math.round(10*a)/10}function cv(a,b){let c=a.replace(/\s+/gu," ").trim();return c.length>b?`${c.slice(0,b)}…`:c}let cw={success:"通过",failed:"失败",skipped:"跳过",running:"进行中",partial:"部分生效"},cx={blind:"暗标",open:"明标",unknown:"未判定(按明标口径)"};async function cy(a){var b;a.reviewChecklist=[{key:"export-gate",label:"导出门禁",passed:(b={exportGate:a.qualityBundle.finalExportGate,qualityReport:a.qualityBundle.qualityReport,repairStrategies:a.qualityBundle.repairStrategies}).exportGate.passed,message:b.exportGate.passed?"导出门禁通过":`仍有 ${b.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:b.qualityReport.passed,message:`${b.qualityReport.deliveryProbability}% / ${b.qualityReport.target}%`},{key:"completeness",label:"资料完整性",passed:b.qualityReport.scores.completeness>=85,message:`${b.qualityReport.scores.completeness}/100`},{key:"specificity",label:"方案针对性",passed:b.qualityReport.scores.specificity>=85,message:`${b.qualityReport.scores.specificity}/100`},{key:"compliance",label:"合规性",passed:b.qualityReport.scores.compliance>=80,message:`${b.qualityReport.scores.compliance}/100`},{key:"repair-strategies",label:"修复策略",passed:0===b.repairStrategies.filter(a=>"high"===a.priority).length,message:b.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}];let c=(0,X.Ff)(a.validationIssues),d=a.qualityBundle.finalExportGate.blockingIssues.length;a.generationDiagnostics.quality.blockingCount=d,a.generationDiagnostics.quality.importantCount+=c.important,a.generationDiagnostics.quality.minorCount+=c.minor,a.telemetry=function(a){let b=[...a.diagnostics.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>({name:a.name,durationMs:a.durationMs})),c={};for(let[b,d]of Object.entries(a.diagnostics.llm.patchGuardStats||{}))c[b]={hits:d.hits+d.rejects,repaired:d.hits,failed:d.rejects+(d.rollbacks??0)};return{llmCalls:a.diagnostics.llm.calls,llmFailures:a.diagnostics.llm.failures,maxParallelLlm:a.diagnostics.llm.maxActive,searchQueries:a.diagnostics.evidence.searchQueries,evidenceContextChars:a.diagnostics.evidence.contextChars,qualityIssues:{...a.diagnostics.quality},slowMetrics:b,elapsedMs:a.startedAt&&a.endedAt?a.endedAt-a.startedAt:void 0,repairHeat:Object.keys(c).length>0?c:void 0,repairChainNetChars:a.diagnostics.repairChainNetChars}}({diagnostics:a.generationDiagnostics});let e=(a.generationDiagnostics.evidence.retrievalFailures??0)>0?`,⚠ 检索失败 ${a.generationDiagnostics.evidence.retrievalFailures} 次(非「无命中」,请看进度中的 failed 事件)`:"",f=(a.generationDiagnostics.evidence.pinnedEvidenceMissed??0)>0?`,⚠ 固定证据未命中 ${a.generationDiagnostics.evidence.pinnedEvidenceMissed} 处(资料包绑定漂移)`:"";a.telemetry.qualityIssues.blockingCount=d,a.professionalScore=await cm(a.finalChapterDrafts,a.finalMarkdown,{templating:a.qualityBundle.qualityReport.templating}),a.templatingReview=a.qualityBundle.qualityReport.templating?await a.withProgressHeartbeat(()=>(0,cn.z)({templating:a.qualityBundle.qualityReport.templating,markdown:a.finalMarkdown,diagnostics:a.generationDiagnostics,signal:a.signal})):{issues:[],reviewed:!1},a.suspensionChecklist=a.qualityBundle.finalExportGate.passed?void 0:(0,q.aF)(a.qualityBundle.finalExportGate.blockingIssues,a.finalChapterDrafts),(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"validation",roleId:"agent-final-gate",status:a.qualityBundle.finalExportGate.passed?"success":"failed",message:a.qualityBundle.finalExportGate.passed?"Agent 最终门禁通过":`Agent 最终门禁未通过 ${d} 个问题(不计入交付阻断,文档照常可导出;人工复核清单见明细)`,details:a.suspensionChecklist?(0,q.$w)(a.suspensionChecklist):[]},{subtitle:"Agent 最终门禁"})});let g=a.qualityBundle.qualityReport.deliveryProbability<70;(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"validation",roleId:"document-delivery-score",status:a.qualityBundle.qualityReport.passed?"success":a.qualityBundle.finalExportGate.passed?"skipped":"failed",message:a.qualityBundle.finalExportGate.passed&&!a.qualityBundle.qualityReport.passed?`${a.qualityBundle.qualityReport.summary}${g?";置信度低于 70%,建议完成续修后再交付归档":"(导出门禁已通过,作为后续优化建议归档)"}`:a.qualityBundle.qualityReport.summary,details:g&&a.qualityBundle.finalExportGate.passed?[...a.qualityBundle.qualityReport.actions,"续修建议:交付置信度低于 70% 门槛,建议按交付复核清单补齐短板维度后重新生成或续修。"]:a.qualityBundle.qualityReport.actions},{subtitle:"交付评分"})}),(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"validation",roleId:"document-professional-score",status:"专业"===a.professionalScore.grade||"良好"===a.professionalScore.grade?"success":"skipped",message:a.professionalScore.summary,details:[...a.professionalScore.dimensions.map(a=>`${a.label}:${a.score} 分(${a.detail})`),...a.professionalScore.topIssues.map(a=>`待修复:${a}`)]},{subtitle:"专业度评分"})}),a.qualityBundle.qualityReport.templating&&"light"!==a.qualityBundle.qualityReport.templating.level&&(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"validation",roleId:"document-templating-report",status:"skipped",message:`模板化检测:${"heavy"===a.qualityBundle.qualityReport.templating.level?"重度":"中度"}模板化(套话句占比 ${(100*a.qualityBundle.qualityReport.templating.fillerRatio).toFixed(1)}%,重难点归因+量化双达标占比 ${(100*a.qualityBundle.qualityReport.templating.difficultyCountermeasureRatio).toFixed(0)}%,模糊应答词 ${a.qualityBundle.qualityReport.templating.vagueHitCount} 处)`,details:a.templatingReview.issues},{subtitle:"模板化检测"})}),a.writingTaskBrief&&(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"reference",roleId:"document-writing-task-brief",status:"success",message:`写作任务书:${a.writingTaskBrief.documentType},${a.writingTaskBrief.chapters.length} 章任务卡,全局写作焦点 ${a.writingTaskBrief.globalWritingFocus.length} 条`,details:[...a.writingTaskBrief.globalWritingFocus,...a.writingTaskBrief.chapters.slice(0,10).map(a=>`${a.chapterTitle}:覆盖 ${a.mustCover.length} 项`)],subtitle:"写作任务书"})}),(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"reference",roleId:"knowledge-coverage",status:a.qualityBundle.knowledgeCoverage.score>=85?"success":"failed",message:`资料确认覆盖率:${a.qualityBundle.knowledgeCoverage.score}%(证据 ${a.qualityBundle.knowledgeCoverage.evidenceCount} 条,文件 ${a.qualityBundle.knowledgeCoverage.confirmedFiles} 份)`,details:[a.qualityBundle.knowledgeCoverage.remediation]},{subtitle:"资料覆盖"})}),(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"validation",roleId:"document-review-checklist",status:a.reviewChecklist.every(a=>a.passed)?"success":a.qualityBundle.finalExportGate.passed?"skipped":"failed",message:`交付复核清单:通过 ${a.reviewChecklist.filter(a=>a.passed).length}/${a.reviewChecklist.length}${a.qualityBundle.finalExportGate.passed&&!a.reviewChecklist.every(a=>a.passed)?"(导出门禁已通过,其余项作为优化建议归档)":""}`,details:a.reviewChecklist.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"})});let h=(0,s._8)(a.generationDiagnostics.metrics),i=(0,s.bz)(a.generationDiagnostics.llm.callBreakdown),j=a.generationDiagnostics.factSanitize?`,事实净化 截断${a.generationDiagnostics.factSanitize.truncated}/丢弃${a.generationDiagnostics.factSanitize.dropped}/编号补全${a.generationDiagnostics.factSanitize.repaired}`:"",m=a.generationDiagnostics.blockLedger||[],n=(()=>{if(0===m.length)return"";let a=m.filter(a=>{if(a.target<=0)return!1;let b=(0,co.z4)(a.target);return a.actual>=b.min&&a.actual<=b.max}).length,b=m.filter(a=>a.target>0).map(a=>a.actual/a.target).sort((a,b)=>a-b),c=b.length>0?b[Math.floor(b.length/2)]:0,d=m.filter(a=>!a.isolatedRetry),e=d.filter(a=>0===a.attempt&&a.passed).length,f=d.length||1,g=m.length>d.length?`(另有 ${m.length-d.length} 行孤立重试已排除出分母)`:"";return`块级篇幅账:${d.length} 块,写作一次通过率 ${Math.round(e/f*100)}%(${e}/${f})${g},块目标命中率 ${Math.round(a/f*100)}%,实际/目标 中位 ${c.toFixed(2)}`})();if((0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"validation",roleId:"document-block-length-ledger",status:0===m.length?"success":m.some(a=>!a.passed&&a.failureKinds?.includes("budget_exhausted"))?"partial":m.some(a=>!a.passed)?"failed":"success",message:n||"块级篇幅账:无块记录(本次未走块写作通道)",details:m.slice(0,40).map(a=>`${a.chapter.slice(0,10)}|${a.block}|目标 ${a.target} 实际 ${a.actual}(${(a.actual/Math.max(1,a.target)).toFixed(2)}\xd7)attempt=${a.attempt}${a.passed?" 通过":" 失败"}${a.failureKinds?.length?` 【${a.failureKinds.join("、")}】`:""}`)},{subtitle:"块级篇幅账"})}),(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${a.generationDiagnostics.llm.calls} 次,失败 ${a.generationDiagnostics.llm.failures} 次,瞬态重试 ${a.generationDiagnostics.llm.retries} 次,schema 校验失败 ${a.generationDiagnostics.llm.schemaFailures} 次,峰值并行 ${a.generationDiagnostics.llm.maxActive},检索 ${a.generationDiagnostics.evidence.searchQueries} 次/${Math.round(a.generationDiagnostics.evidence.searchMs/1e3)} 秒,证据上下文 ${a.generationDiagnostics.evidence.contextChars} 字,噪声过滤 ${a.generationDiagnostics.evidence.filteredNoise} 条,预算裁剪 ${a.generationDiagnostics.evidence.budgetDropped} 条,质量问题 阻断${a.generationDiagnostics.quality.blockingCount}/重要${a.generationDiagnostics.quality.importantCount}/轻微${a.generationDiagnostics.quality.minorCount}${j}${e}${f}${h?`,Top耗时:${h}`:""}${i?`,调用输入Top5:${i}`:""}`,details:[...(0,s.Il)(a.generationDiagnostics.metrics),...(0,s.NJ)(a.generationDiagnostics.llm.callBreakdown)]},{subtitle:"后台诊断"})}),a.documentId)try{let b=function(a){let b=a.qualityReport,c=a.exportGate,d=new Date(a.generatedAt??Date.now()),e=b.mode?cx[b.mode]:"未判定(按明标口径)",f=[];f.push(`# 交付三件套报告:${a.title}`),f.push(""),f.push(`> 文档 ID:${a.documentId??"未提供"};生成时间:${d.toISOString()}`),f.push(`> 评分口径:${cj.GX}(主尺=六维;招标六项/专业分为从属展示口径)`),f.push(`> 导出门禁:${c.passed?"通过":`未通过(${c.blockingIssues.length} 项阻断,文档照常可导出,人工复核清单见下)`};标书类型:${e}`),f.push(""),f.push("## 一、评分报告"),f.push(""),f.push("### 1.1 六维质量评分(主尺)");let g=b.dimensions||[];if(g.length>0)for(let a of(f.push("| 维度 | 得分 | 权重 | 构成明细 |"),f.push("|---|---|---|---|"),g))f.push(`| ${a.label} | ${a.score} | ${Math.round(100*a.weight)}% | ${a.detail??"—"} |`);else f.push("- (六维构成明细缺失——评级输入不完整,仅综合分可用)");if(f.push(`- 综合评分:**${b.overall}**/100;交付置信度 **${b.deliveryProbability}%** / 目标 ${b.target}%;低雷同性 ${b.scores?.uniqueness??"—"}${b.passed?";已达当前质量目标":";未达目标(按第三节预估路径补强)"}`),f.push(""),f.push("### 1.2 专业度评分(从属口径,交付主尺见六维)"),f.push(`- 总分 ${a.professionalScore.total}/100(${a.professionalScore.grade}):${a.professionalScore.summary}`),a.professionalScore.dimensions.length>0)for(let b of(f.push(""),f.push("| 维度 | 得分 | 权重 | 明细 |"),f.push("|---|---|---|---|"),a.professionalScore.dimensions))f.push(`| ${b.label} | ${b.score} | ${Math.round(100*b.weight)}% | ${b.detail} |`);if(a.professionalScore.topIssues.length>0)for(let b of(f.push(""),f.push("待修复:"),a.professionalScore.topIssues.slice(0,12)))f.push(`- ${cv(b,220)}`);if(f.push(""),f.push("### 1.3 阻断明细(终门禁)"),0===c.blockingIssues.length)f.push("- 无阻断:终检检测器全部通过。");else for(let a of c.blockingIssues){let b=a.severity?`[${a.severity}]`:`[${a.level}]`,c=a.chapterId?`(章:${a.chapterId}${a.sectionTitle?` / ${a.sectionTitle}`:""})`:"";f.push(`- ${b} ${cv(a.message,320)}${c}`),a.suggestion&&f.push(` - 建议:${cv(a.suggestion,260)}`)}let h=c.manualReviewIssues||[];if(h.length>0){for(let a of(f.push(""),f.push(`### 1.4 人工复核清单(${h.length} 项,不阻断导出)`),f.push(""),f.push("> 下列发现由声明「无自动修复路径」的检测器产出,需人工判断后处理;系统不会自动改写。"),h.slice(0,30))){let b=a.provenance?.detectorId?`[${a.provenance.detectorId}]`:"";f.push(`- ${b} ${cv(a.message,320)}`),a.suggestion&&f.push(` - 建议:${cv(a.suggestion,260)}`)}h.length>30&&f.push(`- …另有 ${h.length-30} 项未展开`)}if(c.checklist.length>0){let a=c.checklist.filter(a=>!a.passed);f.push(""),f.push(`- 门禁复核清单:通过 ${c.checklist.length-a.length}/${c.checklist.length}${a.length>0?`;未过项:${a.slice(0,10).map(a=>a.label).join("、")}${a.length>10?` 等 ${a.length} 项`:""}`:""}`)}for(let b of(f.push(""),f.push("## 二、进度(阶段/耗时/修复轮次)"),f.push(""),f.push(`### 2.1 阶段执行(共 ${a.stages.length} 个阶段)`),a.stages)){let a=b.subtitle||b.roleId,c=b.message?`:${cv(b.message,240)}`:"";f.push(`- [${cw[b.status]}] ${a}${c}`)}f.push(""),f.push("### 2.2 耗时(按耗时降序)");let i=[...a.metrics].sort((a,b)=>b.durationMs-a.durationMs);if(0===i.length)f.push("- (无性能指标记录)");else for(let a of i){var j;f.push(`- ${a.name}:${!Number.isFinite(j=a.durationMs)||j<0?"0ms":j<1e3?`${Math.round(j)}ms`:j<6e4?`${(j/1e3).toFixed(1)}s`:`${(j/6e4).toFixed(1)}min`}`)}for(let b of(f.push(""),f.push("### 2.3 修复轮次(detectorFixerRegistry 轮序声明表口径)"),t.rk)){let c=[...a.stages].reverse().find(a=>a.roleId===b);if(c){let a=c.message?` — ${cv(c.message,200)}`:"";f.push(`- ${b}:${cw[c.status]}${a}`)}else f.push(`- ${b}:未记录(无触发或静默通过)`)}f.push(""),f.push("## 三、下轮预估目标(按当前六维缺口)"),f.push("");let k=function(a){let b=(a.dimensions||[]).filter(a=>Number.isFinite(a.score)&&Number.isFinite(a.weight)&&a.weight>0);if(0===b.length)return;let c=b.reduce((a,b)=>a+b.weight,0),d=cu(b.reduce((a,b)=>a+b.score*b.weight,0)/c),e=Math.min(1,(a.scores?.uniqueness??90)/90),f=b.map(a=>({key:a.key,label:a.label,score:a.score,gap:Math.max(0,100-a.score),effectiveGain:cu(Math.max(0,100-a.score)*(a.weight/c)*e),detail:a.detail})).sort((a,b)=>b.effectiveGain-a.effectiveGain||a.label.localeCompare(b.label,"zh-Hans-CN")),g=cu(a.target-a.overall),h=null;if(g>0){let b=[],c=0;for(let a of f)if(a.effectiveGain<=0||(b.push(a),(c=cu(c+a.effectiveGain))>=g))break;h={target:a.target,gap:g,picks:b,covered:c}}return{dimensions:f,currentWeighted:d,uniquenessFactor:e,projectedOverall:Math.min(100,Math.round(100*e)),pathToTarget:h}}(b);if(k){for(let a of(f.push("| 维度 | 当前分 | 提升空间 | 对综合分贡献 | 补强方向 |"),f.push("|---|---|---|---|---|"),k.dimensions))f.push(`| ${a.label} | ${a.score} | ${a.gap>0?`+${a.gap}`:"0(满分)"} | ${a.effectiveGain>0?`+${a.effectiveGain.toFixed(1)}`:"0"} | ${a.detail?cv(a.detail,120):"—"} |`);f.push(`- 当前加权综合分:${k.currentWeighted.toFixed(1)}/100(uniqueness 因子 ${k.uniquenessFactor.toFixed(2)})`);let a=k.projectedOverall<b.target;if(f.push(`- 预计总分上限:**${k.projectedOverall}**/100(全维补满、uniqueness 不变的理论口径${a?`;低于目标 ${b.target}——受低雷同性因子 ${k.uniquenessFactor.toFixed(2)} 约束,需同步提升 uniqueness`:""};实际以重生成/续修产物复评)`),k.pathToTarget){let{target:a,gap:b,picks:c,covered:d}=k.pathToTarget,e=c.map(a=>`${a.label}(+${a.effectiveGain.toFixed(1)})`).join(" → ");d>=b?f.push(`- 达标路径(目标 ${a}):补强 ${e},合计 +${d.toFixed(1)} ≥ 缺口 ${b.toFixed(1)}。`):f.push(`- 达标路径(目标 ${a}):补强 ${e},合计 +${d.toFixed(1)} < 缺口 ${b.toFixed(1)}——六维补满仍不足,须按上限提示先提升低雷同性(uniqueness)再复评。`)}else f.push(`- 当前已达目标 ${b.target},无需补强路径(维持口径与阻断清零即可)。`)}else f.push("- 六维构成明细缺失,无法计算下轮预估(降级不猜数;补全评级输入后自动生成)。");return f.push(""),f.join("\n")}({documentId:a.documentId,title:a.template.outputTitle,qualityReport:a.qualityBundle.qualityReport,professionalScore:a.professionalScore,exportGate:a.qualityBundle.finalExportGate,stages:(0,z.pm)(a),metrics:a.generationDiagnostics.metrics}),c=function(a,b,c){let d=function(a,b){let c=b.trim().replace(/[^A-Za-z0-9_-]/gu,"_");if(!c)throw Error("交付报告文件名缺少文档 ID");return cs().join((0,ct.Gl)(a),"reports",`${c}-review.md`)}(a,b);cq().mkdirSync(cs().dirname(d),{recursive:!0});let e=`${d}.${process.pid}.${Date.now()}.tmp`;return cq().writeFileSync(e,c,"utf8"),cq().renameSync(e,d),d}(a.projectRoot,a.documentId,b),d=a.qualityBundle.finalExportGate.blockingIssues.length;(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"reference",roleId:"delivery-review-report",status:"success",message:`交付三件套报告已产出:${c}`,details:[a.qualityBundle.qualityReport.summary,`专业度(从属口径):${a.professionalScore.summary}`,`阻断:${d} 项${d>0?"(人工复核清单随报告归档,不阻断交付)":"(终检检测器全部通过)"}`,"下轮预估目标:按当前六维缺口计算各维提升空间与达标路径(见报告第三节)"]},{subtitle:"交付报告"})})}catch(c){let b=c instanceof Error?c.message:String(c);(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"reference",roleId:"delivery-review-report",status:"failed",message:`交付三件套报告产出失败(不阻断交付):${b}`},{subtitle:"交付报告"})})}}var cz=c(33409);let cA={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&apos;"};function cB(a){return String(a??"").replace(/[&<>"']/gu,a=>cA[a]??"")}function cC(a){return Math.round(100*a)/100}function cD(a){return String(cC(a))}function cE(a,b,c){let d=0;for(let e of a)d+=/[⺀-￯]/u.test(e)?b:c;return d}function cF(a,b){let c=Array.from(a);return c.length>b?`${c.slice(0,b).join("")}…`:a}let cG={pad:16,titleBand:28,cjkPx:14,latinPx:7,minLeftW:76,maxLeftW:232,maxNameChars:16,minPlotW:320,maxPlotW:720,pxPerDay:3,labelGutter:76,rowPitch:30,barH:14,criticalFill:"#e8590c",criticalStroke:"#a63d05",normalFill:"#4dabf7",normalStroke:"#1c7ed6"},cH={pad:16,titleBand:28,boxW:168,boxH:46,hGap:20,vGap:34,maxTitleChars:12,maxDutyChars:14};var cI=c(41618);async function cJ(a){let b=a.documentId,c=a.projectRoot;if(!b)return;let d=cr.resolve((0,ct.Gl)(c),"assets",cI.FIGURE_DIR_NAME),e=function(a){let b=a.markdown.split("\n"),c=[],d=[],e=[],f=[],g=!1!==a.removeSubstituteTable,h=(a.schedule||[]).filter(a=>a&&String(a.label||"").trim()&&Number.isFinite(a.duration)&&a.duration>0).map(a=>({name:String(a.label).trim(),startDay:Math.max(0,Number.isFinite(a.startDay)?a.startDay:0),durationDays:a.duration,...a.critical?{critical:!0}:{}})),i=[];for(let a=0;a<b.length;a+=1){if(!/^##\s/u.test(b[a].trim()))continue;let c=i[i.length-1];c&&(c.end=a),i.push({index:i.length,start:a,end:b.length})}for(let j of[...i].reverse()){let i=a.templateChapters[j.index],k=i?.diagramRequirements||[];if(0===k.length)continue;let l=[],m=[],n=0;for(let o of k){let k=function(a){let b=/「([^」]{2,40})」/u.exec(String(a??""));return b?b[1].trim():String(a??"").split(/[((::]/u)[0].trim().slice(0,40)}(o),p=(0,cz.SZ)(k);if(!p)continue;let q=`图 ${j.index+1}-${n+1}`;if("orgChart"===p||"schedule"===p&&h.length>0){let o="orgChart"===p?function(a){let b=[],c=a&&Array.isArray(a.nodes)?a.nodes:[];if(0===c.length)return{svg:"",warnings:b};let d=new Set,e=[];for(let a of c){let c="string"==typeof a?.title?a.title.trim():"";if(!c){b.push("跳过空岗位名节点:机构图以岗位名为身份键,无名节点无法被人对上");continue}if(d.has(c)){b.push(`跳过重复岗位「${c}」:岗位名是上级指向的身份键,重名会让层级无法判定`);continue}d.add(c),e.push({title:c,parent:"string"==typeof a.parent?a.parent.trim():"",duty:"string"==typeof a.duty?a.duty.trim():""})}if(0===e.length)return{svg:"",warnings:b};let f=new Map,g=new Map;for(let a of e)g.set(a.title,[]);let h=(a,b)=>{let c=g.get(a);c&&c.push(b)},i=(a,b)=>{let c=g.get(a);if(!c)return;let d=c.indexOf(b);d>=0&&c.splice(d,1)};for(let a of e)if(a.parent){if(a.parent===a.title){b.push(`「${a.title}」的上级指向自身,已按根节点处理(自指即长度为 1 的环)`);continue}if(!d.has(a.parent)){b.push(`「${a.title}」的上级「${a.parent}」不存在,已按根节点处理`);continue}f.set(a.title,a.parent),h(a.parent,a.title)}let j=new Map,k=new Map,l=a=>j.get(a)??0,m=a=>k.get(a)??0,n=0,o=a=>{let c=[],d=(a,b)=>{k.has(a)||(k.set(a,b),c.push({title:a,childIndex:0,xs:[]}))};for(let b of a)d(b,0);let f=2*e.length+8,h=0;for(;c.length>0;){if(++h>f){b.push("机构图布局步数超限,已停止(内部保护,正常数据不应触发)");break}let a=c[c.length-1];if(!a)break;let e=g.get(a.title)??[];if(a.childIndex<e.length){let b=e[a.childIndex];a.childIndex+=1,"string"==typeof b&&d(b,m(a.title)+1);continue}c.pop();let i=0===a.xs.length?n++:(a.xs[0]+a.xs[a.xs.length-1])/2;j.set(a.title,i);let k=c[c.length-1];k&&k.xs.push(i)}};o(e.filter(a=>!f.has(a.title)).map(a=>a.title));let p=a=>{let b=[a],c=f.get(a),d=0;for(;c&&c!==a&&d<=f.size;)b.push(c),c=f.get(c),d+=1;return b.push(a),b.join(" → ")},q=0;for(;j.size<e.length;){if(++q>e.length+1){b.push("机构图断环次数超限,已停止(内部保护,正常数据不应触发)");break}let a=e.find(a=>!j.has(a.title));if(!a)break;let c=f.get(a.title);c?(i(c,a.title),f.delete(a.title),b.push(`检测到环:${p(a.title)},已断开「${c}」→「${a.title}」并把「${a.title}」按根节点处理`)):b.push(`「${a.title}」未能定位层级,已按根节点处理`),o([a.title])}let r=cH.boxW+cH.hGap,s=Math.max(1,n),t=Math.max(...e.map(a=>m(a.title))),u=2*cH.pad+s*cH.boxW+(s-1)*cH.hGap,v=2*cH.pad+(a.title?cH.titleBand:0)+(t+1)*cH.boxH+t*cH.vGap,w=a=>cC(cH.pad+a*r),x=b=>cH.pad+(a.title?cH.titleBand:0)+b*(cH.boxH+cH.vGap),y=[];for(let b of(y.push(`<svg xmlns="http://www.w3.org/2000/svg" width="${u}" height="${v}" viewBox="0 0 ${u} ${v}" font-family="sans-serif">`),a.title&&y.push(`<title>${cB(a.title)}</title>`),a.title&&y.push(`<text x="${cH.pad}" y="${cH.pad+16}" font-size="15" font-weight="700" fill="#212529">${cB(a.title)}</text>`),e)){let a=f.get(b.title);if(!a)continue;let c=x(m(b.title)-1)+cH.boxH,d=x(m(b.title)),e=cC(w(l(a))+cH.boxW/2),g=cC(w(l(b.title))+cH.boxW/2),h=cC(c+cH.vGap/2);y.push(`<path class="fig-org-edge" d="M ${e} ${cC(c)} V ${h} H ${g} V ${cC(d)}" fill="none" stroke="#868e96" stroke-width="1"/>`)}for(let a of e){let b=w(l(a.title)),c=x(m(a.title)),d=cC(b+cH.boxW/2),e=cF(a.title,cH.maxTitleChars),f=cF(a.duty,cH.maxDutyChars),g=a.duty?`${a.title}(职责:${a.duty})`:a.title,h=a.duty?c+20:c+cH.boxH/2+5,i=a.duty?`<text x="${d}" y="${c+36}" text-anchor="middle" font-size="10" fill="#495057">${cB(f)}</text>`:"";y.push(`<g class="fig-org-node"><title>${cB(g)}</title><rect class="fig-org-box" x="${b}" y="${cC(c)}" width="${cH.boxW}" height="${cH.boxH}" rx="4" fill="#f8f9fa" stroke="#495057"/><text x="${d}" y="${cC(h)}" text-anchor="middle" font-size="12" font-weight="700" fill="#212529">${cB(e)}</text>${i}</g>`)}return y.push("</svg>"),{svg:y.join(""),warnings:b}}({nodes:function(){let a=cz.Ek.top,b=[{title:a,duty:"项目全面负责"}];for(let c of cz.Ek.second)b.push({title:c,parent:a});let c=cz.Ek.second.includes("施工负责人")?"施工负责人":a;for(let a of cz.Ek.third)b.push({title:a,parent:c});return b}(),title:k}):function(a){let b=[],c=a&&Array.isArray(a.tasks)?a.tasks:[];if(0===c.length)return{svg:"",warnings:b};let d=[];if(c.forEach((a,c)=>{let e="string"==typeof a?.name?a.name.trim():"",f=Number(a?.startDay),g=Number(a?.durationDays);return e?Number.isFinite(f)&&Number.isFinite(g)?f<0?void b.push(`跳过「${e}」:起始日 ${cD(f)} < 0(相对开工的天数不可能为负)`):g<=0?void b.push(`跳过「${e}」:持续天数 ${cD(g)} ≤ 0`):void d.push({name:e,start:f,duration:g,critical:!0===a.critical}):void b.push(`跳过「${e}」:起始日/持续天数不是有限数值`):void b.push(`跳过第 ${c+1} 行:工序名为空,无法对上任何工序`)}),0===d.length)return{svg:"",warnings:b};let e=d.map(a=>cF(a.name,cG.maxNameChars)),f=Math.max(...e.map(a=>cE(a,cG.cjkPx,cG.latinPx))),g=Math.min(cG.maxLeftW,Math.max(cG.minLeftW,Math.ceil(f)+12)),h=Math.max(...d.map(a=>a.start+a.duration)),i=Number.isFinite(a.totalDays)&&Number(a.totalDays)>0?Number(a.totalDays):void 0,j=Math.max(i??0,h);void 0!==i&&i<h&&b.push(`声明的总工期 ${cD(i)} 天小于最晚工序完成日 ${cD(h)} 天,横轴已按 ${cD(h)} 天绘制`);let k=Math.min(cG.maxPlotW,Math.max(cG.minPlotW,Math.ceil(j*cG.pxPerDay))),l=a.title?cG.titleBand:0,m=cG.pad+l+12,n=m+5,o=n+10,p=o+d.length*cG.rowPitch,q=p+20,r=cG.pad+g,s=r+k,t=s+8,u=cG.pad+g+k+cG.labelGutter+cG.pad,v=q+cG.pad,w=a=>cC(r+a/j*k),x=[];x.push(`<svg xmlns="http://www.w3.org/2000/svg" width="${u}" height="${v}" viewBox="0 0 ${u} ${v}" font-family="sans-serif">`),a.title&&x.push(`<title>${cB(a.title)}</title>`),a.title&&x.push(`<text x="${cG.pad}" y="${cG.pad+16}" font-size="15" font-weight="700" fill="#212529">${cB(a.title)}</text>`),x.push(`<text x="${cC(r-8)}" y="${m}" text-anchor="end" font-size="12" fill="#495057">工序</text>`),x.push(`<text x="${t}" y="${m}" font-size="11" fill="#868e96">起止天</text>`),x.push(`<line x1="${r}" y1="${n}" x2="${s}" y2="${n}" stroke="#adb5bd"/>`);let y=function(a){if(a<=84)return 7;let b=30;for(;a/b>13;)b*=2;return b}(j),z=[];for(let a=y;a<j;a+=y)z.push(a);for(let a of(z.push(j),z)){let b=w(a);x.push(`<line x1="${b}" y1="${n}" x2="${b}" y2="${p}" stroke="#e9ecef"/>`),x.push(`<text x="${b}" y="${m}" text-anchor="middle" font-size="10" fill="#868e96">${cD(a)}</text>`)}d.forEach((a,b)=>{let c=o+b*cG.rowPitch,d=c+(cG.rowPitch-cG.barH)/2,f=w(a.start),g=Math.max(2,cC(w(a.start+a.duration)-f)),h=a.critical?cG.criticalFill:cG.normalFill,i=a.critical?cG.criticalStroke:cG.normalStroke,j=a.critical?'font-size="13" font-weight="700" fill="#212529"':'font-size="13" fill="#343a40"';x.push(`<text x="${cC(r-8)}" y="${c+21}" text-anchor="end" ${j}>${cB(e[b])}</text>`),x.push(`<rect class="fig-gantt-bar" x="${f}" y="${d}" width="${g}" height="${cG.barH}" rx="2" fill="${h}" stroke="${i}" stroke-width="${a.critical?2:1}"/>`),x.push(`<text x="${t}" y="${c+21}" font-size="11" fill="#495057">${cD(a.start)}–${cD(a.start+a.duration)} 天</text>`)}),x.push(`<text x="${cG.pad}" y="${q}" font-size="12" font-weight="700" fill="#212529">总工期:${cD(j)} 日历天</text>`);let A=`总工期:${cD(j)} 日历天`,B=cG.pad+cE(A,13,7)+28;for(let a of[{text:"关键线路",color:cG.criticalFill},{text:"非关键线路",color:cG.normalFill}])x.push(`<line x1="${cC(B)}" y1="${q-4}" x2="${cC(B+16)}" y2="${q-4}" stroke="${a.color}" stroke-width="8"/>`),x.push(`<text x="${cC(B+22)}" y="${q}" font-size="11" fill="#495057">${a.text}</text>`),B+=22+cE(a.text,12,7)+22;return x.push("</svg>"),{svg:x.join(""),warnings:b}}({tasks:h,title:k});if(f.push(...o.warnings.map(a=>`${i?.title||""}\xb7${k}:${a}`)),!o.svg){e.push({chapterTitle:i?.title||"",requirement:k,reason:"渲染器返回空图(数据不足)"});continue}n+=1;let r=a.fileNameOf(j.index,p,n),s=`${q} ${k}`;if(d.push({fileName:r,svg:o.svg}),c.push({chapterTitle:i?.title||"",kind:p,caption:s,fileName:r,order:1e3*j.index+n}),l.push({at:j.end,text:["",`![${s}](${a.urlOf(r)})`,"",s]}),g){let a=(0,cz.M2)(k),c=a?function(a,b,c,d){let e=a.findIndex((a,e)=>e>=b&&e<c&&a.trim()===d);if(e<0)return null;let f=e;for(;f>b&&!a[f-1].trim();)f-=1;let g=e;for(;g+1<c&&a[g+1].trim().startsWith("|");)g+=1;return{start:f,end:g}}(b,j.start,j.end,a):null;c&&m.push(c)}continue}let r="tempLand"===p?"本系统暂无该图类的确定性渲染器(总平面布置涉及现场实际布置,不编造)":"缺少结构化数据(蓝图进度 schedule 为空:工序与天数是画横道图的前提)";e.push({chapterTitle:i?.title||"",requirement:k,reason:r}),l.push({at:j.end,text:["",`> 图位待人工插入:**${k}**(原因:${r};建议由项目图纸/现场布置确定后插入)`]})}for(let a of m)b.splice(a.start,a.end-a.start+1);for(let a of l.sort((a,b)=>b.at-a.at))b.splice(a.at,0,...a.text)}let j=c.sort((a,b)=>a.order-b.order).map(({order:a,...b})=>b);return{markdown:b.join("\n"),figures:j,files:d,pending:e,warnings:f}}({markdown:a.finalMarkdown,templateChapters:a.effectiveChapters||[],...a.blueprintData?.schedule?{schedule:a.blueprintData.schedule}:{},fileNameOf:(a,c,d)=>`${b}-c${a+1}-${c}-${d}.svg`,urlOf:a=>`/api/documents/generated/${encodeURIComponent(b)}/figure/${a}`});if(e.files.length>0){for(let a of(cp.mkdirSync(d,{recursive:!0}),e.files))cp.writeFileSync(cr.join(d,a.fileName),a.svg,"utf-8");a.finalMarkdown=e.markdown}else e.pending.length>0&&(a.finalMarkdown=e.markdown);if(e.pending.length>0&&a.clarificationRequests){let b=Date.now();for(let c of e.pending)a.clarificationRequests.push({question:`图位待人工插入:${c.requirement}(章:${c.chapterTitle})——${c.reason}`,blocking:!1,askedAt:new Date(b).toISOString(),askedAtMs:b,status:"pending"})}if(0===e.figures.length&&0===e.pending.length&&0===e.warnings.length)return;let f=e.figures.map(a=>a.caption).join("、");(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"validation",roleId:"figure-landing",status:e.pending.length>0&&0===e.figures.length?"failed":"success",message:`图件落地:出图 ${e.figures.length} 张${e.figures.length>0?`(${f})`:""}${e.pending.length>0?`;待人工插入 ${e.pending.length} 处(已进待答清单)`:""}${e.warnings.length>0?`;渲染告警 ${e.warnings.length} 条`:""}`,details:[...e.figures.map(a=>`${a.caption}|${a.kind}|${a.fileName}`),...e.pending.map(a=>`待人工插入:${a.requirement}(${a.chapterTitle})——${a.reason}`),...e.warnings]},{subtitle:"图件落地"})}),console.log(`[gen][figure] doc=${b} 出图 ${e.figures.length} 张,待答 ${e.pending.length} 处,告警 ${e.warnings.length} 条`)}let cK={prefixCacheHitRateFloor:.4,budgetDropRatioCeiling:.3,llmFailureRateCeiling:.1};async function cL(a){let b=function(a){let b=[],c=a.llm.promptCacheHitTokens??0,d=c+(a.llm.promptCacheMissTokens??0),e=d>0?c/d:null;null!==e&&e<cK.prefixCacheHitRateFloor&&b.push(`固定前缀缓存命中率 ${(100*e).toFixed(1)}% 低于 40%:固定前缀未收敛,检查 L0/L2 恒定段结构`);let f=a.llm.reasoningTokens??0;f>0&&b.push(`推理 token 累计 ${f}:disableThinking 未生效,检查模型 provider 配置`);let g=a.evidence.raw>0?a.evidence.budgetDropped/a.evidence.raw:null;null!==g&&g>cK.budgetDropRatioCeiling&&b.push(`证据预算裁剪 ${(100*g).toFixed(1)}%(${a.evidence.budgetDropped}/${a.evidence.raw}):裁剪过重,疑似预算配置失配`);let h=a.llm.calls>0?a.llm.failures/a.llm.calls:null;return null!==h&&h>cK.llmFailureRateCeiling&&b.push(`LLM 失败率 ${(100*h).toFixed(1)}%(${a.llm.failures}/${a.llm.calls}):失败率偏高,检查限流与重试策略`),{alerts:b,metrics:{prefixCacheHitRate:e,reasoningTokens:f,budgetDropRatio:g,llmFailureRate:h}}}(a.generationDiagnostics),c=process.memoryUsage(),d=Math.round(c.rss/1048576),e=Math.round(c.heapUsed/1048576),f=function(){let a=Number(process.env.DOCUMENT_MEMORY_ALERT_MB??3072);return Number.isFinite(a)&&a>0?a:3072}();console.log(`[gen] memory(finalize) rss=${d}MB heap=${e}MB threshold=${f}MB`);let g=d>=f?[...b.alerts,`进程内存 rss=${d}MB 超过告警阈值 ${f}MB:大文档生成建议 NODE_OPTIONS=--max-old-space-size=4096,并控制并发生成任务数(DOCUMENT_MAX_CONCURRENT_GENERATIONS)`]:b.alerts;a.telemetry.healthAlerts=g,0!==g.length&&(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"validation",roleId:"document-health-diagnosis",status:"partial",message:`自动健康诊断:${g.length} 项告警(不阻断,供配置优化参考)`,details:g},{subtitle:"健康诊断"})})}function cM(a){return{...a,chapterTasks:[],baseProjectGraph:{works:[],methods:[],resources:[],schedule:[],standards:[],risks:[],requirements:[],siteConditions:[],addendumChanges:[],gaps:[],generatedAt:a.baseProjectGraph.generatedAt},documentPlan:void 0,materialSnapshot:{...a.materialSnapshot,files:[]}}}async function cN(a){var b,d,e,f;(0,t.wF)();{let a=["postReviewSurface","requirementVerification"];try{let{unanchoredRepairRounds:b}=await Promise.resolve().then(c.bind(c,25018)),d=b().filter(b=>!a.includes(b));d.length>0&&console.warn(`[gen][repair-chain] 出现**未登记的**无锚定修复轮:${d.join("、")}——它们无法做残余驱动的重跑(只跑基线层);要么补注册表锚定,要么登记进 toolRegistry 的已知清单`)}catch(a){console.warn(`[gen][repair-chain] 未锚定轮对账未能执行:${a instanceof Error?a.message:String(a)}`)}}let{chapterDraftsByOrder:g,chapterGenerationStagesByOrder:n,chapterGenerationStages:u,effectiveChapters:v,input:w,failedChapterMessages:x}=a,{requirement:A}=w,B=function(a){let{signal:b,requirement:c}=a.input;return{input:a,template:a.template,effectiveChapters:a.effectiveChapters,requirement:c,signal:b,projectRoot:a.projectRoot,projectId:a.projectId,documentId:a.documentId,projectMaterialSummary:a.projectMaterialSummary,documentSpec:a.documentSpec,documentBudget:a.documentBudget,promptIds:a.promptIds,promptDocumentRules:a.promptDocumentRules,domainProfile:a.domainProfile,scopeConflicts:a.scopeConflicts,evaluationCriteriaItems:a.evaluationCriteriaItems,tenderRequirements:a.tenderRequirements,requirementAssignments:a.requirementAssignments,requirementsSimilarity:a.requirementsSimilarity,factTokenScopeClassifier:a.factTokenScopeClassifier,professionalDepthClassifier:a.professionalDepthClassifier,blueprintData:a.blueprintData,bidComposition:a.bidComposition,billFactLock:a.billFactLock,drawingFactLock:a.drawingFactLock,requirementSemantics:a.requirementSemantics,generationDiagnostics:a.generationDiagnostics,repairPromptTexts:a.repairPromptTexts,chapterGenerationStages:a.chapterGenerationStages,emitProgress:a.emitProgress,withProgressHeartbeat:a.withProgressHeartbeat,...void 0!==a.nodeLogBaseDir?{nodeLogBaseDir:a.nodeLogBaseDir}:{},missingItems:a.missingItems,clarificationRequests:a.clarificationRequests,unfixableDeclarations:a.unfixableDeclarations,failedChapterMessages:a.failedChapterMessages,indexHealth:a.indexHealth,webResearchReport:a.webResearchReport,retrievalCoverageReports:a.retrievalCoverageReports,writingTaskBrief:a.writingTaskBrief,clarificationOverrides:a.clarificationOverrides,clarificationAmendments:a.clarificationAmendments,globalConsistencyIssues:a.globalConsistencyIssues,agentWorkflow:a.agentWorkflow,factExtractionPromptTexts:a.factExtractionPromptTexts,readiness:a.readiness,allEvidence:a.allEvidence,facts:{},structuredFacts:[],governedStructuredFacts:[],factsModel:void 0,chapterDrafts:[],finalChapterDrafts:[],finalMarkdown:"",validationIssues:[],baseValidationIssues:[],executionStages:[],sources:[],qualityBundle:void 0,scheduleAuthority:void 0,assemblyRateAuthority:void 0,scaleSummary:void 0,supportAuthority:void 0,laborPeakAuthority:void 0,greeningMaintenanceAuthority:void 0,surfaceFixContext:{laborPeakAuthority:void 0,greeningMaintenanceAuthority:void 0,resourceBreakdownAuthority:void 0,supportFormAuthority:void 0},decisionLockEntries:[],reviewChecklist:[],telemetry:void 0,professionalScore:void 0,templatingReview:{issues:[],reviewed:!1},assets:[],validation:void 0,rebuildFinalMarkdown:()=>"",recomputeFinalValidationBundle:async()=>void 0}}(a),C=g.filter(a=>!!a);B.chapterDrafts=C,u.push(...n.filter(a=>!!a));let D=0===(b={chapterDraftCount:C.length,failedChapterMessages:x}).chapterDraftCount?`章节生成未完成:${b.failedChapterMessages.join(";")||"没有生成任何有效章节"}`:null;if(D)throw Error(D);await y(B),await (0,z.Vd)(B),(0,z.rR)(B),await (0,z.rX)(B);let E=o((()=>{let a=(0,m.Su)(B.generationDiagnostics),b=a.budget.maxTokensPerDocument>0?a.documentTokens/a.budget.maxTokensPerDocument:0;return{readings:{usedRatio:b,remainingTokens:Math.max(0,a.budget.maxTokensPerDocument-a.documentTokens),chaptersTotal:B.effectiveChapters.length,chaptersLeft:0,configuredConcurrency:1,chapterOutcomes:[]},budgetRatio:b}})().readings),F="throttle"===E.kind||"stop_and_preserve"===E.kind?0:void 0;void 0!==F&&(d="修复链轮边界",e=`${E.reason}——层 ≥1(残余驱动的额外补写轮)本轮不启用,只跑基线层与收口骨架`,(0,l.Wl)(B,{batch:"finalize.pipeline",id:`supervisor.finalize.${d}.${E.kind}`,type:"supervisor",title:`调度决策:${E.kind}(${d})`,status:"stop_and_preserve"===E.kind||"request_human"===E.kind?"failed":"completed",metrics:{action:E.kind,at:d,note:e.slice(0,160)}}),B.generationDiagnostics.supervisorDecisions=[...B.generationDiagnostics.supervisorDecisions??[],{at:d,action:E.kind,reason:e}]);let G=await cg(B,{plan:[{id:"stageFactLanding",round:"factLanding",tier:"draft",compensation:!0,stage:bi},{id:"stageTableRepair",round:"tableRepair",tier:"draft",compensation:!0,stage:b1},{id:"stageSemanticChoice",round:"semanticChoice",tier:"draft",compensation:!0,stage:bY},{id:"stageDeterministicStage5",round:"deterministicStage5",tier:"draft",compensation:!0,stage:aD},{id:"stageNumericVerification",round:"numericVerification",tier:"draft",compensation:!0,stage:bn.VB},{id:"stageRequirementResponseRepair",round:"requirementResponseRepair",tier:"draft",compensation:!0,stage:bG},{id:"stageRequirementVerification",round:"requirementVerification",tier:"draft",compensation:!0,stage:bW},{id:"stageContentDepthRepair",round:"contentDepthRepair",tier:"draft",compensation:!0,stage:ao},{id:"stageControlLoopRepair",round:"controlLoopRepair",tier:"draft",compensation:!0,stage:ar},{id:"stageProfessionalChainRepair",round:"professionalChainRepair",tier:"draft",compensation:!0,stage:bV},{id:"stagePostReviewSurface",round:"postReviewSurface",tier:"draft",compensation:!0,stage:bM},{id:"stageLengthCompressionRepair",round:"lengthCompressionRepair",tier:"draft",compensation:!0,stage:bm},{id:"stageFactDistribution",round:"factDistribution",tier:"draft",compensation:!0,stage:bh},{id:"stageTableArithmeticRepair",round:"tableArithmeticRepair",tier:"draft",compensation:!0,stage:b$},{id:"stageEmptySectionSweep",round:"emptySectionSweep",tier:"draft",compensation:!0,stage:bf},{id:"stageSectionAlignmentSweep",round:"sectionAlignmentSweep",tier:"draft",compensation:!0,stage:bX},{id:"stageTemplatingSweep",round:"templatingSweep",tier:"draft",compensation:!0,stage:b2},{id:"stageDuplicateThemeMerge",round:"duplicateThemeMerge",tier:"draft",compensation:!0,stage:be},{id:"stageTableCaptionRepair",round:"tableCaptionRepair",tier:"draft",compensation:!0,stage:b_},{id:"runSurfaceDeterministicCleans",tier:"surface",compensation:!1,stage:bQ},{id:"replayBlueprintCitationNumericFixes",tier:"surface",compensation:!1,stage:bN},{id:"replayStage5FactsModelNumericFixes",tier:"surface",compensation:!1,stage:bO},{id:"replayRequirementTailClosure",tier:"surface",compensation:!1,stage:bK},{id:"stageCaliberPlacementBackfill",tier:"surface",compensation:!1,stage:b4},{id:"stageDeliveryStructureClosure",round:"deliveryStructureClosure",tier:"surface",compensation:!0,stage:ay},{id:"stageSentencePatternSweep",round:"sentencePatternSweep",tier:"surface",compensation:!0,stage:bZ},{id:"stageDuplicateSentenceCollapse",round:"duplicateSentenceCollapse",tier:"surface",compensation:!0,stage:aG},{id:"stageTemplatingTailReplay",round:"templatingTailReplay",tier:"surface",compensation:!0,stage:b3},{id:"replaySurfacePunctuationClosure",tier:"surface",compensation:!1,stage:bR},{id:"applyTruthCaliberCleans",tier:"surface",compensation:!1,stage:bP},{id:"stageBasisTailCitationReplay",tier:"surface",compensation:!1,stage:b5},{id:"stageBasisTailBackfill",tier:"surface",compensation:!1,stage:b6},{id:"replayBlueprintCitationNumericFixes@tail",tier:"surface",compensation:!1,stage:bN}],...void 0!==F?{residualLevels:F}:{}});B.generationDiagnostics.repairChainNetChars=G.netChars,G.netChars.before>0&&G.netChars.ratio>.05&&console.warn(`[gen][net-chars] 修复链净增字数 ${G.netChars.delta} 字(${(100*G.netChars.ratio).toFixed(1)}%,目标 ≤5%):${G.netChars.before} → ${G.netChars.after}`),G.skippedRounds.length>0&&(B.generationDiagnostics.repairChain={mode:"off",skippedRounds:G.skippedRounds},console.warn((f=G.skippedRounds.length,`[gen][repair-chain] REPAIR_CHAIN=off:本次生成跳过 ${f} 个修复轮(方案 Z5 的 B 组实验口径)。被跳过的轮次已登记进 generationDiagnostics.repairChain.skippedRounds;「关链后六维分是否仍达 A 组 \xd7 0.95」由归档报告判定,**不得据此认定生成通过**。`))),B.generationDiagnostics.repairChainLog=G.log;let H=[...new Set(G.log.filter(a=>a.residualBefore?.status==="read-error"||a.residualAfter?.status==="read-error").map(a=>a.round))];H.length>0&&console.warn(`[gen][repair-chain] ${H.length} 个轮的残余读数抛错(已按 read-error 逐条归档,未按 0 处理;这些轮不做残余驱动的重跑):${H.join("、")}`);let I=G.log.filter(a=>a.rolledBack);I.length>0&&console.warn(`[gen][repair-chain] ${I.length} 个轮因**篇幅合同**被整轮回滚(章字数 > 章目标\xd71.15 且本轮让它更超):${I.map(a=>a.round).join("、")}——逐章明细见 repairChainLog[].rollbackReason`),await cJ(B),await cy(B),await cL(B);let J=B.finalChapterDrafts.map(a=>({...a,evidence:(0,h.QR)(a.evidence||[],{preservePinned:!0})}));B.finalChapterDrafts=J,(0,i.Q)(B);let K=(0,p.Lf)(void 0,B.bidComposition?.formatRules);return K.applied.length>0&&(0,l.Wl)(B,{batch:"finalize.pipeline",stage:(0,k.X5)({type:"reference",roleId:"tender-format-applied",status:"success",message:`招标规定排版已应用(${K.applied.length} 项):${K.applied.slice(0,5).join("、")}`,details:["来源:招标文件「格式要求」条款(正文/标题字体、字号、行距、装订线、页数上限)","口径:招标格式规则是排版的唯一真值源",...K.applied]},{subtitle:"招标排版应用"})}),{templateId:B.template.id,templateName:B.template.name,title:B.template.outputTitle,requirement:A||"",projectRoot:B.projectRoot,projectId:B.projectId,exportSettings:K.settings,generationSettings:B.template.generationSettings,facts:B.facts,structuredFacts:B.structuredFacts,factsModel:B.factsModel,chapters:J,sources:B.sources,missingItems:[...new Set(B.missingItems)],clarificationRequests:B.clarificationRequests,unfixableDeclarations:B.unfixableDeclarations,validation:B.validation,validationIssues:B.validationIssues,exportGate:B.qualityBundle.finalExportGate,executionStages:(0,z.pm)(B),assets:B.assets,partialChapters:B.finalChapterDrafts.map(a=>({id:a.id,title:a.title,chars:(0,j.V7)(a.content),status:(0,s.DR)(a,B.documentBudget.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:J,promptRules:B.promptDocumentRules,agentWorkflow:cM(B.agentWorkflow),reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:B.generationDiagnostics,profile:function(a){let b=`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`,c=[{pattern:/专项施工|危大|专项方案/u,type:"专项施工方案",dimensions:["专项对象边界","工艺参数","风险控制","验收要求","应急措施"]},{pattern:/投标|技术标|响应|招标/u,type:"投标技术方案",dimensions:["招标响应","技术优势","工期质量安全承诺","资源保障","履约可实施性"]},{pattern:/监理|旁站|巡视|平行检验/u,type:"监理规划/细则",dimensions:["监理目标","旁站巡视","平行检验","验收程序","资料签认"]},{pattern:/可研|可行性|项目建议书|投资估算/u,type:"可研/项目建议类文档",dimensions:["建设必要性","方案比选","投资估算","风险分析","实施效益"]},{pattern:/运维|维护|保养|巡检/u,type:"运维维护方案",dimensions:["巡检频次","维护流程","故障响应","备品备件","记录闭环"]}].find(a=>a.pattern.test(b));return{type:c?.type||"施工组织设计/施工技术方案",dimensions:c?.dimensions||["工程概况","施工部署","进度质量安全","资源配置","施工工艺和验收闭环"],requiredEvidencePolicy:"本地知识库为完整事实源;系统暂未确认的事实必须通过扩大检索、事实补抽或落位修复解决,不得归因为用户资料缺失。"}}({template:B.template,chapters:v,requirement:A}),knowledgeCoverage:B.qualityBundle.knowledgeCoverage,factTraces:B.qualityBundle.factTraces,chapterCoverage:B.qualityBundle.chapterCoverage,retrievalCoverage:B.retrievalCoverageReports,qualityReport:B.qualityBundle.qualityReport,repairStrategies:B.qualityBundle.repairStrategies,reviewChecklist:B.reviewChecklist,professionalScore:B.professionalScore,templatingReviewIssues:B.templatingReview.issues,authorityAudit:B.authorityAuditReport,suspensionChecklist:B.suspensionChecklist??(B.qualityBundle.finalExportGate.passed?void 0:(0,q.aF)(B.qualityBundle.finalExportGate.blockingIssues,B.finalChapterDrafts)),writingTaskBrief:B.writingTaskBrief,workflowVersion:r.x,telemetry:B.telemetry},generatedAt:Date.now(),markdown:B.finalMarkdown,bidComposition:B.bidComposition,pausedByRequest:!0===a.pausedByRequest}}var cO=c(38049),cP=c(91977),cQ=c(71678),cR=c(29055),cS=c(30111);let cT=[{id:"overview",title:"工程概况与总体理解",requiredSectionPatterns:[/编制依据|编制说明/u,/工程概况|项目概况|基本概况/u,/现场踏勘|施工条件|现场条件/u],chapterPatterns:[/概况|总体|理解|说明|编制|项目/u],remedy:"应设置工程概况章节,包含编制依据、工程基本概况、现场条件与总体理解。",level:"required"},{id:"major-content",title:"项目主要施工内容",requiredSectionPatterns:[/主要施工内容|主要施工项目|施工内容/u],chapterPatterns:[/概况|总体|理解|主要施工|工程/u],remedy:'必须包含"项目主要施工内容"小节,按工作包展开施工概况、施工流程、施工方法。',level:"required"},{id:"key-difficulty",title:"重难点分析与对策",requiredSectionPatterns:[/重点.*难点|难点.*对策|重难点/u],chapterPatterns:[/概况|总体|理解|重点|难点|施工/u],remedy:"应设置项目特点、重点、难点分析小节,并逐项给出应对措施与责任闭环。",level:"required"},{id:"deployment",title:"施工部署与施工组织",requiredSectionPatterns:[/施工部署|总体部署|流水|施工顺序|施工区段/u],chapterPatterns:[/部署|组织|总体|方案/u],remedy:"应设置施工部署小节,明确流水段划分、施工顺序与资源调配。",level:"required"},{id:"schedule",title:"进度计划与工期保障",requiredSectionPatterns:[/进度计划|工期|节点/u],chapterPatterns:[/进度|工期|计划|保障/u],remedy:"应设置进度计划与工期保障小节,含总进度计划、关键节点与纠偏措施。",level:"required"},{id:"quality",title:"质量保证体系与措施",requiredSectionPatterns:[/质量/u],chapterPatterns:[/质量|验收|保障|措施/u],remedy:"应设置质量保证体系与措施小节,含质量目标、三检、隐蔽验收、通病防治。",level:"required"},{id:"safety",title:"安全文明施工与危大工程管控",requiredSectionPatterns:[/安全/u,/危大工程|危大/u],chapterPatterns:[/安全|文明|风险|危大|保障|措施/u],remedy:"应设置安全管理与危大工程管控小节,含危险源辨识、危大清单、专项方案。",level:"required"},{id:"resources",title:"劳动力材料机械设备配置",requiredSectionPatterns:[/劳动力|机械设备|材料.*计划|资源配置|人材机/u],chapterPatterns:[/资源|劳动力|机械|材料|设备|计划/u],remedy:"应设置资源配置小节,含分阶段劳动力、机械设备投入与材料进场计划。",level:"required"},{id:"environment",title:"绿色文明施工与环保措施",requiredSectionPatterns:[/文明施工|扬尘|噪声|绿色|环保|四节/u],chapterPatterns:[/文明|绿色|环保|扬尘|噪声|保障|措施/u],remedy:"应设置文明施工与绿色施工小节,含扬尘噪声管控与四节一环保措施。",level:"required"},{id:"emergency",title:"应急管理体系",requiredSectionPatterns:[/应急/u],chapterPatterns:[/应急|安全|保障|措施/u],remedy:"应设置应急管理小节,含应急组织、物资储备与专项预案。",level:"recommended"}],cU={building:[{id:"extra-dangerous-building",title:"危大工程专项管控(房建)",requiredSectionPatterns:[/深基坑|高支模|起重吊装|脚手架/u],chapterPatterns:[/危大|安全|专项/u],remedy:"房建项目应对深基坑、高支模、起重吊装、脚手架等危大工程逐项给出专项方案与安全管理措施。",level:"recommended"}],municipal:[{id:"extra-traffic-diversion-municipal",title:"交通导改与管线保护(市政)",requiredSectionPatterns:[/交通导改|交通导行|占道施工/u,/管线保护|管线探测/u],chapterPatterns:[/交通|管线|安全|专项|保障/u],remedy:"市政项目应设置交通导改与既有管线保护专项内容。",level:"recommended"}],renovation:[{id:"extra-resident-coordination-renovation",title:"居民协调与既有保护(改造)",requiredSectionPatterns:[/居民|扰民|既有.*保护|不中断/u],chapterPatterns:[/居民|协调|保护|保障|专项/u],remedy:"改造项目应设置居民沟通协调与既有设施保护专项内容。",level:"recommended"}],decoration:[{id:"extra-finished-product-decoration",title:"成品保护与交叉施工(装饰)",requiredSectionPatterns:[/成品保护/u,/交叉施工|工序穿插/u],chapterPatterns:[/成品保护|交叉|协调|保障|专项/u],remedy:"装饰项目应设置成品保护与交叉施工工序优化专项内容。",level:"recommended"}]};function cV(a){return(0,av.GQ)(a).replace(/\s+/gu,"").toLowerCase()}function cW(a){return cV(`${a.title} ${(a.sections||[]).join(" ")}`).slice(0,800)}function cX(a){var b;let c,d=(b=a.chapters,[...cT].map(a=>{let c=[],d=new Set;for(let e of b){let b=cV(`${e.title} ${(e.sections||[]).join(" ")}`);for(let f of a.requiredSectionPatterns)f.test(b)&&!d.has(f)&&(d.add(f),c.push(e.title))}let e=[...new Set(c)],f=a.requiredSectionPatterns.filter(a=>!d.has(a)).map(a=>(function(a){let b=a.source.replace(/[\\/^$.*+?()[\]{}]/gu,"").replace(/u$/u,"");return b.split("|").map(a=>a.trim()).find(Boolean)||b})(a)),g=d.size===a.requiredSectionPatterns.length?e.length>1?"fragmented":"satisfied":"missing";return{groupId:a.id,groupTitle:a.title,level:a.level,status:g,carrierChapters:e,missingSections:f,remedy:a.remedy}})),e=[],f=d.filter(a=>"required"===a.level&&"missing"===a.status);for(let a of f)e.push({level:"error",severity:"blocker",message:`评标结构缺失:${a.groupTitle}(缺少:${a.missingSections.join("、")})`,suggestion:a.remedy});for(let a of d.filter(a=>"fragmented"===a.status))e.push({level:"warning",severity:"warning",message:`${a.groupTitle} 小节散落在 ${a.carrierChapters.length} 个章节(${a.carrierChapters.join("、")}),结构可能失真`,suggestion:"建议将同类内容集中到一个承载章节,避免章节间职责重叠。"});for(let b of a.chapters){let a=(b.sections||[]).length;a>18&&e.push({level:"warning",severity:"warning",message:`${b.title} 规划小节 ${a} 个,超过 18 个上限,易产生内容膨胀与重复`,suggestion:"合并语义相近的小节,或将细分内容下移为三级小节而非二级小节。"})}let g=a.chapters.map(a=>({...a,sections:[...a.sections||[]]})),h=new Set;for(let a of f){let b=cT.find(b=>b.id===a.groupId);if(!b)continue;let c=g.findIndex(a=>{let c=cV(a.title);return b.chapterPatterns.some(a=>a.test(c))&&!/雨季|冬季|高温|防汛|扬尘|噪声|工资|劳务|实名|应急|BIM|智慧|管线/u.test(c)}),d=g[c>=0?c:0];for(let c of a.missingSections.filter(a=>!h.has(a))){h.add(c);let a=!function(a){let b=(0,av.GQ)(a).replace(/\s+/gu,"");return b.length>0&&b.length<=3&&/^[\u4e00-\u9fa5]+$/u.test(b)}(c)?c:b.title;!(0,cQ.xb)(a)&&(d.sections.some(b=>cV(b).includes(cV(a))||cV(a).includes(cV(b)))||d.sections.push(a))}}let i=/^(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施$/u;for(let a of g){if(!/人[、,,]材[、,,]机/u.test(a.title))continue;let b=new Set,c=[];for(let d of a.sections){if(cV(d)===cV(a.title))continue;let e=i.exec(d.trim());e?b.has(e[1])||(b.add(e[1]),c.push(d.trim())):c.push(d)}for(let a of["人","材","机"])b.has(a)||c.push(`确保${a}的保障体系与措施`);c.length!==a.sections.length&&(a.sections=c)}if(a.evaluationItems?.length){let b=a.chapters.map(cW);for(let{item:d}of(c=function(a,b,c){let d=[],e=a.map(cW);for(let a of b){let b=a.title;if(!b||e.some(a=>(function(a,b){let c=cV(b);return!!c&&(a.includes(c)||c.includes(a.slice(0,40)))})(a,b)))continue;let f=0;if(c?.semanticSimilarity)for(let a of e)f=Math.max(f,c.semanticSimilarity(b,a));f>=aH.Eh||d.push({item:a,title:b,bestSimilarity:c?.semanticSimilarity?f:void 0})}return{items:b,uncovered:d}}(a.chapters,a.evaluationItems,{semanticSimilarity:a.semanticSimilarity})).uncovered){let c=d.title;if(!c||(0,av.Fe)(c)||(0,av.ob)(c)||(0,cQ.xb)(c))continue;let f=b.reduce((b,d,e)=>{let f=a.semanticSimilarity?a.semanticSimilarity(c,d):+!!d.includes(cV(c));return f>b.score?{index:e,score:f}:b},{index:-1,score:-1}).index,h=g[f>=0?f:0];h.sections.some(a=>cV(a).includes(cV(c))||cV(c).includes(cV(a)))||(h.sections.push(c),h.purpose=`${h.purpose||""};系统已按招标文件技术评审条目自动补足小节“${c}”,必须基于项目资料与适用技术展开实质内容。`,e.push({level:"warning",severity:"warning",message:`评分标准条目“${c}”无承接章节,已自动补小节“${c}”至“${h.title}”`,suggestion:"请确认补充小节与招标文件评审条目口径一致。"}))}}for(let b of(0,cR.yt)(a))if("general"!==b)for(let a of cU[b]){let b=cV(g.map(a=>`${a.title} ${(a.sections||[]).join(" ")}`).join(" "));if(a.requiredSectionPatterns.some(a=>a.test(b)))continue;let c=g.findIndex(b=>{let c=cV(b.title);return a.chapterPatterns.some(a=>a.test(c))}),d=g[c>=0?c:0];(0,cQ.xb)(a.title)||d.sections.push(a.title)}return{diagnostics:d,issues:e,enrichedChapters:g,criteriaAudit:c}}var cY=c(18351),cZ=c(22496),c$=c(67680),c_=c(13424);function c0(a){return"string"==typeof a?a:a.phrase}function c1(a){if("detector"===a.kind)return a.ids.length>0?`判据 ${a.ids.join("、")}`:void 0;if("threshold"===a.kind){let b=c_.n3[a.id],c=b?.label??a.id,d=b?.unit??"";return`阈值 ${c} ${a.value}${d}`}return a.items.length>0?`人工核对 ${a.items.slice(0,3).join(";")}`:void 0}var c2=c(45304),c3=c(32374),c4=c(71536);function c5(a){return a.replace(/\s+/gu,"").toLowerCase()}var c6=c(81892),c7=c(68977),c8=c(94281),c9=c(86710),da=c(30355),db=c(32434);function dc(a,b){let c=b[0]?.title?.trim();return c?`${a}(${c.slice(0,12)})`:a}var dd=c(84450),de=c(2773),df=c(38115),dg=c(31129);let dh={noImprovementRounds:3,budgetUsedRatio:.8,impactedNodeCount:5},di={continue:"照常推进",throttle:"按预算降档",resize_scope:"缩范围",replan_chapter:"重切块",swap_evidence:"换证据重试",adjust_depth:"调详略重试",request_human:"请示人",stop_and_preserve:"停止并保交付"};async function dj(a){a.planning.generationDiagnostics.metrics.push({name:"phase:plan",startedAt:a.planning.planPhaseStartedAt,endedAt:Date.now(),durationMs:Date.now()-a.planning.planPhaseStartedAt}),a.chapterLoop.draftPhaseStartedAt=Date.now();let b=(0,Z.UO)(a.blueprint.billFactLock,a.planning.effectiveChapters),c=(0,c7.ym)(a.understanding.writerEvidence,{基坑开挖深度:a.understanding.canonicalFacts?.byKey?.excavation_depth?.value}),d=(0,c9.GG)({texts:(0,c9.IK)([...a.understanding.availableEvidenceScopePaths,...a.prepare.materialFilePaths],b=>a.understanding.getCachedFileDetail(b))}),e=(0,c9.$X)(d.amendments,a.planning.effectiveChapters);if(d.sourceCount>0||e.length>0){a.planning.clarificationAmendments={...d,amendments:e};let b=e.filter(a=>a.chapterTitle).length;for(let a of(console.warn(`[clarification] 答疑技术性修正账本:${e.length} 条(按章归属 ${b} / 全文适用 ${e.length-b}),源 ${d.sourceCount} 份、问答对 ${d.pairCount};缺口:未解析短答 ${d.unparsedAnswers.length} 条、未覆盖平铺技术陈述 ${d.uncoveredStatements.count} 条(其中量值形态 ${d.uncoveredStatements.measureShaped} 条最像漏抽的技术口径,需人工过目)`),d.unparsedAnswers.slice(0,5)))console.warn(`[clarification] 未解析答句(人工复核):Q「${a.question}」→ A「${a.answer}」`);for(let a of d.uncoveredStatements.samples.slice(0,5))console.warn(`[clarification] 未覆盖平铺陈述(无问答结构,判据不抽):${a.text}`)}let h=a=>(0,c9.Fg)(a),i=(0,cR.un)({template:a.prepare.template,chapters:a.planning.effectiveChapters,requirement:a.global.input.requirement}),q=[],r=[],t=new Set,y=!1,z=[],A=new Set,C=(b,c)=>{(0,l.Wl)(a,{batch:"generation.write",id:`supervisor.${c}.${b.kind}`,parentId:(0,l.T1)("write"),type:"supervisor",title:`调度决策:${di[b.kind]}`,status:"stop_and_preserve"===b.kind||"request_human"===b.kind?"failed":"completed",metrics:{action:b.kind,at:c,note:("reason"in b?b.reason:"").slice(0,160)}})},D=(a,b)=>{let c=(0,m.Su)(a.planning.generationDiagnostics),d=c.budget.maxTokensPerDocument>0?c.documentTokens/c.budget.maxTokensPerDocument:0,e=function(a){let b=a.completedChapterTokens.filter(a=>Number.isFinite(a)&&a>0);if(0!==b.length)return b.reduce((a,b)=>a+b,0)/b.length}({completedChapterTokens:b.completedChapterTokens});return{action:o({usedRatio:d,remainingTokens:Math.max(0,c.budget.maxTokensPerDocument-c.documentTokens),chaptersTotal:a.planning.effectiveChapters.length,chaptersLeft:b.chaptersLeft,configuredConcurrency:b.configuredConcurrency,...void 0!==e?{avgTokensPerChapter:e}:{},chapterOutcomes:b.chapterOutcomes,budgetStopped:!1}),usedRatio:d,avgTokensPerChapter:e}};for(let d=0;d<a.planning.effectiveChapters.length;d+=a.blueprint.chapterConcurrency){let E;if(a.global.input.shouldPause?.()===!0){a.global.pausedByRequest=!0,console.log(`[gen] pause honored at chapter boundary: ${d}/${a.planning.effectiveChapters.length} 章已调度`);break}let F=(0,m.nY)((0,m.Su)(a.planning.generationDiagnostics));if(F){let b=a.planning.effectiveChapters.length-d,c=`文档预算耗尽(${F.kind}:${F.observed}/${F.limit}),后续 ${b} 章未生成:${F.message}`;a.understanding.failedChapterMessages.push(c),a.planning.generationDiagnostics.llm.lastError=c,console.error(`[gen] document budget exhausted at chapter boundary ${d}/${a.planning.effectiveChapters.length}: ${F.message}`);let e={issue:{level:"error",severity:"blocker",category:"structure",message:c},reason:`基础设施上限到达(${F.kind}):${F.observed}/${F.limit} —— 非内容缺陷,是未发起/未完成`,declaredAt:`${d}/${a.planning.effectiveChapters.length}`,declaredAtMs:Date.now()};"C"===F.escalation&&a.understanding.clarificationRequests&&a.understanding.clarificationRequests.push({question:`文档预算耗尽(${F.kind}:${F.observed}/${F.limit})——后续 ${b} 章未生成。是否调高上限或缩小范围后重跑?候选:① 加预算重跑剩余章节;② 缩小文档范围(少写几章);③ 接受当前成稿并人工补写。`,blocking:!1,askedAt:`${d}/${a.planning.effectiveChapters.length}`,askedAtMs:Date.now(),status:"pending"}),"unfixable"===F.escalation&&a.understanding.unfixableDeclarations&&a.understanding.unfixableDeclarations.push(e),a.global.emitProgress();break}if(a.planning.planRequests?.some(a=>!A.has(a))){let b=a.planning.planRequests.filter(a=>!A.has(a)),{approved:c,rejected:e}=function(a){let b=[],c=[];for(let d of a.pending){if(d.reason.trim().length<4){c.push({request:d,reason:"理由过短(改规划必须能溯源:说清是资料不足、目标定错,还是块装不下)"});continue}if("split_section"===d.kind){b.push(d);continue}if("rebalance_budget"===d.kind){if(0===(Array.isArray(d.payload?.from)?d.payload.from:[]).length){c.push({request:d,reason:'rebalance_budget 缺少 from("从谁身上扣"必须点名,否则等于凭空加预算)'});continue}b.push(d);continue}if("target_change"===d.kind){let e=a.chapterTargets.get(d.nodeId.trim()),f=Number(d.payload?.delta?.targetWords);if(void 0===e){c.push({request:d,reason:`目标变更指向的节点「${d.nodeId}」不在本次生效大纲里(章 id 逐字比对)`});continue}if(!Number.isFinite(f)||f<=0){c.push({request:d,reason:"target_change 未给出有效 targetWords(至少要一个正数字数标量)"});continue}let g=1.5*e,h=Math.max(600,.5*e);if(f>g){c.push({request:d,reason:`申请的目标 ${f} 字超过上限 ${Math.round(g)} 字(当前 ${e} \xd7 1.5):先按现有目标写,确实写不动就走 declare_missing`});continue}if(f<h){c.push({request:d,reason:`申请的目标 ${f} 字低于下限 ${Math.round(h)} 字:本章会因此不满足篇幅合同,须走"缩减范围"这条人工决策`});continue}b.push(d);continue}c.push({request:d,reason:`不认识的请求种类「${String(d.kind)}」:不予受理`})}return{approved:b,rejected:c}}({pending:b,chapterTargets:new Map(a.planning.effectiveChapters.map(b=>[b.id,a.planning.documentBudget.chapterTargets.get(b.id)??0]))});for(let a of b)A.add(a);for(let b of(z.push(...c),e))console.warn(`[gen] 规划请求被拒(${b.request.kind} @ ${b.request.nodeId}):${b.reason}`),a.planning.generationDiagnostics.llm.lastInfo=`规划请求被拒:${b.request.kind} @ ${b.request.nodeId} —— ${b.reason}`;(c.length>0||e.length>0)&&(0,l.Wl)(a,{batch:"generation.write",id:`supervisor.ch${d}.planRequests`,parentId:(0,l.T1)("write"),type:"supervisor",title:`调度决策:规划请求 ${c.length} 批准 / ${e.length} 拒绝`,status:"completed",metrics:{approved:(c.map(a=>`${a.kind}@${a.nodeId}`).join("、")||"(无)").slice(0,160),rejected:(e.map(a=>`${a.request.kind}@${a.request.nodeId}`).join("、")||"(无)").slice(0,160)}})}let G=D(a,{chaptersLeft:a.planning.effectiveChapters.length-d,configuredConcurrency:a.blueprint.chapterConcurrency,completedChapterTokens:q,chapterOutcomes:r}),H=Math.max(1,Math.min("throttle"===G.action.kind?G.action.batchSize:a.blueprint.chapterConcurrency,a.planning.effectiveChapters.length-d));H!==a.blueprint.chapterConcurrency&&(a.planning.generationDiagnostics.metrics.push({name:"chapter-pacing-throttle",startedAt:Date.now(),endedAt:Date.now(),durationMs:0,meta:{configured:a.blueprint.chapterConcurrency,batchSize:H,mode:"throttle"===G.action.kind?G.action.mode:"full",reason:G.action.reason}}),C(G.action,`ch${d}`),console.warn(`[gen] 预算配速:本批 ${H} 章(原 ${a.blueprint.chapterConcurrency})—— ${G.action.reason}`)),"request_human"!==G.action.kind||y||(y=!0,C(G.action,`ch${d}`),a.understanding.clarificationRequests?.push({question:`${G.action.question}(读数:已用 ${Math.round(100*G.usedRatio)}% 预算${G.avgTokensPerChapter?`,实测均耗 ${Math.round(G.avgTokensPerChapter)} token/章`:""})`,blocking:!1,askedAt:`ch${d}`,askedAtMs:Date.now(),status:"pending"}),console.warn(`[gen] 主智能体请示人(预算可行性):${G.action.reason}`));let I=a.planning.effectiveChapters.slice(d,d+H),J=I.map(()=>new AbortController),K=a.global.input.signal,L=()=>{for(let a of J)a.abort()};K&&(K.aborted?L():K.addEventListener("abort",L,{once:!0}));let M=Math.max(1,I.length),N=Math.max(1,(0,aV.Sq)()),O=Math.max(1,Math.ceil(M/N)),P=(0,m.Su)(a.planning.generationDiagnostics).budget.maxWallClockPerChapterMs,Q=O>1?{maxWallClockPerChapterMs:P*O}:void 0;O>1&&(a.planning.generationDiagnostics.metrics.push({name:"chapter-wallclock-scaling",startedAt:Date.now(),endedAt:Date.now(),durationMs:0,meta:{inFlightChapters:M,llmSlots:N,factor:O,baseWallClockMs:P,effectiveMs:P*O}}),console.warn(`[gen] 章墙钟按争用度放大 \xd7${O}(同批 ${M} 章 / 在飞上限 ${N}):${P}ms → ${P*O}ms`));let R=await Promise.allSettled(I.map((y,A)=>(0,m.$X)({instance:a.planning.generationDiagnostics,chapterId:y.id,...Q?{budget:Q}:{}},async()=>{let D,E=d+A,F=J[A]?.signal??K,G=a.prepare.promptPlan.writerPrompts[0]?.id,H=(0,av.GQ)(y.title),I=(0,m.Su)(a.planning.generationDiagnostics).budget,L=(y.sections?.length??0)>0?Math.max(1,Math.ceil((y.sections?.length??1)/2)):1,M=L*I.maxTurnsPerBlock*2;I.maxCallsPerChapter<M&&console.warn(`[gen] 章级调用上限偏小:${y.title} 约 ${L} 块 \xd7 每块重试包 ${2*I.maxTurnsPerBlock} 次 = 至少 ${M} 次,而上限是 ${I.maxCallsPerChapter} 次——该章可能因额度耗尽的块"未发起"(用 AGENT_MAX_CALLS_PER_CHAPTER 调整)`);let N=new Map,O=(0,m.Su)(a.planning.generationDiagnostics).documentTokens,P=!1,Q=b=>{if(P)return;P=!0;let c=(0,m.Su)(a.planning.generationDiagnostics).documentTokens-O;b&&c>0&&q.push(c);let d=[...N.values()];r.push({chapterId:y.id,chapterTitle:H,plannedBlocks:d.length,succeededBlocks:d.filter(a=>a.passed).length,failureKinds:[...new Set(d.flatMap(a=>a.kinds))],replanned:t.has(y.id)})};(0,f.Te)(F);let R=(0,dd.Gz)(a.understanding.rolePoolRisk),S=a.blueprint.blueprintActive?{missing:[],failedChecks:[]}:(0,x.RT)(y.title,a.blueprint.integratedBlueprint?.validation,a.planning.chapterIntentClassifier);if(S.missing.length>0){let b=S.failedChecks.length>0?`蓝图校验项「${S.failedChecks.join("、")}」未通过`:"蓝图校验未通过或构建异常",c=(a.blueprint.integratedBlueprint?.diagnostics?.warnings??[]).filter(a=>/清单|知识库索引|索引/u.test(a)).slice(0,3),d=`${(0,av.GQ)(y.title)} 依赖蓝图权威 [${S.missing.join("、")}],${b},已按节点级把关阻断生成`,e=(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:G,status:"failed",message:d,details:["数值密集型章所需蓝图权威不可用时禁止无权威成稿",...c,c.length>0?"以上为清单侧诊断:按提示补齐资料/重建索引后重试;若本项目确无工程量清单,请在模板资料需求中确认「工程量清单」为必需项":"请检查清单解析与蓝图构建诊断后重试"],progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"章节阻断"}},{subtitle:H,order:E});(0,l.Wl)(a,{batch:"generation.write",stage:e,chapterId:y.id,chapterTitle:H}),a.understanding.failedChapterMessages.push(d),a.understanding.chapterGenerationStagesByOrder[E]=e,a.global.emitProgress();return}let T=Date.now();try{let d,q,r,A;(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:G,status:"running",message:`${(0,av.GQ)(y.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${E+1}/${a.planning.effectiveChapters.length}`,`二级小节:${y.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"章节生成"}},{subtitle:H,order:E})}),a.global.emitProgress();let I=a.global.input.resumeChapters?.find(a=>a.id===y.id||a.title===y.title),J=I?.content?.trim(),K=I?.evidence?.length?[...I.evidence]:[],L=a.prepare.projectUnderstanding.chapterPlans.find(a=>a.chapterId===y.id||a.chapterTitle===y.title),M=L?Object.values(L.evidenceQueries).flat().filter(Boolean):[],O=y.queries.length>0?y.queries:[a.prepare.template.name,a.prepare.template.outputTitle,y.title],P=a.understanding.chapterGraphMap.get(y.id);if(a.understanding.projectGraph&&P&&P.graphFiles.size>0)for(let b of[...P.graphFiles]){let c=a.understanding.getCachedFileDetail(b);if(c?.chunks?.length)for(let d of c.chunks)K.push({chapterId:y.id,filePath:c.file?.relativePath||b,score:5+(P.graphWorks.length+P.graphMethods.length)*.5,content:d.content,roleId:a.understanding.fileRoleByPath.get(b),processingType:a.understanding.fileProcessingByPath.get(b),sectionTitle:d.sectionTitle,source:"graph-evidence"})}let U=a.planning.chapterIntentClassifier.needsBasicFacts(y.title),V=a.blueprint.billFactLock?(0,Z.Zc)(a.blueprint.billFactLock,y.title,y.sections||[]):[],W=(0,s.QP)(y,[...O,...M,...V],[]),ab=Date.now();(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:G,status:"running",message:`${(0,av.GQ)(y.title)} 正在执行质量优先的章节检索${P?.graphFiles.size?`(图谱匹配 ${P.graphFiles.size} 个文件)`:""}`,details:W.map(a=>`检索:${a.slice(0,42)}`),progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"证据检索"}},{subtitle:(0,av.GQ)(y.title),order:E})}),a.global.emitProgress();let ac=J?[]:[...a.understanding.availableEvidenceScopePaths].filter(Boolean).sort(),ad=J?[]:a.understanding.scopedIntelligence?.evidenceByChapterId?.[y.id]||[];if(ad.length>0){K.push(...ad);let b=a.planning.generationDiagnostics.evidence;b.intentEvidenceInjected=(b.intentEvidenceInjected??0)+ad.length}let ae=[],af=(y.requiredFacts||[]).filter(a=>!!a&&!W.some(b=>b.includes(a)||a.includes(b))).map(a=>`${y.title} ${a}`),ag=(a.prepare.requirementSemantics?.factClues||[]).filter(a=>!W.some(b=>b.includes(a)||a.includes(b))&&!af.some(b=>b.includes(a)||a.includes(b))).map(a=>`${y.title} ${a}`.trim()).slice(0,8),ah=[...W,...af,...ag];if(ac.length>0&&ah.length>0){(0,f.Te)(F);let b=await (0,f.l$)(ah,async b=>a.understanding.searchWithCache(b,ac,Math.min(a.understanding.requestedEvidencePerChapter,12),y.title,a.prepare.materialScope.selectedMaterialRoots),{kind:"search"});ae.push(...b)}for(let b of(a.planning.generationDiagnostics.evidence.searchQueries+=ah.length,a.planning.generationDiagnostics.evidence.searchMs+=Date.now()-ab,(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:G,status:"running",message:`${(0,av.GQ)(y.title)} KB 检索完成:${ah.length} 组查询,准备深度召回与语义排序`,progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"证据检索"}},{subtitle:H,order:E})}),a.global.emitProgress(),ae)){K.push(...b.map(b=>({chapterId:y.id,filePath:b.filePath,score:b.score,content:b.content,roleId:a.understanding.fileRoleByPath.get(b.filePath),processingType:a.understanding.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:b.source})));let c=a.planning.generationDiagnostics.evidence;c.retrievedEvidenceInjected=(c.retrievedEvidenceInjected??0)+b.length}U&&ac.length>0&&a.blueprint.basicFactSearchResults.length>0&&K.push(...a.blueprint.basicFactSearchResults.map(b=>({chapterId:y.id,filePath:b.filePath,score:b.score,content:b.content,roleId:a.understanding.fileRoleByPath.get(b.filePath),processingType:a.understanding.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"basic-fact-cache"})));let ai=J?[]:await (0,de.$b)({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:y,plan:L,profile:a.prepare.projectMaterialProfile,scopedFilePaths:ac,scopedMaterialRoots:a.prepare.materialScope.selectedMaterialRoots,limitPerQuery:Math.min(a.understanding.requestedEvidencePerChapter,10),signal:F}).catch(b=>(a.planning.generationDiagnostics.evidence.retrievalFailures=(a.planning.generationDiagnostics.evidence.retrievalFailures??0)+1,a.planning.generationDiagnostics.llm.lastError=`计划材料证据召回失败(${y.title}):${b instanceof Error?b.message:String(b)}`,console.error(`[gen] 计划材料证据召回失败(${y.title})`,b),[]));K.push(...ai);let aj=[];a.planning.chapterIntentClassifier.needsBasicFacts(y.title)&&K.push(...a.understanding.safeProjectBasicEvidence.map(a=>({...a,chapterId:y.id,source:"pinned-evidence"})));let ak=a.understanding.writerEvidence.filter(a=>/招标|投标须知|评标办法|专用合同条款|投标人须知/u.test(`${a.filePath||""}${a.sectionTitle||""}`));/概况|工程|项目|总体|部署/u.test(y.title)&&ak.length>0&&K.push(...ak.map(a=>({...a,chapterId:y.id,source:"pinned-evidence"})));let al=a.prepare.materialScope.selectedMaterialRoots[0]||"";for(let b of(y.pinnedEvidenceFilePaths||[]).filter(Boolean)){let c=b.replace(/\\/gu,"/").replace(/^\.\//u,"").replace(/^\/+/u,""),d=al&&c!==al&&!c.startsWith(`${al}/`)?`${al}/${c}`:c,e=a.understanding.getCachedFileDetail(d);if(!e){let c=a.planning.generationDiagnostics?.evidence;c&&(c.pinnedEvidenceMissed=(c.pinnedEvidenceMissed??0)+1),console.warn("[stage-chapter-loop] pinned 证据文件未命中知识库(配置漂移或文件未入库)",{chapter:y.title,pinnedPath:b,resolvedPath:d});continue}K.push(...e.chunks.map(b=>({chapterId:y.id,filePath:e.file.relativePath,score:1,content:b.content,roleId:a.understanding.fileRoleByPath.get(e.file.relativePath),processingType:a.understanding.fileProcessingByPath.get(e.file.relativePath),sectionTitle:b.sectionTitle,source:"pinned-evidence"})))}let am=K;if(!J&&a.prepare.webAccessConfig.enabled&&a.prepare.webAccessConfig.allowProjectFacts){let b=await (0,c4.gT)({config:a.prepare.webAccessConfig,chapterId:y.id,chapterTitle:y.title,sectionTitles:y.sections||[],runtimeRules:a.prepare.runtimePromptRules,localFacts:[...a.understanding.preliminaryFactsModel.project,...a.understanding.preliminaryFactsModel.schedule,...a.understanding.preliminaryFactsModel.quality,...a.understanding.preliminaryFactsModel.safety,...a.understanding.preliminaryFactsModel.resources,...a.understanding.preliminaryFactsModel.preciseFacts],signal:F});a.understanding.webResearchReport.queries.push(...b.queries),a.understanding.webResearchReport.filteredCount+=b.filtered,a.understanding.webResearchReport.evidenceCount+=b.evidence.length,b.evidence.length>0&&(a.understanding.webResearchReport.chapters.push(y.title),am.push(...b.evidence.map(a=>({...a,chapterId:y.id})))),b.failedQueries>0&&(a.understanding.webResearchReport.failedCount=(a.understanding.webResearchReport.failedCount??0)+b.failedQueries,a.planning.generationDiagnostics.llm.lastError=`联网检索失败 ${b.failedQueries} 次(${y.title}):${b.failures.slice(0,3).join(";")}`)}let an=J?[]:(0,de.SK)({project:a.understanding.project,chapter:y,plan:L,profile:a.prepare.projectMaterialProfile,scopedFilePaths:ac,highRisk:R.highRisk});an.length>0&&am.push(...an);let ao=b=>((0,ax.f2)(b,a.planning.earlyOverrideList),a.understanding.excludedEvidenceKeys.size>0?b.filter(b=>!a.understanding.excludedEvidenceKeys.has((0,cQ.hM)(b))):b);am=ao(am);let ap=(()=>{let a=Number(process.env.DOCUMENT_SEMANTIC_TOP_CANDIDATES);return Number.isFinite(a)&&a>0?Math.floor(a):3e3})(),aq=(0,s.Mz)(y,am,ap,h),ar=await (0,aH.Mv)([cW(y)],aq.map(s.t7)),as=(0,s.UG)(y,am,{preservePinned:!0,carrierBoost:h,semantic:{similarity:ar,queryText:cW(y)}},a.planning.generationDiagnostics);as=(0,v.pm)(as,a.understanding.canonicalFacts.scopeConflicts);let at=y.requiredFacts.filter(a=>!as.some(b=>(0,cP.Lk)(b,a))),au=0,aw=(0,p.kO)(a.understanding.bidComposition),ay=P?[P.graphWorks.length?`图谱识别本章工程内容:${P.graphWorks.join("、")}`:"",P.graphMethods.length?`图谱识别本章施工方法:${P.graphMethods.join("、")}`:"",P.graphBoqItems.length?`图谱识别本章BOQ清单项(${P.graphBoqItems.length}项):${P.graphBoqItems.map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",P.gaps.length?`图谱识别本章资料缺口:${P.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",aB=(0,v.Bf)(a.understanding.canonicalFacts.scopeConflicts),aC=(()=>{if(0===a.blueprint.requirementAssignments.length)return[];let b=(0,bC.NT)(y.title);return a.blueprint.requirementAssignments.filter(a=>a.chapterTitle===b).map(a=>a.entry)})(),aD=(0,bC.HF)(aC),aE=aC.length>0?a=>(0,cY.mG)(aC,a):void 0,aF=(()=>{try{let a=(0,c2.l1)();return a.length>0?a:c3.d7}catch{return c3.d7}})(),aG=(y.sections||[]).filter(Boolean),aI=b=>{let c=function(a){let b=a.budgetChars??2e3,c=(0,c$.mG)(a.chapterTitle,a.sections,a.projectType,a.skills);if(0===c.length)return{text:"",hits:[],truncated:!1,dropped:[]};let d=[],e=[],f=new Set,g=0,h=!1;for(let i of c){let c=function(a,b,c=3){let d=b.replace(/\s+/gu,"");return a.map((a,b)=>{let c=(0,cZ.VY)(a);return c?{id:a,index:b,score:[c.name,...c.aliases||[]].filter(Boolean).reduce((a,b)=>{let c=String(b).replace(/\s+/gu,"");return c.length<2?a:d.includes(c)?Math.max(a,c.length):a},0)}:{id:a,index:b,score:0}}).filter(a=>a.score>0).sort((a,b)=>b.score-a.score||a.index-b.index).slice(0,c).map(a=>a.id)}(i.knowledge.filter(a=>"processCard"===a.kind).flatMap(a=>a.ids??[]),a.blockText),j=i.forbidden.map(c0).filter(Boolean),k=i.acceptance.map(c1).filter(a=>!!a);if(0===c.length&&0===j.length&&0===k.length)continue;let l=[`【领域规则\xb7${i.id}】以下为本工程类型的行业做法与验收口径(**写作先验,不是本项目的资料事实**;按本项目实际做法取用,禁止当资料原文引用,禁止编造本项目没有的参数数值)`],m=0;for(let a of c){let c=(0,cZ.VY)(a);if(!c)continue;let d=`▸ ${c.name}(工序链):${c.process.join(" → ")}`;for(let[a,e]of(l.push(d),m+=d.length,[["工艺参数",c.params],["检测验收",c.acceptance]]))for(let c of e){let d=` \xb7 ${a}:${c}`;if(g+m+d.length>b){h=!0,f.add(`${a}条目`);continue}l.push(d),m+=d.length}l.push(" \xb7 规范依据:按现行国家、行业标准及项目资料明确的规范版本执行"),m+=30}j.length>0&&l.push(`✗ 本工程类型**禁写**(工艺不匹配):${j.join("、")}`),k.length>0&&l.push(`✓ 验收口径:${k.join(";")}`);let n=l.join("\n");if(g+n.length>b){h=!0,f.add(`${i.id} 整包`);continue}g+=n.length,e.push(n),d.push({skillId:i.id,matchedBy:function(a,b,c,d){let e=(0,c$.mJ)(a,b,c,d),f=[`章域 ${a.match.chapterDomain}`];return e.matchedKeywords.length>0&&f.push(`小节关键词 ${e.matchedKeywords.join("、")}`),e.regexHit&&f.push("正则命中"),f.push(`工程类型 ${d}`),f.join(" \xd7 ")}(i,a.chapterTitle,a.sections,a.projectType),cards:c,forbiddenCount:j.length,acceptanceCount:k.length,injectedChars:n.length})}return{text:e.join("\n\n"),hits:d,truncated:h,dropped:[...f]}}({chapterTitle:y.title,sections:aG,blockText:`${b.title} ${b.subPoints.map(a=>a.title).join(" ")}`,projectType:i[0]??"general",skills:aF});for(let d of c.hits)(0,l.Wl)(a,{batch:"generation.write",id:`skill.load.${y.id}.${(0,cY.ui)(b.title)}.${d.skillId}`,parentId:(0,l.Ts)(y.id),type:"skill.load",title:`技能命中:${d.skillId}`,status:c.truncated?"repairing":"completed",chapterId:y.id,chapterTitle:H,metrics:{skillId:d.skillId,cards:d.cards.join("、"),命中依据:d.matchedBy,注入字符:d.injectedChars,禁配:d.forbiddenCount,验收判据:d.acceptanceCount,...c.truncated?{预算裁剪:c.dropped.join("、")||"是"}:{}}});return{text:c.text}},aJ=(()=>{if(0===a.blueprint.structureAssignments.length)return"";let b=(0,bC.NT)(y.title),c=a.blueprint.structureAssignments.filter(a=>a.chapterTitle===b).map(a=>a.requirement);return(0,bC.FR)(c,{bodyTableForbidden:(0,p._C)(a.understanding.bidComposition),bodyFigureForbidden:aw})})(),aK=a.planning.chapterIntentClassifier.needsDustControl(y.title)||a.planning.chapterIntentClassifier.needsDustControl(`${y.title}${y.purpose||""}`)?[`【扬尘治理六个百分百——规范固定条目,必须逐项落实并写入正文,每项一句具体措施,六项不得缺项;若本项目无拆迁工程,对“${aa.z1}”必须显性写明“${aa.Dm}”,不得省略】`,...aa.No.map(a=>`- ${a.name}`)].join("\n"):"",aL=(y.sections||[]).filter(a=>!/^(?:施工概况|施工流程|施工方法)$/u.test(a.trim())&&!/^附录/u.test(a.trim())),aM=aL.length>0?`【必须输出以下规划小节为三级标题(### 小节名),逐个小节展开正式正文:每小节正文不少于 100 字,不得只写标题、不得空小节、不得用表格替代正文;小节名与章标题相同或相近也必须输出,不得省略或合并】${aL.join("、")}`:"",aN=a.blueprint.billFactLock?(0,Z.uD)(a.blueprint.billFactLock,y.title,{sections:y.sections||[]}):"",aO=a.blueprint.billFactLock?(0,Z.zK)(a.blueprint.billFactLock,b,y.title):[],aP=a.blueprint.drawingFactLock?(0,$.pH)(a.blueprint.drawingFactLock,y.title,{sections:y.sections||[]}):"",aQ=(0,Y.GA)(a.understanding.preliminaryFactsModel,y.title,{sections:y.sections||[]}),aR=function(a,b){let c=b.indexOf(a),d=(a,b)=>`${(0,av.tb)(a,b.title)}${b.sections?.length?`(小节:${b.sections.join("、")})`:""}`,e=b.map((a,b)=>({item:a,index:b})).filter(b=>b.item!==a);return["【跨章写作职责分工——只就本章主题展开,写时即不产生跨章重复】",`- 本章职责:${d(c>=0?c:0,a)}`,...e.length>0?["- 其他章节职责(不得展开复述其主题内容):",...e.map(a=>` - ${d(a.index,a.item)}`)]:[],"- 写作规范:只就本章主题展开;其他章节主题的内容如需关联,一句话引用(“详见第X章”,X 替换为实际章号),不得展开复述;篇幅以本节合同字数为准,不得借写其他章节主题充数。"].join("\n")}(y,a.planning.effectiveChapters),aS=/施工方法|施工方案|施工工艺|主要施工内容|分部分项/u.test(y.title)?(()=>{let b=(0,_.Hp)((0,_.v7)(a.understanding.preliminaryFactsModel));return b?`【本章必须覆盖的清单分部分项全景(下列专有分项逐项写入正文施工方法,不得只写道路/铺装/绿化等大类而遗漏清单独有分项)】
303
- ${b}`:""})():"",aT=(0,c6.uQ)(y.title,i),aV=aT?`【本章写作重点】${aT.goal}
301
+ 保持表头结构与列数不变,不得新增、删除或合并小节;只修改缺陷表格相关局部文本。`,q=await (0,E.b)({originalContent:b.content,repairRound:"table-repair",diagnostics:a.generationDiagnostics,apply:async()=>{let c=(await a.withProgressHeartbeat(()=>(0,g.l8)({template:a.template,chapter:{id:b.id,title:b.title,content:b.content,evidence:b.evidence,missingFacts:b.missingFacts,sections:b.sections},issues:[f,h],promptTexts:p,requirement:a.requirement,forbidDrawingImages:!1,diagnostics:a.generationDiagnostics,signal:a.signal,patchGuard:(0,g.XG)("table-repair",a.generationDiagnostics)}))).content||b.content;return(0,bo.RT)(c,i).content},recheck:a=>[(0,X.NS)(a).filter(a=>"error"===a.level&&/空单元格|占位符单元格|列数不一致/u.test(a.message)&&a.message.includes(i)&&(!j||a.message.includes(j))).length]}),r=q.content;q.rolledBack||r===b.content||(a.finalChapterDrafts[d]={...b,content:m?(0,s.w_)(r,m):r},c+=1);let t=q.rolledBack||q.afterMetrics[0]>0,u=(0,k.X5)({type:"llm_review",roleId:`agent-table-fix-${b.id}-${e}`,status:t?"failed":"success",message:q.rolledBack?`表格数据修复已回滚:${b.title}(修复后缺陷增多,保留修复前正文)`:t?`表格数据修复未生效:${b.title}`:`表格数据修复完成:${b.title}`,details:[f]},{subtitle:"表格数据修复"});(0,l.Wl)(a,{batch:"finalize.repairRounds",stage:u}),a.emitProgress(a.finalChapterDrafts)}}))}c>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle())}}async function b2(a){let b=(0,aZ.PW)(a.finalChapterDrafts),c=b.length>0?(0,aZ.hq)(a.finalChapterDrafts,b):{deletedCount:0,deletedSentences:[],remaining:b},d=0;for(let b of a.finalChapterDrafts){if(!b.content?.trim())continue;let a=(0,w.Vc)(b.content);a.removedCount>0&&(b.content=a.markdown,d+=a.removedCount)}let e=c.deletedCount+d,f=(0,k.X5)({type:"validation",roleId:"templating-sweep",status:"success",message:e>0?`模板化链尾清理:零信息前缀句删除 ${c.deletedCount} 处、重复段落去重 ${d} 处`:"模板化链尾核对通过:无零信息前缀句与重复段落残留",details:c.deletedSentences.length>0?c.deletedSentences.slice(0,3).map(a=>`前缀句删除:「${a.slice(0,40)}」`):void 0},{subtitle:"模板化清理收口"});(0,l.Wl)(a,{batch:"finalize.repairRounds",stage:f}),e>0&&(a.finalMarkdown=a.rebuildFinalMarkdown(),await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts)}async function b3(a){let b=function(a){let b,c=a.split("\n"),d=[];if(c.forEach((a,e)=>{let f=a.trim();/^##\s+/u.test(f)&&(b&&(b.endLine=e,d.push(b)),b={startLine:e,endLine:c.length,title:f.replace(/^#+\s*/u,"")})}),b&&d.push(b),0===d.length)return{markdown:a,prefixRemoved:0,prefixSentences:[],paragraphRemoved:0,targetCount:0};let e=d.map((a,b)=>({id:`md-chapter-${b}`,title:a.title,content:c.slice(a.startLine,a.endLine).join("\n"),evidence:[],missingFacts:[]})),f=(0,aZ.PW)(e),g=f.length>0?(0,aZ.hq)(e,f):{deletedCount:0,deletedSentences:[],remaining:f},h=0;for(let a of e){if(!a.content?.trim())continue;let b=(0,w.Vc)(a.content);b.removedCount>0&&(a.content=b.markdown,h+=b.removedCount)}if(0===g.deletedCount&&0===h)return{markdown:a,prefixRemoved:0,prefixSentences:[],paragraphRemoved:0,targetCount:f.length};let i=[...c];for(let a=d.length-1;a>=0;a-=1){let b=d[a];i.splice(b.startLine,b.endLine-b.startLine,...e[a].content.split("\n"))}return{markdown:i.join("\n"),prefixRemoved:g.deletedCount,prefixSentences:g.deletedSentences,paragraphRemoved:h,targetCount:f.length}}(a.finalMarkdown),c=b.prefixRemoved+b.paragraphRemoved,d=(0,k.X5)({type:"validation",roleId:"templating-tail-replay",status:"success",message:c>0?`模板化链尾重放(markdown):零信息前缀句删除 ${b.prefixRemoved} 处、重复段落去重 ${b.paragraphRemoved} 处`:"模板化链尾重放核对通过:无零信息前缀句与重复段落残留",details:b.prefixSentences.length>0?b.prefixSentences.slice(0,3).map(a=>`前缀句删除:「${a.slice(0,40)}」`):void 0},{subtitle:"模板化清理收口"});(0,l.Wl)(a,{batch:"finalize.repairRounds",stage:d}),c>0&&(a.finalMarkdown=b.markdown,await a.recomputeFinalValidationBundle()),a.emitProgress(a.finalChapterDrafts)}async function b4(a){let b=(0,A.tI)(a.finalMarkdown,a.truthValues||[]);if(0===b.inserted.length)return;a.finalMarkdown=b.markdown;let c=(0,k.X5)({type:"validation",roleId:"caliber-placement-backfill",status:"success",message:`口径链尾回填:${b.inserted.length} 项项目级口径在正文逐字缺位,已按真值层生效值补写(${b.inserted.map(a=>`${a.attribute}=${a.value}`).slice(0,6).join("、")})`},{subtitle:"口径回填"});(0,l.Wl)(a,{batch:"finalize.pipeline",parentId:(0,l.ku)("caliber-placement-backfill"),type:"round.fix",stage:c}),await a.recomputeFinalValidationBundle()}async function b5(a){let b=function(a){let b=a.finalMarkdown;if(!b)return{markdown:b,restored:0,labels:[]};let c=(0,D.F9)(b),e=(0,D.ay)(c),f=(0,D.bZ)(c);if(0===e.length&&0===f.length)return{markdown:b,restored:0,labels:[]};let g=b,h=0,i=[];for(let b of a.finalChapterDrafts)for(let a of(b.content??"").split(/(?<=[。;\n])/u)){let b=a.trim();if(b.length<8)continue;let c=(0,C.eI)(b).text;if(c===b||c.trim().length<8||!((0,D.ay)(b).some(a=>e.some(b=>(0,D._N)(a,b)))||(0,D.bZ)(b).some(a=>f.some(b=>(0,D.no)(a,b)))))continue;let j=function(a){let b=a.split(/([,,、;;])/u),c=[];for(let a=0;a<b.length;a+=2){let e=b[a]??"";if(O(e)&&!function(a){return!!O(a)&&!!((0,D.bZ)(a).length>0||(d||(d=RegExp(D.V2.source,"u")),d.test(a)))&&!O(a.replace(D.RO,"").replace(D.V2,""))}(e))continue;c.push(e);let f=b[a+1];f&&a+2<b.length&&c.push(f)}return c.join("").replace(/^[,,、]+/u,"").replace(/[,,、]+$/u,"")}(b);if(j===c||!g.includes(c)||g.includes(j))continue;let k=(0,D.ay)(j).filter(a=>!(0,D.ay)(c).some(b=>(0,D._N)(b,a)));if(0!==k.length||0!==(0,D.bZ)(j).length)for(let a of(g=g.replace(c,()=>j),h+=1,k)){let b=(0,D.Lb)(a);i.includes(b)||i.push(b)}}return 0===h||H(g)<H(b)?{markdown:b,restored:0,labels:[]}:{markdown:g,restored:h,labels:i}}(a);if(0===b.restored)return;a.finalMarkdown=b.markdown,await a.recomputeFinalValidationBundle();let c=`链尾编制依据引用回补:${b.restored} 处被链尾指向型清洗误删的标准引用小句按章草稿恢复(覆盖 ${b.labels.slice(0,6).join("、")}${b.labels.length>6?" 等":""})`;a.generationDiagnostics.llm.lastInfo=c,(0,l.Wl)(a,{batch:"finalize.pipeline",parentId:(0,l.ku)("basis-regulations-tail-citation-replay"),type:"round.fix",stage:(0,k.X5)({type:"reference",roleId:"basis-regulations-tail-citation-replay",status:"success",message:c,details:b.labels.slice(0,12)},{subtitle:"链尾编制依据引用回补"})})}async function b6(a){let b=function(a){let b=(0,D.hK)(a.finalMarkdown);if(0===b.usedNotDeclared.length)return{inserted:0,labels:[]};let c=(0,D.F9)(a.finalMarkdown);if(!c)return{inserted:0,labels:[]};let d=b.usedNotDeclared.filter(a=>!K(c,a));if(0===d.length)return{inserted:0,labels:[]};let e=M(a.finalMarkdown,d.map(b=>L(b,a.finalMarkdown)));return e?{inserted:d.length,labels:d.map(D.Dq),markdown:e}:{inserted:0,labels:[]}}(a);if(0===b.inserted||!b.markdown)return;a.finalMarkdown=b.markdown,await a.recomputeFinalValidationBundle();let c=`链尾编制依据回补:${b.inserted} 条引用未声明的标准补入编制依据小节(${b.labels.slice(0,6).join("、")})`;a.generationDiagnostics.llm.lastInfo=c,(0,l.Wl)(a,{batch:"finalize.pipeline",parentId:(0,l.ku)("basis-regulations-tail-backfill"),type:"round.fix",stage:(0,k.X5)({type:"reference",roleId:"basis-regulations-tail-backfill",status:"success",message:c,details:b.labels.slice(0,12)},{subtitle:"链尾编制依据回补"})})}var b7=c(25018),b8=c(67582);let b9={"fact-coverage":{read:a=>(0,s.br)(a.finalMarkdown,[...a.structuredFacts,...a.factsModel.preciseFacts]).length,caliber:"检测端 rebuildAndRecompute.ts:254 同函数同池(finalMarkdown \xd7 结构化事实池 + preciseFacts)。轮内 recheck 是章级(`uncoveredImportantFacts(content, 该章事实组)`)——**本读数是全文**,章级修完但别章仍缺时本读数不会归零(残余按全文口径登记,宁多不少)。"},"table-quality":{read:a=>(0,X.NS)(a.finalMarkdown).length,caliber:'检测端 documentFinalValidation.ts:367 同函数(finalMarkdown)。轮内 recheck 额外过滤 `level === "error"` 且限「空单元格/占位符单元格/列数不一致」三族 + 表锚点收窄——**本读数因此可能大于轮内残留**(warning 级表格缺陷也算欠活),方向是"宁可多跑一轮幂等修复"。'},"authority-audit-gap":{read:a=>{let b=a.authorityAuditReport;if(b)return(0,b8.Bg)(b).length},recomputeFirst:!0,caliber:"检测端 rebuildAndRecompute.ts:553 同一 issue 产出(审计报告由 recompute 路径刷新——故读数前必须重算)。轮内 recheck 是逐章「无来源数值句」计数,本读数是审计报告全量条目。"},"requirements-coverage":{read:a=>a.validationIssues.filter(a=>"blocker"===a.severity&&a.provenance?.detectorId==="requirements-coverage").length,recomputeFirst:!0,caliber:"与轮内入口过滤器逐字同源(requirementResponseRepair.ts:66 requirementResponseBlockers)。轮内 recheck 是「本章未满足条目数」,本读数是 recompute 后的 blocker 全量。"},"critical-section-depth":{read:a=>(0,z.Om)(a.finalChapterDrafts).length,caliber:"检测端 rebuildAndRecompute.ts:264 同函数(finalChapterDrafts)。轮内 recheck 是六族统一收口的**加权残余和**(含 emergency/major/division/参数义务/清单落位等 13 族),本读数只数主锚定一族——**主锚定清零而扩展锚定仍欠时,本循环不重跑该轮**(残留交终门禁照常复核)。"},"construction-org-control-loop":{read:a=>(0,U.Hl)(a.finalChapterDrafts).length,caliber:'检测端 documentFinalValidation.ts:390 同函数(finalChapterDrafts)。轮内 recheck 是 `controlLoopChainScan` 的缺失环节数(章级收窄),本读数是全量链接口缺陷条数,且**含 warning 级**(该族本身是 warning 通道)——读数比轮内大是可接受的,方向是"多跑一轮幂等修复"。'},"construction-org-professional-chain":{read:a=>(0,U.iX)({markdown:a.finalMarkdown,factsModel:a.factsModel,chapters:a.finalChapterDrafts}).length,caliber:"检测端 documentFinalValidation.ts:391 同函数同参(markdown \xd7 factsModel \xd7 chapters)。轮内 recheck 是 `professionalChainScan` 的加权缺陷数(章级收窄)。"},"document-budget":{read:a=>{let b=(0,j.yJ)(a.documentBudget,a.finalMarkdown);return b?Math.max(0,b.currentChars-b.targetChars):0},caliber:"检测端 budget.ts:341 `documentLengthOverflow`(检测这一族本身就用它),读数取 currentChars - targetChars(超出目标的字数)。"},"table-arithmetic-consistency":{read:a=>(0,w.qE)(a.finalMarkdown).length,caliber:"检测端 documentFinalValidation.ts:409 同函数(finalMarkdown)。轮内 recheck 是章级 `countTableArithmeticFindings(content)`(不自洽处数),本读数是全文 blocker 条数。"},"table-caption":{read:a=>(0,aA.XU)(a.finalMarkdown,(0,p._C)(a.bidComposition)).length,caliber:"检测端 documentFinalValidation.ts:484 同函数同参(markdown \xd7 bodyTableForbidden)。轮内 recheck 是章级 `extractTitlelessTableBlocks(content).length`(无题表数)。"},"planned-auto-spec-gate":{read:a=>(0,X.mR)(a.finalMarkdown,a.template).length,caliber:'检测端 documentFinalValidation.ts:480 同函数同参(markdown \xd7 template)。轮内是"按规格闸规则补齐被点名条目",本读数=全文未落位的规格闸条目数。'},"basis-regulations-coverage":{read:a=>(0,X.AN)(a.finalMarkdown,a.blueprintData,{chapterTitles:(a.effectiveChapters||a.template.chapters||[]).map(a=>a.title)}).length,caliber:"检测端 documentFinalValidation.ts:385 同函数同参(markdown \xd7 blueprintData \xd7 章标题清单)。章节标题清单的取值口径(effectiveChapters 优先、退回 template.chapters)与检测端逐字相同。"},"basis-regulations-cross":{read:a=>(0,D.Yw)(a.finalMarkdown).length,caliber:"检测端 documentFinalValidation.ts:389 同函数(finalMarkdown):编制依据↔正文双向对账缺口数。"},"dangerous-applicability":{read:a=>(0,bw.e6)(a.finalMarkdown).length,caliber:"检测端 documentFinalValidation.ts:373 同函数(finalMarkdown):危大工程兜底适用性缺陷数。"},"punctuation-artifact":{read:a=>(0,X.vZ)(a.finalMarkdown).length,caliber:"检测端 documentFinalValidation.ts:380 同函数(finalMarkdown):括号/书名号成对性与标点叠用残留数。"},"min-chapter-section":{read:a=>(0,X.Ty)(a.finalChapterDrafts).length,caliber:"检测端 documentFinalValidation.ts:427 同函数同参(minChapterSectionIssues,读章草稿的 `title` \xd7 `sections`)。覆盖两族:章内重复小节(同名重复)与**重复主题小节**(同为 `classifyThematicSectionKey` 同桶)——后者正是轮 `duplicateThematicSections` 的合并目标,故本读数是该轮的直接收敛量(桶合并后该桶不再 >1 ⇒ 读数下降)。"},"writer-missing-section":{read:a=>a.finalMarkdown.includes("WRITER_MISSING_SECTION")||a.finalMarkdown.includes("Writer 未完成")?1:0,caliber:"检测端 rebuildAndRecompute.ts:280 同判据(finalMarkdown 是否仍含 WRITER_MISSING_SECTION / Writer 未完成)。读数取 0/1(检测端该支最多一条 issue)。"}};async function ca(a,b){let c=(0,b7.nJ)(a);if(!c)return;let d=b9[c.detector];if(!d)return;d.recomputeFirst&&await b.recomputeFinalValidationBundle();let e=d.read(b);if(void 0!==e)return{detector:c.detector,count:e}}async function cb(a,b){let c,d=(0,b7.nJ)(b);if(!d)return{status:"no-anchor",reason:`「${b}」在注册表里没有锚定检测器(无 FixerEntry / 无 anchoredTo;轮名表 \`CHAIN_ROUND_FIXER_IDS\` 亦未登记该轮)——无残余读源 ⇒ 本循环对它只有基线层,不做残余驱动的重跑(显性声明,不是静默跳过)。`};try{c=await ca(b,a)}catch(a){return{status:"read-error",detector:d.detector,reason:`「${b}」残余读数抛错:${a instanceof Error?a.message:String(a)}(锚定检测器「${d.detector}」)——读数失败**不等于**残余为零,本循环因此不对它做残余驱动的重跑;层 0 基线照跑,残留由终门禁照常复核。`}}return c&&c.detector===d.detector?{status:"anchored",detector:d.detector,count:c.count,scope:(0,t.Xh)(d.detector)?.scope==="chapter"?"chapter":"full-document"}:{status:"no-reader",detector:d.detector,reason:`「${b}」的残余读源与注册表锚定不符:判据函数回报「${c?.detector??"缺失"}」,注册表 anchoredTo「${d.detector}」。检测定位=修复定位是红线——读源被换掉会让「残余下降」变成一个无从核对的结论,故此处显性降级(不按 0 处理,也不猜一个兜底)。`}}function cc(a,b){return a?.status==="anchored"&&b?.status==="anchored"&&b.count>0&&b.count<a.count}function cd(a){return a.finalChapterDrafts.reduce((a,b)=>a+(0,j.V7)(b.content||""),0)}function ce(a){let b=[],c=a.documentBudget?.chapterTargets;if(!c)return{total:0,chapters:b};let d=0;for(let e of a.finalChapterDrafts){let a=c.get(e.id)??c.get(e.title);if(!a||a<=0)continue;let f=(0,j.V7)(e.content||""),g=Math.round(1.15*a),h=f-g;h>0&&(d+=h,b.push({title:e.title,chars:f,limit:g,over:h}))}return b.sort((a,b)=>b.over-a.over),{total:d,chapters:b}}function cf(a){return a.finalChapterDrafts.map(a=>`${a.id}\u0000${a.content||""}`).join("\x01")}async function cg(a,b){let{plan:c}=b,d=(0,m.nY)((0,m.Su)(a.generationDiagnostics)),e=(b.enabled??function(a=process.env){return"off"!==a.REPAIR_CHAIN}())&&!d,f=d?`文档预算已耗尽(${d.kind}:${d.observed}/${d.limit})——补偿链不再起跑,只留收口骨架`:"REPAIR_CHAIN=off:本次生成跳过补偿链(方案 Z5 的 B 组实验口径),已逐轮登记;收口骨架不跳过",g=b.residualLevels??function(a=process.env){let b=a.REPAIR_CHAIN_RESIDUAL_LEVELS;return void 0!==b&&/^\d+$/u.test(b.trim())?Number(b.trim()):1}(),h=function(){let a=[];return{record:b=>{a.push(b)},skippedRounds:()=>[...a]}}(),i=[],j=[],k=new Map,l=new Set;for(let a of c){if(l.has(a.id))throw Error(`修复链计划里出现重复轮 id「${a.id}」——重复 id 会让执行日志与残余读源同时指向错的那一轮,必须先消除歧义`);l.add(a.id)}let n=cd(a),o=async(b,c,d,e)=>{let f,g=b.round??b.id,h=await cb(a,g),l=cd(a),m=ce(a),n={drafts:structuredClone(a.finalChapterDrafts),markdown:a.finalMarkdown};await b.stage(a);let o=ce(a),p=!1;if(o.total>m.total+1){let b=o.chapters[0];a.finalChapterDrafts.splice(0,a.finalChapterDrafts.length,...n.drafts),a.finalMarkdown=n.markdown,p=!0,f=`篇幅合同:本轮使超窗量从 ${m.total} 字增到 ${o.total} 字(最严重:${b?`${b.title} ${b.chars}/${b.limit}`:"—"},窗口=章目标\xd71.15)——本轮改动已整轮回滚(判据只罚"变差",正在压缩篇幅的轮不受影响)`}let q=cd(a),r=await cb(a,g);k.set(b.id,{before:h,after:r});let s={level:c,tier:b.tier,round:b.id,decision:d,reason:p?`${e};⚠ ${f}`:e,...p?{rolledBack:!0,rollbackReason:f}:{},residualBefore:h,residualAfter:r,charsDelta:q-l,charsAfter:q};return i.push(s),b.compensation&&j.push({round:b.id,delta:s.charsDelta,after:q}),s};for(let b of c){if(!e&&b.compensation){h.record(b.id),i.push({level:0,tier:b.tier,round:b.id,decision:"skip",reason:f,charsDelta:0,charsAfter:cd(a)});continue}await o(b,0,"run",b.compensation?"基线层:按声明序执行(与旧链的调用条件逐字相同——不看残余,不跳轮)":"收口骨架:不受 REPAIR_CHAIN 约束(关链关的是补偿链,不是收口骨架)")}for(let b=1;e&&b<=g;b+=1){let d=c.filter(a=>{if("draft"!==a.tier)return!1;let b=k.get(a.id);return!!b&&cc(b.before,b.after)});if(0===d.length){i.push({level:b,tier:"surface",round:"<converged>",decision:"skip",reason:`层 ${b} 不进入:没有「残余仍在下降」的结构层轮——${function(a,b){let c=new Map,d=a=>c.set(a,(c.get(a)??0)+1);for(let c of a){if("draft"!==c.tier)continue;let a=b.get(c.id);if(!a){d("未执行");continue}if("anchored"===a.after.status){d(0===a.after.count?"残余已归零":cc(a.before,a.after)?"仍在下降":"未下降/反增(到能力边界)");continue}d("no-anchor"===a.after.status?"无锚定声明":"no-reader"===a.after.status?"无残余读源":"读数抛错")}return`结构层 ${a.filter(a=>"draft"===a.tier).length} 轮的跑后读数:`+[...c].map(([a,b])=>`${a} ${b}`).join("、")}(c,k)};收敛判据成立,不许多跑一轮,也不拿注定无效的调用去凑层数`,charsDelta:0,charsAfter:cd(a)});break}let e=!1;for(let c of d){let d=a.finalMarkdown,f=cf(a),g=k.get(c.id),h="anchored"===g.before.status&&"anchored"===g.after.status?`判定依据 = 上一跑的读数:${g.before.detector} 还在下降(${g.before.count} → ${g.after.count})`:"判定依据 = 上一跑的读数:读数异常";await o(c,b,"rerun",`层 ${b} 残余驱动:${h}——「跑不跑」由残余决定,不由链的位置决定`),(cf(a)!==f||a.finalMarkdown!==d)&&(e=!0)}if(!e){i.push({level:b,tier:"surface",round:"<converged>",decision:"skip",reason:`层 ${b} 结构层重跑零净变更 ⇒ 收敛,表面层不重跑(表面收口是幂等的,无正文变动时重复调用是纯浪费)`,charsDelta:0,charsAfter:cd(a)});break}for(let a of c)"surface"===a.tier&&await o(a,b,a.compensation?"rerun":"run",`层 ${b}:结构层本轮动过正文(rebuild 已抹掉表面收口),表面层随之重跑——「终门禁所检 = 交付所存」`)}let p=cd(a),q=p-n;return{log:i,skippedRounds:h.skippedRounds(),netChars:{before:n,after:p,delta:q,ratio:n>0?q/n:0,rounds:[...j].sort((a,b)=>Math.abs(b.delta)-Math.abs(a.delta))}}}var ch=c(18274),ci=c(52437),cj=c(27827);function ck(a){return Math.max(0,Math.min(100,Math.round(a)))}async function cl(a){let b=await (0,aZ.JP)(a),c=a.reduce((a,b)=>a+(b.content.match(/本小节围绕|交底覆盖率按100%|24小时内形成整改责任|按施工准备→过程实施→检查验收→问题整改→资料归档的闭环组织|按作业条件确认→技术交底→过程实施|依据本项目已确认资料中的项目边界/gu)||[]).length,0),d=await (0,a$.Bt)(a.map(a=>a.content).join("\n")),e=400*Math.max(0,d.ratio-.1);return{score:ck(100-15*c-25*b.filter(a=>"error"===a.level).length-e),detail:`模板化空话命中 ${c} 处,套话句占比 ${(100*d.ratio).toFixed(1)}%(docx 达标线 ≤10%),废话段问题 ${b.length} 项`}}async function cm(a,b="",c={}){let d=function(a){let b=a.map(a=>`${a.title} ${(a.sections||[]).join(" ")} ${a.content}`).filter(a=>(0,ci.IZ)(a)>=200).join("\n"),c=[{label:"工程概况",pattern:/工程概况|项目概况|基本概况/u},{label:"主要施工内容",pattern:/主要施工内容/u},{label:"重难点分析",pattern:/重点.{0,4}难点/u},{label:"施工部署",pattern:/施工部署|总体部署|流水/u},{label:"进度计划",pattern:/进度计划|工期保障|工期计划/u},{label:"质量保证",pattern:/质量保证|质量管理|质量控制/u},{label:"安全文明",pattern:/安全.{0,8}(?:管理|措施|文明)|文明施工/u},{label:"资源配置",pattern:/劳动力|机械设备|材料.{0,4}计划|资源配置/u},{label:"绿色环保",pattern:/绿色施工|扬尘|噪声|环保/u},{label:"应急管理",pattern:/应急/u}],d=c.filter(a=>a.pattern.test(b)),e=ck(d.length/c.length*100),f=c.filter(a=>!a.pattern.test(b)).map(a=>a.label);return{score:e,detail:`覆盖 ${d.length}/${c.length} 个核心结构组${f.length?`;缺失:${f.join("、")}`:""}`}}(a),e=function(a){let b=a.map(a=>a.content).join("\n"),c=(0,ci.dB)(b,ch.s2),d=(0,ci.dB)(b,/工程量|材料|设备|范围|流程|验收|检测|复试|调试|隐蔽|检验批|资料|记录|系统|部位|接口|规格|标准/gu),e=Math.max(1,b.length),f=c.size/(e/1e3);return{score:ck(Math.min(100,22*f+d.size/18*15)),detail:`量化参数 ${c.size} 项(每千字 ${f.toFixed(1)}),专业事实词 ${d.size}/18 类`}}(a),f=function(a){let b=a.map(a=>a.content).join("\n"),c=(0,ci.dB)(b,ch.aX),d=Math.max(1,b.length),e=c.size/(d/1e3);return{score:ck(Math.min(100,20*e+40)),detail:`工艺参数 ${c.size} 项(每千字 ${e.toFixed(1)})`}}(a),g=function(a,b=""){let c=(b||a.map(a=>a.content).join("\n\n")).split("\n"),d=0,e=0,f=0;for(;f<c.length;){let a=c[f].trim();if(!/^\|.+\|$/u.test(a)){f+=1;continue}let b=[];for(;f<c.length&&/^\|.+\|$/u.test(c[f].trim());)b.push(c[f].trim()),f+=1;b.length<3||(d+=1,0===b.slice(1).filter(a=>a.replace(/\|/gu,"").replace(/[\s\-:]/gu,"").length>0).reduce((a,b)=>{let c=b.split("|").slice(1,-1).map(a=>(0,au.jG)(a.trim())),d=/^[\s|]*\|?\s*(?:合计|小计|总计|累计)/u.test(b);return a+c.filter((a,b)=>(""===a||"-"===a||"—"===a||"/"===a)&&(!d||"—"!==a)).length},0)&&(e+=1))}return{score:0===d?40:ck(e/d*100),detail:`表格 ${d} 个,其中字段完整 ${e} 个`}}(a,b),h=await cl(a),i=function(a){let b=(0,aZ.cl)(a);return{score:ck(100-20*b.length-20*b.filter(a=>"error"===a.level).length),detail:`重复段落问题 ${b.length} 项`}}(a),j=function(a,b=""){let c=b||a.map(a=>a.content).join("\n\n"),d=(0,ci.Js)(c),e=[{label:"质量标准",pattern:/质量标准|质量要求|合格率/u},{label:"计划工期",pattern:/计划工期|工期要求|日历天/u},{label:"保修",pattern:/缺陷责任期|保修|质保/u},{label:"安全目标",pattern:/安全.{0,8}目标|文明.{0,8}目标/u},{label:"项目经理",pattern:/项目经理|项目负责人/u}],f=e.filter(a=>d.some(b=>a.pattern.test(b)&&(0,ci.A5)(b))),g=e.filter(a=>!f.includes(a));return{score:ck(f.length/e.length*100),detail:`招标硬性要求响应 ${f.length}/${e.length} 项${g.length?`(未响应:${g.map(a=>a.label).join("、")})`:""}`}}(a,b),k=function(a){if(!a)return{score:100,detail:"模板化未检测(无信号,按满分计)"};let b=300*Math.max(0,a.fillerRatio-.1),c=Math.min(40,8*a.vagueHitCount),d=a.difficultyCountermeasures>0?a.difficultyQuantifiedCount/a.difficultyCountermeasures:1,e=a.difficultyCountermeasures>0?Math.min(30,60*Math.max(0,.5-d)):0,f=Math.min(30,10*a.crossProjectResidue.length);return{score:ck(100-b-c-e-f),detail:`套话句占比 ${(100*a.fillerRatio).toFixed(1)}%(线 ≤10%)、模糊应答词 ${a.vagueHitCount} 处、重难点量化达标 ${a.difficultyQuantifiedCount}/${a.difficultyCountermeasures}(线 ≥50%)、跨项目残留 ${a.crossProjectResidue.length} 处;扣分 ${b.toFixed(0)}+${c.toFixed(0)}+${e.toFixed(0)}+${f.toFixed(0)}`}}(c.templating),l=[{key:"structure",label:"结构完整度",score:d.score,detail:d.detail,weight:0,baseWeight:.18},{key:"factLanding",label:"事实落位率",score:e.score,detail:e.detail,weight:0,baseWeight:.18},{key:"processParameter",label:"工艺参数密度",score:f.score,detail:f.detail,weight:0,baseWeight:.16},{key:"table",label:"表格完整度",score:g.score,detail:g.detail,weight:0,baseWeight:.12},{key:"filler",label:"废话控制",score:h.score,detail:h.detail,weight:0,baseWeight:.14},{key:"duplication",label:"重复控制",score:i.score,detail:i.detail,weight:0,baseWeight:.12},{key:"reviewResponse",label:"评标响应度",score:j.score,detail:j.detail,weight:0,baseWeight:.1}],m=.2*!!c.templating,n=[...l.map(({baseWeight:a,...b})=>({...b,weight:Number((a*(1-m)).toFixed(4))})),...m>0?[{key:"templating",label:"表述实质性",score:k.score,detail:k.detail,weight:m}]:[]],o=ck(n.reduce((a,b)=>a+b.score*b.weight,0)),p=o>=85?"专业":o>=70?"良好":o>=55?"合格":"待提升",q=[...(0,aZ.cl)(a),...await (0,aZ.JP)(a),...(0,aZ.nU)(a),...(0,aZ.zy)(a)].slice(0,5).map(a=>a.message),r=n.filter(a=>a.score<70).map(a=>`${a.label}(${a.score}分)`);return{total:o,grade:p,dimensions:n,summary:`施工组织设计专业度评分 ${o} 分(${p};从属口径,交付主尺见六维质量报告)${c.templating&&"light"!==c.templating.level?`;模板化等级:${"heavy"===c.templating.level?"重度":"中度"}(已按「表述实质性」维度计分,不再封顶总分)`:""}${r.length?`;待提升:${r.join("、")}`:""}`,topIssues:q,caliber:cj.Yn}}var cn=c(59873),co=c(35008),cp=c(73024),cq=c.n(cp),cr=c(76760),cs=c.n(cr),ct=c(48661);function cu(a){return Math.round(10*a)/10}function cv(a,b){let c=a.replace(/\s+/gu," ").trim();return c.length>b?`${c.slice(0,b)}…`:c}let cw={success:"通过",failed:"失败",skipped:"跳过",running:"进行中",partial:"部分生效"},cx={blind:"暗标",open:"明标",unknown:"未判定(按明标口径)"};async function cy(a){var b;a.reviewChecklist=[{key:"export-gate",label:"导出门禁",passed:(b={exportGate:a.qualityBundle.finalExportGate,qualityReport:a.qualityBundle.qualityReport,repairStrategies:a.qualityBundle.repairStrategies}).exportGate.passed,message:b.exportGate.passed?"导出门禁通过":`仍有 ${b.exportGate.blockingIssues.length} 个阻断问题`},{key:"delivery-probability",label:"交付置信度",passed:b.qualityReport.passed,message:`${b.qualityReport.deliveryProbability}% / ${b.qualityReport.target}%`},{key:"completeness",label:"资料完整性",passed:b.qualityReport.scores.completeness>=85,message:`${b.qualityReport.scores.completeness}/100`},{key:"specificity",label:"方案针对性",passed:b.qualityReport.scores.specificity>=85,message:`${b.qualityReport.scores.specificity}/100`},{key:"compliance",label:"合规性",passed:b.qualityReport.scores.compliance>=80,message:`${b.qualityReport.scores.compliance}/100`},{key:"repair-strategies",label:"修复策略",passed:0===b.repairStrategies.filter(a=>"high"===a.priority).length,message:b.repairStrategies.map(a=>a.title).join("、")||"无高优先级修复策略"}];let c=(0,X.Ff)(a.validationIssues),d=a.qualityBundle.finalExportGate.blockingIssues.length;a.generationDiagnostics.quality.blockingCount=d,a.generationDiagnostics.quality.importantCount+=c.important,a.generationDiagnostics.quality.minorCount+=c.minor,a.telemetry=function(a){let b=[...a.diagnostics.metrics].sort((a,b)=>b.durationMs-a.durationMs).slice(0,5).map(a=>({name:a.name,durationMs:a.durationMs})),c={};for(let[b,d]of Object.entries(a.diagnostics.llm.patchGuardStats||{}))c[b]={hits:d.hits+d.rejects,repaired:d.hits,failed:d.rejects+(d.rollbacks??0)};return{llmCalls:a.diagnostics.llm.calls,llmFailures:a.diagnostics.llm.failures,maxParallelLlm:a.diagnostics.llm.maxActive,searchQueries:a.diagnostics.evidence.searchQueries,evidenceContextChars:a.diagnostics.evidence.contextChars,qualityIssues:{...a.diagnostics.quality},slowMetrics:b,elapsedMs:a.startedAt&&a.endedAt?a.endedAt-a.startedAt:void 0,repairHeat:Object.keys(c).length>0?c:void 0,repairChainNetChars:a.diagnostics.repairChainNetChars}}({diagnostics:a.generationDiagnostics});let e=(a.generationDiagnostics.evidence.retrievalFailures??0)>0?`,⚠ 检索失败 ${a.generationDiagnostics.evidence.retrievalFailures} 次(非「无命中」,请看进度中的 failed 事件)`:"",f=(a.generationDiagnostics.evidence.pinnedEvidenceMissed??0)>0?`,⚠ 固定证据未命中 ${a.generationDiagnostics.evidence.pinnedEvidenceMissed} 处(资料包绑定漂移)`:"";a.telemetry.qualityIssues.blockingCount=d,a.professionalScore=await cm(a.finalChapterDrafts,a.finalMarkdown,{templating:a.qualityBundle.qualityReport.templating}),a.templatingReview=a.qualityBundle.qualityReport.templating?await a.withProgressHeartbeat(()=>(0,cn.z)({templating:a.qualityBundle.qualityReport.templating,markdown:a.finalMarkdown,diagnostics:a.generationDiagnostics,signal:a.signal})):{issues:[],reviewed:!1},a.suspensionChecklist=a.qualityBundle.finalExportGate.passed?void 0:(0,q.aF)(a.qualityBundle.finalExportGate.blockingIssues,a.finalChapterDrafts),(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"validation",roleId:"agent-final-gate",status:a.qualityBundle.finalExportGate.passed?"success":"failed",message:a.qualityBundle.finalExportGate.passed?"Agent 最终门禁通过":`Agent 最终门禁未通过 ${d} 个问题(不计入交付阻断,文档照常可导出;人工复核清单见明细)`,details:a.suspensionChecklist?(0,q.$w)(a.suspensionChecklist):[]},{subtitle:"Agent 最终门禁"})});let g=a.qualityBundle.qualityReport.deliveryProbability<70;(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"validation",roleId:"document-delivery-score",status:a.qualityBundle.qualityReport.passed?"success":a.qualityBundle.finalExportGate.passed?"skipped":"failed",message:a.qualityBundle.finalExportGate.passed&&!a.qualityBundle.qualityReport.passed?`${a.qualityBundle.qualityReport.summary}${g?";置信度低于 70%,建议完成续修后再交付归档":"(导出门禁已通过,作为后续优化建议归档)"}`:a.qualityBundle.qualityReport.summary,details:g&&a.qualityBundle.finalExportGate.passed?[...a.qualityBundle.qualityReport.actions,"续修建议:交付置信度低于 70% 门槛,建议按交付复核清单补齐短板维度后重新生成或续修。"]:a.qualityBundle.qualityReport.actions},{subtitle:"交付评分"})}),(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"validation",roleId:"document-professional-score",status:"专业"===a.professionalScore.grade||"良好"===a.professionalScore.grade?"success":"skipped",message:a.professionalScore.summary,details:[...a.professionalScore.dimensions.map(a=>`${a.label}:${a.score} 分(${a.detail})`),...a.professionalScore.topIssues.map(a=>`待修复:${a}`)]},{subtitle:"专业度评分"})}),a.qualityBundle.qualityReport.templating&&"light"!==a.qualityBundle.qualityReport.templating.level&&(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"validation",roleId:"document-templating-report",status:"skipped",message:`模板化检测:${"heavy"===a.qualityBundle.qualityReport.templating.level?"重度":"中度"}模板化(套话句占比 ${(100*a.qualityBundle.qualityReport.templating.fillerRatio).toFixed(1)}%,重难点归因+量化双达标占比 ${(100*a.qualityBundle.qualityReport.templating.difficultyCountermeasureRatio).toFixed(0)}%,模糊应答词 ${a.qualityBundle.qualityReport.templating.vagueHitCount} 处)`,details:a.templatingReview.issues},{subtitle:"模板化检测"})}),a.writingTaskBrief&&(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"reference",roleId:"document-writing-task-brief",status:"success",message:`写作任务书:${a.writingTaskBrief.documentType},${a.writingTaskBrief.chapters.length} 章任务卡,全局写作焦点 ${a.writingTaskBrief.globalWritingFocus.length} 条`,details:[...a.writingTaskBrief.globalWritingFocus,...a.writingTaskBrief.chapters.slice(0,10).map(a=>`${a.chapterTitle}:覆盖 ${a.mustCover.length} 项`)],subtitle:"写作任务书"})}),(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"reference",roleId:"knowledge-coverage",status:a.qualityBundle.knowledgeCoverage.score>=85?"success":"failed",message:`资料确认覆盖率:${a.qualityBundle.knowledgeCoverage.score}%(证据 ${a.qualityBundle.knowledgeCoverage.evidenceCount} 条,文件 ${a.qualityBundle.knowledgeCoverage.confirmedFiles} 份)`,details:[a.qualityBundle.knowledgeCoverage.remediation]},{subtitle:"资料覆盖"})}),(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"validation",roleId:"document-review-checklist",status:a.reviewChecklist.every(a=>a.passed)?"success":a.qualityBundle.finalExportGate.passed?"skipped":"failed",message:`交付复核清单:通过 ${a.reviewChecklist.filter(a=>a.passed).length}/${a.reviewChecklist.length}${a.qualityBundle.finalExportGate.passed&&!a.reviewChecklist.every(a=>a.passed)?"(导出门禁已通过,其余项作为优化建议归档)":""}`,details:a.reviewChecklist.map(a=>`${a.passed?"通过":"待修复"}:${a.label}${a.message?`(${a.message})`:""}`)},{subtitle:"交付复核"})});let h=(0,s._8)(a.generationDiagnostics.metrics),i=(0,s.bz)(a.generationDiagnostics.llm.callBreakdown),j=a.generationDiagnostics.factSanitize?`,事实净化 截断${a.generationDiagnostics.factSanitize.truncated}/丢弃${a.generationDiagnostics.factSanitize.dropped}/编号补全${a.generationDiagnostics.factSanitize.repaired}`:"",m=a.generationDiagnostics.blockLedger||[],n=(()=>{if(0===m.length)return"";let a=m.filter(a=>{if(a.target<=0)return!1;let b=(0,co.z4)(a.target);return a.actual>=b.min&&a.actual<=b.max}).length,b=m.filter(a=>a.target>0).map(a=>a.actual/a.target).sort((a,b)=>a-b),c=b.length>0?b[Math.floor(b.length/2)]:0,d=m.filter(a=>!a.isolatedRetry),e=d.filter(a=>0===a.attempt&&a.passed).length,f=d.length||1,g=m.length>d.length?`(另有 ${m.length-d.length} 行孤立重试已排除出分母)`:"";return`块级篇幅账:${d.length} 块,写作一次通过率 ${Math.round(e/f*100)}%(${e}/${f})${g},块目标命中率 ${Math.round(a/f*100)}%,实际/目标 中位 ${c.toFixed(2)}`})();if((0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"validation",roleId:"document-block-length-ledger",status:0===m.length?"success":m.some(a=>!a.passed&&a.failureKinds?.includes("budget_exhausted"))?"partial":m.some(a=>!a.passed)?"failed":"success",message:n||"块级篇幅账:无块记录(本次未走块写作通道)",details:m.slice(0,40).map(a=>`${a.chapter.slice(0,10)}|${a.block}|目标 ${a.target} 实际 ${a.actual}(${(a.actual/Math.max(1,a.target)).toFixed(2)}\xd7)attempt=${a.attempt}${a.passed?" 通过":" 失败"}${a.failureKinds?.length?` 【${a.failureKinds.join("、")}】`:""}`)},{subtitle:"块级篇幅账"})}),(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"validation",roleId:"document-diagnostics",status:"success",message:`性能统计:LLM ${a.generationDiagnostics.llm.calls} 次,失败 ${a.generationDiagnostics.llm.failures} 次,瞬态重试 ${a.generationDiagnostics.llm.retries} 次,schema 校验失败 ${a.generationDiagnostics.llm.schemaFailures} 次,峰值并行 ${a.generationDiagnostics.llm.maxActive},检索 ${a.generationDiagnostics.evidence.searchQueries} 次/${Math.round(a.generationDiagnostics.evidence.searchMs/1e3)} 秒,证据上下文 ${a.generationDiagnostics.evidence.contextChars} 字,噪声过滤 ${a.generationDiagnostics.evidence.filteredNoise} 条,预算裁剪 ${a.generationDiagnostics.evidence.budgetDropped} 条,质量问题 阻断${a.generationDiagnostics.quality.blockingCount}/重要${a.generationDiagnostics.quality.importantCount}/轻微${a.generationDiagnostics.quality.minorCount}${j}${e}${f}${h?`,Top耗时:${h}`:""}${i?`,调用输入Top5:${i}`:""}`,details:[...(0,s.Il)(a.generationDiagnostics.metrics),...(0,s.NJ)(a.generationDiagnostics.llm.callBreakdown)]},{subtitle:"后台诊断"})}),a.documentId)try{let b=function(a){let b=a.qualityReport,c=a.exportGate,d=new Date(a.generatedAt??Date.now()),e=b.mode?cx[b.mode]:"未判定(按明标口径)",f=[];f.push(`# 交付三件套报告:${a.title}`),f.push(""),f.push(`> 文档 ID:${a.documentId??"未提供"};生成时间:${d.toISOString()}`),f.push(`> 评分口径:${cj.GX}(主尺=六维;招标六项/专业分为从属展示口径)`),f.push(`> 导出门禁:${c.passed?"通过":`未通过(${c.blockingIssues.length} 项阻断,文档照常可导出,人工复核清单见下)`};标书类型:${e}`),f.push(""),f.push("## 一、评分报告"),f.push(""),f.push("### 1.1 六维质量评分(主尺)");let g=b.dimensions||[];if(g.length>0)for(let a of(f.push("| 维度 | 得分 | 权重 | 构成明细 |"),f.push("|---|---|---|---|"),g))f.push(`| ${a.label} | ${a.score} | ${Math.round(100*a.weight)}% | ${a.detail??"—"} |`);else f.push("- (六维构成明细缺失——评级输入不完整,仅综合分可用)");if(f.push(`- 综合评分:**${b.overall}**/100;交付置信度 **${b.deliveryProbability}%** / 目标 ${b.target}%;低雷同性 ${b.scores?.uniqueness??"—"}${b.passed?";已达当前质量目标":";未达目标(按第三节预估路径补强)"}`),f.push(""),f.push("### 1.2 专业度评分(从属口径,交付主尺见六维)"),f.push(`- 总分 ${a.professionalScore.total}/100(${a.professionalScore.grade}):${a.professionalScore.summary}`),a.professionalScore.dimensions.length>0)for(let b of(f.push(""),f.push("| 维度 | 得分 | 权重 | 明细 |"),f.push("|---|---|---|---|"),a.professionalScore.dimensions))f.push(`| ${b.label} | ${b.score} | ${Math.round(100*b.weight)}% | ${b.detail} |`);if(a.professionalScore.topIssues.length>0)for(let b of(f.push(""),f.push("待修复:"),a.professionalScore.topIssues.slice(0,12)))f.push(`- ${cv(b,220)}`);if(f.push(""),f.push("### 1.3 阻断明细(终门禁)"),0===c.blockingIssues.length)f.push("- 无阻断:终检检测器全部通过。");else for(let a of c.blockingIssues){let b=a.severity?`[${a.severity}]`:`[${a.level}]`,c=a.chapterId?`(章:${a.chapterId}${a.sectionTitle?` / ${a.sectionTitle}`:""})`:"";f.push(`- ${b} ${cv(a.message,320)}${c}`),a.suggestion&&f.push(` - 建议:${cv(a.suggestion,260)}`)}let h=c.manualReviewIssues||[];if(h.length>0){for(let a of(f.push(""),f.push(`### 1.4 人工复核清单(${h.length} 项,不阻断导出)`),f.push(""),f.push("> 下列发现由声明「无自动修复路径」的检测器产出,需人工判断后处理;系统不会自动改写。"),h.slice(0,30))){let b=a.provenance?.detectorId?`[${a.provenance.detectorId}]`:"";f.push(`- ${b} ${cv(a.message,320)}`),a.suggestion&&f.push(` - 建议:${cv(a.suggestion,260)}`)}h.length>30&&f.push(`- …另有 ${h.length-30} 项未展开`)}if(c.checklist.length>0){let a=c.checklist.filter(a=>!a.passed);f.push(""),f.push(`- 门禁复核清单:通过 ${c.checklist.length-a.length}/${c.checklist.length}${a.length>0?`;未过项:${a.slice(0,10).map(a=>a.label).join("、")}${a.length>10?` 等 ${a.length} 项`:""}`:""}`)}for(let b of(f.push(""),f.push("## 二、进度(阶段/耗时/修复轮次)"),f.push(""),f.push(`### 2.1 阶段执行(共 ${a.stages.length} 个阶段)`),a.stages)){let a=b.subtitle||b.roleId,c=b.message?`:${cv(b.message,240)}`:"";f.push(`- [${cw[b.status]}] ${a}${c}`)}f.push(""),f.push("### 2.2 耗时(按耗时降序)");let i=[...a.metrics].sort((a,b)=>b.durationMs-a.durationMs);if(0===i.length)f.push("- (无性能指标记录)");else for(let a of i){var j;f.push(`- ${a.name}:${!Number.isFinite(j=a.durationMs)||j<0?"0ms":j<1e3?`${Math.round(j)}ms`:j<6e4?`${(j/1e3).toFixed(1)}s`:`${(j/6e4).toFixed(1)}min`}`)}for(let b of(f.push(""),f.push("### 2.3 修复轮次(detectorFixerRegistry 轮序声明表口径)"),t.rk)){let c=[...a.stages].reverse().find(a=>a.roleId===b);if(c){let a=c.message?` — ${cv(c.message,200)}`:"";f.push(`- ${b}:${cw[c.status]}${a}`)}else f.push(`- ${b}:未记录(无触发或静默通过)`)}f.push(""),f.push("## 三、下轮预估目标(按当前六维缺口)"),f.push("");let k=function(a){let b=(a.dimensions||[]).filter(a=>Number.isFinite(a.score)&&Number.isFinite(a.weight)&&a.weight>0);if(0===b.length)return;let c=b.reduce((a,b)=>a+b.weight,0),d=cu(b.reduce((a,b)=>a+b.score*b.weight,0)/c),e=Math.min(1,(a.scores?.uniqueness??90)/90),f=b.map(a=>({key:a.key,label:a.label,score:a.score,gap:Math.max(0,100-a.score),effectiveGain:cu(Math.max(0,100-a.score)*(a.weight/c)*e),detail:a.detail})).sort((a,b)=>b.effectiveGain-a.effectiveGain||a.label.localeCompare(b.label,"zh-Hans-CN")),g=cu(a.target-a.overall),h=null;if(g>0){let b=[],c=0;for(let a of f)if(a.effectiveGain<=0||(b.push(a),(c=cu(c+a.effectiveGain))>=g))break;h={target:a.target,gap:g,picks:b,covered:c}}return{dimensions:f,currentWeighted:d,uniquenessFactor:e,projectedOverall:Math.min(100,Math.round(100*e)),pathToTarget:h}}(b);if(k){for(let a of(f.push("| 维度 | 当前分 | 提升空间 | 对综合分贡献 | 补强方向 |"),f.push("|---|---|---|---|---|"),k.dimensions))f.push(`| ${a.label} | ${a.score} | ${a.gap>0?`+${a.gap}`:"0(满分)"} | ${a.effectiveGain>0?`+${a.effectiveGain.toFixed(1)}`:"0"} | ${a.detail?cv(a.detail,120):"—"} |`);f.push(`- 当前加权综合分:${k.currentWeighted.toFixed(1)}/100(uniqueness 因子 ${k.uniquenessFactor.toFixed(2)})`);let a=k.projectedOverall<b.target;if(f.push(`- 预计总分上限:**${k.projectedOverall}**/100(全维补满、uniqueness 不变的理论口径${a?`;低于目标 ${b.target}——受低雷同性因子 ${k.uniquenessFactor.toFixed(2)} 约束,需同步提升 uniqueness`:""};实际以重生成/续修产物复评)`),k.pathToTarget){let{target:a,gap:b,picks:c,covered:d}=k.pathToTarget,e=c.map(a=>`${a.label}(+${a.effectiveGain.toFixed(1)})`).join(" → ");d>=b?f.push(`- 达标路径(目标 ${a}):补强 ${e},合计 +${d.toFixed(1)} ≥ 缺口 ${b.toFixed(1)}。`):f.push(`- 达标路径(目标 ${a}):补强 ${e},合计 +${d.toFixed(1)} < 缺口 ${b.toFixed(1)}——六维补满仍不足,须按上限提示先提升低雷同性(uniqueness)再复评。`)}else f.push(`- 当前已达目标 ${b.target},无需补强路径(维持口径与阻断清零即可)。`)}else f.push("- 六维构成明细缺失,无法计算下轮预估(降级不猜数;补全评级输入后自动生成)。");return f.push(""),f.join("\n")}({documentId:a.documentId,title:a.template.outputTitle,qualityReport:a.qualityBundle.qualityReport,professionalScore:a.professionalScore,exportGate:a.qualityBundle.finalExportGate,stages:(0,z.pm)(a),metrics:a.generationDiagnostics.metrics}),c=function(a,b,c){let d=function(a,b){let c=b.trim().replace(/[^A-Za-z0-9_-]/gu,"_");if(!c)throw Error("交付报告文件名缺少文档 ID");return cs().join((0,ct.Gl)(a),"reports",`${c}-review.md`)}(a,b);cq().mkdirSync(cs().dirname(d),{recursive:!0});let e=`${d}.${process.pid}.${Date.now()}.tmp`;return cq().writeFileSync(e,c,"utf8"),cq().renameSync(e,d),d}(a.projectRoot,a.documentId,b),d=a.qualityBundle.finalExportGate.blockingIssues.length;(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"reference",roleId:"delivery-review-report",status:"success",message:`交付三件套报告已产出:${c}`,details:[a.qualityBundle.qualityReport.summary,`专业度(从属口径):${a.professionalScore.summary}`,`阻断:${d} 项${d>0?"(人工复核清单随报告归档,不阻断交付)":"(终检检测器全部通过)"}`,"下轮预估目标:按当前六维缺口计算各维提升空间与达标路径(见报告第三节)"]},{subtitle:"交付报告"})})}catch(c){let b=c instanceof Error?c.message:String(c);(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"reference",roleId:"delivery-review-report",status:"failed",message:`交付三件套报告产出失败(不阻断交付):${b}`},{subtitle:"交付报告"})})}}var cz=c(33409);let cA={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&apos;"};function cB(a){return String(a??"").replace(/[&<>"']/gu,a=>cA[a]??"")}function cC(a){return Math.round(100*a)/100}function cD(a){return String(cC(a))}function cE(a,b,c){let d=0;for(let e of a)d+=/[⺀-￯]/u.test(e)?b:c;return d}function cF(a,b){let c=Array.from(a);return c.length>b?`${c.slice(0,b).join("")}…`:a}let cG={pad:16,titleBand:28,cjkPx:14,latinPx:7,minLeftW:76,maxLeftW:232,maxNameChars:16,minPlotW:320,maxPlotW:720,pxPerDay:3,labelGutter:76,rowPitch:30,barH:14,criticalFill:"#e8590c",criticalStroke:"#a63d05",normalFill:"#4dabf7",normalStroke:"#1c7ed6"},cH={pad:16,titleBand:28,boxW:168,boxH:46,hGap:20,vGap:34,maxTitleChars:12,maxDutyChars:14},cI={schedule:a=>(function(a){let b=[],c=a&&Array.isArray(a.tasks)?a.tasks:[];if(0===c.length)return{svg:"",warnings:b};let d=[];if(c.forEach((a,c)=>{let e="string"==typeof a?.name?a.name.trim():"",f=Number(a?.startDay),g=Number(a?.durationDays);return e?Number.isFinite(f)&&Number.isFinite(g)?f<0?void b.push(`跳过「${e}」:起始日 ${cD(f)} < 0(相对开工的天数不可能为负)`):g<=0?void b.push(`跳过「${e}」:持续天数 ${cD(g)} ≤ 0`):void d.push({name:e,start:f,duration:g,critical:!0===a.critical}):void b.push(`跳过「${e}」:起始日/持续天数不是有限数值`):void b.push(`跳过第 ${c+1} 行:工序名为空,无法对上任何工序`)}),0===d.length)return{svg:"",warnings:b};let e=d.map(a=>cF(a.name,cG.maxNameChars)),f=Math.max(...e.map(a=>cE(a,cG.cjkPx,cG.latinPx))),g=Math.min(cG.maxLeftW,Math.max(cG.minLeftW,Math.ceil(f)+12)),h=Math.max(...d.map(a=>a.start+a.duration)),i=Number.isFinite(a.totalDays)&&Number(a.totalDays)>0?Number(a.totalDays):void 0,j=Math.max(i??0,h);void 0!==i&&i<h&&b.push(`声明的总工期 ${cD(i)} 天小于最晚工序完成日 ${cD(h)} 天,横轴已按 ${cD(h)} 天绘制`);let k=Math.min(cG.maxPlotW,Math.max(cG.minPlotW,Math.ceil(j*cG.pxPerDay))),l=a.title?cG.titleBand:0,m=cG.pad+l+12,n=m+5,o=n+10,p=o+d.length*cG.rowPitch,q=p+20,r=cG.pad+g,s=r+k,t=s+8,u=cG.pad+g+k+cG.labelGutter+cG.pad,v=q+cG.pad,w=a=>cC(r+a/j*k),x=[];x.push(`<svg xmlns="http://www.w3.org/2000/svg" width="${u}" height="${v}" viewBox="0 0 ${u} ${v}" font-family="sans-serif">`),a.title&&x.push(`<title>${cB(a.title)}</title>`),a.title&&x.push(`<text x="${cG.pad}" y="${cG.pad+16}" font-size="15" font-weight="700" fill="#212529">${cB(a.title)}</text>`),x.push(`<text x="${cC(r-8)}" y="${m}" text-anchor="end" font-size="12" fill="#495057">工序</text>`),x.push(`<text x="${t}" y="${m}" font-size="11" fill="#868e96">起止天</text>`),x.push(`<line x1="${r}" y1="${n}" x2="${s}" y2="${n}" stroke="#adb5bd"/>`);let y=function(a){if(a<=84)return 7;let b=30;for(;a/b>13;)b*=2;return b}(j),z=[];for(let a=y;a<j;a+=y)z.push(a);for(let a of(z.push(j),z)){let b=w(a);x.push(`<line x1="${b}" y1="${n}" x2="${b}" y2="${p}" stroke="#e9ecef"/>`),x.push(`<text x="${b}" y="${m}" text-anchor="middle" font-size="10" fill="#868e96">${cD(a)}</text>`)}d.forEach((a,b)=>{let c=o+b*cG.rowPitch,d=c+(cG.rowPitch-cG.barH)/2,f=w(a.start),g=Math.max(2,cC(w(a.start+a.duration)-f)),h=a.critical?cG.criticalFill:cG.normalFill,i=a.critical?cG.criticalStroke:cG.normalStroke,j=a.critical?'font-size="13" font-weight="700" fill="#212529"':'font-size="13" fill="#343a40"';x.push(`<text x="${cC(r-8)}" y="${c+21}" text-anchor="end" ${j}>${cB(e[b])}</text>`),x.push(`<rect class="fig-gantt-bar" x="${f}" y="${d}" width="${g}" height="${cG.barH}" rx="2" fill="${h}" stroke="${i}" stroke-width="${a.critical?2:1}"/>`),x.push(`<text x="${t}" y="${c+21}" font-size="11" fill="#495057">${cD(a.start)}–${cD(a.start+a.duration)} 天</text>`)}),x.push(`<text x="${cG.pad}" y="${q}" font-size="12" font-weight="700" fill="#212529">总工期:${cD(j)} 日历天</text>`);let A=`总工期:${cD(j)} 日历天`,B=cG.pad+cE(A,13,7)+28;for(let a of[{text:"关键线路",color:cG.criticalFill},{text:"非关键线路",color:cG.normalFill}])x.push(`<line x1="${cC(B)}" y1="${q-4}" x2="${cC(B+16)}" y2="${q-4}" stroke="${a.color}" stroke-width="8"/>`),x.push(`<text x="${cC(B+22)}" y="${q}" font-size="11" fill="#495057">${a.text}</text>`),B+=22+cE(a.text,12,7)+22;return x.push("</svg>"),{svg:x.join(""),warnings:b}})(a),orgChart:a=>(function(a){let b=[],c=a&&Array.isArray(a.nodes)?a.nodes:[];if(0===c.length)return{svg:"",warnings:b};let d=new Set,e=[];for(let a of c){let c="string"==typeof a?.title?a.title.trim():"";if(!c){b.push("跳过空岗位名节点:机构图以岗位名为身份键,无名节点无法被人对上");continue}if(d.has(c)){b.push(`跳过重复岗位「${c}」:岗位名是上级指向的身份键,重名会让层级无法判定`);continue}d.add(c),e.push({title:c,parent:"string"==typeof a.parent?a.parent.trim():"",duty:"string"==typeof a.duty?a.duty.trim():""})}if(0===e.length)return{svg:"",warnings:b};let f=new Map,g=new Map;for(let a of e)g.set(a.title,[]);let h=(a,b)=>{let c=g.get(a);c&&c.push(b)},i=(a,b)=>{let c=g.get(a);if(!c)return;let d=c.indexOf(b);d>=0&&c.splice(d,1)};for(let a of e)if(a.parent){if(a.parent===a.title){b.push(`「${a.title}」的上级指向自身,已按根节点处理(自指即长度为 1 的环)`);continue}if(!d.has(a.parent)){b.push(`「${a.title}」的上级「${a.parent}」不存在,已按根节点处理`);continue}f.set(a.title,a.parent),h(a.parent,a.title)}let j=new Map,k=new Map,l=a=>j.get(a)??0,m=a=>k.get(a)??0,n=0,o=a=>{let c=[],d=(a,b)=>{k.has(a)||(k.set(a,b),c.push({title:a,childIndex:0,xs:[]}))};for(let b of a)d(b,0);let f=2*e.length+8,h=0;for(;c.length>0;){if(++h>f){b.push("机构图布局步数超限,已停止(内部保护,正常数据不应触发)");break}let a=c[c.length-1];if(!a)break;let e=g.get(a.title)??[];if(a.childIndex<e.length){let b=e[a.childIndex];a.childIndex+=1,"string"==typeof b&&d(b,m(a.title)+1);continue}c.pop();let i=0===a.xs.length?n++:(a.xs[0]+a.xs[a.xs.length-1])/2;j.set(a.title,i);let k=c[c.length-1];k&&k.xs.push(i)}};o(e.filter(a=>!f.has(a.title)).map(a=>a.title));let p=a=>{let b=[a],c=f.get(a),d=0;for(;c&&c!==a&&d<=f.size;)b.push(c),c=f.get(c),d+=1;return b.push(a),b.join(" → ")},q=0;for(;j.size<e.length;){if(++q>e.length+1){b.push("机构图断环次数超限,已停止(内部保护,正常数据不应触发)");break}let a=e.find(a=>!j.has(a.title));if(!a)break;let c=f.get(a.title);c?(i(c,a.title),f.delete(a.title),b.push(`检测到环:${p(a.title)},已断开「${c}」→「${a.title}」并把「${a.title}」按根节点处理`)):b.push(`「${a.title}」未能定位层级,已按根节点处理`),o([a.title])}let r=cH.boxW+cH.hGap,s=Math.max(1,n),t=Math.max(...e.map(a=>m(a.title))),u=2*cH.pad+s*cH.boxW+(s-1)*cH.hGap,v=2*cH.pad+(a.title?cH.titleBand:0)+(t+1)*cH.boxH+t*cH.vGap,w=a=>cC(cH.pad+a*r),x=b=>cH.pad+(a.title?cH.titleBand:0)+b*(cH.boxH+cH.vGap),y=[];for(let b of(y.push(`<svg xmlns="http://www.w3.org/2000/svg" width="${u}" height="${v}" viewBox="0 0 ${u} ${v}" font-family="sans-serif">`),a.title&&y.push(`<title>${cB(a.title)}</title>`),a.title&&y.push(`<text x="${cH.pad}" y="${cH.pad+16}" font-size="15" font-weight="700" fill="#212529">${cB(a.title)}</text>`),e)){let a=f.get(b.title);if(!a)continue;let c=x(m(b.title)-1)+cH.boxH,d=x(m(b.title)),e=cC(w(l(a))+cH.boxW/2),g=cC(w(l(b.title))+cH.boxW/2),h=cC(c+cH.vGap/2);y.push(`<path class="fig-org-edge" d="M ${e} ${cC(c)} V ${h} H ${g} V ${cC(d)}" fill="none" stroke="#868e96" stroke-width="1"/>`)}for(let a of e){let b=w(l(a.title)),c=x(m(a.title)),d=cC(b+cH.boxW/2),e=cF(a.title,cH.maxTitleChars),f=cF(a.duty,cH.maxDutyChars),g=a.duty?`${a.title}(职责:${a.duty})`:a.title,h=a.duty?c+20:c+cH.boxH/2+5,i=a.duty?`<text x="${d}" y="${c+36}" text-anchor="middle" font-size="10" fill="#495057">${cB(f)}</text>`:"";y.push(`<g class="fig-org-node"><title>${cB(g)}</title><rect class="fig-org-box" x="${b}" y="${cC(c)}" width="${cH.boxW}" height="${cH.boxH}" rx="4" fill="#f8f9fa" stroke="#495057"/><text x="${d}" y="${cC(h)}" text-anchor="middle" font-size="12" font-weight="700" fill="#212529">${cB(e)}</text>${i}</g>`)}return y.push("</svg>"),{svg:y.join(""),warnings:b}})(a)};var cJ=c(41618);async function cK(a){let b=a.documentId,c=a.projectRoot;if(!b)return;let d=cr.resolve((0,ct.Gl)(c),"assets",cJ.FIGURE_DIR_NAME),e=function(a){let b=a.markdown.split("\n"),c=[],d=[],e=[],f=[],g=!1!==a.removeSubstituteTable,h=(a.schedule||[]).filter(a=>a&&String(a.label||"").trim()&&Number.isFinite(a.duration)&&a.duration>0).map(a=>({name:String(a.label).trim(),startDay:Math.max(0,Number.isFinite(a.startDay)?a.startDay:0),durationDays:a.duration,...a.critical?{critical:!0}:{}})),i=[];for(let a=0;a<b.length;a+=1){if(!/^##\s/u.test(b[a].trim()))continue;let c=i[i.length-1];c&&(c.end=a),i.push({index:i.length,start:a,end:b.length})}for(let j of[...i].reverse()){let i=a.templateChapters[j.index],k=i?.diagramRequirements||[];if(0===k.length)continue;let l=[],m=[],n=0;for(let o of k){let k=function(a){let b=/「([^」]{2,40})」/u.exec(String(a??""));return b?b[1].trim():String(a??"").split(/[((::]/u)[0].trim().slice(0,40)}(o),p=(0,cz.SZ)(k);if(!p)continue;let q=`图 ${j.index+1}-${n+1}`;if("orgChart"===p||"schedule"===p&&h.length>0){let o="orgChart"===p?cI.orgChart({nodes:function(){let a=cz.Ek.top,b=[{title:a,duty:"项目全面负责"}];for(let c of cz.Ek.second)b.push({title:c,parent:a});let c=cz.Ek.second.includes("施工负责人")?"施工负责人":a;for(let a of cz.Ek.third)b.push({title:a,parent:c});return b}(),title:k}):cI.schedule({tasks:h,title:k});if(f.push(...o.warnings.map(a=>`${i?.title||""}\xb7${k}:${a}`)),!o.svg){e.push({chapterTitle:i?.title||"",requirement:k,reason:"渲染器返回空图(数据不足)"});continue}n+=1;let r=a.fileNameOf(j.index,p,n),s=`${q} ${k}`;if(d.push({fileName:r,svg:o.svg}),c.push({chapterTitle:i?.title||"",kind:p,caption:s,fileName:r,order:1e3*j.index+n}),l.push({at:j.end,text:["",`![${s}](${a.urlOf(r)})`,"",s]}),g){let a=(0,cz.M2)(k),c=a?function(a,b,c,d){let e=a.findIndex((a,e)=>e>=b&&e<c&&a.trim()===d);if(e<0)return null;let f=e;for(;f>b&&!a[f-1].trim();)f-=1;let g=e;for(;g+1<c&&a[g+1].trim().startsWith("|");)g+=1;return{start:f,end:g}}(b,j.start,j.end,a):null;c&&m.push(c)}continue}let r="tempLand"===p?"本系统暂无该图类的确定性渲染器(总平面布置涉及现场实际布置,不编造)":"缺少结构化数据(蓝图进度 schedule 为空:工序与天数是画横道图的前提)";e.push({chapterTitle:i?.title||"",requirement:k,reason:r}),l.push({at:j.end,text:["",`> 图位待人工插入:**${k}**(原因:${r};建议由项目图纸/现场布置确定后插入)`]})}for(let a of m)b.splice(a.start,a.end-a.start+1);for(let a of l.sort((a,b)=>b.at-a.at))b.splice(a.at,0,...a.text)}let j=c.sort((a,b)=>a.order-b.order).map(({order:a,...b})=>b);return{markdown:b.join("\n"),figures:j,files:d,pending:e,warnings:f}}({markdown:a.finalMarkdown,templateChapters:a.effectiveChapters||[],...a.blueprintData?.schedule?{schedule:a.blueprintData.schedule}:{},fileNameOf:(a,c,d)=>`${b}-c${a+1}-${c}-${d}.svg`,urlOf:a=>`/api/documents/generated/${encodeURIComponent(b)}/figure/${a}`});if(e.files.length>0){for(let a of(cp.mkdirSync(d,{recursive:!0}),e.files))cp.writeFileSync(cr.join(d,a.fileName),a.svg,"utf-8");a.finalMarkdown=e.markdown}else e.pending.length>0&&(a.finalMarkdown=e.markdown);if(e.pending.length>0&&a.clarificationRequests){let b=Date.now();for(let c of e.pending)a.clarificationRequests.push({question:`图位待人工插入:${c.requirement}(章:${c.chapterTitle})——${c.reason}`,blocking:!1,askedAt:new Date(b).toISOString(),askedAtMs:b,status:"pending"})}if(0===e.figures.length&&0===e.pending.length&&0===e.warnings.length)return;let f=e.figures.map(a=>a.caption).join("、");(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"validation",roleId:"figure-landing",status:e.pending.length>0&&0===e.figures.length?"failed":"success",message:`图件落地:出图 ${e.figures.length} 张${e.figures.length>0?`(${f})`:""}${e.pending.length>0?`;待人工插入 ${e.pending.length} 处(已进待答清单)`:""}${e.warnings.length>0?`;渲染告警 ${e.warnings.length} 条`:""}`,details:[...e.figures.map(a=>`${a.caption}|${a.kind}|${a.fileName}`),...e.pending.map(a=>`待人工插入:${a.requirement}(${a.chapterTitle})——${a.reason}`),...e.warnings]},{subtitle:"图件落地"})}),console.log(`[gen][figure] doc=${b} 出图 ${e.figures.length} 张,待答 ${e.pending.length} 处,告警 ${e.warnings.length} 条`)}let cL={prefixCacheHitRateFloor:.4,budgetDropRatioCeiling:.3,llmFailureRateCeiling:.1};async function cM(a){let b=function(a){let b=[],c=a.llm.promptCacheHitTokens??0,d=c+(a.llm.promptCacheMissTokens??0),e=d>0?c/d:null;null!==e&&e<cL.prefixCacheHitRateFloor&&b.push(`固定前缀缓存命中率 ${(100*e).toFixed(1)}% 低于 40%:固定前缀未收敛,检查 L0/L2 恒定段结构`);let f=a.llm.reasoningTokens??0;f>0&&b.push(`推理 token 累计 ${f}:disableThinking 未生效,检查模型 provider 配置`);let g=a.evidence.raw>0?a.evidence.budgetDropped/a.evidence.raw:null;null!==g&&g>cL.budgetDropRatioCeiling&&b.push(`证据预算裁剪 ${(100*g).toFixed(1)}%(${a.evidence.budgetDropped}/${a.evidence.raw}):裁剪过重,疑似预算配置失配`);let h=a.llm.calls>0?a.llm.failures/a.llm.calls:null;return null!==h&&h>cL.llmFailureRateCeiling&&b.push(`LLM 失败率 ${(100*h).toFixed(1)}%(${a.llm.failures}/${a.llm.calls}):失败率偏高,检查限流与重试策略`),{alerts:b,metrics:{prefixCacheHitRate:e,reasoningTokens:f,budgetDropRatio:g,llmFailureRate:h}}}(a.generationDiagnostics),c=process.memoryUsage(),d=Math.round(c.rss/1048576),e=Math.round(c.heapUsed/1048576),f=function(){let a=Number(process.env.DOCUMENT_MEMORY_ALERT_MB??3072);return Number.isFinite(a)&&a>0?a:3072}();console.log(`[gen] memory(finalize) rss=${d}MB heap=${e}MB threshold=${f}MB`);let g=[...d>=f?[...b.alerts,`进程内存 rss=${d}MB 超过告警阈值 ${f}MB:大文档生成建议 NODE_OPTIONS=--max-old-space-size=4096,并控制并发生成任务数(DOCUMENT_MAX_CONCURRENT_GENERATIONS)`]:b.alerts,...(a.generationDiagnostics.supervisorDecisions??[]).filter(a=>"stop_and_preserve"===a.action||"request_human"===a.action).map(a=>`主智能体在「${a.at}」判定 ${a.action}:${a.reason.slice(0,160)}`)];a.telemetry.healthAlerts=g,0!==g.length&&(0,l.Wl)(a,{batch:"finalize.delivery",stage:(0,k.X5)({type:"validation",roleId:"document-health-diagnosis",status:"partial",message:`自动健康诊断:${g.length} 项告警(不阻断,供配置优化参考)`,details:g},{subtitle:"健康诊断"})})}function cN(a){return{...a,chapterTasks:[],baseProjectGraph:{works:[],methods:[],resources:[],schedule:[],standards:[],risks:[],requirements:[],siteConditions:[],addendumChanges:[],gaps:[],generatedAt:a.baseProjectGraph.generatedAt},documentPlan:void 0,materialSnapshot:{...a.materialSnapshot,files:[]}}}async function cO(a){var b,d,e,f;(0,t.wF)();{let a=["postReviewSurface","requirementVerification"];try{let{unanchoredRepairRounds:b}=await Promise.resolve().then(c.bind(c,25018)),d=b().filter(b=>!a.includes(b));d.length>0&&console.warn(`[gen][repair-chain] 出现**未登记的**无锚定修复轮:${d.join("、")}——它们无法做残余驱动的重跑(只跑基线层);要么补注册表锚定,要么登记进 toolRegistry 的已知清单`)}catch(a){console.warn(`[gen][repair-chain] 未锚定轮对账未能执行:${a instanceof Error?a.message:String(a)}`)}try{let[{unresolvedCardIds:a},{loadSkills:b}]=await Promise.all([Promise.resolve().then(c.bind(c,21312)),Promise.resolve().then(c.bind(c,45304))]),d=a(b());d.length>0&&console.warn(`[gen][skills] 技能引用的工艺卡 id 查不到:${d.join("、")}——这些技能命中了也拿不到卡片正文(规则包会变短);请修技能声明或补卡片`)}catch(a){console.warn(`[gen][skills] 工艺卡断链对账未能执行:${a instanceof Error?a.message:String(a)}`)}}let{chapterDraftsByOrder:g,chapterGenerationStagesByOrder:n,chapterGenerationStages:u,effectiveChapters:v,input:w,failedChapterMessages:x}=a,{requirement:A}=w,B=function(a){let{signal:b,requirement:c}=a.input;return{input:a,template:a.template,effectiveChapters:a.effectiveChapters,requirement:c,signal:b,projectRoot:a.projectRoot,projectId:a.projectId,documentId:a.documentId,projectMaterialSummary:a.projectMaterialSummary,documentSpec:a.documentSpec,documentBudget:a.documentBudget,promptIds:a.promptIds,promptDocumentRules:a.promptDocumentRules,domainProfile:a.domainProfile,scopeConflicts:a.scopeConflicts,evaluationCriteriaItems:a.evaluationCriteriaItems,tenderRequirements:a.tenderRequirements,requirementAssignments:a.requirementAssignments,requirementsSimilarity:a.requirementsSimilarity,factTokenScopeClassifier:a.factTokenScopeClassifier,professionalDepthClassifier:a.professionalDepthClassifier,blueprintData:a.blueprintData,bidComposition:a.bidComposition,billFactLock:a.billFactLock,drawingFactLock:a.drawingFactLock,requirementSemantics:a.requirementSemantics,generationDiagnostics:a.generationDiagnostics,repairPromptTexts:a.repairPromptTexts,chapterGenerationStages:a.chapterGenerationStages,emitProgress:a.emitProgress,withProgressHeartbeat:a.withProgressHeartbeat,...void 0!==a.nodeLogBaseDir?{nodeLogBaseDir:a.nodeLogBaseDir}:{},missingItems:a.missingItems,clarificationRequests:a.clarificationRequests,unfixableDeclarations:a.unfixableDeclarations,failedChapterMessages:a.failedChapterMessages,indexHealth:a.indexHealth,webResearchReport:a.webResearchReport,retrievalCoverageReports:a.retrievalCoverageReports,writingTaskBrief:a.writingTaskBrief,clarificationOverrides:a.clarificationOverrides,clarificationAmendments:a.clarificationAmendments,globalConsistencyIssues:a.globalConsistencyIssues,agentWorkflow:a.agentWorkflow,factExtractionPromptTexts:a.factExtractionPromptTexts,readiness:a.readiness,allEvidence:a.allEvidence,facts:{},structuredFacts:[],governedStructuredFacts:[],factsModel:void 0,chapterDrafts:[],finalChapterDrafts:[],finalMarkdown:"",validationIssues:[],baseValidationIssues:[],executionStages:[],sources:[],qualityBundle:void 0,scheduleAuthority:void 0,assemblyRateAuthority:void 0,scaleSummary:void 0,supportAuthority:void 0,laborPeakAuthority:void 0,greeningMaintenanceAuthority:void 0,surfaceFixContext:{laborPeakAuthority:void 0,greeningMaintenanceAuthority:void 0,resourceBreakdownAuthority:void 0,supportFormAuthority:void 0},decisionLockEntries:[],reviewChecklist:[],telemetry:void 0,professionalScore:void 0,templatingReview:{issues:[],reviewed:!1},assets:[],validation:void 0,rebuildFinalMarkdown:()=>"",recomputeFinalValidationBundle:async()=>void 0}}(a),C=g.filter(a=>!!a);B.chapterDrafts=C,u.push(...n.filter(a=>!!a));let D=0===(b={chapterDraftCount:C.length,failedChapterMessages:x}).chapterDraftCount?`章节生成未完成:${b.failedChapterMessages.join(";")||"没有生成任何有效章节"}`:null;if(D)throw Error(D);await y(B),await (0,z.Vd)(B),(0,z.rR)(B),await (0,z.rX)(B);let E=o((()=>{let a=(0,m.Su)(B.generationDiagnostics),b=a.budget.maxTokensPerDocument>0?a.documentTokens/a.budget.maxTokensPerDocument:0;return{readings:{usedRatio:b,remainingTokens:Math.max(0,a.budget.maxTokensPerDocument-a.documentTokens),chaptersTotal:B.effectiveChapters.length,chaptersLeft:0,configuredConcurrency:1,chapterOutcomes:[]},budgetRatio:b}})().readings),F="throttle"===E.kind||"stop_and_preserve"===E.kind?0:void 0;void 0!==F&&(d="修复链轮边界",e=`${E.reason}——层 ≥1(残余驱动的额外补写轮)本轮不启用,只跑基线层与收口骨架`,(0,l.Wl)(B,{batch:"finalize.pipeline",id:`supervisor.finalize.${d}.${E.kind}`,type:"supervisor",title:`调度决策:${E.kind}(${d})`,status:"stop_and_preserve"===E.kind||"request_human"===E.kind?"failed":"completed",metrics:{action:E.kind,at:d,note:e.slice(0,160)}}),B.generationDiagnostics.supervisorDecisions=[...B.generationDiagnostics.supervisorDecisions??[],{at:d,action:E.kind,reason:e}]);let G=await cg(B,{plan:[{id:"stageFactLanding",round:"factLanding",tier:"draft",compensation:!0,stage:bi},{id:"stageTableRepair",round:"tableRepair",tier:"draft",compensation:!0,stage:b1},{id:"stageSemanticChoice",round:"semanticChoice",tier:"draft",compensation:!0,stage:bY},{id:"stageDeterministicStage5",round:"deterministicStage5",tier:"draft",compensation:!0,stage:aD},{id:"stageNumericVerification",round:"numericVerification",tier:"draft",compensation:!0,stage:bn.VB},{id:"stageRequirementResponseRepair",round:"requirementResponseRepair",tier:"draft",compensation:!0,stage:bG},{id:"stageRequirementVerification",round:"requirementVerification",tier:"draft",compensation:!0,stage:bW},{id:"stageContentDepthRepair",round:"contentDepthRepair",tier:"draft",compensation:!0,stage:ao},{id:"stageControlLoopRepair",round:"controlLoopRepair",tier:"draft",compensation:!0,stage:ar},{id:"stageProfessionalChainRepair",round:"professionalChainRepair",tier:"draft",compensation:!0,stage:bV},{id:"stagePostReviewSurface",round:"postReviewSurface",tier:"draft",compensation:!0,stage:bM},{id:"stageLengthCompressionRepair",round:"lengthCompressionRepair",tier:"draft",compensation:!0,stage:bm},{id:"stageFactDistribution",round:"factDistribution",tier:"draft",compensation:!0,stage:bh},{id:"stageTableArithmeticRepair",round:"tableArithmeticRepair",tier:"draft",compensation:!0,stage:b$},{id:"stageEmptySectionSweep",round:"emptySectionSweep",tier:"draft",compensation:!0,stage:bf},{id:"stageSectionAlignmentSweep",round:"sectionAlignmentSweep",tier:"draft",compensation:!0,stage:bX},{id:"stageTemplatingSweep",round:"templatingSweep",tier:"draft",compensation:!0,stage:b2},{id:"stageDuplicateThemeMerge",round:"duplicateThemeMerge",tier:"draft",compensation:!0,stage:be},{id:"stageTableCaptionRepair",round:"tableCaptionRepair",tier:"draft",compensation:!0,stage:b_},{id:"runSurfaceDeterministicCleans",tier:"surface",compensation:!1,stage:bQ},{id:"replayBlueprintCitationNumericFixes",tier:"surface",compensation:!1,stage:bN},{id:"replayStage5FactsModelNumericFixes",tier:"surface",compensation:!1,stage:bO},{id:"replayRequirementTailClosure",tier:"surface",compensation:!1,stage:bK},{id:"stageCaliberPlacementBackfill",tier:"surface",compensation:!1,stage:b4},{id:"stageDeliveryStructureClosure",round:"deliveryStructureClosure",tier:"surface",compensation:!0,stage:ay},{id:"stageSentencePatternSweep",round:"sentencePatternSweep",tier:"surface",compensation:!0,stage:bZ},{id:"stageDuplicateSentenceCollapse",round:"duplicateSentenceCollapse",tier:"surface",compensation:!0,stage:aG},{id:"stageTemplatingTailReplay",round:"templatingTailReplay",tier:"surface",compensation:!0,stage:b3},{id:"replaySurfacePunctuationClosure",tier:"surface",compensation:!1,stage:bR},{id:"applyTruthCaliberCleans",tier:"surface",compensation:!1,stage:bP},{id:"stageBasisTailCitationReplay",tier:"surface",compensation:!1,stage:b5},{id:"stageBasisTailBackfill",tier:"surface",compensation:!1,stage:b6},{id:"replayBlueprintCitationNumericFixes@tail",tier:"surface",compensation:!1,stage:bN}],...void 0!==F?{residualLevels:F}:{}});B.generationDiagnostics.repairChainNetChars=G.netChars,G.netChars.before>0&&G.netChars.ratio>.05&&console.warn(`[gen][net-chars] 修复链净增字数 ${G.netChars.delta} 字(${(100*G.netChars.ratio).toFixed(1)}%,目标 ≤5%):${G.netChars.before} → ${G.netChars.after}`),G.skippedRounds.length>0&&(B.generationDiagnostics.repairChain={mode:"off",skippedRounds:G.skippedRounds},console.warn((f=G.skippedRounds.length,`[gen][repair-chain] REPAIR_CHAIN=off:本次生成跳过 ${f} 个修复轮(方案 Z5 的 B 组实验口径)。被跳过的轮次已登记进 generationDiagnostics.repairChain.skippedRounds;「关链后六维分是否仍达 A 组 \xd7 0.95」由归档报告判定,**不得据此认定生成通过**。`))),B.generationDiagnostics.repairChainLog=G.log;let H=[...new Set(G.log.filter(a=>a.residualBefore?.status==="read-error"||a.residualAfter?.status==="read-error").map(a=>a.round))];H.length>0&&console.warn(`[gen][repair-chain] ${H.length} 个轮的残余读数抛错(已按 read-error 逐条归档,未按 0 处理;这些轮不做残余驱动的重跑):${H.join("、")}`);let I=G.log.filter(a=>a.rolledBack);I.length>0&&console.warn(`[gen][repair-chain] ${I.length} 个轮因**篇幅合同**被整轮回滚(章字数 > 章目标\xd71.15 且本轮让它更超):${I.map(a=>a.round).join("、")}——逐章明细见 repairChainLog[].rollbackReason`),await cK(B),await cy(B),await cM(B);let J=B.finalChapterDrafts.map(a=>({...a,evidence:(0,h.QR)(a.evidence||[],{preservePinned:!0})}));B.finalChapterDrafts=J,(0,i.Q)(B);let K=(0,p.Lf)(void 0,B.bidComposition?.formatRules);return K.applied.length>0&&(0,l.Wl)(B,{batch:"finalize.pipeline",stage:(0,k.X5)({type:"reference",roleId:"tender-format-applied",status:"success",message:`招标规定排版已应用(${K.applied.length} 项):${K.applied.slice(0,5).join("、")}`,details:["来源:招标文件「格式要求」条款(正文/标题字体、字号、行距、装订线、页数上限)","口径:招标格式规则是排版的唯一真值源",...K.applied]},{subtitle:"招标排版应用"})}),{templateId:B.template.id,templateName:B.template.name,title:B.template.outputTitle,requirement:A||"",projectRoot:B.projectRoot,projectId:B.projectId,exportSettings:K.settings,generationSettings:B.template.generationSettings,facts:B.facts,structuredFacts:B.structuredFacts,factsModel:B.factsModel,chapters:J,sources:B.sources,missingItems:[...new Set(B.missingItems)],clarificationRequests:B.clarificationRequests,unfixableDeclarations:B.unfixableDeclarations,validation:B.validation,validationIssues:B.validationIssues,exportGate:B.qualityBundle.finalExportGate,executionStages:(0,z.pm)(B),assets:B.assets,partialChapters:B.finalChapterDrafts.map(a=>({id:a.id,title:a.title,chars:(0,j.V7)(a.content),status:(0,s.DR)(a,B.documentBudget.chapterTargets.get(a.id)),updatedAt:Date.now()})),checkpointChapters:J,promptRules:B.promptDocumentRules,agentWorkflow:cN(B.agentWorkflow),reviewMetadata:{chapterSummaries:[],globalIssues:[],diagnostics:B.generationDiagnostics,profile:function(a){let b=`${a.template.name} ${a.template.outputTitle||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`,c=[{pattern:/专项施工|危大|专项方案/u,type:"专项施工方案",dimensions:["专项对象边界","工艺参数","风险控制","验收要求","应急措施"]},{pattern:/投标|技术标|响应|招标/u,type:"投标技术方案",dimensions:["招标响应","技术优势","工期质量安全承诺","资源保障","履约可实施性"]},{pattern:/监理|旁站|巡视|平行检验/u,type:"监理规划/细则",dimensions:["监理目标","旁站巡视","平行检验","验收程序","资料签认"]},{pattern:/可研|可行性|项目建议书|投资估算/u,type:"可研/项目建议类文档",dimensions:["建设必要性","方案比选","投资估算","风险分析","实施效益"]},{pattern:/运维|维护|保养|巡检/u,type:"运维维护方案",dimensions:["巡检频次","维护流程","故障响应","备品备件","记录闭环"]}].find(a=>a.pattern.test(b));return{type:c?.type||"施工组织设计/施工技术方案",dimensions:c?.dimensions||["工程概况","施工部署","进度质量安全","资源配置","施工工艺和验收闭环"],requiredEvidencePolicy:"本地知识库为完整事实源;系统暂未确认的事实必须通过扩大检索、事实补抽或落位修复解决,不得归因为用户资料缺失。"}}({template:B.template,chapters:v,requirement:A}),knowledgeCoverage:B.qualityBundle.knowledgeCoverage,factTraces:B.qualityBundle.factTraces,chapterCoverage:B.qualityBundle.chapterCoverage,retrievalCoverage:B.retrievalCoverageReports,qualityReport:B.qualityBundle.qualityReport,repairStrategies:B.qualityBundle.repairStrategies,reviewChecklist:B.reviewChecklist,professionalScore:B.professionalScore,templatingReviewIssues:B.templatingReview.issues,authorityAudit:B.authorityAuditReport,suspensionChecklist:B.suspensionChecklist??(B.qualityBundle.finalExportGate.passed?void 0:(0,q.aF)(B.qualityBundle.finalExportGate.blockingIssues,B.finalChapterDrafts)),writingTaskBrief:B.writingTaskBrief,workflowVersion:r.x,telemetry:B.telemetry},generatedAt:Date.now(),markdown:B.finalMarkdown,bidComposition:B.bidComposition,pausedByRequest:!0===a.pausedByRequest}}var cP=c(38049),cQ=c(91977),cR=c(71678),cS=c(29055),cT=c(30111);let cU=[{id:"overview",title:"工程概况与总体理解",requiredSectionPatterns:[/编制依据|编制说明/u,/工程概况|项目概况|基本概况/u,/现场踏勘|施工条件|现场条件/u],chapterPatterns:[/概况|总体|理解|说明|编制|项目/u],remedy:"应设置工程概况章节,包含编制依据、工程基本概况、现场条件与总体理解。",level:"required"},{id:"major-content",title:"项目主要施工内容",requiredSectionPatterns:[/主要施工内容|主要施工项目|施工内容/u],chapterPatterns:[/概况|总体|理解|主要施工|工程/u],remedy:'必须包含"项目主要施工内容"小节,按工作包展开施工概况、施工流程、施工方法。',level:"required"},{id:"key-difficulty",title:"重难点分析与对策",requiredSectionPatterns:[/重点.*难点|难点.*对策|重难点/u],chapterPatterns:[/概况|总体|理解|重点|难点|施工/u],remedy:"应设置项目特点、重点、难点分析小节,并逐项给出应对措施与责任闭环。",level:"required"},{id:"deployment",title:"施工部署与施工组织",requiredSectionPatterns:[/施工部署|总体部署|流水|施工顺序|施工区段/u],chapterPatterns:[/部署|组织|总体|方案/u],remedy:"应设置施工部署小节,明确流水段划分、施工顺序与资源调配。",level:"required"},{id:"schedule",title:"进度计划与工期保障",requiredSectionPatterns:[/进度计划|工期|节点/u],chapterPatterns:[/进度|工期|计划|保障/u],remedy:"应设置进度计划与工期保障小节,含总进度计划、关键节点与纠偏措施。",level:"required"},{id:"quality",title:"质量保证体系与措施",requiredSectionPatterns:[/质量/u],chapterPatterns:[/质量|验收|保障|措施/u],remedy:"应设置质量保证体系与措施小节,含质量目标、三检、隐蔽验收、通病防治。",level:"required"},{id:"safety",title:"安全文明施工与危大工程管控",requiredSectionPatterns:[/安全/u,/危大工程|危大/u],chapterPatterns:[/安全|文明|风险|危大|保障|措施/u],remedy:"应设置安全管理与危大工程管控小节,含危险源辨识、危大清单、专项方案。",level:"required"},{id:"resources",title:"劳动力材料机械设备配置",requiredSectionPatterns:[/劳动力|机械设备|材料.*计划|资源配置|人材机/u],chapterPatterns:[/资源|劳动力|机械|材料|设备|计划/u],remedy:"应设置资源配置小节,含分阶段劳动力、机械设备投入与材料进场计划。",level:"required"},{id:"environment",title:"绿色文明施工与环保措施",requiredSectionPatterns:[/文明施工|扬尘|噪声|绿色|环保|四节/u],chapterPatterns:[/文明|绿色|环保|扬尘|噪声|保障|措施/u],remedy:"应设置文明施工与绿色施工小节,含扬尘噪声管控与四节一环保措施。",level:"required"},{id:"emergency",title:"应急管理体系",requiredSectionPatterns:[/应急/u],chapterPatterns:[/应急|安全|保障|措施/u],remedy:"应设置应急管理小节,含应急组织、物资储备与专项预案。",level:"recommended"}],cV={building:[{id:"extra-dangerous-building",title:"危大工程专项管控(房建)",requiredSectionPatterns:[/深基坑|高支模|起重吊装|脚手架/u],chapterPatterns:[/危大|安全|专项/u],remedy:"房建项目应对深基坑、高支模、起重吊装、脚手架等危大工程逐项给出专项方案与安全管理措施。",level:"recommended"}],municipal:[{id:"extra-traffic-diversion-municipal",title:"交通导改与管线保护(市政)",requiredSectionPatterns:[/交通导改|交通导行|占道施工/u,/管线保护|管线探测/u],chapterPatterns:[/交通|管线|安全|专项|保障/u],remedy:"市政项目应设置交通导改与既有管线保护专项内容。",level:"recommended"}],renovation:[{id:"extra-resident-coordination-renovation",title:"居民协调与既有保护(改造)",requiredSectionPatterns:[/居民|扰民|既有.*保护|不中断/u],chapterPatterns:[/居民|协调|保护|保障|专项/u],remedy:"改造项目应设置居民沟通协调与既有设施保护专项内容。",level:"recommended"}],decoration:[{id:"extra-finished-product-decoration",title:"成品保护与交叉施工(装饰)",requiredSectionPatterns:[/成品保护/u,/交叉施工|工序穿插/u],chapterPatterns:[/成品保护|交叉|协调|保障|专项/u],remedy:"装饰项目应设置成品保护与交叉施工工序优化专项内容。",level:"recommended"}]};function cW(a){return(0,av.GQ)(a).replace(/\s+/gu,"").toLowerCase()}function cX(a){return cW(`${a.title} ${(a.sections||[]).join(" ")}`).slice(0,800)}function cY(a){var b;let c,d=(b=a.chapters,[...cU].map(a=>{let c=[],d=new Set;for(let e of b){let b=cW(`${e.title} ${(e.sections||[]).join(" ")}`);for(let f of a.requiredSectionPatterns)f.test(b)&&!d.has(f)&&(d.add(f),c.push(e.title))}let e=[...new Set(c)],f=a.requiredSectionPatterns.filter(a=>!d.has(a)).map(a=>(function(a){let b=a.source.replace(/[\\/^$.*+?()[\]{}]/gu,"").replace(/u$/u,"");return b.split("|").map(a=>a.trim()).find(Boolean)||b})(a)),g=d.size===a.requiredSectionPatterns.length?e.length>1?"fragmented":"satisfied":"missing";return{groupId:a.id,groupTitle:a.title,level:a.level,status:g,carrierChapters:e,missingSections:f,remedy:a.remedy}})),e=[],f=d.filter(a=>"required"===a.level&&"missing"===a.status);for(let a of f)e.push({level:"error",severity:"blocker",message:`评标结构缺失:${a.groupTitle}(缺少:${a.missingSections.join("、")})`,suggestion:a.remedy});for(let a of d.filter(a=>"fragmented"===a.status))e.push({level:"warning",severity:"warning",message:`${a.groupTitle} 小节散落在 ${a.carrierChapters.length} 个章节(${a.carrierChapters.join("、")}),结构可能失真`,suggestion:"建议将同类内容集中到一个承载章节,避免章节间职责重叠。"});for(let b of a.chapters){let a=(b.sections||[]).length;a>18&&e.push({level:"warning",severity:"warning",message:`${b.title} 规划小节 ${a} 个,超过 18 个上限,易产生内容膨胀与重复`,suggestion:"合并语义相近的小节,或将细分内容下移为三级小节而非二级小节。"})}let g=a.chapters.map(a=>({...a,sections:[...a.sections||[]]})),h=new Set;for(let a of f){let b=cU.find(b=>b.id===a.groupId);if(!b)continue;let c=g.findIndex(a=>{let c=cW(a.title);return b.chapterPatterns.some(a=>a.test(c))&&!/雨季|冬季|高温|防汛|扬尘|噪声|工资|劳务|实名|应急|BIM|智慧|管线/u.test(c)}),d=g[c>=0?c:0];for(let c of a.missingSections.filter(a=>!h.has(a))){h.add(c);let a=!function(a){let b=(0,av.GQ)(a).replace(/\s+/gu,"");return b.length>0&&b.length<=3&&/^[\u4e00-\u9fa5]+$/u.test(b)}(c)?c:b.title;!(0,cR.xb)(a)&&(d.sections.some(b=>cW(b).includes(cW(a))||cW(a).includes(cW(b)))||d.sections.push(a))}}let i=/^(?:确保\s*)?([人材机])(?:员|力|料|械|工)?\s*的保障体系与措施$/u;for(let a of g){if(!/人[、,,]材[、,,]机/u.test(a.title))continue;let b=new Set,c=[];for(let d of a.sections){if(cW(d)===cW(a.title))continue;let e=i.exec(d.trim());e?b.has(e[1])||(b.add(e[1]),c.push(d.trim())):c.push(d)}for(let a of["人","材","机"])b.has(a)||c.push(`确保${a}的保障体系与措施`);c.length!==a.sections.length&&(a.sections=c)}if(a.evaluationItems?.length){let b=a.chapters.map(cX);for(let{item:d}of(c=function(a,b,c){let d=[],e=a.map(cX);for(let a of b){let b=a.title;if(!b||e.some(a=>(function(a,b){let c=cW(b);return!!c&&(a.includes(c)||c.includes(a.slice(0,40)))})(a,b)))continue;let f=0;if(c?.semanticSimilarity)for(let a of e)f=Math.max(f,c.semanticSimilarity(b,a));f>=aH.Eh||d.push({item:a,title:b,bestSimilarity:c?.semanticSimilarity?f:void 0})}return{items:b,uncovered:d}}(a.chapters,a.evaluationItems,{semanticSimilarity:a.semanticSimilarity})).uncovered){let c=d.title;if(!c||(0,av.Fe)(c)||(0,av.ob)(c)||(0,cR.xb)(c))continue;let f=b.reduce((b,d,e)=>{let f=a.semanticSimilarity?a.semanticSimilarity(c,d):+!!d.includes(cW(c));return f>b.score?{index:e,score:f}:b},{index:-1,score:-1}).index,h=g[f>=0?f:0];h.sections.some(a=>cW(a).includes(cW(c))||cW(c).includes(cW(a)))||(h.sections.push(c),h.purpose=`${h.purpose||""};系统已按招标文件技术评审条目自动补足小节“${c}”,必须基于项目资料与适用技术展开实质内容。`,e.push({level:"warning",severity:"warning",message:`评分标准条目“${c}”无承接章节,已自动补小节“${c}”至“${h.title}”`,suggestion:"请确认补充小节与招标文件评审条目口径一致。"}))}}for(let b of(0,cS.yt)(a))if("general"!==b)for(let a of cV[b]){let b=cW(g.map(a=>`${a.title} ${(a.sections||[]).join(" ")}`).join(" "));if(a.requiredSectionPatterns.some(a=>a.test(b)))continue;let c=g.findIndex(b=>{let c=cW(b.title);return a.chapterPatterns.some(a=>a.test(c))}),d=g[c>=0?c:0];(0,cR.xb)(a.title)||d.sections.push(a.title)}return{diagnostics:d,issues:e,enrichedChapters:g,criteriaAudit:c}}var cZ=c(18351),c$=c(21312),c_=c(45304),c0=c(32374),c1=c(71536);function c2(a){return a.replace(/\s+/gu,"").toLowerCase()}var c3=c(81892),c4=c(68977),c5=c(94281),c6=c(86710),c7=c(30355),c8=c(32434);function c9(a,b){let c=b[0]?.title?.trim();return c?`${a}(${c.slice(0,12)})`:a}var da=c(84450),db=c(2773),dc=c(38115),dd=c(31129);let de={noImprovementRounds:3,budgetUsedRatio:.8,impactedNodeCount:5},df={continue:"照常推进",throttle:"按预算降档",resize_scope:"缩范围",replan_chapter:"重切块",swap_evidence:"换证据重试",adjust_depth:"调详略重试",request_human:"请示人",stop_and_preserve:"停止并保交付"};async function dg(a){a.planning.generationDiagnostics.metrics.push({name:"phase:plan",startedAt:a.planning.planPhaseStartedAt,endedAt:Date.now(),durationMs:Date.now()-a.planning.planPhaseStartedAt}),a.chapterLoop.draftPhaseStartedAt=Date.now();let b=(0,Z.UO)(a.blueprint.billFactLock,a.planning.effectiveChapters),c=(0,c4.ym)(a.understanding.writerEvidence,{基坑开挖深度:a.understanding.canonicalFacts?.byKey?.excavation_depth?.value}),d=(0,c6.GG)({texts:(0,c6.IK)([...a.understanding.availableEvidenceScopePaths,...a.prepare.materialFilePaths],b=>a.understanding.getCachedFileDetail(b))}),e=(0,c6.$X)(d.amendments,a.planning.effectiveChapters);if(d.sourceCount>0||e.length>0){a.planning.clarificationAmendments={...d,amendments:e};let b=e.filter(a=>a.chapterTitle).length;for(let a of(console.warn(`[clarification] 答疑技术性修正账本:${e.length} 条(按章归属 ${b} / 全文适用 ${e.length-b}),源 ${d.sourceCount} 份、问答对 ${d.pairCount};缺口:未解析短答 ${d.unparsedAnswers.length} 条、未覆盖平铺技术陈述 ${d.uncoveredStatements.count} 条(其中量值形态 ${d.uncoveredStatements.measureShaped} 条最像漏抽的技术口径,需人工过目)`),d.unparsedAnswers.slice(0,5)))console.warn(`[clarification] 未解析答句(人工复核):Q「${a.question}」→ A「${a.answer}」`);for(let a of d.uncoveredStatements.samples.slice(0,5))console.warn(`[clarification] 未覆盖平铺陈述(无问答结构,判据不抽):${a.text}`)}let h=a=>(0,c6.Fg)(a),i=(0,cS.un)({template:a.prepare.template,chapters:a.planning.effectiveChapters,requirement:a.global.input.requirement}),q=[],r=[],t=new Set,y=!1,z=[],A=new Set,C=(b,c)=>{(0,l.Wl)(a,{batch:"generation.write",id:`supervisor.${c}.${b.kind}`,parentId:(0,l.T1)("write"),type:"supervisor",title:`调度决策:${df[b.kind]}`,status:"stop_and_preserve"===b.kind||"request_human"===b.kind?"failed":"completed",metrics:{action:b.kind,at:c,note:("reason"in b?b.reason:"").slice(0,160)}})},D=(a,b)=>{let c=(0,m.Su)(a.planning.generationDiagnostics),d=c.budget.maxTokensPerDocument>0?c.documentTokens/c.budget.maxTokensPerDocument:0,e=function(a){let b=a.completedChapterTokens.filter(a=>Number.isFinite(a)&&a>0);if(0!==b.length)return b.reduce((a,b)=>a+b,0)/b.length}({completedChapterTokens:b.completedChapterTokens});return{action:o({usedRatio:d,remainingTokens:Math.max(0,c.budget.maxTokensPerDocument-c.documentTokens),chaptersTotal:a.planning.effectiveChapters.length,chaptersLeft:b.chaptersLeft,configuredConcurrency:b.configuredConcurrency,...void 0!==e?{avgTokensPerChapter:e}:{},chapterOutcomes:b.chapterOutcomes,budgetStopped:!1}),usedRatio:d,avgTokensPerChapter:e}};for(let d=0;d<a.planning.effectiveChapters.length;d+=a.blueprint.chapterConcurrency){let E;if(a.global.input.shouldPause?.()===!0){a.global.pausedByRequest=!0,console.log(`[gen] pause honored at chapter boundary: ${d}/${a.planning.effectiveChapters.length} 章已调度`);break}let F=(0,m.nY)((0,m.Su)(a.planning.generationDiagnostics));if(F){let b=a.planning.effectiveChapters.length-d,c=`文档预算耗尽(${F.kind}:${F.observed}/${F.limit}),后续 ${b} 章未生成:${F.message}`;a.understanding.failedChapterMessages.push(c),a.planning.generationDiagnostics.llm.lastError=c,console.error(`[gen] document budget exhausted at chapter boundary ${d}/${a.planning.effectiveChapters.length}: ${F.message}`);let e={issue:{level:"error",severity:"blocker",category:"structure",message:c},reason:`基础设施上限到达(${F.kind}):${F.observed}/${F.limit} —— 非内容缺陷,是未发起/未完成`,declaredAt:`${d}/${a.planning.effectiveChapters.length}`,declaredAtMs:Date.now()};"C"===F.escalation&&a.understanding.clarificationRequests&&a.understanding.clarificationRequests.push({question:`文档预算耗尽(${F.kind}:${F.observed}/${F.limit})——后续 ${b} 章未生成。是否调高上限或缩小范围后重跑?候选:① 加预算重跑剩余章节;② 缩小文档范围(少写几章);③ 接受当前成稿并人工补写。`,blocking:!1,askedAt:`${d}/${a.planning.effectiveChapters.length}`,askedAtMs:Date.now(),status:"pending"}),"unfixable"===F.escalation&&a.understanding.unfixableDeclarations&&a.understanding.unfixableDeclarations.push(e),a.global.emitProgress();break}if(a.planning.planRequests?.some(a=>!A.has(a))){let b=a.planning.planRequests.filter(a=>!A.has(a)),{approved:c,rejected:e}=function(a){let b=[],c=[];for(let d of a.pending){if(d.reason.trim().length<4){c.push({request:d,reason:"理由过短(改规划必须能溯源:说清是资料不足、目标定错,还是块装不下)"});continue}if("split_section"===d.kind){b.push(d);continue}if("rebalance_budget"===d.kind){if(0===(Array.isArray(d.payload?.from)?d.payload.from:[]).length){c.push({request:d,reason:'rebalance_budget 缺少 from("从谁身上扣"必须点名,否则等于凭空加预算)'});continue}b.push(d);continue}if("target_change"===d.kind){let e=a.chapterTargets.get(d.nodeId.trim()),f=Number(d.payload?.delta?.targetWords);if(void 0===e){c.push({request:d,reason:`目标变更指向的节点「${d.nodeId}」不在本次生效大纲里(章 id 逐字比对)`});continue}if(!Number.isFinite(f)||f<=0){c.push({request:d,reason:"target_change 未给出有效 targetWords(至少要一个正数字数标量)"});continue}let g=1.5*e,h=Math.max(600,.5*e);if(f>g){c.push({request:d,reason:`申请的目标 ${f} 字超过上限 ${Math.round(g)} 字(当前 ${e} \xd7 1.5):先按现有目标写,确实写不动就走 declare_missing`});continue}if(f<h){c.push({request:d,reason:`申请的目标 ${f} 字低于下限 ${Math.round(h)} 字:本章会因此不满足篇幅合同,须走"缩减范围"这条人工决策`});continue}b.push(d);continue}c.push({request:d,reason:`不认识的请求种类「${String(d.kind)}」:不予受理`})}return{approved:b,rejected:c}}({pending:b,chapterTargets:new Map(a.planning.effectiveChapters.map(b=>[b.id,a.planning.documentBudget.chapterTargets.get(b.id)??0]))});for(let a of b)A.add(a);for(let b of(z.push(...c),e))console.warn(`[gen] 规划请求被拒(${b.request.kind} @ ${b.request.nodeId}):${b.reason}`),a.planning.generationDiagnostics.llm.lastInfo=`规划请求被拒:${b.request.kind} @ ${b.request.nodeId} —— ${b.reason}`;(c.length>0||e.length>0)&&(0,l.Wl)(a,{batch:"generation.write",id:`supervisor.ch${d}.planRequests`,parentId:(0,l.T1)("write"),type:"supervisor",title:`调度决策:规划请求 ${c.length} 批准 / ${e.length} 拒绝`,status:"completed",metrics:{approved:(c.map(a=>`${a.kind}@${a.nodeId}`).join("、")||"(无)").slice(0,160),rejected:(e.map(a=>`${a.request.kind}@${a.request.nodeId}`).join("、")||"(无)").slice(0,160)}})}let G=D(a,{chaptersLeft:a.planning.effectiveChapters.length-d,configuredConcurrency:a.blueprint.chapterConcurrency,completedChapterTokens:q,chapterOutcomes:r}),H=Math.max(1,Math.min("throttle"===G.action.kind?G.action.batchSize:a.blueprint.chapterConcurrency,a.planning.effectiveChapters.length-d));H!==a.blueprint.chapterConcurrency&&(a.planning.generationDiagnostics.metrics.push({name:"chapter-pacing-throttle",startedAt:Date.now(),endedAt:Date.now(),durationMs:0,meta:{configured:a.blueprint.chapterConcurrency,batchSize:H,mode:"throttle"===G.action.kind?G.action.mode:"full",reason:G.action.reason}}),C(G.action,`ch${d}`),console.warn(`[gen] 预算配速:本批 ${H} 章(原 ${a.blueprint.chapterConcurrency})—— ${G.action.reason}`)),"request_human"!==G.action.kind||y||(y=!0,C(G.action,`ch${d}`),a.understanding.clarificationRequests?.push({question:`${G.action.question}(读数:已用 ${Math.round(100*G.usedRatio)}% 预算${G.avgTokensPerChapter?`,实测均耗 ${Math.round(G.avgTokensPerChapter)} token/章`:""})`,blocking:!1,askedAt:`ch${d}`,askedAtMs:Date.now(),status:"pending"}),console.warn(`[gen] 主智能体请示人(预算可行性):${G.action.reason}`));let I=a.planning.effectiveChapters.slice(d,d+H),J=I.map(()=>new AbortController),K=a.global.input.signal,L=()=>{for(let a of J)a.abort()};K&&(K.aborted?L():K.addEventListener("abort",L,{once:!0}));let M=Math.max(1,I.length),N=Math.max(1,(0,aV.Sq)()),O=Math.max(1,Math.ceil(M/N)),P=(0,m.Su)(a.planning.generationDiagnostics).budget.maxWallClockPerChapterMs,Q=O>1?{maxWallClockPerChapterMs:P*O}:void 0;O>1&&(a.planning.generationDiagnostics.metrics.push({name:"chapter-wallclock-scaling",startedAt:Date.now(),endedAt:Date.now(),durationMs:0,meta:{inFlightChapters:M,llmSlots:N,factor:O,baseWallClockMs:P,effectiveMs:P*O}}),console.warn(`[gen] 章墙钟按争用度放大 \xd7${O}(同批 ${M} 章 / 在飞上限 ${N}):${P}ms → ${P*O}ms`));let R=await Promise.allSettled(I.map((y,A)=>(0,m.$X)({instance:a.planning.generationDiagnostics,chapterId:y.id,...Q?{budget:Q}:{}},async()=>{let D,E=d+A,F=J[A]?.signal??K,G=a.prepare.promptPlan.writerPrompts[0]?.id,H=(0,av.GQ)(y.title),I=(0,m.Su)(a.planning.generationDiagnostics).budget,L=(y.sections?.length??0)>0?Math.max(1,Math.ceil((y.sections?.length??1)/2)):1,M=L*I.maxTurnsPerBlock*2;I.maxCallsPerChapter<M&&console.warn(`[gen] 章级调用上限偏小:${y.title} 约 ${L} 块 \xd7 每块重试包 ${2*I.maxTurnsPerBlock} 次 = 至少 ${M} 次,而上限是 ${I.maxCallsPerChapter} 次——该章可能因额度耗尽的块"未发起"(用 AGENT_MAX_CALLS_PER_CHAPTER 调整)`);let N=new Map,O=(0,m.Su)(a.planning.generationDiagnostics).documentTokens,P=!1,Q=b=>{if(P)return;P=!0;let c=(0,m.Su)(a.planning.generationDiagnostics).documentTokens-O;b&&c>0&&q.push(c);let d=[...N.values()];r.push({chapterId:y.id,chapterTitle:H,plannedBlocks:d.length,succeededBlocks:d.filter(a=>a.passed).length,failureKinds:[...new Set(d.flatMap(a=>a.kinds))],replanned:t.has(y.id)})};(0,f.Te)(F);let R=(0,da.Gz)(a.understanding.rolePoolRisk),S=a.blueprint.blueprintActive?{missing:[],failedChecks:[]}:(0,x.RT)(y.title,a.blueprint.integratedBlueprint?.validation,a.planning.chapterIntentClassifier);if(S.missing.length>0){let b=S.failedChecks.length>0?`蓝图校验项「${S.failedChecks.join("、")}」未通过`:"蓝图校验未通过或构建异常",c=(a.blueprint.integratedBlueprint?.diagnostics?.warnings??[]).filter(a=>/清单|知识库索引|索引/u.test(a)).slice(0,3),d=`${(0,av.GQ)(y.title)} 依赖蓝图权威 [${S.missing.join("、")}],${b},已按节点级把关阻断生成`,e=(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:G,status:"failed",message:d,details:["数值密集型章所需蓝图权威不可用时禁止无权威成稿",...c,c.length>0?"以上为清单侧诊断:按提示补齐资料/重建索引后重试;若本项目确无工程量清单,请在模板资料需求中确认「工程量清单」为必需项":"请检查清单解析与蓝图构建诊断后重试"],progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"章节阻断"}},{subtitle:H,order:E});(0,l.Wl)(a,{batch:"generation.write",stage:e,chapterId:y.id,chapterTitle:H}),a.understanding.failedChapterMessages.push(d),a.understanding.chapterGenerationStagesByOrder[E]=e,a.global.emitProgress();return}let T=Date.now();try{let d,q,r,A;(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:G,status:"running",message:`${(0,av.GQ)(y.title)} 正在检索证据并准备章节内容`,details:[`章节序号:${E+1}/${a.planning.effectiveChapters.length}`,`二级小节:${y.sections?.length||0} 个`,"正在生成检索查询"],progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"章节生成"}},{subtitle:H,order:E})}),a.global.emitProgress();let I=a.global.input.resumeChapters?.find(a=>a.id===y.id||a.title===y.title),J=I?.content?.trim(),K=I?.evidence?.length?[...I.evidence]:[],L=a.prepare.projectUnderstanding.chapterPlans.find(a=>a.chapterId===y.id||a.chapterTitle===y.title),M=L?Object.values(L.evidenceQueries).flat().filter(Boolean):[],O=y.queries.length>0?y.queries:[a.prepare.template.name,a.prepare.template.outputTitle,y.title],P=a.understanding.chapterGraphMap.get(y.id);if(a.understanding.projectGraph&&P&&P.graphFiles.size>0)for(let b of[...P.graphFiles]){let c=a.understanding.getCachedFileDetail(b);if(c?.chunks?.length)for(let d of c.chunks)K.push({chapterId:y.id,filePath:c.file?.relativePath||b,score:5+(P.graphWorks.length+P.graphMethods.length)*.5,content:d.content,roleId:a.understanding.fileRoleByPath.get(b),processingType:a.understanding.fileProcessingByPath.get(b),sectionTitle:d.sectionTitle,source:"graph-evidence"})}let U=a.planning.chapterIntentClassifier.needsBasicFacts(y.title),V=a.blueprint.billFactLock?(0,Z.Zc)(a.blueprint.billFactLock,y.title,y.sections||[]):[],W=(0,s.QP)(y,[...O,...M,...V],[]),ab=Date.now();(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:G,status:"running",message:`${(0,av.GQ)(y.title)} 正在执行质量优先的章节检索${P?.graphFiles.size?`(图谱匹配 ${P.graphFiles.size} 个文件)`:""}`,details:W.map(a=>`检索:${a.slice(0,42)}`),progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"证据检索"}},{subtitle:(0,av.GQ)(y.title),order:E})}),a.global.emitProgress();let ac=J?[]:[...a.understanding.availableEvidenceScopePaths].filter(Boolean).sort(),ad=J?[]:a.understanding.scopedIntelligence?.evidenceByChapterId?.[y.id]||[];if(ad.length>0){K.push(...ad);let b=a.planning.generationDiagnostics.evidence;b.intentEvidenceInjected=(b.intentEvidenceInjected??0)+ad.length}let ae=[],af=(y.requiredFacts||[]).filter(a=>!!a&&!W.some(b=>b.includes(a)||a.includes(b))).map(a=>`${y.title} ${a}`),ag=(a.prepare.requirementSemantics?.factClues||[]).filter(a=>!W.some(b=>b.includes(a)||a.includes(b))&&!af.some(b=>b.includes(a)||a.includes(b))).map(a=>`${y.title} ${a}`.trim()).slice(0,8),ah=[...W,...af,...ag];if(ac.length>0&&ah.length>0){(0,f.Te)(F);let b=await (0,f.l$)(ah,async b=>a.understanding.searchWithCache(b,ac,Math.min(a.understanding.requestedEvidencePerChapter,12),y.title,a.prepare.materialScope.selectedMaterialRoots),{kind:"search"});ae.push(...b)}for(let b of(a.planning.generationDiagnostics.evidence.searchQueries+=ah.length,a.planning.generationDiagnostics.evidence.searchMs+=Date.now()-ab,(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:G,status:"running",message:`${(0,av.GQ)(y.title)} KB 检索完成:${ah.length} 组查询,准备深度召回与语义排序`,progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"证据检索"}},{subtitle:H,order:E})}),a.global.emitProgress(),ae)){K.push(...b.map(b=>({chapterId:y.id,filePath:b.filePath,score:b.score,content:b.content,roleId:a.understanding.fileRoleByPath.get(b.filePath),processingType:a.understanding.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:b.source})));let c=a.planning.generationDiagnostics.evidence;c.retrievedEvidenceInjected=(c.retrievedEvidenceInjected??0)+b.length}U&&ac.length>0&&a.blueprint.basicFactSearchResults.length>0&&K.push(...a.blueprint.basicFactSearchResults.map(b=>({chapterId:y.id,filePath:b.filePath,score:b.score,content:b.content,roleId:a.understanding.fileRoleByPath.get(b.filePath),processingType:a.understanding.fileProcessingByPath.get(b.filePath),sectionTitle:b.sectionTitle,source:"basic-fact-cache"})));let ai=J?[]:await (0,db.$b)({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:y,plan:L,profile:a.prepare.projectMaterialProfile,scopedFilePaths:ac,scopedMaterialRoots:a.prepare.materialScope.selectedMaterialRoots,limitPerQuery:Math.min(a.understanding.requestedEvidencePerChapter,10),signal:F}).catch(b=>(a.planning.generationDiagnostics.evidence.retrievalFailures=(a.planning.generationDiagnostics.evidence.retrievalFailures??0)+1,a.planning.generationDiagnostics.llm.lastError=`计划材料证据召回失败(${y.title}):${b instanceof Error?b.message:String(b)}`,console.error(`[gen] 计划材料证据召回失败(${y.title})`,b),[]));K.push(...ai);let aj=[];a.planning.chapterIntentClassifier.needsBasicFacts(y.title)&&K.push(...a.understanding.safeProjectBasicEvidence.map(a=>({...a,chapterId:y.id,source:"pinned-evidence"})));let ak=a.understanding.writerEvidence.filter(a=>/招标|投标须知|评标办法|专用合同条款|投标人须知/u.test(`${a.filePath||""}${a.sectionTitle||""}`));/概况|工程|项目|总体|部署/u.test(y.title)&&ak.length>0&&K.push(...ak.map(a=>({...a,chapterId:y.id,source:"pinned-evidence"})));let al=a.prepare.materialScope.selectedMaterialRoots[0]||"";for(let b of(y.pinnedEvidenceFilePaths||[]).filter(Boolean)){let c=b.replace(/\\/gu,"/").replace(/^\.\//u,"").replace(/^\/+/u,""),d=al&&c!==al&&!c.startsWith(`${al}/`)?`${al}/${c}`:c,e=a.understanding.getCachedFileDetail(d);if(!e){let c=a.planning.generationDiagnostics?.evidence;c&&(c.pinnedEvidenceMissed=(c.pinnedEvidenceMissed??0)+1),console.warn("[stage-chapter-loop] pinned 证据文件未命中知识库(配置漂移或文件未入库)",{chapter:y.title,pinnedPath:b,resolvedPath:d});continue}K.push(...e.chunks.map(b=>({chapterId:y.id,filePath:e.file.relativePath,score:1,content:b.content,roleId:a.understanding.fileRoleByPath.get(e.file.relativePath),processingType:a.understanding.fileProcessingByPath.get(e.file.relativePath),sectionTitle:b.sectionTitle,source:"pinned-evidence"})))}let am=K;if(!J&&a.prepare.webAccessConfig.enabled&&a.prepare.webAccessConfig.allowProjectFacts){let b=await (0,c1.gT)({config:a.prepare.webAccessConfig,chapterId:y.id,chapterTitle:y.title,sectionTitles:y.sections||[],runtimeRules:a.prepare.runtimePromptRules,localFacts:[...a.understanding.preliminaryFactsModel.project,...a.understanding.preliminaryFactsModel.schedule,...a.understanding.preliminaryFactsModel.quality,...a.understanding.preliminaryFactsModel.safety,...a.understanding.preliminaryFactsModel.resources,...a.understanding.preliminaryFactsModel.preciseFacts],signal:F});a.understanding.webResearchReport.queries.push(...b.queries),a.understanding.webResearchReport.filteredCount+=b.filtered,a.understanding.webResearchReport.evidenceCount+=b.evidence.length,b.evidence.length>0&&(a.understanding.webResearchReport.chapters.push(y.title),am.push(...b.evidence.map(a=>({...a,chapterId:y.id})))),b.failedQueries>0&&(a.understanding.webResearchReport.failedCount=(a.understanding.webResearchReport.failedCount??0)+b.failedQueries,a.planning.generationDiagnostics.llm.lastError=`联网检索失败 ${b.failedQueries} 次(${y.title}):${b.failures.slice(0,3).join(";")}`)}let an=J?[]:(0,db.SK)({project:a.understanding.project,chapter:y,plan:L,profile:a.prepare.projectMaterialProfile,scopedFilePaths:ac,highRisk:R.highRisk});an.length>0&&am.push(...an);let ao=b=>((0,ax.f2)(b,a.planning.earlyOverrideList),a.understanding.excludedEvidenceKeys.size>0?b.filter(b=>!a.understanding.excludedEvidenceKeys.has((0,cR.hM)(b))):b);am=ao(am);let ap=(()=>{let a=Number(process.env.DOCUMENT_SEMANTIC_TOP_CANDIDATES);return Number.isFinite(a)&&a>0?Math.floor(a):3e3})(),aq=(0,s.Mz)(y,am,ap,h),ar=await (0,aH.Mv)([cX(y)],aq.map(s.t7)),as=(0,s.UG)(y,am,{preservePinned:!0,carrierBoost:h,semantic:{similarity:ar,queryText:cX(y)}},a.planning.generationDiagnostics);as=(0,v.pm)(as,a.understanding.canonicalFacts.scopeConflicts);let at=y.requiredFacts.filter(a=>!as.some(b=>(0,cQ.Lk)(b,a))),au=0,aw=(0,p.kO)(a.understanding.bidComposition),ay=P?[P.graphWorks.length?`图谱识别本章工程内容:${P.graphWorks.join("、")}`:"",P.graphMethods.length?`图谱识别本章施工方法:${P.graphMethods.join("、")}`:"",P.graphBoqItems.length?`图谱识别本章BOQ清单项(${P.graphBoqItems.length}项):${P.graphBoqItems.map(a=>`${a.name} ${a.quantity}${a.unit}`).join("、")}`:"",P.gaps.length?`图谱识别本章资料缺口:${P.gaps.join(";")}`:""].filter(Boolean).join("\n"):"",aB=(0,v.Bf)(a.understanding.canonicalFacts.scopeConflicts),aC=(()=>{if(0===a.blueprint.requirementAssignments.length)return[];let b=(0,bC.NT)(y.title);return a.blueprint.requirementAssignments.filter(a=>a.chapterTitle===b).map(a=>a.entry)})(),aD=(0,bC.HF)(aC),aE=aC.length>0?a=>(0,cZ.mG)(aC,a):void 0,aF=(()=>{try{let a=(0,c_.loadSkills)();return a.length>0?a:c0.d7}catch{return c0.d7}})(),aG=(y.sections||[]).filter(Boolean),aI=b=>{let c=(0,c$.buildBlockKnowledgePack)({chapterTitle:y.title,sections:aG,blockText:`${b.title} ${b.subPoints.map(a=>a.title).join(" ")}`,projectType:i[0]??"general",skills:aF});for(let d of c.hits)(0,l.Wl)(a,{batch:"generation.write",id:`skill.load.${y.id}.${(0,cZ.ui)(b.title)}.${d.skillId}`,parentId:(0,l.Ts)(y.id),type:"skill.load",title:`技能命中:${d.skillId}`,status:c.truncated?"repairing":"completed",chapterId:y.id,chapterTitle:H,metrics:{skillId:d.skillId,cards:d.cards.join("、"),命中依据:d.matchedBy,注入字符:d.injectedChars,禁配:d.forbiddenCount,验收判据:d.acceptanceCount,...c.truncated?{预算裁剪:c.dropped.join("、")||"是"}:{}}});return{text:c.text}},aJ=(()=>{if(0===a.blueprint.structureAssignments.length)return"";let b=(0,bC.NT)(y.title),c=a.blueprint.structureAssignments.filter(a=>a.chapterTitle===b).map(a=>a.requirement);return(0,bC.FR)(c,{bodyTableForbidden:(0,p._C)(a.understanding.bidComposition),bodyFigureForbidden:aw})})(),aK=a.planning.chapterIntentClassifier.needsDustControl(y.title)||a.planning.chapterIntentClassifier.needsDustControl(`${y.title}${y.purpose||""}`)?[`【扬尘治理六个百分百——规范固定条目,必须逐项落实并写入正文,每项一句具体措施,六项不得缺项;若本项目无拆迁工程,对“${aa.z1}”必须显性写明“${aa.Dm}”,不得省略】`,...aa.No.map(a=>`- ${a.name}`)].join("\n"):"",aL=(y.sections||[]).filter(a=>!/^(?:施工概况|施工流程|施工方法)$/u.test(a.trim())&&!/^附录/u.test(a.trim())),aM=aL.length>0?`【必须输出以下规划小节为三级标题(### 小节名),逐个小节展开正式正文:每小节正文不少于 100 字,不得只写标题、不得空小节、不得用表格替代正文;小节名与章标题相同或相近也必须输出,不得省略或合并】${aL.join("、")}`:"",aN=a.blueprint.billFactLock?(0,Z.uD)(a.blueprint.billFactLock,y.title,{sections:y.sections||[]}):"",aO=a.blueprint.billFactLock?(0,Z.zK)(a.blueprint.billFactLock,b,y.title):[],aP=a.blueprint.drawingFactLock?(0,$.pH)(a.blueprint.drawingFactLock,y.title,{sections:y.sections||[]}):"",aQ=(0,Y.GA)(a.understanding.preliminaryFactsModel,y.title,{sections:y.sections||[]}),aR=function(a,b){let c=b.indexOf(a),d=(a,b)=>`${(0,av.tb)(a,b.title)}${b.sections?.length?`(小节:${b.sections.join("、")})`:""}`,e=b.map((a,b)=>({item:a,index:b})).filter(b=>b.item!==a);return["【跨章写作职责分工——只就本章主题展开,写时即不产生跨章重复】",`- 本章职责:${d(c>=0?c:0,a)}`,...e.length>0?["- 其他章节职责(不得展开复述其主题内容):",...e.map(a=>` - ${d(a.index,a.item)}`)]:[],"- 写作规范:只就本章主题展开;其他章节主题的内容如需关联,一句话引用(“详见第X章”,X 替换为实际章号),不得展开复述;篇幅以本节合同字数为准,不得借写其他章节主题充数。"].join("\n")}(y,a.planning.effectiveChapters),aS=/施工方法|施工方案|施工工艺|主要施工内容|分部分项/u.test(y.title)?(()=>{let b=(0,_.Hp)((0,_.v7)(a.understanding.preliminaryFactsModel));return b?`【本章必须覆盖的清单分部分项全景(下列专有分项逐项写入正文施工方法,不得只写道路/铺装/绿化等大类而遗漏清单独有分项)】
302
+ ${b}`:""})():"",aT=(0,c3.uQ)(y.title,i),aV=aT?`【本章写作重点】${aT.goal}
304
303
  【本章必须覆盖(逐项落位,缺一即判未响应)】
305
- ${aT.mustCover.map(a=>`- ${a}`).join("\n")}`:"",aW=(0,c6.Xv)({truthConstraint:a.planning.truthConstraint,clarificationConstraint:a.planning.clarificationOverrides?.length?(0,c8.Tp)(a.planning.clarificationOverrides):void 0,amendmentConstraint:(0,c9.P_)(e,{chapterTitle:y.title}),globalWritingFocus:a.planning.writingTaskBrief?.globalWritingFocus,hazardBindingBlock:(0,c7.Rx)(c)}),aX=[aV,...aW,ay,aD,aJ,aM,aR,aK,aB.length?`【数据口径强制约束】${aB.join(";")}`:"",...c6.OA,L?.writingGoal,L?.mustCover?.length?`本章必须覆盖:${L.mustCover.join("、")}`:"",L?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${L.mustUseMaterialKinds.join("、")}`:"",aS,...aQ,...aO,aN,aP].filter(Boolean).join("\n"),aY=(0,s.C_)(a.prepare.promptPlan,y);if(a.prepare.promptPlan.writerPrompts.length>0&&!aY.primaryWriter)throw Error(`${(0,av.GQ)(y.title)} 写作主控提示词未进入章节生成阶段`);let aZ=[aY.promptTexts,a.prepare.generationControlPrompt,a.prepare.runtimeRulesText].filter(Boolean).join("\n\n"),a$=aY.promptDetails.length?aY.promptDetails:["未绑定章节写作提示词"],a_=(0,u.rC)({template:a.prepare.template,chapter:y,spec:a.prepare.documentSpec,profile:a.prepare.domainProfile,promptTexts:aZ,requirement:a.global.input.requirement,plan:L?{requiredContents:L.mustCover,evidenceNeeds:Object.values(L.evidenceQueries).flat()}:void 0}),a0=(0,u.ji)({needs:a_,factsModel:a.understanding.preliminaryFactsModel,evidence:am,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys}),a1=a0.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),a2=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>c5(`${a.sectionTitle||""}${a.content||""}`).includes(c5(b)))),c=a.evidence.length<3?["章节证据数量不足"]:[],d=b.length+c.length,e=d>=5?"high":d>=2?"medium":"low",f="high"===e?"evidence_first":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:e,missingFacts:b,missingEvidence:c,suggestedStrategy:f,reason:0===d?"章节事实与证据满足常规生成条件。":`识别到 ${d} 项生成前缺口,按 ${f} 策略生成。`}}({chapter:y,evidence:as}),a3=new Set(as.map(a=>a.filePath)).size,a4=!!P&&(P?.graphFiles.size||0)>=8&&a3>=6&&0===at.length&&"low"===a2.riskLevel,a5=(0,dd.C)({scopedFileCount:ac.length,evidenceCount:as.length,evidenceFileCount:a3,suggestedStrategy:a2.suggestedStrategy,highRisk:R.highRisk,missingFactsCount:at.length,requiredMissingNeedsCount:a1.length,riskLevel:a2.riskLevel});if(!a4&&a5&&ac.length>0){let b=new Set([...at,...a1]).size;b>0&&((0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:G,status:"running",message:`${(0,av.GQ)(y.title)} 正在深度召回缺失事实证据(${b} 项需求)`,progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"深度召回"}},{subtitle:H,order:E})}),a.global.emitProgress());let c=await (0,dd.xs)({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:y,scopedFilePaths:ac,scopedMaterialRoots:a.prepare.materialScope.selectedMaterialRoots,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,requiredNeeds:[...new Set([...at,...a1])],extraClues:a.prepare.requirementSemantics?.factClues||[],highRisk:R.highRisk||a1.length>0,signal:F}).catch(b=>(a.planning.generationDiagnostics.evidence.retrievalFailures=(a.planning.generationDiagnostics.evidence.retrievalFailures??0)+1,a.planning.generationDiagnostics.llm.lastError=`章深度召回失败(${y.title}):${b instanceof Error?b.message:String(b)}`,console.error(`[gen] 章深度召回失败(${y.title})`,b),[]));au=c.length;let d=a.planning.generationDiagnostics.evidence;d.retrievedEvidenceInjected=(d.retrievedEvidenceInjected??0)+c.length,c.length>0&&(am=ao([...am,...c]),as=(0,s.UG)(y,am,{preservePinned:!0,carrierBoost:h},a.planning.generationDiagnostics),as=(0,v.pm)(as,a.understanding.canonicalFacts.scopeConflicts),at=y.requiredFacts.filter(a=>!as.some(b=>(0,cP.Lk)(b,a)))),a1=(a0=(0,u.ji)({needs:a_,factsModel:a.understanding.preliminaryFactsModel,evidence:am,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:G,status:"running",message:`${(0,av.GQ)(y.title)} 深度召回完成:命中 ${au} 条${a1.length>0?`,仍缺 ${a1.length} 项(触发轻量补充)`:""}`,progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"证据检索"}},{subtitle:H,order:E})}),a.global.emitProgress()}if(a1.length>0&&ac.length>0){let b=await (0,dd.xs)({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:y,scopedFilePaths:ac,scopedMaterialRoots:a.prepare.materialScope.selectedMaterialRoots,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,requiredNeeds:a1,extraClues:a.prepare.requirementSemantics?.factClues||[],highRisk:!0,signal:F}).catch(b=>(a.planning.generationDiagnostics.evidence.retrievalFailures=(a.planning.generationDiagnostics.evidence.retrievalFailures??0)+1,a.planning.generationDiagnostics.llm.lastError=`必需事实补充召回失败(${y.title}):${b instanceof Error?b.message:String(b)}`,console.error(`[gen] 必需事实补充召回失败(${y.title})`,b),[])),c=a.planning.generationDiagnostics.evidence;c.retrievedEvidenceInjected=(c.retrievedEvidenceInjected??0)+b.length,b.length>0&&(am=ao([...am,...b]),as=(0,s.UG)(y,am,{preservePinned:!0,carrierBoost:h},a.planning.generationDiagnostics),as=(0,v.pm)(as,a.understanding.canonicalFacts.scopeConflicts),at=y.requiredFacts.filter(a=>!as.some(b=>(0,cP.Lk)(b,a))),a1=(a0=(0,u.ji)({needs:a_,factsModel:a.understanding.preliminaryFactsModel,evidence:am,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}{let b=a.planning.generationDiagnostics.evidence,c=new Set(["keyword","vector","hybrid","deep-retrieval","required-fact-evidence"]);b.intentEvidenceUsed=(b.intentEvidenceUsed??0)+as.filter(a=>"project-intelligence"===a.source).length,b.retrievedEvidenceUsed=(b.retrievedEvidenceUsed??0)+as.filter(a=>!!a.source&&c.has(a.source)).length}for(let b of(0===as.length&&a.understanding.missingItems.push(`${y.title}:缺少可支撑正文的项目资料证据`),at))a.understanding.missingItems.push(`${y.title}:事实需求未满足 ${b}`);(0,l.Wl)(a,{batch:"generation.write",parentId:(0,l.T1)("understand"),parentTitle:"项目资料理解",stage:(0,k.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:a.understanding.allEvidence.length>0?"success":"failed",message:`已检索/绑定 ${a.understanding.allEvidence.length} 条证据`})}),a.global.emitProgress(),(0,f.Te)(F);let a6=new Map,a7=b=>{let c=(0,f.c6)({kind:"section",query:`${y.title} ${b}`.trim(),scopedFilePaths:ac}),d=a6.get(c);if(d)return Promise.resolve(d);let e=(0,cY.Ym)(b,y,as),g=e.filter(a=>ch.AM.test(a.content)).length;return e.length>=4&&g>=1?(a6.set(c,e),Promise.resolve(e)):(0,s.hW)({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:y,sectionTitle:b,scopedFilePaths:ac,scopedMaterialRoots:a.prepare.materialScope.selectedMaterialRoots,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,signal:F}).then(a=>(a6.set(c,a),a))},a8=(0,dd.Tn)({chapter:y,evidence:as,risk:R});a.understanding.retrievalCoverageReports.push(a8);let a9=new Set(as.map(a=>a.filePath)),ba=as.reduce((a,b)=>a+b.content.length,0),bb=[...R.highRisk?[`召回覆盖风险(${R.riskReason||"切片未完全预加载"}):已加载 ${R.loadedChunks}/${R.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${ad.length} 条`,`深召回证据:${au} 条`,`事实覆盖:${a8.requiredFactCovered}/${a8.requiredFactTotal}`,`小节覆盖:${a8.sectionCovered}/${a8.sectionTotal}`];(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:G,status:"running",message:`${(0,av.GQ)(y.title)} 已选取 ${as.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${a9.size} 份`,`上下文字符:${ba}`,`检索查询:${W.length} 组`,...bb],progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"正文生成"}},{subtitle:(0,av.GQ)(y.title),order:E})}),a.global.emitProgress(),a.planning.generationDiagnostics.evidence.contextChars+=ba;let bc=(0,u.n9)(a0),bd=a.planning.chapterIntentClassifier.needsBasicFacts(y.title)?a.understanding.earlyFactPool.projectBasicFacts:[],be=(0,cY.qX)((0,cY.hZ)({chapter:y,plan:void 0,spec:a.prepare.documentSpec,roleFacts:aj,evidence:as,missingFacts:at,indexedFacts:[...bd,...bc],resolvedFactNeeds:a0,factNeedsPrompt:(0,u.GK)(a0),specAuthorityMap:a.understanding.preliminaryFactsModel.specAuthorityMap})),bf=(0,da.up)({plan:a.planning.plannedDocument.plan,chapter:y,context:a.understanding.agentWorkflow,evidence:as});a.understanding.agentWorkflow.chapterTasks=[...(a.understanding.agentWorkflow.chapterTasks||[]).filter(a=>a.chapterId!==y.id),bf.task],a.understanding.agentWorkflow.nodes.push(bf.node),(0,db.cN)(a.understanding.agentWorkflow);let bg=(0,k.X5)({type:"validation",roleId:`agent-chapter-task-${y.id}`,status:bf.task.ready||J?"success":"failed",message:bf.task.ready?bf.node.outputSummary||`${(0,av.GQ)(y.title)} 章节任务规划完成`:J?`${(0,av.GQ)(y.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:bf.node.outputSummary||`${(0,av.GQ)(y.title)} 章节任务规划完成`,details:bf.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:E});if((0,l.Wl)(a,{batch:"generation.write",stage:bg,type:"plan"}),a.global.emitProgress(a.global.chapterDrafts),!bf.task.ready&&!J)throw Error(`${(0,av.GQ)(y.title)} 章节任务未就绪:${bf.task.issues.map(a=>a.message).join(";")}`);let bh={total:a0.length,satisfied:a0.filter(a=>"satisfied"===a.status).length,missing:a0.filter(a=>"missing"===a.status).length,lowConfidence:a0.filter(a=>"low_confidence"===a.status).length};for(let b of a1)a.understanding.missingItems.push(`${y.title}:事实需求未确认 ${b}`);let{budgetTarget:bi,fallbackNote:bj}=(0,j.W4)({chapterTargets:a.planning.documentBudget.chapterTargets,chapterId:y.id,chapterTitle:y.title,documentTargetChars:a.planning.documentBudget.targetChars,chapterCount:a.planning.effectiveChapters.length}),bk=bj?[bj]:[],bl=y.sections?.filter(Boolean).length||0,bm=(0,s.gq)({budgetTarget:bi,sectionCount:bl,title:y.title,longformStrict:a.planning.documentBudget.longformStrict}),bn=Math.ceil(bm.maxWords*(a.planning.documentBudget.maxChars?1.05:1)),bo=(0,x.jM)(y.title,a.planning.chapterIntentClassifier).length>0,bp=(a.blueprint.blueprintActive||bo&&0===S.missing.length)&&a.blueprint.integratedBlueprint?(0,x.md)(a.blueprint.integratedBlueprint,y.title):void 0,bq=bp&&a.blueprint.integratedBlueprint?(0,x.uw)(bp,a.blueprint.integratedBlueprint.data):"",br=!bp&&bo?`【计划类权威本次不可用】本章原属计划类章节,但工程量清单未解析出可用条目,蓝图计划权威(${S.missing.length>0?S.missing.join("、"):"进度/劳动力/资源"})本次不可用:**不得输出**里程碑日期、各阶段工期天数、总工期天数、劳动力峰值人数、机械台数、资源用量等由清单推导的计划性数值,也不得给出「约」「左右」等近似值变通。本章以管理措施、组织安排、工艺要求与质量/安全/工期保证体系表述。若必须引用合同工期、开竣工日期,一律照抄【真值层】给定口径,不得自行推导或改写。`:"",bs=bm.roundTarget,bt=z.find(a=>("target_change"===a.kind||"rebalance_budget"===a.kind)&&a.nodeId.trim()===y.id.trim()),bu=(()=>{if(!bt)return;let a=bt.payload?.delta??{},b=Number(a.targetWords);if(Number.isFinite(b)&&!(b<=0))return"rebalance_budget"===bt.kind?Math.min(1.2*bs,b):Math.min(1.5*bs,Math.max(600,b))})()??bs,bv=bl>0?a.planning.documentBudget.longformStrict?bu:Math.min(bu,Math.max(1800,bm.structureTarget)):bu,bw=0,bx=b=>{let c=Date.now();if(c-bw<3e3)return;bw=c;let d=b.filter(Boolean).join("\n\n");d.trim()&&a.global.emitProgress([...a.global.chapterDrafts,{id:y.id,title:y.title,content:`## ${y.title}
304
+ ${aT.mustCover.map(a=>`- ${a}`).join("\n")}`:"",aW=(0,c3.Xv)({truthConstraint:a.planning.truthConstraint,clarificationConstraint:a.planning.clarificationOverrides?.length?(0,c5.Tp)(a.planning.clarificationOverrides):void 0,amendmentConstraint:(0,c6.P_)(e,{chapterTitle:y.title}),globalWritingFocus:a.planning.writingTaskBrief?.globalWritingFocus,hazardBindingBlock:(0,c4.Rx)(c)}),aX=[aV,...aW,ay,aD,aJ,aM,aR,aK,aB.length?`【数据口径强制约束】${aB.join(";")}`:"",...c3.OA,L?.writingGoal,L?.mustCover?.length?`本章必须覆盖:${L.mustCover.join("、")}`:"",L?.mustUseMaterialKinds?.length?`本章优先使用资料类型:${L.mustUseMaterialKinds.join("、")}`:"",aS,...aQ,...aO,aN,aP].filter(Boolean).join("\n"),aY=(0,s.C_)(a.prepare.promptPlan,y);if(a.prepare.promptPlan.writerPrompts.length>0&&!aY.primaryWriter)throw Error(`${(0,av.GQ)(y.title)} 写作主控提示词未进入章节生成阶段`);let aZ=[aY.promptTexts,a.prepare.generationControlPrompt,a.prepare.runtimeRulesText].filter(Boolean).join("\n\n"),a$=aY.promptDetails.length?aY.promptDetails:["未绑定章节写作提示词"],a_=(0,u.rC)({template:a.prepare.template,chapter:y,spec:a.prepare.documentSpec,profile:a.prepare.domainProfile,promptTexts:aZ,requirement:a.global.input.requirement,plan:L?{requiredContents:L.mustCover,evidenceNeeds:Object.values(L.evidenceQueries).flat()}:void 0}),a0=(0,u.ji)({needs:a_,factsModel:a.understanding.preliminaryFactsModel,evidence:am,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys}),a1=a0.filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),a2=function(a){let b=(a.chapter.requiredFacts||[]).filter(b=>!a.evidence.some(a=>c2(`${a.sectionTitle||""}${a.content||""}`).includes(c2(b)))),c=a.evidence.length<3?["章节证据数量不足"]:[],d=b.length+c.length,e=d>=5?"high":d>=2?"medium":"low",f="high"===e?"evidence_first":b.length>0?"section_first":"normal";return{chapterId:a.chapter.id,chapterTitle:a.chapter.title,canGenerate:!0,riskLevel:e,missingFacts:b,missingEvidence:c,suggestedStrategy:f,reason:0===d?"章节事实与证据满足常规生成条件。":`识别到 ${d} 项生成前缺口,按 ${f} 策略生成。`}}({chapter:y,evidence:as}),a3=new Set(as.map(a=>a.filePath)).size,a4=!!P&&(P?.graphFiles.size||0)>=8&&a3>=6&&0===at.length&&"low"===a2.riskLevel,a5=(0,da.C)({scopedFileCount:ac.length,evidenceCount:as.length,evidenceFileCount:a3,suggestedStrategy:a2.suggestedStrategy,highRisk:R.highRisk,missingFactsCount:at.length,requiredMissingNeedsCount:a1.length,riskLevel:a2.riskLevel});if(!a4&&a5&&ac.length>0){let b=new Set([...at,...a1]).size;b>0&&((0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:G,status:"running",message:`${(0,av.GQ)(y.title)} 正在深度召回缺失事实证据(${b} 项需求)`,progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"深度召回"}},{subtitle:H,order:E})}),a.global.emitProgress());let c=await (0,da.xs)({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:y,scopedFilePaths:ac,scopedMaterialRoots:a.prepare.materialScope.selectedMaterialRoots,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,requiredNeeds:[...new Set([...at,...a1])],extraClues:a.prepare.requirementSemantics?.factClues||[],highRisk:R.highRisk||a1.length>0,signal:F}).catch(b=>(a.planning.generationDiagnostics.evidence.retrievalFailures=(a.planning.generationDiagnostics.evidence.retrievalFailures??0)+1,a.planning.generationDiagnostics.llm.lastError=`章深度召回失败(${y.title}):${b instanceof Error?b.message:String(b)}`,console.error(`[gen] 章深度召回失败(${y.title})`,b),[]));au=c.length;let d=a.planning.generationDiagnostics.evidence;d.retrievedEvidenceInjected=(d.retrievedEvidenceInjected??0)+c.length,c.length>0&&(am=ao([...am,...c]),as=(0,s.UG)(y,am,{preservePinned:!0,carrierBoost:h},a.planning.generationDiagnostics),as=(0,v.pm)(as,a.understanding.canonicalFacts.scopeConflicts),at=y.requiredFacts.filter(a=>!as.some(b=>(0,cQ.Lk)(b,a)))),a1=(a0=(0,u.ji)({needs:a_,factsModel:a.understanding.preliminaryFactsModel,evidence:am,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label),(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:G,status:"running",message:`${(0,av.GQ)(y.title)} 深度召回完成:命中 ${au} 条${a1.length>0?`,仍缺 ${a1.length} 项(触发轻量补充)`:""}`,progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"证据检索"}},{subtitle:H,order:E})}),a.global.emitProgress()}if(a1.length>0&&ac.length>0){let b=await (0,da.xs)({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:y,scopedFilePaths:ac,scopedMaterialRoots:a.prepare.materialScope.selectedMaterialRoots,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,requiredNeeds:a1,extraClues:a.prepare.requirementSemantics?.factClues||[],highRisk:!0,signal:F}).catch(b=>(a.planning.generationDiagnostics.evidence.retrievalFailures=(a.planning.generationDiagnostics.evidence.retrievalFailures??0)+1,a.planning.generationDiagnostics.llm.lastError=`必需事实补充召回失败(${y.title}):${b instanceof Error?b.message:String(b)}`,console.error(`[gen] 必需事实补充召回失败(${y.title})`,b),[])),c=a.planning.generationDiagnostics.evidence;c.retrievedEvidenceInjected=(c.retrievedEvidenceInjected??0)+b.length,b.length>0&&(am=ao([...am,...b]),as=(0,s.UG)(y,am,{preservePinned:!0,carrierBoost:h},a.planning.generationDiagnostics),as=(0,v.pm)(as,a.understanding.canonicalFacts.scopeConflicts),at=y.requiredFacts.filter(a=>!as.some(b=>(0,cQ.Lk)(b,a))),a1=(a0=(0,u.ji)({needs:a_,factsModel:a.understanding.preliminaryFactsModel,evidence:am,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys})).filter(a=>a.need.required&&"satisfied"!==a.status).map(a=>a.need.label))}{let b=a.planning.generationDiagnostics.evidence,c=new Set(["keyword","vector","hybrid","deep-retrieval","required-fact-evidence"]);b.intentEvidenceUsed=(b.intentEvidenceUsed??0)+as.filter(a=>"project-intelligence"===a.source).length,b.retrievedEvidenceUsed=(b.retrievedEvidenceUsed??0)+as.filter(a=>!!a.source&&c.has(a.source)).length}for(let b of(0===as.length&&a.understanding.missingItems.push(`${y.title}:缺少可支撑正文的项目资料证据`),at))a.understanding.missingItems.push(`${y.title}:事实需求未满足 ${b}`);(0,l.Wl)(a,{batch:"generation.write",parentId:(0,l.T1)("understand"),parentTitle:"项目资料理解",stage:(0,k.X5)({type:"knowledge_retrieval",roleId:"knowledge-base",status:a.understanding.allEvidence.length>0?"success":"failed",message:`已检索/绑定 ${a.understanding.allEvidence.length} 条证据`})}),a.global.emitProgress(),(0,f.Te)(F);let a6=new Map,a7=b=>{let c=(0,f.c6)({kind:"section",query:`${y.title} ${b}`.trim(),scopedFilePaths:ac}),d=a6.get(c);if(d)return Promise.resolve(d);let e=(0,cZ.Ym)(b,y,as),g=e.filter(a=>ch.AM.test(a.content)).length;return e.length>=4&&g>=1?(a6.set(c,e),Promise.resolve(e)):(0,s.hW)({manager:a.understanding.manager,projectRoot:a.prepare.projectRoot,chapter:y,sectionTitle:b,scopedFilePaths:ac,scopedMaterialRoots:a.prepare.materialScope.selectedMaterialRoots,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,signal:F}).then(a=>(a6.set(c,a),a))},a8=(0,da.Tn)({chapter:y,evidence:as,risk:R});a.understanding.retrievalCoverageReports.push(a8);let a9=new Set(as.map(a=>a.filePath)),ba=as.reduce((a,b)=>a+b.content.length,0),bb=[...R.highRisk?[`召回覆盖风险(${R.riskReason||"切片未完全预加载"}):已加载 ${R.loadedChunks}/${R.totalChunks},已启用深召回`]:[],`项目理解缓存证据:${ad.length} 条`,`深召回证据:${au} 条`,`事实覆盖:${a8.requiredFactCovered}/${a8.requiredFactTotal}`,`小节覆盖:${a8.sectionCovered}/${a8.sectionTotal}`];(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:G,status:"running",message:`${(0,av.GQ)(y.title)} 已选取 ${as.length} 条高相关证据,正在生成正文`,details:[`使用绑定文件:${a9.size} 份`,`上下文字符:${ba}`,`检索查询:${W.length} 组`,...bb],progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"正文生成"}},{subtitle:(0,av.GQ)(y.title),order:E})}),a.global.emitProgress(),a.planning.generationDiagnostics.evidence.contextChars+=ba;let bc=(0,u.n9)(a0),bd=a.planning.chapterIntentClassifier.needsBasicFacts(y.title)?a.understanding.earlyFactPool.projectBasicFacts:[],be=(0,cZ.qX)((0,cZ.hZ)({chapter:y,plan:void 0,spec:a.prepare.documentSpec,roleFacts:aj,evidence:as,missingFacts:at,indexedFacts:[...bd,...bc],resolvedFactNeeds:a0,factNeedsPrompt:(0,u.GK)(a0),specAuthorityMap:a.understanding.preliminaryFactsModel.specAuthorityMap})),bf=(0,c7.up)({plan:a.planning.plannedDocument.plan,chapter:y,context:a.understanding.agentWorkflow,evidence:as});a.understanding.agentWorkflow.chapterTasks=[...(a.understanding.agentWorkflow.chapterTasks||[]).filter(a=>a.chapterId!==y.id),bf.task],a.understanding.agentWorkflow.nodes.push(bf.node),(0,c8.cN)(a.understanding.agentWorkflow);let bg=(0,k.X5)({type:"validation",roleId:`agent-chapter-task-${y.id}`,status:bf.task.ready||J?"success":"failed",message:bf.task.ready?bf.node.outputSummary||`${(0,av.GQ)(y.title)} 章节任务规划完成`:J?`${(0,av.GQ)(y.title)} 章节任务未完全就绪,已复用已有正文并交由 Reviewer/Repairer 处理`:bf.node.outputSummary||`${(0,av.GQ)(y.title)} 章节任务规划完成`,details:bf.task.issues.map(a=>a.message)},{subtitle:"Agent Chapter Task Planner",order:E});if((0,l.Wl)(a,{batch:"generation.write",stage:bg,type:"plan"}),a.global.emitProgress(a.global.chapterDrafts),!bf.task.ready&&!J)throw Error(`${(0,av.GQ)(y.title)} 章节任务未就绪:${bf.task.issues.map(a=>a.message).join(";")}`);let bh={total:a0.length,satisfied:a0.filter(a=>"satisfied"===a.status).length,missing:a0.filter(a=>"missing"===a.status).length,lowConfidence:a0.filter(a=>"low_confidence"===a.status).length};for(let b of a1)a.understanding.missingItems.push(`${y.title}:事实需求未确认 ${b}`);let{budgetTarget:bi,fallbackNote:bj}=(0,j.W4)({chapterTargets:a.planning.documentBudget.chapterTargets,chapterId:y.id,chapterTitle:y.title,documentTargetChars:a.planning.documentBudget.targetChars,chapterCount:a.planning.effectiveChapters.length}),bk=bj?[bj]:[],bl=y.sections?.filter(Boolean).length||0,bm=(0,s.gq)({budgetTarget:bi,sectionCount:bl,title:y.title,longformStrict:a.planning.documentBudget.longformStrict}),bn=Math.ceil(bm.maxWords*(a.planning.documentBudget.maxChars?1.05:1)),bo=(0,x.jM)(y.title,a.planning.chapterIntentClassifier).length>0,bp=(a.blueprint.blueprintActive||bo&&0===S.missing.length)&&a.blueprint.integratedBlueprint?(0,x.md)(a.blueprint.integratedBlueprint,y.title):void 0,bq=bp&&a.blueprint.integratedBlueprint?(0,x.uw)(bp,a.blueprint.integratedBlueprint.data):"",br=!bp&&bo?`【计划类权威本次不可用】本章原属计划类章节,但工程量清单未解析出可用条目,蓝图计划权威(${S.missing.length>0?S.missing.join("、"):"进度/劳动力/资源"})本次不可用:**不得输出**里程碑日期、各阶段工期天数、总工期天数、劳动力峰值人数、机械台数、资源用量等由清单推导的计划性数值,也不得给出「约」「左右」等近似值变通。本章以管理措施、组织安排、工艺要求与质量/安全/工期保证体系表述。若必须引用合同工期、开竣工日期,一律照抄【真值层】给定口径,不得自行推导或改写。`:"",bs=bm.roundTarget,bt=z.find(a=>("target_change"===a.kind||"rebalance_budget"===a.kind)&&a.nodeId.trim()===y.id.trim()),bu=(()=>{if(!bt)return;let a=bt.payload?.delta??{},b=Number(a.targetWords);if(Number.isFinite(b)&&!(b<=0))return"rebalance_budget"===bt.kind?Math.min(1.2*bs,b):Math.min(1.5*bs,Math.max(600,b))})()??bs,bv=bl>0?a.planning.documentBudget.longformStrict?bu:Math.min(bu,Math.max(1800,bm.structureTarget)):bu,bw=0,bx=b=>{let c=Date.now();if(c-bw<3e3)return;bw=c;let d=b.filter(Boolean).join("\n\n");d.trim()&&a.global.emitProgress([...a.global.chapterDrafts,{id:y.id,title:y.title,content:`## ${y.title}
306
305
 
307
- ${d}`,evidence:as,missingFacts:at,sections:y.sections||[],tablePlans:y.tablePlans||[],inProgress:!0}])},by=a=>{"complete"===a.phase&&a.partialSections&&bx(a.partialSections)};if(J)q=(0,s.w_)(J,y),q=await (0,s._k)(q,a.understanding.bidProcedureJudge),D=(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aY.primaryPromptId,status:"success",message:`${(0,av.GQ)(y.title)} 已复用已有章节正文:当前 ${(0,j.V7)(q)} 字,跳过 Writer,直接进入章节收口`,details:[`有效证据:${as.length} 条`,`事实需求:${bh.satisfied}/${bh.total} 已满足,缺失 ${bh.missing},低置信 ${bh.lowConfidence}`,...bk,"来源:resumeChapters/checkpointChapters"],progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"复用章节"}},{subtitle:(0,av.GQ)(y.title),order:E}),(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:D}),a.global.emitProgress(a.global.chapterDrafts);else{let b;(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aY.primaryPromptId,status:"running",message:`${(0,av.GQ)(y.title)} 正在规划主题块并准备并发成稿`,details:[...a$,`有效证据:${as.length} 条`,`事实需求:${bh.satisfied}/${bh.total} 已满足,缺失 ${bh.missing},低置信 ${bh.lowConfidence}`,bm.label,`生成上限约 ${bn} 字`,...bk,`模板细目:${y.sections?.length||0} 条`,"先由章级 Planner 聚类为主题块并语义合并,再按主题块全并发出稿,避免逐小节碎片化"],progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"主题块并发"}},{subtitle:(0,av.GQ)(y.title),order:E})}),a.global.emitProgress();let c=async(b,c,d)=>{let e=(0,m.nY)((0,m.Su)(a.planning.generationDiagnostics))??(0,m.Z9)((0,m.Su)(a.planning.generationDiagnostics));if(e)return console.warn(`[gen] 失败块定向重写跳过(预算耗尽 ${e.kind}):${y.title} 失守块 ${c.length} 个原样带出 —— ${e.message}`),{merged:[...d],exhausted:c.map(a=>({index:a.index,title:a.block?.title,lastAttempt:a.lastAttempt,failureKinds:a.failureKinds,retryFeedback:a.retryFeedback}))};let f=await Promise.all(c.map(({block:c,retryFeedback:d})=>(0,cY.nl)({...b,targetWords:c.targetWords,initialFeedback:d,isolatedRetry:!0},{blocks:[c],coveredSections:[],fallbackSections:[]}).catch(b=>{a.planning.generationDiagnostics.llm.lastError=`失败块定向重写异常(${y.title}):${b instanceof Error?b.message:String(b)}`,console.error(`[gen] 失败块定向重写异常(${y.title})`,b)}))),g=[...d],h=[];return c.forEach((a,b)=>{let c=f[b]?.markdown?.replace(/^##\s+.+$/mu,"").trim();if(c){g[a.index]=c;return}let d=f[b]?.failedBlocks?.[0];h.push({index:a.index,title:a.block?.title,lastAttempt:d?.lastAttempt||a.lastAttempt,failureKinds:d?.failureKinds||a.failureKinds,retryFeedback:d?.retryFeedback||a.retryFeedback})}),{merged:g,exhausted:h}},e=async(b,c,d,e,f)=>{let g=d.filter(a=>a.title&&f.blocks.some(b=>b.title===a.title));if(0===g.length)return{merged:e,exhausted:d,performed:!1,note:"失守块标题与规划块对不上:不猜块,交回原路径"};let h=[...e],i=[];for(let d of g){let e=f.blocks.find(a=>a.title===d.title),g="swap_evidence"===c.kind&&b.sectionEvidenceProvider?await b.sectionEvidenceProvider(e.title).catch(()=>[]):[],j="swap_evidence"===c.kind?`【换证据重试】上一轮失守原因是资料类(${d.failureKinds?.join("、")||"未记录"})。本轮**追加了重新检索到的资料片段**:
306
+ ${d}`,evidence:as,missingFacts:at,sections:y.sections||[],tablePlans:y.tablePlans||[],inProgress:!0}])},by=a=>{"complete"===a.phase&&a.partialSections&&bx(a.partialSections)};if(J)q=(0,s.w_)(J,y),q=await (0,s._k)(q,a.understanding.bidProcedureJudge),D=(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aY.primaryPromptId,status:"success",message:`${(0,av.GQ)(y.title)} 已复用已有章节正文:当前 ${(0,j.V7)(q)} 字,跳过 Writer,直接进入章节收口`,details:[`有效证据:${as.length} 条`,`事实需求:${bh.satisfied}/${bh.total} 已满足,缺失 ${bh.missing},低置信 ${bh.lowConfidence}`,...bk,"来源:resumeChapters/checkpointChapters"],progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"复用章节"}},{subtitle:(0,av.GQ)(y.title),order:E}),(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:D}),a.global.emitProgress(a.global.chapterDrafts);else{let b;(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aY.primaryPromptId,status:"running",message:`${(0,av.GQ)(y.title)} 正在规划主题块并准备并发成稿`,details:[...a$,`有效证据:${as.length} 条`,`事实需求:${bh.satisfied}/${bh.total} 已满足,缺失 ${bh.missing},低置信 ${bh.lowConfidence}`,bm.label,`生成上限约 ${bn} 字`,...bk,`模板细目:${y.sections?.length||0} 条`,"先由章级 Planner 聚类为主题块并语义合并,再按主题块全并发出稿,避免逐小节碎片化"],progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"主题块并发"}},{subtitle:(0,av.GQ)(y.title),order:E})}),a.global.emitProgress();let c=async(b,c,d)=>{let e=(0,m.nY)((0,m.Su)(a.planning.generationDiagnostics))??(0,m.Z9)((0,m.Su)(a.planning.generationDiagnostics));if(e)return console.warn(`[gen] 失败块定向重写跳过(预算耗尽 ${e.kind}):${y.title} 失守块 ${c.length} 个原样带出 —— ${e.message}`),{merged:[...d],exhausted:c.map(a=>({index:a.index,title:a.block?.title,lastAttempt:a.lastAttempt,failureKinds:a.failureKinds,retryFeedback:a.retryFeedback}))};let f=await Promise.all(c.map(({block:c,retryFeedback:d})=>(0,cZ.nl)({...b,targetWords:c.targetWords,initialFeedback:d,isolatedRetry:!0},{blocks:[c],coveredSections:[],fallbackSections:[]}).catch(b=>{a.planning.generationDiagnostics.llm.lastError=`失败块定向重写异常(${y.title}):${b instanceof Error?b.message:String(b)}`,console.error(`[gen] 失败块定向重写异常(${y.title})`,b)}))),g=[...d],h=[];return c.forEach((a,b)=>{let c=f[b]?.markdown?.replace(/^##\s+.+$/mu,"").trim();if(c){g[a.index]=c;return}let d=f[b]?.failedBlocks?.[0];h.push({index:a.index,title:a.block?.title,lastAttempt:d?.lastAttempt||a.lastAttempt,failureKinds:d?.failureKinds||a.failureKinds,retryFeedback:d?.retryFeedback||a.retryFeedback})}),{merged:g,exhausted:h}},e=async(b,c,d,e,f)=>{let g=d.filter(a=>a.title&&f.blocks.some(b=>b.title===a.title));if(0===g.length)return{merged:e,exhausted:d,performed:!1,note:"失守块标题与规划块对不上:不猜块,交回原路径"};let h=[...e],i=[];for(let d of g){let e=f.blocks.find(a=>a.title===d.title),g="swap_evidence"===c.kind&&b.sectionEvidenceProvider?await b.sectionEvidenceProvider(e.title).catch(()=>[]):[],j="swap_evidence"===c.kind?`【换证据重试】上一轮失守原因是资料类(${d.failureKinds?.join("、")||"未记录"})。本轮**追加了重新检索到的资料片段**:
308
307
  ${g.map(a=>`- ${String(a.content||"").slice(0,400)}`).join("\n")||"(本次检索无新增片段——说明资料面确实没有该内容,请按 declare_missing 记缺口,不要编造)"}
309
- 要求:只用上面新增片段里的具体数据/做法展开;仍无来源的内容一律 declare_missing。`:`【调详略重试】上一轮失守原因是判据/篇幅类(${d.failureKinds?.join("、")||"未记录"})。本轮块目标字数由 ${e.targetWords} 调整为 ${Math.round(e.targetWords*c.scale)}(\xd7${c.scale.toFixed(2)})——`+(c.scale<1?"请压缩表达、去掉重复与套话,保住全部事实与工序,不得删要点。":"请把每个要点展开到实施深度(工序/参数/检查验收),不要靠重复句凑字。"),k=await (0,cY.nl)({...b,targetWords:Math.round(e.targetWords*("adjust_depth"===c.kind?c.scale:1)),initialFeedback:j,isolatedRetry:!0},{blocks:[e],coveredSections:[],fallbackSections:[]}).catch(b=>{a.planning.generationDiagnostics.llm.lastError=`${c.kind} 重试异常(${y.title}/${e.title}):${b instanceof Error?b.message:String(b)}`}),l=k?.markdown?.replace(/^##\s+.+$/mu,"").trim();l?h[d.index]=l:i.push(d)}return{merged:h,exhausted:i,performed:!0,note:`${c.kind} 已执行:重试失守块 ${g.length} 个,成功 ${g.length-i.length} 个`}},h=async(b,c,d,f)=>{if(0===c.length)return{merged:d,exhausted:c,rescued:0};if(t.has(y.id))return{merged:d,exhausted:c,rescued:0,note:"本章已重切过一次(每次生成每章最多一次)"};let g=(0,m.Su)(a.planning.generationDiagnostics),h=g.budget.maxTokensPerDocument>0?g.documentTokens/g.budget.maxTokensPerDocument:0,i=o({usedRatio:h,remainingTokens:Math.max(0,g.budget.maxTokensPerDocument-g.documentTokens),chaptersTotal:a.planning.effectiveChapters.length,chaptersLeft:a.planning.effectiveChapters.length-E,configuredConcurrency:a.blueprint.chapterConcurrency,chapterOutcomes:[{chapterId:y.id,chapterTitle:H,plannedBlocks:f.blocks.length,succeededBlocks:d.filter(a=>!!(a&&a.trim())).length,failureKinds:[...new Set(c.flatMap(a=>a.failureKinds??[]))],replanned:!1,evidenceSwapped:t.has(`evidence:${y.id}`),depthAdjusted:t.has(`depth:${y.id}`)}],requestedSplits:z.filter(a=>"split_section"===a.kind).map(a=>a.nodeId),budgetStopped:!1});if("swap_evidence"===i.kind||"adjust_depth"===i.kind){C(i,`ch${E}-${i.kind}`);let a=await e(b,i,c,d,f);return a.performed?("swap_evidence"===i.kind?t.add(`evidence:${y.id}`):t.add(`depth:${y.id}`),{merged:a.merged,exhausted:a.exhausted,rescued:a.merged.filter((a,b)=>!!a&&!d[b]).length,note:a.note}):{merged:d,exhausted:c,rescued:0,note:`主智能体下令 ${i.kind},但执行体未落地:${a.note}`}}if("replan_chapter"!==i.kind)return{merged:d,exhausted:c,rescued:0,note:`主智能体未下令重切:${i.reason}`};let j="format"===n(c.flatMap(a=>a.failureKinds??[]))||c.some(a=>(a.failureKinds??[]).some(a=>"length"===a||"over-produce"===a||"under-produce"===a)),k=z.some(a=>"split_section"===a.kind&&(a.nodeId===y.id||c.some(b=>b.title&&a.nodeId.includes(b.title))));if(!j&&!k)return{merged:d,exhausted:c,rescued:0,note:`重切跳过:失守并非篇幅类(${[...new Set(c.flatMap(a=>a.failureKinds??[]))].join("、")||"未记录"})——拆开不会改变判据结果,只会多花调用;按章级降级/复核清单处置`};let l=c.map(a=>a.title).filter(a=>!!a),p=function(a){let b=new Set(a.failedTitles.map(a=>String(a).trim()));if(0===b.size)return{structure:a.structure,split:[],skippedReason:"没有失守块(无需重切)"};let c=[],d=[],e=[],f=Math.max(0,12-a.structure.blocks.length);for(let g of a.structure.blocks){if(!b.has(g.title.trim())){c.push(g);continue}if(f<=0){e.push(`${g.title}(本章块数已达上限 12,不再拆)`),c.push(g);continue}let h=g.subPoints??[];if(h.length<2){e.push(`${g.title}(只有 ${h.length} 个要点,没有对半拆的依据)`),c.push(g);continue}let i=Math.ceil(h.length/2),j=h.slice(0,i),k=h.slice(i),[l,m]=function(a,b,c,d){let e=(a.subPoints??[]).map(a=>"number"==typeof a.quotaWords&&a.quotaWords>0?a.quotaWords:void 0),f=e.reduce((a,b)=>a+(b??0),0),g=e.slice(0,b).reduce((a,b)=>a+(b??0),0),h=f>0?g/f:b/Math.max(1,b+c),i=d&&d>0?Math.max(200,Math.min(.15*d,600)):300,j=a=>!Number.isFinite(a)||a<=0?Math.max(i,1):Math.max(i,Math.round(a));return[j(a.targetWords*h),j(Math.max(1,a.targetWords-a.targetWords*h))]}(g,j.length,k.length,a.chapterTargetWords),n=g.facts??[];c.push({...g,title:dc(g.title,j),subPoints:j,targetWords:l,facts:n}),c.push({...g,title:dc(g.title,k),subPoints:k,targetWords:m,facts:n}),f-=1,d.push({from:g.title,into:[dc(g.title,j),dc(g.title,k)]})}return 0===d.length?{structure:a.structure,split:[],skippedReason:`没有可拆的失守块:${e.join(";")||"失守块标题不在本章结构里"}`}:{structure:{...a.structure,blocks:c},split:d,...e.length>0?{skippedReason:`另有未拆:${e.join(";")}`}:{}}}({structure:f,failedTitles:l});if(0===p.split.length)return{merged:d,exhausted:c,rescued:0,note:`重切未执行:${p.skippedReason??"无可拆块"}`};let q=(()=>{let b=(0,m.Kj)();if(!b)return 1/0;let c=(0,m.Su)(a.planning.generationDiagnostics).budget;return Math.max(0,c.maxCallsPerChapter-b.calls)})();if(q<2)return{merged:d,exhausted:c,rescued:0,note:`重切未执行:本章调用额度仅剩 ${q} 次(拆一次至少要 2 次调用)——先保证剩余块能发起`};C(i,`ch${E}-rescue`),t.add(y.id),console.warn(`[gen] 章级重切:${H} 拆 ${p.split.length} 个失守块 —— ${p.split.map(a=>a.from).join("、")}`);let r=[...d],s=[...c],u=0;for(let d of c){let c=d.title,e=c?p.split.find(a=>a.from===c):void 0;if(!e)continue;let f=p.structure.blocks.filter(a=>a.title===e.into[0]||a.title===e.into[1]);if(2!==f.length)continue;let g=await (0,cY.nl)({...b,targetWords:f.reduce((a,b)=>a+b.targetWords,0),isolatedRetry:!0},{blocks:f,coveredSections:[],fallbackSections:[]}).catch(b=>{a.planning.generationDiagnostics.llm.lastError=`章级重切异常(${y.title}):${b instanceof Error?b.message:String(b)}`}),h=(g?.sections??[]).filter(a=>!!(a&&a.trim()));if(2!==h.length){console.warn(`[gen] 章级重切:块「${c}」两半只成稿 ${h.length}/2,按失守保留(不产半块正文)`);continue}r[d.index]=h.join("\n\n");let i=s.findIndex(a=>a.index===d.index);i>=0&&s.splice(i,1),u+=1}return{merged:r,exhausted:s,rescued:u,note:`章级重切:拆 ${p.split.length} 个失守块,重写成功 ${u} 个${p.skippedReason?`(${p.skippedReason})`:""}`}},i=await a.global.withProgressHeartbeat(()=>(0,g.X6)(a.planning.generationDiagnostics,`chapter-plan:${y.id}`,async()=>(0,x.OY)({blueprintChapter:bp,inputSections:y.sections||[],chapterTitle:(0,av.GQ)(y.title),targetWords:bv,projectContext:a.planning.projectContext,evidence:as}))),j=await a.global.withProgressHeartbeat(()=>(0,df.G8)({chapterTitle:(0,av.GQ)(y.title),blocks:i.blocks.map(a=>({title:a.title,pointTitles:a.subPoints.map(a=>a.title)})),fingerprintPool:a.planning.fingerprintPool||(0,dg.$R)(),excludeDocumentId:a.global.input.diversitySeed,profile:a.planning.diversityProfile,signal:F,diagnostics:a.planning.generationDiagnostics}));if(j.renamed>0&&(i={...i,blocks:i.blocks.map((a,b)=>({...a,title:j.titles[b]}))}),i.blocks.length>0){d=i;let e=[aZ,(0,da.$8)(bf.task,i)].filter(Boolean).join("\n\n"),f=i.blocks.reduce((a,b)=>a+b.subPoints.length,0),n=i.blocks.reduce((a,b)=>a+b.subPoints.reduce((a,b)=>a+Math.max(0,b.sources.length-1),0),0),o=bp?i.fallbackSections.length>0?`(蓝图章切片确定性转换:${i.fallbackSections.length} 条细目由覆盖校验挂回主题块)`:"(蓝图章切片确定性转换:主题块来自蓝图小节/工作包)":"(蓝图未覆盖本章,已按语义域确定性分组)";(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aY.primaryPromptId,status:"running",message:`${(0,av.GQ)(y.title)} 已规划 ${i.blocks.length} 个主题块,正在按主题块并发成稿${o}`,details:[...a$,`有效证据:${as.length} 条`,`输入细目 ${bl} 条 → 主题块 ${i.blocks.length} 个(每块 2~4 个 H4 要点)`,`语义合并 ${n} 条细目,目录级 H4 合计 ${f} 个`,"单块 1800~2800 字,主题块间全并发,单节深度与整体耗时双优",...j.summary?[j.summary]:[]],progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"主题块并发"}},{subtitle:(0,av.GQ)(y.title),order:E})}),(0,l.Wl)(a,{batch:"generation.write",stage:{...bg,message:`${bf.task.sections.filter(a=>a.ready).length}/${bf.task.sections.length} 条细目任务就绪(已规划为 ${i.blocks.length} 个主题块)`},type:"plan"}),a.global.emitProgress(a.global.chapterDrafts);let p=new Map,q=b=>{let c=(0,l.Ts)(y.id),d=[...p.get(c)??[],...b];p.set(c,d),(0,l.Wl)(a,{batch:"generation.write",id:c,parentId:(0,l.T1)("write"),type:"chapter",title:H,status:"running",chapterId:y.id,chapterTitle:H,issues:d})},s={template:a.prepare.template,chapter:y,evidence:as,missingFacts:at,promptTexts:e,projectContext:a.planning.chapterScopedProjectContext(y),skeletonProjectContext:a.planning.projectContext,requirement:a.global.input.requirement,roleContext:[aX,br].filter(Boolean).join("\n"),targetWords:bv,forbidDrawingImages:aw,bidComposition:a.understanding.bidComposition,factCoverageContext:be,compactProjectContext:!0,scopedProjectContext:!0,blueprintData:(0,x.nn)(a.blueprint.integratedBlueprint),blueprintChapter:bp,blueprintMustCiteHint:bq,sectionEvidenceProvider:a7,onSectionProgress:by,blockRequirementProvider:aE,blockKnowledgeProvider:aI,diagnostics:a.planning.generationDiagnostics,signal:F,agentToolWiring:{projectRoot:a.prepare.projectRoot,scopeRootNames:a.prepare.materialScope.selectedRoots,...a.planning.truthInputs?{authoritative:a.planning.truthInputs}:{},planRequests:function(a){let b=new Set;return{request(c){var d;let e=String(c.nodeId??"").trim(),f=String(c.reason??"").trim();if(!e||!f){let b="规划请求缺少 nodeId 或 reason:不予受理(改规划必须能溯源)";return a.onRejected?.(b),{status:"rejected",note:b,pending:a.requests.length}}let g=[(d={kind:c.kind,nodeId:e,reason:f}).kind,d.nodeId.trim(),d.reason.replace(/\s+/gu,"").replace(/[,。;:!?]/gu,"")].join("|");if(b.has(g))return{status:"duplicate",note:"同一请求已经排过队(同一目标 + 同一理由):不重复受理",pending:a.requests.length};if(a.requests.length>=12){let b=`本次生成的规划请求已达上限 12 条:本请求未受理。请改用现有能力把这一节写完(\`patch_section\` 补写 / \`declare_missing\` 记账),不要再请求改规划。`;return a.onRejected?.(b),{status:"rejected",note:b,pending:a.requests.length}}return b.add(g),a.requests.push({...c,nodeId:e,reason:f,requestedAt:Date.now()}),{status:"queued",note:`已转交调度中心(第 ${a.requests.length} 条):它会在下一个决策点(章边界 / 失守处置)裁决——**本块内不会立即生效**,请按现有目标继续写完这一块,或如实 \`declare_missing\`。`,pending:a.requests.length}}}}({requests:a.planning.planRequests??=[],onRejected:a=>{console.warn(`[gen] 规划请求未受理(${y.title}):${a}`),q([{level:"warning",category:"structure",owner:"system",message:`规划请求未受理:${a}`,suggestion:"按现有目标写完本块;确实写不动就 declare_missing 记账"}])}}),onIssue:q,onBlock:b=>{let c="failed"===b.status;N.set(b.blockKey,{passed:!c,kinds:b.failureKinds??[]}),(0,l.Wl)(a,{batch:"generation.write",id:`block.${y.id}.${b.blockKey}`,parentId:(0,l.Ts)(y.id),type:"block",title:b.blockTitle,status:c?"failed":"completed",chapterId:y.id,chapterTitle:H,metrics:{targetWords:b.targetWords,actualChars:b.actualChars,attempt:b.attempt+1,...b.failureKinds&&b.failureKinds.length>0?{failureKinds:b.failureKinds.join("、")}:{},...b.isolatedRetry?{isolatedRetry:!0}:{}}})},onTurn:b=>{let c=b.blockKey,d=`turn.${y.id}.${c}.${b.turn}`,e="commit"===b.action?"提交":"regenerate"===b.action?"重写":"放弃";(0,l.Wl)(a,{batch:"generation.write",id:d,parentId:(0,l.Ts)(y.id),type:"turn",title:`${b.blockTitle||H}\xb7第 ${b.turn} 轮(${e})`,status:"unfixable"===b.action?"failed":"commit"===b.action?"completed":"running",chapterId:y.id,chapterTitle:H,metrics:{turn:b.turn,residual:b.residual,toolCalls:b.toolCalls,action:b.action}})},audit:{missingItems:a.understanding.missingItems,clarificationRequests:a.understanding.clarificationRequests,unfixableDeclarations:a.understanding.unfixableDeclarations,defects:()=>[...p.values()].flat()}}},t=await a.global.withProgressHeartbeat(()=>(0,g.X6)(a.planning.generationDiagnostics,`chapter-planned-block-draft:${y.id}`,()=>(0,cY.nl)(s,i)));if(a.understanding.clarificationRequests){let b=(0,m.mI)(),c=[];if(b){let{budget:a}=b;a.maxCallsPerDocument>0&&c.push({label:"调用数",value:b.documentCalls/a.maxCallsPerDocument}),a.maxTokensPerDocument>0&&c.push({label:"文档 token",value:b.documentTokens/a.maxTokensPerDocument}),b.costCeilingUsd&&b.costCeilingUsd>0&&c.push({label:"成本",value:b.documentCostUsd/b.costCeilingUsd})}let d=c.sort((a,b)=>b.value-a.value)[0],e=d?.value,f=function(a){let b=[],c=[];return(void 0!==a.noImprovementRounds?a.noImprovementRounds>=dh.noImprovementRounds&&b.push("no-improvement-3-rounds"):c.push("noImprovementRounds"),void 0!==a.budgetUsedRatio?a.budgetUsedRatio>dh.budgetUsedRatio&&b.push("budget-over-80-percent"):c.push("budgetUsedRatio"),void 0!==a.contradictoryJudges?a.contradictoryJudges&&b.push("contradictory-judges"):c.push("contradictoryJudges"),void 0!==a.impactedNodeCount?a.impactedNodeCount>dh.impactedNodeCount&&b.push("impact-over-5-nodes"):c.push("impactedNodeCount"),b.length>0)?{escalate:!0,triggers:b,level:"C",status:"escalate",reason:`命中 A5.3 升级触发(${b.join("、")}):无改善 ${a.noImprovementRounds??"—"} 轮 / 预算 ${void 0===a.budgetUsedRatio?"—":`${Math.round(100*a.budgetUsedRatio)}%`} / 判据对撞 ${void 0===a.contradictoryJudges?"—":a.contradictoryJudges} / 影响 ${a.impactedNodeCount??"—"} 节点`}:c.length>0?{escalate:!1,triggers:[],level:"A",status:"undecidable",reason:`升级判据数据不足(缺:${c.join("、")})——**不得读成"不需要升级"**;补齐数据后重判`}:{escalate:!1,triggers:[],level:"A",status:"hold",reason:"四条升级触发均已查且未命中"}}(void 0===e?{}:{budgetUsedRatio:e});f.escalate&&d&&(f.reason=`${f.reason}(${d.label}已用 ${Math.round(100*d.value)}%)`),f.escalate&&(a.understanding.clarificationRequests.push({question:`A5.3 升级:${f.reason}。是否继续?候选:① 继续按当前预算跑完;② 停下等人调整预算/范围。`,blocking:!1,askedAt:`${y.id}/${y.title}`,askedAtMs:Date.now(),status:"pending"}),a.planning.generationDiagnostics&&(a.planning.generationDiagnostics.llm.lastInfo=`A5.3 升级到 C 级(${f.triggers.join("、")}):已写入待答槽(不自动停,按权威阶梯先继续并记账)`))}if(t?.allSucceeded)b=t.markdown;else if(t){let d=await c(s,t.failedBlocks,t.sections),e=d.merged.every(a=>!!a)?{merged:d.merged,exhausted:d.exhausted,rescued:0,note:void 0}:await h(s,d.exhausted,d.merged,i),f={merged:e.merged,exhausted:e.exhausted};if(e.note&&(a.planning.generationDiagnostics.llm.lastInfo=e.note),f.merged.every(a=>!!a))b=`## ${y.title}
308
+ 要求:只用上面新增片段里的具体数据/做法展开;仍无来源的内容一律 declare_missing。`:`【调详略重试】上一轮失守原因是判据/篇幅类(${d.failureKinds?.join("、")||"未记录"})。本轮块目标字数由 ${e.targetWords} 调整为 ${Math.round(e.targetWords*c.scale)}(\xd7${c.scale.toFixed(2)})——`+(c.scale<1?"请压缩表达、去掉重复与套话,保住全部事实与工序,不得删要点。":"请把每个要点展开到实施深度(工序/参数/检查验收),不要靠重复句凑字。"),k=await (0,cZ.nl)({...b,targetWords:Math.round(e.targetWords*("adjust_depth"===c.kind?c.scale:1)),initialFeedback:j,isolatedRetry:!0},{blocks:[e],coveredSections:[],fallbackSections:[]}).catch(b=>{a.planning.generationDiagnostics.llm.lastError=`${c.kind} 重试异常(${y.title}/${e.title}):${b instanceof Error?b.message:String(b)}`}),l=k?.markdown?.replace(/^##\s+.+$/mu,"").trim();l?h[d.index]=l:i.push(d)}return{merged:h,exhausted:i,performed:!0,note:`${c.kind} 已执行:重试失守块 ${g.length} 个,成功 ${g.length-i.length} 个`}},h=async(b,c,d,f)=>{if(0===c.length)return{merged:d,exhausted:c,rescued:0};if(t.has(y.id))return{merged:d,exhausted:c,rescued:0,note:"本章已重切过一次(每次生成每章最多一次)"};let g=(0,m.Su)(a.planning.generationDiagnostics),h=g.budget.maxTokensPerDocument>0?g.documentTokens/g.budget.maxTokensPerDocument:0,i=o({usedRatio:h,remainingTokens:Math.max(0,g.budget.maxTokensPerDocument-g.documentTokens),chaptersTotal:a.planning.effectiveChapters.length,chaptersLeft:a.planning.effectiveChapters.length-E,configuredConcurrency:a.blueprint.chapterConcurrency,chapterOutcomes:[{chapterId:y.id,chapterTitle:H,plannedBlocks:f.blocks.length,succeededBlocks:d.filter(a=>!!(a&&a.trim())).length,failureKinds:[...new Set(c.flatMap(a=>a.failureKinds??[]))],replanned:!1,evidenceSwapped:t.has(`evidence:${y.id}`),depthAdjusted:t.has(`depth:${y.id}`)}],requestedSplits:z.filter(a=>"split_section"===a.kind).map(a=>a.nodeId),budgetStopped:!1});if("swap_evidence"===i.kind||"adjust_depth"===i.kind){C(i,`ch${E}-${i.kind}`);let a=await e(b,i,c,d,f);return a.performed?("swap_evidence"===i.kind?t.add(`evidence:${y.id}`):t.add(`depth:${y.id}`),{merged:a.merged,exhausted:a.exhausted,rescued:a.merged.filter((a,b)=>!!a&&!d[b]).length,note:a.note}):{merged:d,exhausted:c,rescued:0,note:`主智能体下令 ${i.kind},但执行体未落地:${a.note}`}}if("replan_chapter"!==i.kind)return{merged:d,exhausted:c,rescued:0,note:`主智能体未下令重切:${i.reason}`};let j="format"===n(c.flatMap(a=>a.failureKinds??[]))||c.some(a=>(a.failureKinds??[]).some(a=>"length"===a||"over-produce"===a||"under-produce"===a)),k=z.some(a=>"split_section"===a.kind&&(a.nodeId===y.id||c.some(b=>b.title&&a.nodeId.includes(b.title))));if(!j&&!k)return{merged:d,exhausted:c,rescued:0,note:`重切跳过:失守并非篇幅类(${[...new Set(c.flatMap(a=>a.failureKinds??[]))].join("、")||"未记录"})——拆开不会改变判据结果,只会多花调用;按章级降级/复核清单处置`};let l=c.map(a=>a.title).filter(a=>!!a),p=function(a){let b=new Set(a.failedTitles.map(a=>String(a).trim()));if(0===b.size)return{structure:a.structure,split:[],skippedReason:"没有失守块(无需重切)"};let c=[],d=[],e=[],f=Math.max(0,12-a.structure.blocks.length);for(let g of a.structure.blocks){if(!b.has(g.title.trim())){c.push(g);continue}if(f<=0){e.push(`${g.title}(本章块数已达上限 12,不再拆)`),c.push(g);continue}let h=g.subPoints??[];if(h.length<2){e.push(`${g.title}(只有 ${h.length} 个要点,没有对半拆的依据)`),c.push(g);continue}let i=Math.ceil(h.length/2),j=h.slice(0,i),k=h.slice(i),[l,m]=function(a,b,c,d){let e=(a.subPoints??[]).map(a=>"number"==typeof a.quotaWords&&a.quotaWords>0?a.quotaWords:void 0),f=e.reduce((a,b)=>a+(b??0),0),g=e.slice(0,b).reduce((a,b)=>a+(b??0),0),h=f>0?g/f:b/Math.max(1,b+c),i=d&&d>0?Math.max(200,Math.min(.15*d,600)):300,j=a=>!Number.isFinite(a)||a<=0?Math.max(i,1):Math.max(i,Math.round(a));return[j(a.targetWords*h),j(Math.max(1,a.targetWords-a.targetWords*h))]}(g,j.length,k.length,a.chapterTargetWords),n=g.facts??[];c.push({...g,title:c9(g.title,j),subPoints:j,targetWords:l,facts:n}),c.push({...g,title:c9(g.title,k),subPoints:k,targetWords:m,facts:n}),f-=1,d.push({from:g.title,into:[c9(g.title,j),c9(g.title,k)]})}return 0===d.length?{structure:a.structure,split:[],skippedReason:`没有可拆的失守块:${e.join(";")||"失守块标题不在本章结构里"}`}:{structure:{...a.structure,blocks:c},split:d,...e.length>0?{skippedReason:`另有未拆:${e.join(";")}`}:{}}}({structure:f,failedTitles:l});if(0===p.split.length)return{merged:d,exhausted:c,rescued:0,note:`重切未执行:${p.skippedReason??"无可拆块"}`};let q=(()=>{let b=(0,m.Kj)();if(!b)return 1/0;let c=(0,m.Su)(a.planning.generationDiagnostics).budget;return Math.max(0,c.maxCallsPerChapter-b.calls)})();if(q<2)return{merged:d,exhausted:c,rescued:0,note:`重切未执行:本章调用额度仅剩 ${q} 次(拆一次至少要 2 次调用)——先保证剩余块能发起`};C(i,`ch${E}-rescue`),t.add(y.id),console.warn(`[gen] 章级重切:${H} 拆 ${p.split.length} 个失守块 —— ${p.split.map(a=>a.from).join("、")}`);let r=[...d],s=[...c],u=0;for(let d of c){let c=d.title,e=c?p.split.find(a=>a.from===c):void 0;if(!e)continue;let f=p.structure.blocks.filter(a=>a.title===e.into[0]||a.title===e.into[1]);if(2!==f.length)continue;let g=await (0,cZ.nl)({...b,targetWords:f.reduce((a,b)=>a+b.targetWords,0),isolatedRetry:!0},{blocks:f,coveredSections:[],fallbackSections:[]}).catch(b=>{a.planning.generationDiagnostics.llm.lastError=`章级重切异常(${y.title}):${b instanceof Error?b.message:String(b)}`}),h=(g?.sections??[]).filter(a=>!!(a&&a.trim()));if(2!==h.length){console.warn(`[gen] 章级重切:块「${c}」两半只成稿 ${h.length}/2,按失守保留(不产半块正文)`);continue}r[d.index]=h.join("\n\n");let i=s.findIndex(a=>a.index===d.index);i>=0&&s.splice(i,1),u+=1}return{merged:r,exhausted:s,rescued:u,note:`章级重切:拆 ${p.split.length} 个失守块,重写成功 ${u} 个${p.skippedReason?`(${p.skippedReason})`:""}`}},i=await a.global.withProgressHeartbeat(()=>(0,g.X6)(a.planning.generationDiagnostics,`chapter-plan:${y.id}`,async()=>(0,x.OY)({blueprintChapter:bp,inputSections:y.sections||[],chapterTitle:(0,av.GQ)(y.title),targetWords:bv,projectContext:a.planning.projectContext,evidence:as}))),j=await a.global.withProgressHeartbeat(()=>(0,dc.G8)({chapterTitle:(0,av.GQ)(y.title),blocks:i.blocks.map(a=>({title:a.title,pointTitles:a.subPoints.map(a=>a.title)})),fingerprintPool:a.planning.fingerprintPool||(0,dd.$R)(),excludeDocumentId:a.global.input.diversitySeed,profile:a.planning.diversityProfile,signal:F,diagnostics:a.planning.generationDiagnostics}));if(j.renamed>0&&(i={...i,blocks:i.blocks.map((a,b)=>({...a,title:j.titles[b]}))}),i.blocks.length>0){d=i;let e=[aZ,(0,c7.$8)(bf.task,i)].filter(Boolean).join("\n\n"),f=i.blocks.reduce((a,b)=>a+b.subPoints.length,0),n=i.blocks.reduce((a,b)=>a+b.subPoints.reduce((a,b)=>a+Math.max(0,b.sources.length-1),0),0),o=bp?i.fallbackSections.length>0?`(蓝图章切片确定性转换:${i.fallbackSections.length} 条细目由覆盖校验挂回主题块)`:"(蓝图章切片确定性转换:主题块来自蓝图小节/工作包)":"(蓝图未覆盖本章,已按语义域确定性分组)";(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aY.primaryPromptId,status:"running",message:`${(0,av.GQ)(y.title)} 已规划 ${i.blocks.length} 个主题块,正在按主题块并发成稿${o}`,details:[...a$,`有效证据:${as.length} 条`,`输入细目 ${bl} 条 → 主题块 ${i.blocks.length} 个(每块 2~4 个 H4 要点)`,`语义合并 ${n} 条细目,目录级 H4 合计 ${f} 个`,"单块 1800~2800 字,主题块间全并发,单节深度与整体耗时双优",...j.summary?[j.summary]:[]],progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"主题块并发"}},{subtitle:(0,av.GQ)(y.title),order:E})}),(0,l.Wl)(a,{batch:"generation.write",stage:{...bg,message:`${bf.task.sections.filter(a=>a.ready).length}/${bf.task.sections.length} 条细目任务就绪(已规划为 ${i.blocks.length} 个主题块)`},type:"plan"}),a.global.emitProgress(a.global.chapterDrafts);let p=new Map,q=b=>{let c=(0,l.Ts)(y.id),d=[...p.get(c)??[],...b];p.set(c,d),(0,l.Wl)(a,{batch:"generation.write",id:c,parentId:(0,l.T1)("write"),type:"chapter",title:H,status:"running",chapterId:y.id,chapterTitle:H,issues:d})},s={template:a.prepare.template,chapter:y,evidence:as,missingFacts:at,promptTexts:e,projectContext:a.planning.chapterScopedProjectContext(y),skeletonProjectContext:a.planning.projectContext,requirement:a.global.input.requirement,roleContext:[aX,br].filter(Boolean).join("\n"),targetWords:bv,forbidDrawingImages:aw,bidComposition:a.understanding.bidComposition,factCoverageContext:be,compactProjectContext:!0,scopedProjectContext:!0,blueprintData:(0,x.nn)(a.blueprint.integratedBlueprint),blueprintChapter:bp,blueprintMustCiteHint:bq,sectionEvidenceProvider:a7,onSectionProgress:by,blockRequirementProvider:aE,blockKnowledgeProvider:aI,diagnostics:a.planning.generationDiagnostics,signal:F,agentToolWiring:{projectRoot:a.prepare.projectRoot,scopeRootNames:a.prepare.materialScope.selectedRoots,...a.planning.truthInputs?{authoritative:a.planning.truthInputs}:{},planRequests:function(a){let b=new Set;return{request(c){var d;let e=String(c.nodeId??"").trim(),f=String(c.reason??"").trim();if(!e||!f){let b="规划请求缺少 nodeId 或 reason:不予受理(改规划必须能溯源)";return a.onRejected?.(b),{status:"rejected",note:b,pending:a.requests.length}}let g=[(d={kind:c.kind,nodeId:e,reason:f}).kind,d.nodeId.trim(),d.reason.replace(/\s+/gu,"").replace(/[,。;:!?]/gu,"")].join("|");if(b.has(g))return{status:"duplicate",note:"同一请求已经排过队(同一目标 + 同一理由):不重复受理",pending:a.requests.length};if(a.requests.length>=12){let b=`本次生成的规划请求已达上限 12 条:本请求未受理。请改用现有能力把这一节写完(\`patch_section\` 补写 / \`declare_missing\` 记账),不要再请求改规划。`;return a.onRejected?.(b),{status:"rejected",note:b,pending:a.requests.length}}return b.add(g),a.requests.push({...c,nodeId:e,reason:f,requestedAt:Date.now()}),{status:"queued",note:`已转交调度中心(第 ${a.requests.length} 条):它会在下一个决策点(章边界 / 失守处置)裁决——**本块内不会立即生效**,请按现有目标继续写完这一块,或如实 \`declare_missing\`。`,pending:a.requests.length}}}}({requests:a.planning.planRequests??=[],onRejected:a=>{console.warn(`[gen] 规划请求未受理(${y.title}):${a}`),q([{level:"warning",category:"structure",owner:"system",message:`规划请求未受理:${a}`,suggestion:"按现有目标写完本块;确实写不动就 declare_missing 记账"}])}}),onIssue:q,onBlock:b=>{let c="failed"===b.status;N.set(b.blockKey,{passed:!c,kinds:b.failureKinds??[]}),(0,l.Wl)(a,{batch:"generation.write",id:`block.${y.id}.${b.blockKey}`,parentId:(0,l.Ts)(y.id),type:"block",title:b.blockTitle,status:c?"failed":"completed",chapterId:y.id,chapterTitle:H,metrics:{targetWords:b.targetWords,actualChars:b.actualChars,attempt:b.attempt+1,...b.failureKinds&&b.failureKinds.length>0?{failureKinds:b.failureKinds.join("、")}:{},...b.isolatedRetry?{isolatedRetry:!0}:{}}})},onTurn:b=>{let c=b.blockKey,d=`turn.${y.id}.${c}.${b.turn}`,e="commit"===b.action?"提交":"regenerate"===b.action?"重写":"放弃";(0,l.Wl)(a,{batch:"generation.write",id:d,parentId:(0,l.Ts)(y.id),type:"turn",title:`${b.blockTitle||H}\xb7第 ${b.turn} 轮(${e})`,status:"unfixable"===b.action?"failed":"commit"===b.action?"completed":"running",chapterId:y.id,chapterTitle:H,metrics:{turn:b.turn,residual:b.residual,toolCalls:b.toolCalls,action:b.action}})},audit:{missingItems:a.understanding.missingItems,clarificationRequests:a.understanding.clarificationRequests,unfixableDeclarations:a.understanding.unfixableDeclarations,defects:()=>[...p.values()].flat()}}},t=await a.global.withProgressHeartbeat(()=>(0,g.X6)(a.planning.generationDiagnostics,`chapter-planned-block-draft:${y.id}`,()=>(0,cZ.nl)(s,i)));if(a.understanding.clarificationRequests){let b=(0,m.mI)(),c=[];if(b){let{budget:a}=b;a.maxCallsPerDocument>0&&c.push({label:"调用数",value:b.documentCalls/a.maxCallsPerDocument}),a.maxTokensPerDocument>0&&c.push({label:"文档 token",value:b.documentTokens/a.maxTokensPerDocument}),b.costCeilingUsd&&b.costCeilingUsd>0&&c.push({label:"成本",value:b.documentCostUsd/b.costCeilingUsd})}let d=c.sort((a,b)=>b.value-a.value)[0],e=d?.value,f=function(a){let b=[],c=[];return(void 0!==a.noImprovementRounds?a.noImprovementRounds>=de.noImprovementRounds&&b.push("no-improvement-3-rounds"):c.push("noImprovementRounds"),void 0!==a.budgetUsedRatio?a.budgetUsedRatio>de.budgetUsedRatio&&b.push("budget-over-80-percent"):c.push("budgetUsedRatio"),void 0!==a.contradictoryJudges?a.contradictoryJudges&&b.push("contradictory-judges"):c.push("contradictoryJudges"),void 0!==a.impactedNodeCount?a.impactedNodeCount>de.impactedNodeCount&&b.push("impact-over-5-nodes"):c.push("impactedNodeCount"),b.length>0)?{escalate:!0,triggers:b,level:"C",status:"escalate",reason:`命中 A5.3 升级触发(${b.join("、")}):无改善 ${a.noImprovementRounds??"—"} 轮 / 预算 ${void 0===a.budgetUsedRatio?"—":`${Math.round(100*a.budgetUsedRatio)}%`} / 判据对撞 ${void 0===a.contradictoryJudges?"—":a.contradictoryJudges} / 影响 ${a.impactedNodeCount??"—"} 节点`}:c.length>0?{escalate:!1,triggers:[],level:"A",status:"undecidable",reason:`升级判据数据不足(缺:${c.join("、")})——**不得读成"不需要升级"**;补齐数据后重判`}:{escalate:!1,triggers:[],level:"A",status:"hold",reason:"四条升级触发均已查且未命中"}}(void 0===e?{}:{budgetUsedRatio:e});f.escalate&&d&&(f.reason=`${f.reason}(${d.label}已用 ${Math.round(100*d.value)}%)`),f.escalate&&(a.understanding.clarificationRequests.push({question:`A5.3 升级:${f.reason}。是否继续?候选:① 继续按当前预算跑完;② 停下等人调整预算/范围。`,blocking:!1,askedAt:`${y.id}/${y.title}`,askedAtMs:Date.now(),status:"pending"}),a.planning.generationDiagnostics&&(a.planning.generationDiagnostics.llm.lastInfo=`A5.3 升级到 C 级(${f.triggers.join("、")}):已写入待答槽(不自动停,按权威阶梯先继续并记账)`))}if(t?.allSucceeded)b=t.markdown;else if(t){let d=await c(s,t.failedBlocks,t.sections),e=d.merged.every(a=>!!a)?{merged:d.merged,exhausted:d.exhausted,rescued:0,note:void 0}:await h(s,d.exhausted,d.merged,i),f={merged:e.merged,exhausted:e.exhausted};if(e.note&&(a.planning.generationDiagnostics.llm.lastInfo=e.note),f.merged.every(a=>!!a))b=`## ${y.title}
310
309
 
311
- ${f.merged.join("\n\n")}`;else{let c=(0,cY.Br)({sections:f.merged,exhaustedBlocks:f.exhausted,blockTargetWords:i.blocks.map(a=>a.targetWords)});if(c)b=`## ${y.title}
310
+ ${f.merged.join("\n\n")}`;else{let c=(0,cZ.Br)({sections:f.merged,exhaustedBlocks:f.exhausted,blockTargetWords:i.blocks.map(a=>a.targetWords)});if(c)b=`## ${y.title}
312
311
 
313
- ${c.sections.join("\n\n")}`,r=c.detail,console.error(`[gen][chapter-audit] ${c.detail}:${(0,av.GQ)(y.title)}`),a.planning.generationDiagnostics.llm.lastInfo=c.detail;else{let c=(0,cY.D6)({sections:f.merged,blockTitles:i.blocks.map(a=>a.title),exhaustedBlocks:f.exhausted});if(c){b=`## ${y.title}
312
+ ${c.sections.join("\n\n")}`,r=c.detail,console.error(`[gen][chapter-audit] ${c.detail}:${(0,av.GQ)(y.title)}`),a.planning.generationDiagnostics.llm.lastInfo=c.detail;else{let c=(0,cZ.D6)({sections:f.merged,blockTitles:i.blocks.map(a=>a.title),exhaustedBlocks:f.exhausted});if(c){b=`## ${y.title}
314
313
 
315
- ${f.merged.filter(a=>!!(a&&a.trim())).join("\n\n")}`,A=c;let{head:d,details:e}=(0,cY.fk)(c),g=`${(0,av.GQ)(y.title)} 章级显式降级:${d}(失败原因:${c.droppedBlocks.map(a=>a.reason).join(";")})——已保留其余块正文,失守块不产出正文,已登记 structure/blocker 进导出门禁与交付复核清单`;console.error(`[gen][chapter-audit] ${g}`),console.error(`[gen][chapter-audit] 降级明细:${e.slice(1).join(" | ")}`),a.planning.generationDiagnostics.llm.lastInfo=g}}}}}if(b||(a.planning.generationDiagnostics.llm.lastError=a.planning.generationDiagnostics.llm.lastError||"全部成稿路径未返回有效正文"),b&&a.blueprint.integratedBlueprint){let c=(0,x.ZP)(b,a.blueprint.integratedBlueprint.data);c.filled.length>0&&(b=c.markdown),(c.unresolved.length>0||c.malformed.length>0)&&(a.understanding.missingItems.push(`${y.title}:权威占位符未决 ${c.unresolved.length} 处(${c.unresolved.slice(0,4).join("、")})${c.malformed.length>0?`;畸形 ${c.malformed.length} 处`:""}`),a.planning.generationDiagnostics.llm.lastInfo=`权威占位符未决:${y.title} ${c.unresolved.length} 处无权威值、${c.malformed.length} 处畸形(均保留原样,不静默删除)`)}if(b&&bp&&a.blueprint.integratedBlueprint){let c=(0,x.C8)(b,bp,a.blueprint.integratedBlueprint.data);c.fixed.length>0?(b=c.markdown,a.planning.generationDiagnostics.llm.lastInfo=`蓝图引用对齐:${y.title} 回填 ${c.fixed.length} 处(${c.fixed.map(a=>`${a.anchor} ${a.from}→${a.to}`).join("、")})${c.missing.length?`;未引用缺口 ${c.missing.length} 项:${c.missing.join("、")}`:""}`):c.missing.length>0&&(a.planning.generationDiagnostics.llm.lastInfo=`蓝图引用缺口观测:${y.title} 未在正文引用 ${c.missing.length} 项 must_cite 参数(${c.missing.slice(0,6).join("、")}${c.missing.length>6?" 等":""}),由跨章一致性审查兑底`)}if(b&&a.blueprint.integratedBlueprint){let c=(0,w.Pl)(b,(0,az.i2)(a.blueprint.integratedBlueprint.data));if(c.fixedCount>0){b=c.markdown;let d=a.planning.generationDiagnostics.llm.lastInfo;a.planning.generationDiagnostics.llm.lastInfo=`${d?`${d};`:""}阶段劳动力口径对齐:${y.title} 回填 ${c.fixedCount} 处(${c.details.join("、")})`}}if((0,f.Te)(F),!b){let b=a.planning.generationDiagnostics.llm.lastError||"空响应或超时",c=`${(0,av.GQ)(y.title)} 正文未达到成稿要求,已阻断生成(${b.slice(0,160)})`;throw(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aY.primaryPromptId,status:"failed",message:c,details:[`阻断归因:${b}`,`证据条数:${as.length}`],progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"章节阻断"}},{subtitle:(0,av.GQ)(y.title),order:E})}),a.global.emitProgress(a.global.chapterDrafts),Error(c)}if(!b.trim())throw Error(`${(0,av.GQ)(y.title)} 首次生成失败,未获得可用于定稿的正文`);let p=d&&d.blocks.length>0?d.blocks.map(a=>a.title):(y.sections||[]).filter(Boolean),u=d&&d.blocks.length>0?d.blocks.flatMap(a=>a.subPoints.map(a=>a.title)):[],v=b;p.length>0&&(v=(0,f.Ww)(v,p,3,{nearMatch:!0})),u.length>0&&(v=(0,f.Ww)(v,u,4)),q=(0,s.w_)(v,y),q=await (0,s._k)(q,a.understanding.bidProcedureJudge)}let bz=await (0,aU.mt)({chapter:y,content:q,evidence:as}),bA=(0,c6.uQ)(y.title,i),bB=bA?(0,cO.$6)({chapterId:y.id,chapterTitle:y.title,chapterText:q,mustCover:bA.mustCover}).filter(a=>"error"===a.level):[];bB.length>0&&(console.warn(`[gen][mustcover] ${(0,av.GQ)(y.title)} 章型义务未落位 ${bB.length} 项:${bB.map(a=>a.message.slice(0,80)).join(" | ")}`),a.planning.generationDiagnostics&&(a.planning.generationDiagnostics.llm.lastInfo=`章型义务缺口(${(0,av.GQ)(y.title)}):${bB.map(a=>a.message).join(";").slice(0,500)}`,a.planning.generationDiagnostics.chapterFocusGaps=[...(a.planning.generationDiagnostics.chapterFocusGaps||[]).filter(a=>a.chapterId!==y.id),{chapterId:y.id,chapterTitle:y.title,obligations:bB.map(a=>a.message)}]));let bD=(0,j.V7)(q),bE=bm.roundTarget>0?Math.round(bD/bm.roundTarget*100):0,bF=bm.roundTarget>0&&bD>Math.ceil(bm.roundTarget*cY.N);bF&&console.error(`[gen][chapter-audit] 章篇幅超产 ${bE}%(${bD} 字 vs 本轮目标 ${bm.roundTarget} 字,终稿篇幅线(minimum 语义):+${Math.round((co.D1.overWarn-1)*100)}% 触发压缩、+${Math.round((co.D1.overBlock-1)*100)}% 阻断): ${(0,av.GQ)(y.title)}`);let bG=(0,aA.r4)(q),bH=d&&d.blocks.length>0?d.blocks.map(a=>a.title):(y.sections||[]).filter(Boolean),bI=bH.filter((a,b)=>a!==bH[b-1]),bJ=bI.length>0?bI:bG.length>0?bG:[],bK=(0,X.qK)(q,[{title:y.title,content:q,sections:bJ}]).map(a=>a.message),bL=bz.slice(0,6).map(a=>`小节事实密度需优化:${a}`),bM=(0,aU.nd)({chapterTitle:y.title,content:q,diagnostics:a.planning.generationDiagnostics}).slice(0,4),bN=[...bK,...bL,...bM],bO=A?(0,cY.fk)(A):void 0,bP=A?(0,B.a4)({plannedBlocks:A.plannedBlocks,droppedBlocks:A.plannedBlocks-A.deliveredBlocks}):(0,s.md)(bD,bs,bN);return D=(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aY.primaryPromptId,status:bP,message:(0,k.AQ)(`${(0,av.GQ)(y.title)} 已由大模型成稿:当前 ${bD} 字${bO?`;${bO.head}`:""};章节预算约 ${bm.budgetTarget} 字,本轮目标约 ${bm.roundTarget} 字${bN.length?`;待优化:${bN.slice(0,8).join("、")}`:""}`,T),details:[`本轮完成率:${bE}%`,`结构目标约 ${bm.structureTarget} 字`,...a$,...bk,`二级小节:${bJ.length} 个`,...bO?bO.details:[],...bF?[`篇幅审计:章超产(${bD} 字 vs 本轮目标 ${bm.roundTarget} 字,终稿篇幅线(minimum 语义):+${Math.round((co.D1.overWarn-1)*100)}% 触发压缩、+${Math.round((co.D1.overBlock-1)*100)}% 阻断)`]:[],...r?[r]:[]],progress:{current:E+1,total:a.planning.effectiveChapters.length,label:A?"章节降级成稿":bN.length?"章节已生成":"章节达标"}},{subtitle:(0,av.GQ)(y.title),order:E}),a.understanding.chapterGenerationStagesByOrder[E]=D,async()=>{let b=A?(0,cY._9)({id:y.id,title:y.title,content:q,evidence:as,missingFacts:at,sections:bJ,tablePlans:y.tablePlans||[]},A):{id:y.id,title:y.title,content:q,evidence:as,missingFacts:at,sections:bJ,tablePlans:y.tablePlans||[]};a.understanding.chapterDraftsByOrder[E]=b,a.global.chapterDrafts=a.understanding.chapterDraftsByOrder.filter(a=>!!a),a.global.emitProgress(a.global.chapterDrafts),Q(!0),(0,l.Wl)(a,{batch:"generation.write",id:(0,l.Ts)(y.id),type:"chapter",title:H,status:A?"repairing":"completed",chapterId:y.id,chapterTitle:H,metrics:{chars:(0,j.V7)(q??""),...A?{droppedBlocks:A.droppedBlocks.length}:{}}})}}catch(e){if(Q(!1),a.global.input.signal?.aborted)throw e;let b=a.planning.generationDiagnostics.llm.lastError,c=`failures=${a.planning.generationDiagnostics.llm.failures} retries=${a.planning.generationDiagnostics.llm.retries} reasoningTokens=${a.planning.generationDiagnostics.llm.reasoningTokens||0}`;console.error(`[gen] chapter ${y.title} failed:`,e,b?`| LLM lastError: ${b}`:"| LLM lastError: (none)","|",c);let d=`${y.title}:${e instanceof Error?e.message:"生成失败"}`;a.understanding.failedChapterMessages.push(d),(0,l.Wl)(a,{batch:"generation.write",id:(0,l.Ts)(y.id),type:"chapter",title:H,status:"failed",chapterId:y.id,chapterTitle:H,metrics:{failed:!0}}),D=(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:G,status:"failed",message:`${(0,av.GQ)(y.title)} 生成失败:${d}`,details:[`LLM 最近错误:${b||"无记录"}`,`LLM 调用失败 ${a.planning.generationDiagnostics.llm.failures} 次、重试 ${a.planning.generationDiagnostics.llm.retries} 次`]},{subtitle:H,order:E}),a.understanding.chapterGenerationStagesByOrder[E]=D}if(D){let b=(0,m.Z9)((0,m.Su)(a.planning.generationDiagnostics));b?.kind==="chapter-wall-clock"&&(D={...D,chapterTimedOut:!0,details:[...D.details||[],`章墙上时间耗尽:${b.message}`]},a.understanding.chapterGenerationStagesByOrder[E]=D,console.warn(`[gen] chapter wall-clock exhausted: ${y.title} —— ${b.message}`)),(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:D})}a.global.emitProgress(a.global.chapterDrafts)}))),S=[],T=!1;for(let a of R){if("fulfilled"===a.status){S.push(a.value);continue}T?console.error("[gen] 同批其余章节亦失败:",a.reason):(T=!0,E=a.reason)}for(let b of(K&&K.removeEventListener("abort",L),S))b&&a.blueprint.reviewTaskPool.push(a.blueprint.reviewSemaphore.run(b));if(T)throw E}await Promise.all(a.blueprint.reviewTaskPool),a.planning.generationDiagnostics.metrics.push({name:"phase:draft",startedAt:a.chapterLoop.draftPhaseStartedAt,endedAt:Date.now(),durationMs:Date.now()-a.chapterLoop.draftPhaseStartedAt}),a.chapterLoop.globalReviewPhaseStartedAt=Date.now(),a.chapterLoop.chapterDraftsFinal=a.understanding.chapterDraftsByOrder.filter(a=>!!a),a.understanding.chapterGenerationStages.push(...a.understanding.chapterGenerationStagesByOrder.filter(a=>!!a))}var dk=c(62521),dl=c(21702);async function dm(a){let b=Math.round(([...a.planning.documentBudget.chapterTargets.values()].reduce((a,b)=>a+b,0)||a.planning.documentBudget.targetChars||0)/Math.max(1,a.planning.effectiveChapters.length)),c=(0,b0.z)().chapterConcurrency||0;a.blueprint.chapterConcurrency=a.planning.generationBudget.chapterConcurrency,a.blueprint.reviewConcurrency=a.planning.generationBudget.reviewConcurrency,(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节流水线调度:${a.planning.effectiveChapters.length} 章全部同批并行生成,审查修复 ${a.blueprint.reviewConcurrency} 路流水线(章节生成完立即进入审查,与后续章节生成重叠)`,details:[`有效章节数:${a.planning.effectiveChapters.length}`,`平均章节目标:${b} 字`,Number.isFinite(c)&&c>0?`章节并发来自 tuningProfile.chapterConcurrency=${Math.floor(c)}`:`全部章节并行生成,在飞调用不设并发上限;每章单轮修复(失败即放弃)`]},{subtitle:"章节流水线策略"})}),a.global.emitProgress(),a.blueprint.reviewSemaphore=new f.jf(a.blueprint.reviewConcurrency),a.blueprint.reviewTaskPool=[];let d=[...a.understanding.availableEvidenceScopePaths].filter(Boolean).sort(),e=Date.now();a.blueprint.basicFactSearchResults=d.length>0?(await (0,f.l$)(s.xs,async b=>a.understanding.searchWithCache(b,d,Math.min(a.understanding.requestedEvidencePerChapter,12),"",a.prepare.materialScope.selectedMaterialRoots),{kind:"search"})).flat():[],a.planning.generationDiagnostics.evidence.searchQueries+=s.xs.length,a.planning.generationDiagnostics.evidence.searchMs+=Date.now()-e;let g=Date.now();try{a.blueprint.integratedBlueprint=(0,x.DL)({projectRoot:a.prepare.projectRoot,boundFilePaths:a.prepare.materialFilePaths,chapterTitles:a.planning.effectiveChapters.map(a=>a.title),templateName:a.prepare.template.name,basicFacts:(0,x.eT)(a.understanding.canonicalFacts),evidence:a.understanding.writerEvidence,truthEvidence:a.understanding.allEvidence,facts:[...a.understanding.earlyFactPool.localFacts,...a.understanding.earlyFactPool.projectBasicFacts,...a.understanding.earlyFactPool.preciseFacts],composition:a.understanding.bidComposition,signal:a.global.input.signal,diagnostics:a.planning.generationDiagnostics});let b=(0,x.Fq)(a.prepare.projectRoot,a.blueprint.integratedBlueprint),c=a.blueprint.integratedBlueprint.outline.chapters.reduce((a,b)=>a+b.subSections.reduce((a,b)=>a+b.workPackages.length,0),0),d=a.understanding.bidComposition,e=d?`${"blind"===d.bidType?`暗标(正文${"forbidden"===d.bodyTablePolicy?"禁表格(显式禁表句)":"表格按证据口径允许"}/禁图片)`:"open"===d.bidType?"明标(正文可含表格)":"未识别勾选标记(按常规口径)"}${d.appendixPlan.length>0?`;文末附表 ${d.appendixPlan.length} 项`:""}`:"未识别(阶段 1 判定缺失,按常规口径)";(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"integrated-blueprint",status:a.blueprint.integratedBlueprint.validation.passed?"success":"failed",message:a.blueprint.integratedBlueprint.validation.passed?`一体化蓝图已构建并落盘:清单 ${a.blueprint.integratedBlueprint.diagnostics.boq?.totalEntries??0} 条目、工作包 ${c} 个(校验通过,参数桶与章切片接管各章写作)`:`一体化蓝图已构建但校验未通过(参数桶不注入,不阻断生成):${a.blueprint.integratedBlueprint.validation.checks.filter(a=>!a.passed).map(a=>a.name).join("、")}`,details:[`耗时 ${Date.now()-g}ms`,`落盘:${b}`,`清单解析:${a.blueprint.integratedBlueprint.diagnostics.boq?`${a.blueprint.integratedBlueprint.diagnostics.boq.totalEntries} 条目 / ${a.blueprint.integratedBlueprint.diagnostics.boq.groupCount} ${a.blueprint.integratedBlueprint.diagnostics.boq.groupLabel||"个分组"} / 完整性校验${a.blueprint.integratedBlueprint.diagnostics.boq.complete?"通过":"未通过"}`:"未解析(见警告)"}`,`标书编制规格:${e}`,`校验链:${a.blueprint.integratedBlueprint.validation.checks.map(a=>`${a.name}${a.passed?"✓":"✗"}`).join(" / ")}`,...a.blueprint.integratedBlueprint.diagnostics.warnings.map(a=>`警告:${a}`)]},{subtitle:"一体化蓝图"})}),a.global.emitProgress()}catch(b){a.blueprint.integratedBlueprint=void 0,(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"integrated-blueprint",status:"failed",message:`一体化蓝图构建异常(参数桶不注入,不阻断生成):${b instanceof Error?b.message:String(b)}`,details:[`耗时 ${Date.now()-g}ms`,"蓝图异常时参数桶与章切片不注入,各章按证据独立成稿"]},{subtitle:"一体化蓝图"})}),a.global.emitProgress()}if(a.blueprint.integratedBlueprint)try{let b=(0,x.wY)({projectRoot:a.prepare.projectRoot,boundFilePaths:a.prepare.materialFilePaths});a.blueprint.billFactLock=(0,Z.Ft)({boq:b.boq}),a.blueprint.billFactLock&&(a.planning.generationDiagnostics.llm.lastInfo=`清单事实锁:锁定 ${a.blueprint.billFactLock.totalEntries} 条目(完整性校验${a.blueprint.billFactLock.complete?"通过":"未通过"}),写作直读与数值核对轮生效`)}catch(c){let b=c instanceof Error?c.message:String(c);console.error(`[blueprint] 清单事实锁构建失败:${b}`),a.blueprint.billFactLock=void 0,(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"bill-fact-lock",status:"failed",message:`清单事实锁构建失败:清单类数值核对未生效(${b})`,details:["后果:清单落位、数值对账、写作直读注入三项均不会执行——本稿的清单相关缺陷**不会被检出**。","建议:核对该项目工程量清单文件(xls/xlsx/PDF)是否可解析、是否已入库,再重新生成。"]},{subtitle:"清单事实锁"})}),a.global.emitProgress()}try{a.blueprint.drawingFactLock=(0,$.e9)({evidence:a.understanding.allEvidence,fileProcessingByPath:a.understanding.fileProcessingByPath,loadCadEntities:b=>{let c=a.understanding.project;return(c.loadMaterialEntities?.(b,"cad-entity")??[]).map(a=>a.payload)}});let b=a.blueprint.drawingFactLock;b&&b.usableDrawings>0&&((0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"drawing-fact-lock",status:"success",message:`图纸事实锁:可用图纸 ${b.usableDrawings} 份,锁定事实行 ${b.totalFacts} 行${b.unusableDrawings>0?`(${b.unusableDrawings} 份无可用事实行)`:""},写作直读与引用率验收生效`,details:[...b.groups.slice(0,10).map(a=>`${a.sourceFile.split("/").pop()||a.sourceFile}:${a.factLines.length} 行 / ${a.tokens.length} 个判定锚点`),...b.unusableDrawings>0?[`无可用事实行 ${b.unusableDrawings} 份(不纳入引用率验收分母)`]:[]]},{subtitle:"图纸事实锁"})}),a.global.emitProgress())}catch(c){let b=c instanceof Error?c.message:String(c);console.error(`[blueprint] 图纸事实锁构建失败:${b}`),a.blueprint.drawingFactLock=void 0,(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"drawing-fact-lock",status:"failed",message:`图纸事实锁构建失败:图纸引用与图纸事实分量未生效(${b})`,details:["后果:图纸事实注入、图纸引用率验收、数据锚定的图纸分量均不会执行——本稿的图纸相关缺陷**不会被检出**。","建议:核对该项目图纸文件(dwg/dxf/pdf)是否可解析、是否已入库,再重新生成。"]},{subtitle:"图纸事实锁"})}),a.global.emitProgress()}{let b=a.planning.tenderRequirements,c=await (0,bC.VX)(b.entries,a.planning.effectiveChapters,a.planning.requirementsSimilarity,{signal:a.global.input.signal,diagnostics:a.planning.generationDiagnostics});if(a.blueprint.requirementAssignments=c.assignments,c.dropped.length>0){let a=new Set(c.dropped);b.entries=b.entries.filter(b=>!a.has(b)),b.excluded.push(...c.dropped.map(a=>({text:a.text,source:a.sources.map(a=>[a.file,a.location].filter(Boolean).join("|")).filter(Boolean).join(";")||void 0,reason:"non_requirement"}))),b.reconciliation.entryCount=b.entries.length,b.reconciliation.excludedCount=b.excluded.length}let d=a.blueprint.requirementAssignments.length;if(d!==b.entries.length)throw Error(`招标要求分配对账失败:要求 ${b.entries.length} 条,分配 ${d} 条`);if(b.entries.length>0){let e=(0,bC.T3)(a.prepare.projectRoot,c.assignments),f=new Map;for(let a of c.assignments)f.set(a.chapterTitle,(f.get(a.chapterTitle)||0)+1);(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"tender-requirement-assignment",status:"success",message:`招标要求分配:${d} 条要求全部落位 ${f.size} 个责任章${c.dropped.length>0?`(LLM 拒选 ${c.dropped.length} 条移出要求池)`:""}${c.lowConfidenceCount>0?`(保留低置信 ${c.lowConfidenceCount} 条,LLM 未裁决)`:""}`,details:[`分配对账:要求 ${b.entries.length} 条 = 分配 ${d} 条(未分配 0)`,`落盘:${e}`,...c.dropped.length>0?[`LLM 拒选 ${c.dropped.length} 条(无章节可承载,已移出要求池)`]:[],...[...f.entries()].map(([a,b])=>`${a}:${b} 条`),...c.assignments.filter(a=>a.lowConfidence).slice(0,8).map(a=>`低置信:${a.entry.text} → ${a.chapterTitle}(相似度 ${a.score.toFixed(2)})`)]},{subtitle:"招标要求分配"})}),a.global.emitProgress()}}{let b=a.planning.tenderRequirements.structureRequirements||[];if(b.length>0){let{assignments:c,unattached:d}=(0,bC._D)(b,a.planning.effectiveChapters,a.planning.requirementsSimilarity);a.blueprint.structureAssignments=c,a.blueprint.structureUnattached=d;let e=(0,bC.Vf)(a.prepare.projectRoot,c,d);(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"tender-structure-assignment",status:"success",message:`结构/呈现要求归属:${c.length} 项挂章${d.length>0?`,${d.length} 项存疑未挂(仅展示)`:""}`,details:[`归属 ${c.length} / 存疑 ${d.length} / 共 ${b.length} 项`,`落盘:${e}`,...c.map(a=>`${a.requirement.element}(以${a.requirement.form}呈现)→ ${a.chapterTitle}(相似度 ${a.score.toFixed(2)})`),...d.map(a=>`存疑未挂:${a.requirement.element}(以${a.requirement.form}呈现,最高相似度 ${a.score.toFixed(2)} < ${bC.E})`)]},{subtitle:"结构/呈现要求归属"})}),a.global.emitProgress()}}let h=a.planning.documentBudget.targetChars;if(a.planning.documentBudget.longformStrict&&0!==(0,b0.z)().capacityFeasibilityRecalibration&&h&&a.blueprint.integratedBlueprint?.validation.passed){let b=a.blueprint.integratedBlueprint,c=Date.now();try{let d=new Map,e=a=>{let c=d.get(a.id);return c||(c=(0,x.iV)((0,x.md)(b,a.title),a.sections||[]),d.set(a.id,c)),c},f=a.prepare.documentSpec,{chapterTargets:g,adjustments:i,compressed:m}=(0,j.K1)({chapters:a.planning.effectiveChapters,targetChars:h,floorOf:a=>Math.max(f?.chapterRules.find(b=>b.id===a.id||b.title===a.title)?.minWords||0,f?.dynamicChapterRule.minWordsPerChapter||0),feasibilityFloorOf:a=>e(a).minFeasibleWords,currentTargets:a.planning.documentBudget.chapterTargets});for(let[b,c]of(a.planning.documentBudget.chapterTargets.clear(),g))a.planning.documentBudget.chapterTargets.set(b,c);(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"chapter-budget-feasibility",status:"success",message:m?"章预算可行性校准:最低密度预算合计超出全文目标,按下限比例压缩(不阻断;容量密度需求与目标字数冲突已显式暴露)":i.length>0?`章预算可行性校准:${i.length} 章按真实要点密度重锚(Σ章预算 = ${h} 字守恒)`:"章预算可行性校准:各章预算均满足密度可行性下限,无需调整",details:[...i.map(b=>{let c=a.planning.effectiveChapters.find(a=>a.id===b.id),d=c?e(c).points:0;return`${b.title}:${b.from} → ${b.to} 字(要点 ${d} 个 \xd7 密度下限 1800 字/块)`}).slice(0,12),`本地校准时耗 ${Date.now()-c}ms`,`开关:tuningProfile.capacityFeasibilityRecalibration=${(0,b0.z)().capacityFeasibilityRecalibration??"缺省开启"}`]},{subtitle:"章预算可行性校准"})}),(i.length>0||m)&&console.warn(`[blueprint] 章预算可行性校准:${i.length} 章调整能量;Σ章预算 = ${h} 字守恒`),a.global.emitProgress()}catch(c){let b=c instanceof Error?c.message:String(c);console.error(`[blueprint] 章预算可行性校准失败:${b}`),(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"chapter-budget-feasibility",status:"failed",message:`章预算可行性校准失败:沿用原章预算(可能偏离真实要点密度)(${b})`},{subtitle:"章预算可行性校准"})}),a.global.emitProgress()}}a.blueprint.blueprintActive=!!a.blueprint.integratedBlueprint?.validation.passed;{let b=a.blueprint.integratedBlueprint?.outline.chapters??[],c=(0,Z.UO)(a.blueprint.billFactLock,a.planning.effectiveChapters),d=a.planning.effectiveChapters.map(d=>{let e=b.find(a=>a.title===d.title)??b.find(a=>d.title.includes(a.title)||a.title.includes(d.title)),g=(e?.subSections??[]).flatMap(a=>(a.requiredParams??[]).map(a=>a.path)),h=[...c.entries()].filter(([a,b])=>b.chapterTitle===d.title&&a).flatMap(([a])=>a.specQuantityPairs.length>0?a.specQuantityPairs.map(a=>a.spec):[a.name]),i=a.understanding.writerEvidence.filter(a=>a.chapterId===d.id||(0,cP.Lk)(a,d.title)),j=[(0,s.C_)(a.prepare.promptPlan,d).promptTexts,a.prepare.generationControlPrompt,a.prepare.runtimeRulesText].filter(Boolean).join("\n\n"),k=(0,u.rC)({template:a.prepare.template,chapter:d,spec:a.prepare.documentSpec,profile:a.prepare.domainProfile,promptTexts:j,requirement:a.global.input.requirement}),l=(0,u.ji)({needs:k,factsModel:a.understanding.preliminaryFactsModel,evidence:i,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys}),m=(0,u.n9)(l).map(a=>(0,f.lG)(a.value)).filter(a=>ch.sv.test(a)),n=(0,dk.QM)({blueprintParams:g,billSpecs:h,evidenceTokens:(0,cY.Y8)(i),factValues:m});return(0,dk.SO)({chapterTitle:d.title,targetWords:a.planning.documentBudget.chapterTargets.get(d.id)||0,availableParameters:n.total,supplyChannels:n})});a.planning.chapterSupplyDemand=d;let e=d.filter(a=>!a.sufficient);(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"supply-demand-alignment",status:0===e.length?"success":"failed",message:0===e.length?`供给面 ↔ 要求面对齐核算通过:${d.length} 章可用量化参数均达 ${dl.J5}/千字`:`供给面不足:${e.length}/${d.length} 章可用量化参数低于 ${dl.J5}/千字(按蓝图 must_cite + 清单责任行规格 + 本章证据精确 token 去重计)`,details:e.slice(0,8).flatMap(a=>[`【${a.chapterTitle}】`,...a.remediation])},{subtitle:"章预算可行性校准"})}),a.global.emitProgress()}}var dn=c(36366);async function dp(a){if(0===a.requirementSummary.length||0===a.chapters.length)return[];let b=a.chapters.map(a=>`【${(0,av.GQ)(a.title)}】
314
+ ${f.merged.filter(a=>!!(a&&a.trim())).join("\n\n")}`,A=c;let{head:d,details:e}=(0,cZ.fk)(c),g=`${(0,av.GQ)(y.title)} 章级显式降级:${d}(失败原因:${c.droppedBlocks.map(a=>a.reason).join(";")})——已保留其余块正文,失守块不产出正文,已登记 structure/blocker 进导出门禁与交付复核清单`;console.error(`[gen][chapter-audit] ${g}`),console.error(`[gen][chapter-audit] 降级明细:${e.slice(1).join(" | ")}`),a.planning.generationDiagnostics.llm.lastInfo=g}}}}}if(b||(a.planning.generationDiagnostics.llm.lastError=a.planning.generationDiagnostics.llm.lastError||"全部成稿路径未返回有效正文"),b&&a.blueprint.integratedBlueprint){let c=(0,x.ZP)(b,a.blueprint.integratedBlueprint.data);c.filled.length>0&&(b=c.markdown),(c.unresolved.length>0||c.malformed.length>0)&&(a.understanding.missingItems.push(`${y.title}:权威占位符未决 ${c.unresolved.length} 处(${c.unresolved.slice(0,4).join("、")})${c.malformed.length>0?`;畸形 ${c.malformed.length} 处`:""}`),a.planning.generationDiagnostics.llm.lastInfo=`权威占位符未决:${y.title} ${c.unresolved.length} 处无权威值、${c.malformed.length} 处畸形(均保留原样,不静默删除)`)}if(b&&bp&&a.blueprint.integratedBlueprint){let c=(0,x.C8)(b,bp,a.blueprint.integratedBlueprint.data);c.fixed.length>0?(b=c.markdown,a.planning.generationDiagnostics.llm.lastInfo=`蓝图引用对齐:${y.title} 回填 ${c.fixed.length} 处(${c.fixed.map(a=>`${a.anchor} ${a.from}→${a.to}`).join("、")})${c.missing.length?`;未引用缺口 ${c.missing.length} 项:${c.missing.join("、")}`:""}`):c.missing.length>0&&(a.planning.generationDiagnostics.llm.lastInfo=`蓝图引用缺口观测:${y.title} 未在正文引用 ${c.missing.length} 项 must_cite 参数(${c.missing.slice(0,6).join("、")}${c.missing.length>6?" 等":""}),由跨章一致性审查兑底`)}if(b&&a.blueprint.integratedBlueprint){let c=(0,w.Pl)(b,(0,az.i2)(a.blueprint.integratedBlueprint.data));if(c.fixedCount>0){b=c.markdown;let d=a.planning.generationDiagnostics.llm.lastInfo;a.planning.generationDiagnostics.llm.lastInfo=`${d?`${d};`:""}阶段劳动力口径对齐:${y.title} 回填 ${c.fixedCount} 处(${c.details.join("、")})`}}if((0,f.Te)(F),!b){let b=a.planning.generationDiagnostics.llm.lastError||"空响应或超时",c=`${(0,av.GQ)(y.title)} 正文未达到成稿要求,已阻断生成(${b.slice(0,160)})`;throw(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aY.primaryPromptId,status:"failed",message:c,details:[`阻断归因:${b}`,`证据条数:${as.length}`],progress:{current:E+1,total:a.planning.effectiveChapters.length,label:"章节阻断"}},{subtitle:(0,av.GQ)(y.title),order:E})}),a.global.emitProgress(a.global.chapterDrafts),Error(c)}if(!b.trim())throw Error(`${(0,av.GQ)(y.title)} 首次生成失败,未获得可用于定稿的正文`);let p=d&&d.blocks.length>0?d.blocks.map(a=>a.title):(y.sections||[]).filter(Boolean),u=d&&d.blocks.length>0?d.blocks.flatMap(a=>a.subPoints.map(a=>a.title)):[],v=b;p.length>0&&(v=(0,f.Ww)(v,p,3,{nearMatch:!0})),u.length>0&&(v=(0,f.Ww)(v,u,4)),q=(0,s.w_)(v,y),q=await (0,s._k)(q,a.understanding.bidProcedureJudge)}let bz=await (0,aU.mt)({chapter:y,content:q,evidence:as}),bA=(0,c3.uQ)(y.title,i),bB=bA?(0,cP.$6)({chapterId:y.id,chapterTitle:y.title,chapterText:q,mustCover:bA.mustCover}).filter(a=>"error"===a.level):[];bB.length>0&&(console.warn(`[gen][mustcover] ${(0,av.GQ)(y.title)} 章型义务未落位 ${bB.length} 项:${bB.map(a=>a.message.slice(0,80)).join(" | ")}`),a.planning.generationDiagnostics&&(a.planning.generationDiagnostics.llm.lastInfo=`章型义务缺口(${(0,av.GQ)(y.title)}):${bB.map(a=>a.message).join(";").slice(0,500)}`,a.planning.generationDiagnostics.chapterFocusGaps=[...(a.planning.generationDiagnostics.chapterFocusGaps||[]).filter(a=>a.chapterId!==y.id),{chapterId:y.id,chapterTitle:y.title,obligations:bB.map(a=>a.message)}]));let bD=(0,j.V7)(q),bE=bm.roundTarget>0?Math.round(bD/bm.roundTarget*100):0,bF=bm.roundTarget>0&&bD>Math.ceil(bm.roundTarget*cZ.N);bF&&console.error(`[gen][chapter-audit] 章篇幅超产 ${bE}%(${bD} 字 vs 本轮目标 ${bm.roundTarget} 字,终稿篇幅线(minimum 语义):+${Math.round((co.D1.overWarn-1)*100)}% 触发压缩、+${Math.round((co.D1.overBlock-1)*100)}% 阻断): ${(0,av.GQ)(y.title)}`);let bG=(0,aA.r4)(q),bH=d&&d.blocks.length>0?d.blocks.map(a=>a.title):(y.sections||[]).filter(Boolean),bI=bH.filter((a,b)=>a!==bH[b-1]),bJ=bI.length>0?bI:bG.length>0?bG:[],bK=(0,X.qK)(q,[{title:y.title,content:q,sections:bJ}]).map(a=>a.message),bL=bz.slice(0,6).map(a=>`小节事实密度需优化:${a}`),bM=(0,aU.nd)({chapterTitle:y.title,content:q,diagnostics:a.planning.generationDiagnostics}).slice(0,4),bN=[...bK,...bL,...bM],bO=A?(0,cZ.fk)(A):void 0,bP=A?(0,B.a4)({plannedBlocks:A.plannedBlocks,droppedBlocks:A.plannedBlocks-A.deliveredBlocks}):(0,s.md)(bD,bs,bN);return D=(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:aY.primaryPromptId,status:bP,message:(0,k.AQ)(`${(0,av.GQ)(y.title)} 已由大模型成稿:当前 ${bD} 字${bO?`;${bO.head}`:""};章节预算约 ${bm.budgetTarget} 字,本轮目标约 ${bm.roundTarget} 字${bN.length?`;待优化:${bN.slice(0,8).join("、")}`:""}`,T),details:[`本轮完成率:${bE}%`,`结构目标约 ${bm.structureTarget} 字`,...a$,...bk,`二级小节:${bJ.length} 个`,...bO?bO.details:[],...bF?[`篇幅审计:章超产(${bD} 字 vs 本轮目标 ${bm.roundTarget} 字,终稿篇幅线(minimum 语义):+${Math.round((co.D1.overWarn-1)*100)}% 触发压缩、+${Math.round((co.D1.overBlock-1)*100)}% 阻断)`]:[],...r?[r]:[]],progress:{current:E+1,total:a.planning.effectiveChapters.length,label:A?"章节降级成稿":bN.length?"章节已生成":"章节达标"}},{subtitle:(0,av.GQ)(y.title),order:E}),a.understanding.chapterGenerationStagesByOrder[E]=D,async()=>{let b=A?(0,cZ._9)({id:y.id,title:y.title,content:q,evidence:as,missingFacts:at,sections:bJ,tablePlans:y.tablePlans||[]},A):{id:y.id,title:y.title,content:q,evidence:as,missingFacts:at,sections:bJ,tablePlans:y.tablePlans||[]};a.understanding.chapterDraftsByOrder[E]=b,a.global.chapterDrafts=a.understanding.chapterDraftsByOrder.filter(a=>!!a),a.global.emitProgress(a.global.chapterDrafts),Q(!0),(0,l.Wl)(a,{batch:"generation.write",id:(0,l.Ts)(y.id),type:"chapter",title:H,status:A?"repairing":"completed",chapterId:y.id,chapterTitle:H,metrics:{chars:(0,j.V7)(q??""),...A?{droppedBlocks:A.droppedBlocks.length}:{}}})}}catch(e){if(Q(!1),a.global.input.signal?.aborted)throw e;let b=a.planning.generationDiagnostics.llm.lastError,c=`failures=${a.planning.generationDiagnostics.llm.failures} retries=${a.planning.generationDiagnostics.llm.retries} reasoningTokens=${a.planning.generationDiagnostics.llm.reasoningTokens||0}`;console.error(`[gen] chapter ${y.title} failed:`,e,b?`| LLM lastError: ${b}`:"| LLM lastError: (none)","|",c);let d=`${y.title}:${e instanceof Error?e.message:"生成失败"}`;a.understanding.failedChapterMessages.push(d),(0,l.Wl)(a,{batch:"generation.write",id:(0,l.Ts)(y.id),type:"chapter",title:H,status:"failed",chapterId:y.id,chapterTitle:H,metrics:{failed:!0}}),D=(0,k.X5)({type:"chapter_generation",roleId:"chapter_generation",promptId:G,status:"failed",message:`${(0,av.GQ)(y.title)} 生成失败:${d}`,details:[`LLM 最近错误:${b||"无记录"}`,`LLM 调用失败 ${a.planning.generationDiagnostics.llm.failures} 次、重试 ${a.planning.generationDiagnostics.llm.retries} 次`]},{subtitle:H,order:E}),a.understanding.chapterGenerationStagesByOrder[E]=D}if(D){let b=(0,m.Z9)((0,m.Su)(a.planning.generationDiagnostics));b?.kind==="chapter-wall-clock"&&(D={...D,chapterTimedOut:!0,details:[...D.details||[],`章墙上时间耗尽:${b.message}`]},a.understanding.chapterGenerationStagesByOrder[E]=D,console.warn(`[gen] chapter wall-clock exhausted: ${y.title} —— ${b.message}`)),(0,l.Wl)(a,{batch:"generation.write",chapterId:y.id,chapterTitle:H,stage:D})}a.global.emitProgress(a.global.chapterDrafts)}))),S=[],T=!1;for(let a of R){if("fulfilled"===a.status){S.push(a.value);continue}T?console.error("[gen] 同批其余章节亦失败:",a.reason):(T=!0,E=a.reason)}for(let b of(K&&K.removeEventListener("abort",L),S))b&&a.blueprint.reviewTaskPool.push(a.blueprint.reviewSemaphore.run(b));if(T)throw E}await Promise.all(a.blueprint.reviewTaskPool),a.planning.generationDiagnostics.metrics.push({name:"phase:draft",startedAt:a.chapterLoop.draftPhaseStartedAt,endedAt:Date.now(),durationMs:Date.now()-a.chapterLoop.draftPhaseStartedAt}),a.chapterLoop.globalReviewPhaseStartedAt=Date.now(),a.chapterLoop.chapterDraftsFinal=a.understanding.chapterDraftsByOrder.filter(a=>!!a),a.understanding.chapterGenerationStages.push(...a.understanding.chapterGenerationStagesByOrder.filter(a=>!!a))}var dh=c(62521),di=c(21702);async function dj(a){let b=Math.round(([...a.planning.documentBudget.chapterTargets.values()].reduce((a,b)=>a+b,0)||a.planning.documentBudget.targetChars||0)/Math.max(1,a.planning.effectiveChapters.length)),c=(0,b0.z)().chapterConcurrency||0;a.blueprint.chapterConcurrency=a.planning.generationBudget.chapterConcurrency,a.blueprint.reviewConcurrency=a.planning.generationBudget.reviewConcurrency,(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"chapter-concurrency",status:"success",message:`章节流水线调度:${a.planning.effectiveChapters.length} 章全部同批并行生成,审查修复 ${a.blueprint.reviewConcurrency} 路流水线(章节生成完立即进入审查,与后续章节生成重叠)`,details:[`有效章节数:${a.planning.effectiveChapters.length}`,`平均章节目标:${b} 字`,Number.isFinite(c)&&c>0?`章节并发来自 tuningProfile.chapterConcurrency=${Math.floor(c)}`:`全部章节并行生成,在飞调用不设并发上限;每章单轮修复(失败即放弃)`]},{subtitle:"章节流水线策略"})}),a.global.emitProgress(),a.blueprint.reviewSemaphore=new f.jf(a.blueprint.reviewConcurrency),a.blueprint.reviewTaskPool=[];let d=[...a.understanding.availableEvidenceScopePaths].filter(Boolean).sort(),e=Date.now();a.blueprint.basicFactSearchResults=d.length>0?(await (0,f.l$)(s.xs,async b=>a.understanding.searchWithCache(b,d,Math.min(a.understanding.requestedEvidencePerChapter,12),"",a.prepare.materialScope.selectedMaterialRoots),{kind:"search"})).flat():[],a.planning.generationDiagnostics.evidence.searchQueries+=s.xs.length,a.planning.generationDiagnostics.evidence.searchMs+=Date.now()-e;let g=Date.now();try{a.blueprint.integratedBlueprint=(0,x.DL)({projectRoot:a.prepare.projectRoot,boundFilePaths:a.prepare.materialFilePaths,chapterTitles:a.planning.effectiveChapters.map(a=>a.title),templateName:a.prepare.template.name,basicFacts:(0,x.eT)(a.understanding.canonicalFacts),evidence:a.understanding.writerEvidence,truthEvidence:a.understanding.allEvidence,facts:[...a.understanding.earlyFactPool.localFacts,...a.understanding.earlyFactPool.projectBasicFacts,...a.understanding.earlyFactPool.preciseFacts],composition:a.understanding.bidComposition,signal:a.global.input.signal,diagnostics:a.planning.generationDiagnostics});let b=(0,x.Fq)(a.prepare.projectRoot,a.blueprint.integratedBlueprint),c=a.blueprint.integratedBlueprint.outline.chapters.reduce((a,b)=>a+b.subSections.reduce((a,b)=>a+b.workPackages.length,0),0),d=a.understanding.bidComposition,e=d?`${"blind"===d.bidType?`暗标(正文${"forbidden"===d.bodyTablePolicy?"禁表格(显式禁表句)":"表格按证据口径允许"}/禁图片)`:"open"===d.bidType?"明标(正文可含表格)":"未识别勾选标记(按常规口径)"}${d.appendixPlan.length>0?`;文末附表 ${d.appendixPlan.length} 项`:""}`:"未识别(阶段 1 判定缺失,按常规口径)";(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"integrated-blueprint",status:a.blueprint.integratedBlueprint.validation.passed?"success":"failed",message:a.blueprint.integratedBlueprint.validation.passed?`一体化蓝图已构建并落盘:清单 ${a.blueprint.integratedBlueprint.diagnostics.boq?.totalEntries??0} 条目、工作包 ${c} 个(校验通过,参数桶与章切片接管各章写作)`:`一体化蓝图已构建但校验未通过(参数桶不注入,不阻断生成):${a.blueprint.integratedBlueprint.validation.checks.filter(a=>!a.passed).map(a=>a.name).join("、")}`,details:[`耗时 ${Date.now()-g}ms`,`落盘:${b}`,`清单解析:${a.blueprint.integratedBlueprint.diagnostics.boq?`${a.blueprint.integratedBlueprint.diagnostics.boq.totalEntries} 条目 / ${a.blueprint.integratedBlueprint.diagnostics.boq.groupCount} ${a.blueprint.integratedBlueprint.diagnostics.boq.groupLabel||"个分组"} / 完整性校验${a.blueprint.integratedBlueprint.diagnostics.boq.complete?"通过":"未通过"}`:"未解析(见警告)"}`,`标书编制规格:${e}`,`校验链:${a.blueprint.integratedBlueprint.validation.checks.map(a=>`${a.name}${a.passed?"✓":"✗"}`).join(" / ")}`,...a.blueprint.integratedBlueprint.diagnostics.warnings.map(a=>`警告:${a}`)]},{subtitle:"一体化蓝图"})}),a.global.emitProgress()}catch(b){a.blueprint.integratedBlueprint=void 0,(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"integrated-blueprint",status:"failed",message:`一体化蓝图构建异常(参数桶不注入,不阻断生成):${b instanceof Error?b.message:String(b)}`,details:[`耗时 ${Date.now()-g}ms`,"蓝图异常时参数桶与章切片不注入,各章按证据独立成稿"]},{subtitle:"一体化蓝图"})}),a.global.emitProgress()}if(a.blueprint.integratedBlueprint)try{let b=(0,x.wY)({projectRoot:a.prepare.projectRoot,boundFilePaths:a.prepare.materialFilePaths});a.blueprint.billFactLock=(0,Z.Ft)({boq:b.boq}),a.blueprint.billFactLock&&(a.planning.generationDiagnostics.llm.lastInfo=`清单事实锁:锁定 ${a.blueprint.billFactLock.totalEntries} 条目(完整性校验${a.blueprint.billFactLock.complete?"通过":"未通过"}),写作直读与数值核对轮生效`)}catch(c){let b=c instanceof Error?c.message:String(c);console.error(`[blueprint] 清单事实锁构建失败:${b}`),a.blueprint.billFactLock=void 0,(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"bill-fact-lock",status:"failed",message:`清单事实锁构建失败:清单类数值核对未生效(${b})`,details:["后果:清单落位、数值对账、写作直读注入三项均不会执行——本稿的清单相关缺陷**不会被检出**。","建议:核对该项目工程量清单文件(xls/xlsx/PDF)是否可解析、是否已入库,再重新生成。"]},{subtitle:"清单事实锁"})}),a.global.emitProgress()}try{a.blueprint.drawingFactLock=(0,$.e9)({evidence:a.understanding.allEvidence,fileProcessingByPath:a.understanding.fileProcessingByPath,loadCadEntities:b=>{let c=a.understanding.project;return(c.loadMaterialEntities?.(b,"cad-entity")??[]).map(a=>a.payload)}});let b=a.blueprint.drawingFactLock;b&&b.usableDrawings>0&&((0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"drawing-fact-lock",status:"success",message:`图纸事实锁:可用图纸 ${b.usableDrawings} 份,锁定事实行 ${b.totalFacts} 行${b.unusableDrawings>0?`(${b.unusableDrawings} 份无可用事实行)`:""},写作直读与引用率验收生效`,details:[...b.groups.slice(0,10).map(a=>`${a.sourceFile.split("/").pop()||a.sourceFile}:${a.factLines.length} 行 / ${a.tokens.length} 个判定锚点`),...b.unusableDrawings>0?[`无可用事实行 ${b.unusableDrawings} 份(不纳入引用率验收分母)`]:[]]},{subtitle:"图纸事实锁"})}),a.global.emitProgress())}catch(c){let b=c instanceof Error?c.message:String(c);console.error(`[blueprint] 图纸事实锁构建失败:${b}`),a.blueprint.drawingFactLock=void 0,(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"drawing-fact-lock",status:"failed",message:`图纸事实锁构建失败:图纸引用与图纸事实分量未生效(${b})`,details:["后果:图纸事实注入、图纸引用率验收、数据锚定的图纸分量均不会执行——本稿的图纸相关缺陷**不会被检出**。","建议:核对该项目图纸文件(dwg/dxf/pdf)是否可解析、是否已入库,再重新生成。"]},{subtitle:"图纸事实锁"})}),a.global.emitProgress()}{let b=a.planning.tenderRequirements,c=await (0,bC.VX)(b.entries,a.planning.effectiveChapters,a.planning.requirementsSimilarity,{signal:a.global.input.signal,diagnostics:a.planning.generationDiagnostics});if(a.blueprint.requirementAssignments=c.assignments,c.dropped.length>0){let a=new Set(c.dropped);b.entries=b.entries.filter(b=>!a.has(b)),b.excluded.push(...c.dropped.map(a=>({text:a.text,source:a.sources.map(a=>[a.file,a.location].filter(Boolean).join("|")).filter(Boolean).join(";")||void 0,reason:"non_requirement"}))),b.reconciliation.entryCount=b.entries.length,b.reconciliation.excludedCount=b.excluded.length}let d=a.blueprint.requirementAssignments.length;if(d!==b.entries.length)throw Error(`招标要求分配对账失败:要求 ${b.entries.length} 条,分配 ${d} 条`);if(b.entries.length>0){let e=(0,bC.T3)(a.prepare.projectRoot,c.assignments),f=new Map;for(let a of c.assignments)f.set(a.chapterTitle,(f.get(a.chapterTitle)||0)+1);(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"tender-requirement-assignment",status:"success",message:`招标要求分配:${d} 条要求全部落位 ${f.size} 个责任章${c.dropped.length>0?`(LLM 拒选 ${c.dropped.length} 条移出要求池)`:""}${c.lowConfidenceCount>0?`(保留低置信 ${c.lowConfidenceCount} 条,LLM 未裁决)`:""}`,details:[`分配对账:要求 ${b.entries.length} 条 = 分配 ${d} 条(未分配 0)`,`落盘:${e}`,...c.dropped.length>0?[`LLM 拒选 ${c.dropped.length} 条(无章节可承载,已移出要求池)`]:[],...[...f.entries()].map(([a,b])=>`${a}:${b} 条`),...c.assignments.filter(a=>a.lowConfidence).slice(0,8).map(a=>`低置信:${a.entry.text} → ${a.chapterTitle}(相似度 ${a.score.toFixed(2)})`)]},{subtitle:"招标要求分配"})}),a.global.emitProgress()}}{let b=a.planning.tenderRequirements.structureRequirements||[];if(b.length>0){let{assignments:c,unattached:d}=(0,bC._D)(b,a.planning.effectiveChapters,a.planning.requirementsSimilarity);a.blueprint.structureAssignments=c,a.blueprint.structureUnattached=d;let e=(0,bC.Vf)(a.prepare.projectRoot,c,d);(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"tender-structure-assignment",status:"success",message:`结构/呈现要求归属:${c.length} 项挂章${d.length>0?`,${d.length} 项存疑未挂(仅展示)`:""}`,details:[`归属 ${c.length} / 存疑 ${d.length} / 共 ${b.length} 项`,`落盘:${e}`,...c.map(a=>`${a.requirement.element}(以${a.requirement.form}呈现)→ ${a.chapterTitle}(相似度 ${a.score.toFixed(2)})`),...d.map(a=>`存疑未挂:${a.requirement.element}(以${a.requirement.form}呈现,最高相似度 ${a.score.toFixed(2)} < ${bC.E})`)]},{subtitle:"结构/呈现要求归属"})}),a.global.emitProgress()}}let h=a.planning.documentBudget.targetChars;if(a.planning.documentBudget.longformStrict&&0!==(0,b0.z)().capacityFeasibilityRecalibration&&h&&a.blueprint.integratedBlueprint?.validation.passed){let b=a.blueprint.integratedBlueprint,c=Date.now();try{let d=new Map,e=a=>{let c=d.get(a.id);return c||(c=(0,x.iV)((0,x.md)(b,a.title),a.sections||[]),d.set(a.id,c)),c},f=a.prepare.documentSpec,{chapterTargets:g,adjustments:i,compressed:m}=(0,j.K1)({chapters:a.planning.effectiveChapters,targetChars:h,floorOf:a=>Math.max(f?.chapterRules.find(b=>b.id===a.id||b.title===a.title)?.minWords||0,f?.dynamicChapterRule.minWordsPerChapter||0),feasibilityFloorOf:a=>e(a).minFeasibleWords,currentTargets:a.planning.documentBudget.chapterTargets});for(let[b,c]of(a.planning.documentBudget.chapterTargets.clear(),g))a.planning.documentBudget.chapterTargets.set(b,c);(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"chapter-budget-feasibility",status:"success",message:m?"章预算可行性校准:最低密度预算合计超出全文目标,按下限比例压缩(不阻断;容量密度需求与目标字数冲突已显式暴露)":i.length>0?`章预算可行性校准:${i.length} 章按真实要点密度重锚(Σ章预算 = ${h} 字守恒)`:"章预算可行性校准:各章预算均满足密度可行性下限,无需调整",details:[...i.map(b=>{let c=a.planning.effectiveChapters.find(a=>a.id===b.id),d=c?e(c).points:0;return`${b.title}:${b.from} → ${b.to} 字(要点 ${d} 个 \xd7 密度下限 1800 字/块)`}).slice(0,12),`本地校准时耗 ${Date.now()-c}ms`,`开关:tuningProfile.capacityFeasibilityRecalibration=${(0,b0.z)().capacityFeasibilityRecalibration??"缺省开启"}`]},{subtitle:"章预算可行性校准"})}),(i.length>0||m)&&console.warn(`[blueprint] 章预算可行性校准:${i.length} 章调整能量;Σ章预算 = ${h} 字守恒`),a.global.emitProgress()}catch(c){let b=c instanceof Error?c.message:String(c);console.error(`[blueprint] 章预算可行性校准失败:${b}`),(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"chapter-budget-feasibility",status:"failed",message:`章预算可行性校准失败:沿用原章预算(可能偏离真实要点密度)(${b})`},{subtitle:"章预算可行性校准"})}),a.global.emitProgress()}}a.blueprint.blueprintActive=!!a.blueprint.integratedBlueprint?.validation.passed;{let b=a.blueprint.integratedBlueprint?.outline.chapters??[],c=(0,Z.UO)(a.blueprint.billFactLock,a.planning.effectiveChapters),d=a.planning.effectiveChapters.map(d=>{let e=b.find(a=>a.title===d.title)??b.find(a=>d.title.includes(a.title)||a.title.includes(d.title)),g=(e?.subSections??[]).flatMap(a=>(a.requiredParams??[]).map(a=>a.path)),h=[...c.entries()].filter(([a,b])=>b.chapterTitle===d.title&&a).flatMap(([a])=>a.specQuantityPairs.length>0?a.specQuantityPairs.map(a=>a.spec):[a.name]),i=a.understanding.writerEvidence.filter(a=>a.chapterId===d.id||(0,cQ.Lk)(a,d.title)),j=[(0,s.C_)(a.prepare.promptPlan,d).promptTexts,a.prepare.generationControlPrompt,a.prepare.runtimeRulesText].filter(Boolean).join("\n\n"),k=(0,u.rC)({template:a.prepare.template,chapter:d,spec:a.prepare.documentSpec,profile:a.prepare.domainProfile,promptTexts:j,requirement:a.global.input.requirement}),l=(0,u.ji)({needs:k,factsModel:a.understanding.preliminaryFactsModel,evidence:i,profile:a.prepare.domainProfile,excludedEvidenceKeys:a.understanding.excludedEvidenceKeys}),m=(0,u.n9)(l).map(a=>(0,f.lG)(a.value)).filter(a=>ch.sv.test(a)),n=(0,dh.QM)({blueprintParams:g,billSpecs:h,evidenceTokens:(0,cZ.Y8)(i),factValues:m});return(0,dh.SO)({chapterTitle:d.title,targetWords:a.planning.documentBudget.chapterTargets.get(d.id)||0,availableParameters:n.total,supplyChannels:n})});a.planning.chapterSupplyDemand=d;let e=d.filter(a=>!a.sufficient);(0,l.Wl)(a,{batch:"generation.blueprint",stage:(0,k.X5)({type:"validation",roleId:"supply-demand-alignment",status:0===e.length?"success":"failed",message:0===e.length?`供给面 ↔ 要求面对齐核算通过:${d.length} 章可用量化参数均达 ${di.J5}/千字`:`供给面不足:${e.length}/${d.length} 章可用量化参数低于 ${di.J5}/千字(按蓝图 must_cite + 清单责任行规格 + 本章证据精确 token 去重计)`,details:e.slice(0,8).flatMap(a=>[`【${a.chapterTitle}】`,...a.remediation])},{subtitle:"章预算可行性校准"})}),a.global.emitProgress()}}var dk=c(36366);async function dl(a){if(0===a.requirementSummary.length||0===a.chapters.length)return[];let b=a.chapters.map(a=>`【${(0,av.GQ)(a.title)}】
316
315
  ${(a.sections||[]).filter(Boolean).map(a=>`- ${a}`).join("\n")||"(本章暂无预设小节)"}`).join("\n\n"),c=await (0,aV.bb)((0,aA.y4)('你是施工组织设计大纲校准专家。输入各章已有小节与招标评分项要求,只输出需要新增的小节。\n\n新增小节必须显性承接评分项要求(如"创优目标与奖惩承诺""绿色建筑等级达标专项""智慧工地实施""装配式专项施工方案"),只允许新增,不得修改或删除任何已有小节。\n\n只有当前章节结构确实缺少对应承接小节时才新增;已有小节已覆盖该要求时不要重复新增。\n\n新增小节标题必须具体、可直接成稿,控制在 16 个汉字以内;不得新增与评分项要求无关的小节,不得输出条款碎片(如"1委员会确定中")。\n\n只返回 JSON,不要返回 markdown。'),[`文档模板:${a.templateName}`,`招标评分项要求摘要(必须逐条在结构层显性承接):
317
316
  ${a.requirementSummary.map(a=>`- ${a}`).join("\n")}`,`各章当前小节列表:
318
317
  ${b}`,a.diversityDirective?`${a.diversityDirective}
319
- 新增小节标题命名需遵循上述差异化设定(与本章已有小节命名风格一致)。`:"","请输出需要新增的小节;没有需要新增的章节不要出现在 additions 中,整体无新增则输出空数组。",'JSON 格式:{"additions":[{"chapterTitle":"章标题(必须与上方章节名一致)","sections":["新增小节标题"]}]}'].filter(Boolean).join("\n\n"),{maxTokens:2e3,temperature:dn.TD,signal:a.signal}),d=[];for(let b of c?.additions||[]){if(!b?.chapterTitle||!Array.isArray(b.sections))continue;let c=function(a,b){let c=(0,av.nz)(b);if(!c)return -1;let d=a.findIndex(a=>(0,av.GQ)(a.title)===c||(0,av.nz)(a.title)===c);return d>=0?d:a.findIndex(a=>{let b=(0,av.nz)(a.title);return b.length>=4&&(b.includes(c)||c.includes(b))})}(a.chapters,b.chapterTitle);if(c<0)continue;let e=a.chapters[c],f=[];for(let a of b.sections){let b=(0,aT.EN)((0,av.nz)(String(a||"")));!(!b||(0,aT.tQ)(b,e.title)||(0,av.mq)(b)||(0,cQ.dn)(b)||(0,cQ.xb)(b)||(e.sections||[]).some(a=>(0,aT.kw)(a,b)))&&(f.some(a=>(0,aT.kw)(a,b))||f.push(b))}0!==f.length&&(f.length,d.push({chapterTitle:e.title,sections:f}))}for(let b of[{summaryRe:/创优|优质工程|优质结构|文明工地|争创|质量目标/u,coverageRe:/创优|优质工程|优质结构|文明工地/u,sectionTitle:"创优目标与奖惩承诺",hostRe:/质量|创优/u,fallbackHostRe:/安全|文明|环保|绿色/u},{summaryRe:/工伤保险|意外伤害保险|社会保险/u,coverageRe:/工伤保险|劳动保障|意外伤害/u,sectionTitle:"工伤保险与劳动保障",hostRe:/安全|文明|保障|职业健康|劳保/u,fallbackHostRe:/质量/u}]){if(!a.requirementSummary.some(a=>b.summaryRe.test(a))||a.chapters.some(a=>(a.sections||[]).some(a=>b.coverageRe.test(a))))continue;let c=a.chapters.find(a=>b.hostRe.test((0,av.GQ)(a.title)))||a.chapters.find(a=>b.fallbackHostRe.test((0,av.GQ)(a.title)))||a.chapters[0];if(!c)continue;let e=d.find(a=>a.chapterTitle===c.title);e?e.sections.some(a=>(0,aT.kw)(a,b.sectionTitle))||e.sections.push(b.sectionTitle):d.push({chapterTitle:c.title,sections:[b.sectionTitle]})}return d}let dq=[{module:"危险源辨识与风险识别评估",chapterPattern:/安全|危大/u,coreWords:/危险源|风险辨识|风险识别|风险分级|风险管控/u,section:"危险源辨识与风险识别评估"},{module:"危险性较大的分部分项工程安全管理",chapterPattern:/安全|危大/u,coreWords:/危大|危险性较大/u,section:"危险性较大的分部分项工程安全管理"},{module:"生产安全事故应急预案与应急演练",chapterPattern:/安全|危大/u,coreWords:/应急/u,section:"生产安全事故应急预案与应急演练"},{module:"施工现场临时用电三级配电两级保护",chapterPattern:/安全|危大/u,coreWords:/临电|用电|配电|漏电/u,section:"施工现场临时用电三级配电两级保护"},{module:"扬尘污染防治措施",chapterPattern:/文明|环保|绿色|扬尘|环境/u,coreWords:/扬尘/u,section:"扬尘污染防治措施"},{module:"绿色施工与四节一环保措施",chapterPattern:/文明|环保|绿色|扬尘|环境/u,coreWords:/绿色施工|四节|节能|节水|节材|节地|环境保护|环保/u,section:"绿色施工与四节一环保措施"},{module:"建筑工人实名制管理",chapterPattern:/劳动力|劳务|用工|实名|工资|人员/u,coreWords:/实名|考勤|劳务/u,section:"建筑工人实名制管理"},{module:"农民工工资专用账户与工资支付保障",chapterPattern:/劳动力|劳务|用工|实名|工资|人员/u,coreWords:/工资|专户|代发/u,section:"农民工工资专用账户与工资支付保障"}],dr=/组织机构|项目管理机构|项目经理部|项目班子|管理机构|管理部门|管理团队|管理人员配置|人员配置|组织体系/u,ds="项目管理机构与岗位职责",dt=/项目管理机构|组织机构|组织架构|项目经理部/u,du=/组织机构|组织架构|项目班子|项目经理部|管理团队/u;var dv=c(59424);let dw=[{authority:"laborPeak",anchors:["劳动力安排计划","劳动力配置计划","劳动力投入计划","主要劳动力计划","劳动力使用计划"]},{authority:"schedule",anchors:["施工进度计划","施工总进度计划","工程进度计划","进度计划","工期计划","施工部署","总体部署"]},{authority:"blueprint",anchors:["主要资源配置计划","资源配置计划","资源需求计划","机械设备配置计划","材料供应计划","主要施工机械设备表"]}],dx=["工程概况","项目概况","工程总体概况","施工总体部署","施工部署","工程目标","工程质量目标","工程进度目标"],dy=["扬尘治理措施","扬尘污染防治措施","文明施工措施","环境保护措施","绿色施工措施","安全文明施工措施","扬尘控制措施"],dz=/劳动力/u,dA=/资源配置|资源|机械|设备|机具/u,dB=/进度计划|进度|工期/u,dC=/概况|工程|项目|总体|部署|进度|工期|质量/u,dD=/扬尘|文明施工|环境保护|绿色施工|安全文明|环保/u;async function dE(a){let b=(0,aH.VN)(),c=a.map(a=>"string"==typeof a?{key:a,aliases:[]}:a),d=c.map(a=>a.key),e=[...dw.flatMap(a=>a.anchors),...dx,...dy],f=await b.embedDocuments([...e,...d]);if(f.length!==e.length+d.length)throw Error(`本地语义模型锚点嵌入数量不一致:预期 ${e.length+d.length},实际 ${f.length}`);let g=f.slice(0,e.length),h=new Map;c.forEach((a,b)=>{let c=f[e.length+b]??[];for(let b of(h.set(a.key,c),a.aliases||[]))h.set(b,c)});let i=new Set,j=0,k=dw.map(a=>{let b=g.slice(j,j+a.anchors.length);return j+=a.anchors.length,b}),l=g.slice(j,j+dx.length);j+=dx.length;let m=g.slice(j,j+dy.length),n=(a,b)=>{let c=h.get(a);return c?c.length>0&&Math.max(...b.map(a=>(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})(c,a)))>=aH.Eh:(i.has(a)||(i.add(a),console.warn(`[gen] chapterIntentClassifier 未登记查询键(该次语义判定必然落空,请检查构建期 keys/aliases 声明):${a}`)),!1)};return{needsBlueprintAuthority(a){let b=[];return dw.forEach((c,d)=>{n(a,k[d])&&b.push(c.authority)}),!b.includes("laborPeak")&&dz.test(a)&&b.push("laborPeak"),!b.includes("blueprint")&&dA.test(a)&&b.push("blueprint"),!b.includes("schedule")&&dB.test(a)&&b.push("schedule"),b},needsBasicFacts:a=>n(a,l)||dC.test(a),needsDustControl:a=>n(a,m)||dD.test(a)}}var dF=c(15997);let dG=1/3;async function dH(a){let b=a.tables.filter(a=>a.title.trim());if(0===b.length)return{removed:[],skipped:"无规划表"};if(!(a.requirementSummary.length>0||a.boqCoverageSummary?.trim()))return{removed:[],skipped:"无范围判据(招标要求摘要与清单全景均为空)"};let c=(()=>{let a=new Map;for(let c of b){let b=a.get(c.chapterTitle)||[];b.push(c),a.set(c.chapterTitle,b)}return[...a.entries()].map(([a,b])=>`【${a}】
318
+ 新增小节标题命名需遵循上述差异化设定(与本章已有小节命名风格一致)。`:"","请输出需要新增的小节;没有需要新增的章节不要出现在 additions 中,整体无新增则输出空数组。",'JSON 格式:{"additions":[{"chapterTitle":"章标题(必须与上方章节名一致)","sections":["新增小节标题"]}]}'].filter(Boolean).join("\n\n"),{maxTokens:2e3,temperature:dk.TD,signal:a.signal}),d=[];for(let b of c?.additions||[]){if(!b?.chapterTitle||!Array.isArray(b.sections))continue;let c=function(a,b){let c=(0,av.nz)(b);if(!c)return -1;let d=a.findIndex(a=>(0,av.GQ)(a.title)===c||(0,av.nz)(a.title)===c);return d>=0?d:a.findIndex(a=>{let b=(0,av.nz)(a.title);return b.length>=4&&(b.includes(c)||c.includes(b))})}(a.chapters,b.chapterTitle);if(c<0)continue;let e=a.chapters[c],f=[];for(let a of b.sections){let b=(0,aT.EN)((0,av.nz)(String(a||"")));!(!b||(0,aT.tQ)(b,e.title)||(0,av.mq)(b)||(0,cR.dn)(b)||(0,cR.xb)(b)||(e.sections||[]).some(a=>(0,aT.kw)(a,b)))&&(f.some(a=>(0,aT.kw)(a,b))||f.push(b))}0!==f.length&&(f.length,d.push({chapterTitle:e.title,sections:f}))}for(let b of[{summaryRe:/创优|优质工程|优质结构|文明工地|争创|质量目标/u,coverageRe:/创优|优质工程|优质结构|文明工地/u,sectionTitle:"创优目标与奖惩承诺",hostRe:/质量|创优/u,fallbackHostRe:/安全|文明|环保|绿色/u},{summaryRe:/工伤保险|意外伤害保险|社会保险/u,coverageRe:/工伤保险|劳动保障|意外伤害/u,sectionTitle:"工伤保险与劳动保障",hostRe:/安全|文明|保障|职业健康|劳保/u,fallbackHostRe:/质量/u}]){if(!a.requirementSummary.some(a=>b.summaryRe.test(a))||a.chapters.some(a=>(a.sections||[]).some(a=>b.coverageRe.test(a))))continue;let c=a.chapters.find(a=>b.hostRe.test((0,av.GQ)(a.title)))||a.chapters.find(a=>b.fallbackHostRe.test((0,av.GQ)(a.title)))||a.chapters[0];if(!c)continue;let e=d.find(a=>a.chapterTitle===c.title);e?e.sections.some(a=>(0,aT.kw)(a,b.sectionTitle))||e.sections.push(b.sectionTitle):d.push({chapterTitle:c.title,sections:[b.sectionTitle]})}return d}let dm=[{module:"危险源辨识与风险识别评估",chapterPattern:/安全|危大/u,coreWords:/危险源|风险辨识|风险识别|风险分级|风险管控/u,section:"危险源辨识与风险识别评估"},{module:"危险性较大的分部分项工程安全管理",chapterPattern:/安全|危大/u,coreWords:/危大|危险性较大/u,section:"危险性较大的分部分项工程安全管理"},{module:"生产安全事故应急预案与应急演练",chapterPattern:/安全|危大/u,coreWords:/应急/u,section:"生产安全事故应急预案与应急演练"},{module:"施工现场临时用电三级配电两级保护",chapterPattern:/安全|危大/u,coreWords:/临电|用电|配电|漏电/u,section:"施工现场临时用电三级配电两级保护"},{module:"扬尘污染防治措施",chapterPattern:/文明|环保|绿色|扬尘|环境/u,coreWords:/扬尘/u,section:"扬尘污染防治措施"},{module:"绿色施工与四节一环保措施",chapterPattern:/文明|环保|绿色|扬尘|环境/u,coreWords:/绿色施工|四节|节能|节水|节材|节地|环境保护|环保/u,section:"绿色施工与四节一环保措施"},{module:"建筑工人实名制管理",chapterPattern:/劳动力|劳务|用工|实名|工资|人员/u,coreWords:/实名|考勤|劳务/u,section:"建筑工人实名制管理"},{module:"农民工工资专用账户与工资支付保障",chapterPattern:/劳动力|劳务|用工|实名|工资|人员/u,coreWords:/工资|专户|代发/u,section:"农民工工资专用账户与工资支付保障"}],dn=/组织机构|项目管理机构|项目经理部|项目班子|管理机构|管理部门|管理团队|管理人员配置|人员配置|组织体系/u,dp="项目管理机构与岗位职责",dq=/项目管理机构|组织机构|组织架构|项目经理部/u,dr=/组织机构|组织架构|项目班子|项目经理部|管理团队/u;var ds=c(59424);let dt=[{authority:"laborPeak",anchors:["劳动力安排计划","劳动力配置计划","劳动力投入计划","主要劳动力计划","劳动力使用计划"]},{authority:"schedule",anchors:["施工进度计划","施工总进度计划","工程进度计划","进度计划","工期计划","施工部署","总体部署"]},{authority:"blueprint",anchors:["主要资源配置计划","资源配置计划","资源需求计划","机械设备配置计划","材料供应计划","主要施工机械设备表"]}],du=["工程概况","项目概况","工程总体概况","施工总体部署","施工部署","工程目标","工程质量目标","工程进度目标"],dv=["扬尘治理措施","扬尘污染防治措施","文明施工措施","环境保护措施","绿色施工措施","安全文明施工措施","扬尘控制措施"],dw=/劳动力/u,dx=/资源配置|资源|机械|设备|机具/u,dy=/进度计划|进度|工期/u,dz=/概况|工程|项目|总体|部署|进度|工期|质量/u,dA=/扬尘|文明施工|环境保护|绿色施工|安全文明|环保/u;async function dB(a){let b=(0,aH.VN)(),c=a.map(a=>"string"==typeof a?{key:a,aliases:[]}:a),d=c.map(a=>a.key),e=[...dt.flatMap(a=>a.anchors),...du,...dv],f=await b.embedDocuments([...e,...d]);if(f.length!==e.length+d.length)throw Error(`本地语义模型锚点嵌入数量不一致:预期 ${e.length+d.length},实际 ${f.length}`);let g=f.slice(0,e.length),h=new Map;c.forEach((a,b)=>{let c=f[e.length+b]??[];for(let b of(h.set(a.key,c),a.aliases||[]))h.set(b,c)});let i=new Set,j=0,k=dt.map(a=>{let b=g.slice(j,j+a.anchors.length);return j+=a.anchors.length,b}),l=g.slice(j,j+du.length);j+=du.length;let m=g.slice(j,j+dv.length),n=(a,b)=>{let c=h.get(a);return c?c.length>0&&Math.max(...b.map(a=>(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})(c,a)))>=aH.Eh:(i.has(a)||(i.add(a),console.warn(`[gen] chapterIntentClassifier 未登记查询键(该次语义判定必然落空,请检查构建期 keys/aliases 声明):${a}`)),!1)};return{needsBlueprintAuthority(a){let b=[];return dt.forEach((c,d)=>{n(a,k[d])&&b.push(c.authority)}),!b.includes("laborPeak")&&dw.test(a)&&b.push("laborPeak"),!b.includes("blueprint")&&dx.test(a)&&b.push("blueprint"),!b.includes("schedule")&&dy.test(a)&&b.push("schedule"),b},needsBasicFacts:a=>n(a,l)||dz.test(a),needsDustControl:a=>n(a,m)||dA.test(a)}}var dC=c(15997);let dD=1/3;async function dE(a){let b=a.tables.filter(a=>a.title.trim());if(0===b.length)return{removed:[],skipped:"无规划表"};if(!(a.requirementSummary.length>0||a.boqCoverageSummary?.trim()))return{removed:[],skipped:"无范围判据(招标要求摘要与清单全景均为空)"};let c=(()=>{let a=new Map;for(let c of b){let b=a.get(c.chapterTitle)||[];b.push(c),a.set(c.chapterTitle,b)}return[...a.entries()].map(([a,b])=>`【${a}】
320
319
  ${b.map(a=>`- ${a.title}${a.fields.length?`(字段:${a.fields.join("、")})`:""}`).join("\n")}`).join("\n\n")})(),d=await (0,aV.bb)((0,aA.y4)("你是施工组织设计表格规划范围审查专家。输入本标段招标范围判据与各章规划表格清单,逐表判断该表是否超出本标段工程范围。\n\n判定规则:\n\n1. 仅“表名实体未在判据中逐字出现”不得作为剔除依据——先做语义关联检索:表名实体与判据中的具体材料、工艺或部位是否构成上位/下位、同义或配套关系(如「外装饰材料」与判据中「真石漆/涂饰/面砖/彩绘」类具体饰面材料、附属用房的装饰与修缮类工程),存在任一关联即视为在范围内;\n\n2. 剔除需同时满足:①表名实体在招标要求与工程量清单中均无任何对应(含语义关联对应);②按表名判断该实体明显属于与本标段工程类型不同的其他专业工程领域(如乡村基础设施标段出现高层建筑主体结构、大型工业设备安装类实体;配套附属用房的室内外装饰、局部修缮类工程不得视为不同领域);③剔除不影响本标段工程内容的完整性;\n\n3. 标书惯例类表格(项目信息、管理措施、机构职责、制度流程、进度节点、检查记录、材料/设备报审与检验记录、汇总统计等不指向特定工程实体的表)一律保留,不得剔除;\n\n4. 判断不确定时保留(本审查宁保留不误剔)。\n\n只返回 JSON,不要返回 markdown。"),[a.templateName?`文档模板:${a.templateName}`:"",a.requirementSummary.length?`本标段招标范围判据(招标要求摘要):
321
320
  ${a.requirementSummary.map(a=>`- ${a}`).join("\n")}`:"",a.boqCoverageSummary?.trim()?`本标段工程量清单分部分项全景:
322
321
  ${a.boqCoverageSummary.trim()}`:"",`各章规划表格清单:
323
- ${c}`,"请将“专业领域明显不符本标段工程类型”的表格列入 outOfScope(title 必须与上方表名逐字一致);剔除前先逐一做语义关联检索(上下位/同义/配套的材料与工艺),能关联到判据中任一条目的表不得剔除;全部属于本标段范围时输出空数组。",'JSON 格式:{"outOfScope":[{"chapterTitle":"所属章标题","title":"表名","reason":"不超过30字理由"}]}'].filter(Boolean).join("\n\n"),{maxTokens:1e3,temperature:0,signal:a.signal});if(!d)return{removed:[],skipped:"LLM 调用失败(保留原规划)"};let e=[];for(let a of d.outOfScope||[]){let c=(0,av.nz)(String(a?.title||""));if(!c)continue;let d=b.find(a=>(0,av.nz)(a.title)===c)||b.find(a=>(0,aT.kw)(a.title,c));d&&(e.some(a=>a.chapterTitle===d.chapterTitle&&a.title===d.title)||e.push({chapterTitle:d.chapterTitle,title:d.title,reason:String(a?.reason||"").replace(/\s+/gu," ").trim().slice(0,40)||"判为超范围"}))}let f=Math.max(1,Math.floor(b.length*dG));return e.length>f?{removed:[],skipped:`超范围剔除 ${e.length}/${b.length} 项超过 1/3 上限(疑似误判),整体放弃以保安全`}:{removed:e}}var dI=c(25284);async function dJ(a){var b;a.planning.effectiveChapters=a.planning.baseEffectiveChapters,a.planning.constructionOrgContext=(0,dI.TD)(a.understanding.scopedIntelligence?.constructionOrganizationGraph)||a.understanding.scopedIntelligence?.constructionOrganizationContext,a.planning.chapterGraphSummaryText=b=>{let c=a.understanding.chapterGraphMap.get(b);return c&&(c.graphWorks.length||c.graphMethods.length||c.graphBoqItems.length)?[c.graphWorks.length?`专业工程:${c.graphWorks.slice(0,8).join("、")}`:"",c.graphMethods.length?`主要工法/工艺:${c.graphMethods.slice(0,8).join("、")}`:"",c.graphBoqItems.length?`关键资源:${c.graphBoqItems.slice(0,8).map(a=>a.name).join("、")}`:""].filter(Boolean).join(";"):""},a.planning.baseProjectContext=[a.prepare.projectUnderstanding.prompt,a.planning.constructionOrgContext].filter(Boolean).join("\n\n"),a.planning.projectContext=a.planning.baseProjectContext;let c={...a.prepare.template,chapters:a.planning.effectiveChapters};a.planning.promptStructuralRules=(0,aT.My)([a.prepare.promptTexts,a.global.input.requirement||""].filter(Boolean).join("\n\n"),a.planning.effectiveChapters),a.planning.provisionalBudget=(0,j.tF)({requirement:a.global.input.requirement,promptTexts:a.prepare.promptTexts,template:c,chapters:a.planning.effectiveChapters,spec:a.prepare.documentSpec});let d={requirement:a.global.input.requirement,promptTexts:a.prepare.promptTexts},e=[],i=(a,b)=>{let c=(0,j.KC)(b||"");return c!==(b||"")&&e.push(a),c};if(a.global.input.requirement){let b=i("requirement",a.global.input.requirement);a.global.input.requirement=b||void 0}a.prepare.runtimeRulesText=i("runtimeRulesText",a.prepare.runtimeRulesText),a.prepare.promptTexts=i("promptTexts",a.prepare.promptTexts),a.prepare.factExtractionPromptTexts=i("factExtractionPromptTexts",a.prepare.factExtractionPromptTexts),a.prepare.reviewPromptTexts=i("reviewPromptTexts",a.prepare.reviewPromptTexts),a.prepare.repairPromptTexts=i("repairPromptTexts",a.prepare.repairPromptTexts),a.planning.baseProjectContext=i("baseProjectContext",a.planning.baseProjectContext),a.planning.projectContext=a.planning.baseProjectContext;let m=new Set,n=new Set;for(let b of[...a.prepare.promptPlan.prompts,...a.prepare.promptPlan.writerPrompts,...a.prepare.promptPlan.chapterPrompts,...a.prepare.promptPlan.formattingPrompts,...a.prepare.promptPlan.extractionPrompts,...a.prepare.promptPlan.referencePrompts]){if(n.has(b))continue;n.add(b);let a=(0,j.KC)(b.content||"");a!==(b.content||"")&&(b.content=a,m.add(b.id))}(e.length>0||m.size>0)&&((0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"length-instruction-dissolve",status:"success",message:`篇幅指令分层编译:全文级字数指令已消解(提示词链 ${e.length} 处、用户提示词 ${m.size} 个),篇幅目标由章预算/块目标统一下达`,details:[...e.map(a=>`消解字段:${a}`),...m.size>0?[`消解用户提示词:${[...m].join("、")}`]:[],a.planning.provisionalBudget.targetChars?`识别口径:全文目标 ${a.planning.provisionalBudget.targetChars} 字(已编译为 ${a.planning.effectiveChapters.length} 章预算,Σ=目标守恒)`:"未识别到显式全文目标,按模板/spec 默认预算下达","写作链不再携带原始全文篇幅语句(双通道指令 → 单通道编译下发)"]},{subtitle:"篇幅预算"})}),a.global.emitProgress());let o=0,q=0,r=0,t=0,u=new Map,v=[];a.planning.diversityProfile=(0,dn.y$)(a.global.input.diversitySeed||a.prepare.template.id,(0,dn.u)(a.prepare.template.id)),(0,dn.a1)(a.prepare.template.id,a.planning.diversityProfile.id),a.planning.fingerprintPool=(0,dg.$R)();let w=[...new Set(a.planning.fingerprintPool.entries.flatMap(a=>[...a.h3||[],...a.h4||[]]))].filter(Boolean).slice(0,60),x=b=>(0,dg.F$)(b,a.planning.fingerprintPool,{excludeDocumentId:a.global.input.diversitySeed}).map(a=>({title:a.title,collidedWith:a.collidedWith})),y=0,z=0;a.planning.plannedChapters=await (0,f.l$)(a.planning.effectiveChapters.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b,chapterIndex:d})=>{let e=a.planning.promptStructuralRules.filter(a=>a.chapterIndex===d||a.chapterTitle&&(0,av.GQ)(a.chapterTitle)===(0,av.GQ)(b.title)).flatMap(a=>a.requiredSections.slice().sort((a,b)=>(a.order||0)-(b.order||0)).map(a=>a.title)),f=(0,aT.k2)([...e,...b.sections||[]],b.title);for(let a of[...e,...b.sections||[]]){let c=(0,aT.EN)(String(a).trim());c&&c!==String(a).trim()&&v.push(`${(0,av.GQ)(b.title)}:${a} → ${c}`)}o+=f.length,r+=1;let g=(0,h.QR)(a.understanding.writerEvidence.filter(a=>a.chapterId===b.id||(0,cP.Lk)(a,b.title)),{preservePinned:!0}),i=a.prepare.projectUnderstanding.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",j=(0,s.C_)(a.prepare.promptPlan,b),m=/施工方法|施工方案|施工工艺|主要施工内容|分部分项/u.test(b.title)?(0,_.Hp)((0,_.v7)(a.understanding.preliminaryFactsModel)):"",n=await (0,aT.SP)({template:c,chapter:b,chapterIndex:d,evidence:g,promptTexts:j.promptTexts,projectContext:a.planning.projectContext,requirement:a.global.input.requirement,roleContext:i,targetWords:a.planning.provisionalBudget.chapterTargets.get(b.id)||1200,projectGraphSummary:a.planning.chapterGraphSummaryText(b.id),boqCoverageSummary:m||void 0,lockedSections:f,bodyTablePolicy:a.understanding.bidComposition.bodyTablePolicy,signal:a.global.input.signal,diversity:{directive:a.planning.diversityProfile.prompt,avoidSections:w,overlapCheck:x}});n.diversity?.retried&&(y+=1,z+=n.diversity.remainingCollisions),u.set(b.id,n.tables),t+=n.tables.length,q+=n.sections.length;let p=n.sections.filter(a=>!f.some(b=>(0,aT.kw)(b,a)));if((0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"section-planning",promptId:j.primaryPromptId,status:n.sections.length?"success":"failed",message:`${(0,av.GQ)(b.title)} 小节规划:锁定 ${f.length} 个、LLM 规划增量 ${p.length} 个${n.tables.length?`、表格需求 ${n.tables.length} 项`:""}`,details:[...j.promptDetails,...f.map(a=>`锁定小节:${a}`),...p.map(a=>`规划小节:${a}`),...n.tables.map(a=>`表格需求:${a.title}${a.fields.length?`(${a.fields.join("、")})`:""}`)]},{subtitle:"小节规划"})}),!n.sections.length)throw Error(`${(0,av.GQ)(b.title)} 小节规划未生成可用小节`);return{...b,sections:n.sections}},{kind:"llmRepair",targetWords:a.planning.provisionalBudget.targetChars||4e3}),a.planning.tenderRequirements=await a.understanding.tenderRequirementsTask;let B=a.planning.plannedChapters;if((0,bC.l)(a.planning.tenderRequirements)){let b=await a.global.withProgressHeartbeat(()=>dp({chapters:B,requirementSummary:(0,bC.zD)(a.planning.tenderRequirements),templateName:a.prepare.template.name,diversityDirective:a.planning.diversityProfile.prompt,signal:a.global.input.signal}));if(b.length>0){let c=function(a,b){if(!b.length)return{chapters:a,applied:[]};let c=[],d=a.map(a=>({...a,sections:[...a.sections||[]]}));for(let a of b){let b=d.findIndex(b=>(0,av.GQ)(b.title)===(0,av.GQ)(a.chapterTitle)||(0,av.nz)(b.title)===(0,av.nz)(a.chapterTitle));if(b<0)continue;let e=d[b],f=a.sections.filter(a=>!(e.sections||[]).some(b=>(0,aT.kw)(b,a)));0!==f.length&&(e.sections.push(...f),c.push({chapterTitle:a.chapterTitle,sections:f}))}return a.every((a,b)=>{let c=d[b];return!!c&&(a.sections||[]).every(a=>(c.sections||[]).some(b=>(0,aT.kw)(b,a)))})?{chapters:d,applied:c}:{chapters:a,applied:[]}}(B,b);c.applied.length>0?(B=c.chapters,(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"success",message:`大纲要求校准:新增 ${c.applied.reduce((a,b)=>a+b.sections.length,0)} 个评分项承接小节(结构守恒校验通过)`,details:c.applied.map(a=>`${(0,av.GQ)(a.chapterTitle)}:${a.sections.join("、")}`)},{subtitle:"大纲要求校准"})})):(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"success",message:"大纲要求校准未通过结构守恒校验,回退原规划(原规划完好,本次仅未采纳校准增量)",details:["校准新增小节未通过章名匹配/标题清洗校验,全部丢弃"]},{subtitle:"大纲要求校准"})}),a.global.emitProgress()}else(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"success",message:"大纲要求校准未产出有效增量(章节结构已覆盖评分项要求或校准调用失败),回退原规划",details:[]},{subtitle:"大纲要求校准"})}),a.global.emitProgress()}let C=await (0,cQ.mI)(B),D=B.reduce((a,b,c)=>a+Math.max(0,(b.sections||[]).length-(C[c]?.sections||[]).length),0),E=function(a,b){let c=a.map(a=>({...a,sections:[...a.sections||[]]})),d=[],e=(void 0)??(0,cR.un)({template:{id:"runtime",name:"",outputTitle:"",description:"",category:"",chapters:a},chapters:a.map(a=>({...a,title:`${a.title} ${(a.sections||[]).join(" ")}`.trim()}))});for(let a of(0,cR.V5)(dq,e)){let b=c.find(b=>a.chapterPattern.test((0,av.GQ)(b.title)));if(!b)continue;let e=b.sections||(b.sections=[]);if(e.some(b=>(0,aT.kw)(b,a.section)))continue;let f=e.findIndex(b=>a.coreWords.test(b)),g=d.find(a=>a.chapterTitle===b.title)||(d.push({chapterTitle:b.title,added:[],renamed:[]}),d[d.length-1]);f>=0?(g.renamed.push({from:e[f],to:a.section}),e[f]=a.section):(e.push(a.section),g.added.push(a.section))}return{chapters:c,changes:d.filter(a=>a.added.length>0||a.renamed.length>0)}}(C),F=E.chapters;if(E.changes.length>0){let b=E.changes.reduce((a,b)=>a+b.added.length,0),c=E.changes.reduce((a,b)=>a+b.renamed.length,0);(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"review-module-sections",status:"success",message:`评审模块承接:补入 ${b} 个评审模块小节、规范化 ${c} 个承接标题`,details:E.changes.map(a=>`${(0,av.GQ)(a.chapterTitle)}:${[...a.added.map(a=>`补入「${a}」`),...a.renamed.map(a=>`「${a.from}」→「${a.to}」`)].join(";")}`)},{subtitle:"评审模块承接"})}),a.global.emitProgress()}let G=F;{let b=a.planning.tenderRequirements?.structureRequirements||[];if(b.length>0){let c=await (0,aH.Mv)(b.map(bC.JX),F.map(a=>(0,bC.NT)(a.title))),d=(0,bC._D)(b,F,c),e=function(a,b){let c=b.filter(a=>!a.lowConfidence&&("org_chart"===a.requirement.form||dr.test(a.requirement.element)));if(0===c.length)return{chapters:a,changes:[]};let d=a.map(a=>({...a,sections:[...a.sections||[]]})),e=[],f=new Set;for(let a of c){let b=d.find(b=>(0,bC.NT)(b.title)===a.chapterTitle);if(!b||f.has(b.id))continue;f.add(b.id);let c=b.sections||(b.sections=[]);if(c.some(a=>dt.test(a)))continue;let g=e.find(a=>a.chapterTitle===b.title)||(e.push({chapterTitle:b.title,added:[],renamed:[]}),e[e.length-1]),h=c.findIndex(a=>du.test(a));h>=0?(g.renamed.push({from:c[h],to:ds}),c[h]=ds):(c.push(ds),g.added.push(ds))}return{chapters:d,changes:e.filter(a=>a.added.length>0||a.renamed.length>0)}}(F,d.assignments);if(G=e.chapters,e.changes.length>0){let b=e.changes.reduce((a,b)=>a+b.added.length,0),c=e.changes.reduce((a,b)=>a+b.renamed.length,0);(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"structure-org-sections",status:"success",message:`组织机构承接:${b>0?`补入 ${b} 个「项目管理机构与岗位职责」小节`:""}${b>0&&c>0?"、":""}${c>0?`规范化 ${c} 个承接标题`:""}`,details:e.changes.map(a=>`${(0,av.GQ)(a.chapterTitle)}:${[...a.added.map(a=>`补入「${a}」`),...a.renamed.map(a=>`「${a.from}」→「${a.to}」`)].join(";")}`)},{subtitle:"组织机构承接"})}),a.global.emitProgress()}}}let H=await (0,aH.Mv)(a.understanding.evaluationItems.map(a=>a.title),G.map(cW));a.planning.finalBidStructureAudit=cX({template:a.prepare.template,chapters:G,requirement:a.global.input.requirement,evaluationItems:a.understanding.evaluationItems,semanticSimilarity:H});let I=u;if(!(0,p._C)(a.understanding.bidComposition)&&u.size>0){let b=b=>(0,av.GQ)(a.planning.finalBidStructureAudit.enrichedChapters.find(a=>a.id===b)?.title||b),c=[...u.entries()].flatMap(([a,c])=>c.map(c=>({chapterTitle:b(a),title:c.title,fields:c.fields})));if(c.length>0){let d=await dH({tables:c,requirementSummary:(0,bC.zD)(a.planning.tenderRequirements),boqCoverageSummary:(0,_.Hp)((0,_.v7)(a.understanding.preliminaryFactsModel)),templateName:a.prepare.template.name,signal:a.global.input.signal});if(d.removed.length>0){let c=new Set(d.removed.map(a=>`${a.chapterTitle}
322
+ ${c}`,"请将“专业领域明显不符本标段工程类型”的表格列入 outOfScope(title 必须与上方表名逐字一致);剔除前先逐一做语义关联检索(上下位/同义/配套的材料与工艺),能关联到判据中任一条目的表不得剔除;全部属于本标段范围时输出空数组。",'JSON 格式:{"outOfScope":[{"chapterTitle":"所属章标题","title":"表名","reason":"不超过30字理由"}]}'].filter(Boolean).join("\n\n"),{maxTokens:1e3,temperature:0,signal:a.signal});if(!d)return{removed:[],skipped:"LLM 调用失败(保留原规划)"};let e=[];for(let a of d.outOfScope||[]){let c=(0,av.nz)(String(a?.title||""));if(!c)continue;let d=b.find(a=>(0,av.nz)(a.title)===c)||b.find(a=>(0,aT.kw)(a.title,c));d&&(e.some(a=>a.chapterTitle===d.chapterTitle&&a.title===d.title)||e.push({chapterTitle:d.chapterTitle,title:d.title,reason:String(a?.reason||"").replace(/\s+/gu," ").trim().slice(0,40)||"判为超范围"}))}let f=Math.max(1,Math.floor(b.length*dD));return e.length>f?{removed:[],skipped:`超范围剔除 ${e.length}/${b.length} 项超过 1/3 上限(疑似误判),整体放弃以保安全`}:{removed:e}}var dF=c(25284);async function dG(a){var b;a.planning.effectiveChapters=a.planning.baseEffectiveChapters,a.planning.constructionOrgContext=(0,dF.TD)(a.understanding.scopedIntelligence?.constructionOrganizationGraph)||a.understanding.scopedIntelligence?.constructionOrganizationContext,a.planning.chapterGraphSummaryText=b=>{let c=a.understanding.chapterGraphMap.get(b);return c&&(c.graphWorks.length||c.graphMethods.length||c.graphBoqItems.length)?[c.graphWorks.length?`专业工程:${c.graphWorks.slice(0,8).join("、")}`:"",c.graphMethods.length?`主要工法/工艺:${c.graphMethods.slice(0,8).join("、")}`:"",c.graphBoqItems.length?`关键资源:${c.graphBoqItems.slice(0,8).map(a=>a.name).join("、")}`:""].filter(Boolean).join(";"):""},a.planning.baseProjectContext=[a.prepare.projectUnderstanding.prompt,a.planning.constructionOrgContext].filter(Boolean).join("\n\n"),a.planning.projectContext=a.planning.baseProjectContext;let c={...a.prepare.template,chapters:a.planning.effectiveChapters};a.planning.promptStructuralRules=(0,aT.My)([a.prepare.promptTexts,a.global.input.requirement||""].filter(Boolean).join("\n\n"),a.planning.effectiveChapters),a.planning.provisionalBudget=(0,j.tF)({requirement:a.global.input.requirement,promptTexts:a.prepare.promptTexts,template:c,chapters:a.planning.effectiveChapters,spec:a.prepare.documentSpec});let d={requirement:a.global.input.requirement,promptTexts:a.prepare.promptTexts},e=[],i=(a,b)=>{let c=(0,j.KC)(b||"");return c!==(b||"")&&e.push(a),c};if(a.global.input.requirement){let b=i("requirement",a.global.input.requirement);a.global.input.requirement=b||void 0}a.prepare.runtimeRulesText=i("runtimeRulesText",a.prepare.runtimeRulesText),a.prepare.promptTexts=i("promptTexts",a.prepare.promptTexts),a.prepare.factExtractionPromptTexts=i("factExtractionPromptTexts",a.prepare.factExtractionPromptTexts),a.prepare.reviewPromptTexts=i("reviewPromptTexts",a.prepare.reviewPromptTexts),a.prepare.repairPromptTexts=i("repairPromptTexts",a.prepare.repairPromptTexts),a.planning.baseProjectContext=i("baseProjectContext",a.planning.baseProjectContext),a.planning.projectContext=a.planning.baseProjectContext;let m=new Set,n=new Set;for(let b of[...a.prepare.promptPlan.prompts,...a.prepare.promptPlan.writerPrompts,...a.prepare.promptPlan.chapterPrompts,...a.prepare.promptPlan.formattingPrompts,...a.prepare.promptPlan.extractionPrompts,...a.prepare.promptPlan.referencePrompts]){if(n.has(b))continue;n.add(b);let a=(0,j.KC)(b.content||"");a!==(b.content||"")&&(b.content=a,m.add(b.id))}(e.length>0||m.size>0)&&((0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"length-instruction-dissolve",status:"success",message:`篇幅指令分层编译:全文级字数指令已消解(提示词链 ${e.length} 处、用户提示词 ${m.size} 个),篇幅目标由章预算/块目标统一下达`,details:[...e.map(a=>`消解字段:${a}`),...m.size>0?[`消解用户提示词:${[...m].join("、")}`]:[],a.planning.provisionalBudget.targetChars?`识别口径:全文目标 ${a.planning.provisionalBudget.targetChars} 字(已编译为 ${a.planning.effectiveChapters.length} 章预算,Σ=目标守恒)`:"未识别到显式全文目标,按模板/spec 默认预算下达","写作链不再携带原始全文篇幅语句(双通道指令 → 单通道编译下发)"]},{subtitle:"篇幅预算"})}),a.global.emitProgress());let o=0,q=0,r=0,t=0,u=new Map,v=[];a.planning.diversityProfile=(0,dk.y$)(a.global.input.diversitySeed||a.prepare.template.id,(0,dk.u)(a.prepare.template.id)),(0,dk.a1)(a.prepare.template.id,a.planning.diversityProfile.id),a.planning.fingerprintPool=(0,dd.$R)();let w=[...new Set(a.planning.fingerprintPool.entries.flatMap(a=>[...a.h3||[],...a.h4||[]]))].filter(Boolean).slice(0,60),x=b=>(0,dd.F$)(b,a.planning.fingerprintPool,{excludeDocumentId:a.global.input.diversitySeed}).map(a=>({title:a.title,collidedWith:a.collidedWith})),y=0,z=0;a.planning.plannedChapters=await (0,f.l$)(a.planning.effectiveChapters.map((a,b)=>({chapter:a,chapterIndex:b})),async({chapter:b,chapterIndex:d})=>{let e=a.planning.promptStructuralRules.filter(a=>a.chapterIndex===d||a.chapterTitle&&(0,av.GQ)(a.chapterTitle)===(0,av.GQ)(b.title)).flatMap(a=>a.requiredSections.slice().sort((a,b)=>(a.order||0)-(b.order||0)).map(a=>a.title)),f=(0,aT.k2)([...e,...b.sections||[]],b.title);for(let a of[...e,...b.sections||[]]){let c=(0,aT.EN)(String(a).trim());c&&c!==String(a).trim()&&v.push(`${(0,av.GQ)(b.title)}:${a} → ${c}`)}o+=f.length,r+=1;let g=(0,h.QR)(a.understanding.writerEvidence.filter(a=>a.chapterId===b.id||(0,cQ.Lk)(a,b.title)),{preservePinned:!0}),i=a.prepare.projectUnderstanding.chapterPlans.find(a=>a.chapterId===b.id)?.writingGoal||"",j=(0,s.C_)(a.prepare.promptPlan,b),m=/施工方法|施工方案|施工工艺|主要施工内容|分部分项/u.test(b.title)?(0,_.Hp)((0,_.v7)(a.understanding.preliminaryFactsModel)):"",n=await (0,aT.SP)({template:c,chapter:b,chapterIndex:d,evidence:g,promptTexts:j.promptTexts,projectContext:a.planning.projectContext,requirement:a.global.input.requirement,roleContext:i,targetWords:a.planning.provisionalBudget.chapterTargets.get(b.id)||1200,projectGraphSummary:a.planning.chapterGraphSummaryText(b.id),boqCoverageSummary:m||void 0,lockedSections:f,bodyTablePolicy:a.understanding.bidComposition.bodyTablePolicy,signal:a.global.input.signal,diversity:{directive:a.planning.diversityProfile.prompt,avoidSections:w,overlapCheck:x}});n.diversity?.retried&&(y+=1,z+=n.diversity.remainingCollisions),u.set(b.id,n.tables),t+=n.tables.length,q+=n.sections.length;let p=n.sections.filter(a=>!f.some(b=>(0,aT.kw)(b,a)));if((0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"section-planning",promptId:j.primaryPromptId,status:n.sections.length?"success":"failed",message:`${(0,av.GQ)(b.title)} 小节规划:锁定 ${f.length} 个、LLM 规划增量 ${p.length} 个${n.tables.length?`、表格需求 ${n.tables.length} 项`:""}`,details:[...j.promptDetails,...f.map(a=>`锁定小节:${a}`),...p.map(a=>`规划小节:${a}`),...n.tables.map(a=>`表格需求:${a.title}${a.fields.length?`(${a.fields.join("、")})`:""}`)]},{subtitle:"小节规划"})}),!n.sections.length)throw Error(`${(0,av.GQ)(b.title)} 小节规划未生成可用小节`);return{...b,sections:n.sections}},{kind:"llmRepair",targetWords:a.planning.provisionalBudget.targetChars||4e3}),a.planning.tenderRequirements=await a.understanding.tenderRequirementsTask;let B=a.planning.plannedChapters;if((0,bC.l)(a.planning.tenderRequirements)){let b=await a.global.withProgressHeartbeat(()=>dl({chapters:B,requirementSummary:(0,bC.zD)(a.planning.tenderRequirements),templateName:a.prepare.template.name,diversityDirective:a.planning.diversityProfile.prompt,signal:a.global.input.signal}));if(b.length>0){let c=function(a,b){if(!b.length)return{chapters:a,applied:[]};let c=[],d=a.map(a=>({...a,sections:[...a.sections||[]]}));for(let a of b){let b=d.findIndex(b=>(0,av.GQ)(b.title)===(0,av.GQ)(a.chapterTitle)||(0,av.nz)(b.title)===(0,av.nz)(a.chapterTitle));if(b<0)continue;let e=d[b],f=a.sections.filter(a=>!(e.sections||[]).some(b=>(0,aT.kw)(b,a)));0!==f.length&&(e.sections.push(...f),c.push({chapterTitle:a.chapterTitle,sections:f}))}return a.every((a,b)=>{let c=d[b];return!!c&&(a.sections||[]).every(a=>(c.sections||[]).some(b=>(0,aT.kw)(b,a)))})?{chapters:d,applied:c}:{chapters:a,applied:[]}}(B,b);c.applied.length>0?(B=c.chapters,(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"success",message:`大纲要求校准:新增 ${c.applied.reduce((a,b)=>a+b.sections.length,0)} 个评分项承接小节(结构守恒校验通过)`,details:c.applied.map(a=>`${(0,av.GQ)(a.chapterTitle)}:${a.sections.join("、")}`)},{subtitle:"大纲要求校准"})})):(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"success",message:"大纲要求校准未通过结构守恒校验,回退原规划(原规划完好,本次仅未采纳校准增量)",details:["校准新增小节未通过章名匹配/标题清洗校验,全部丢弃"]},{subtitle:"大纲要求校准"})}),a.global.emitProgress()}else(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"outline-requirement-calibration",status:"success",message:"大纲要求校准未产出有效增量(章节结构已覆盖评分项要求或校准调用失败),回退原规划",details:[]},{subtitle:"大纲要求校准"})}),a.global.emitProgress()}let C=await (0,cR.mI)(B),D=B.reduce((a,b,c)=>a+Math.max(0,(b.sections||[]).length-(C[c]?.sections||[]).length),0),E=function(a,b){let c=a.map(a=>({...a,sections:[...a.sections||[]]})),d=[],e=(void 0)??(0,cS.un)({template:{id:"runtime",name:"",outputTitle:"",description:"",category:"",chapters:a},chapters:a.map(a=>({...a,title:`${a.title} ${(a.sections||[]).join(" ")}`.trim()}))});for(let a of(0,cS.V5)(dm,e)){let b=c.find(b=>a.chapterPattern.test((0,av.GQ)(b.title)));if(!b)continue;let e=b.sections||(b.sections=[]);if(e.some(b=>(0,aT.kw)(b,a.section)))continue;let f=e.findIndex(b=>a.coreWords.test(b)),g=d.find(a=>a.chapterTitle===b.title)||(d.push({chapterTitle:b.title,added:[],renamed:[]}),d[d.length-1]);f>=0?(g.renamed.push({from:e[f],to:a.section}),e[f]=a.section):(e.push(a.section),g.added.push(a.section))}return{chapters:c,changes:d.filter(a=>a.added.length>0||a.renamed.length>0)}}(C),F=E.chapters;if(E.changes.length>0){let b=E.changes.reduce((a,b)=>a+b.added.length,0),c=E.changes.reduce((a,b)=>a+b.renamed.length,0);(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"review-module-sections",status:"success",message:`评审模块承接:补入 ${b} 个评审模块小节、规范化 ${c} 个承接标题`,details:E.changes.map(a=>`${(0,av.GQ)(a.chapterTitle)}:${[...a.added.map(a=>`补入「${a}」`),...a.renamed.map(a=>`「${a.from}」→「${a.to}」`)].join(";")}`)},{subtitle:"评审模块承接"})}),a.global.emitProgress()}let G=F;{let b=a.planning.tenderRequirements?.structureRequirements||[];if(b.length>0){let c=await (0,aH.Mv)(b.map(bC.JX),F.map(a=>(0,bC.NT)(a.title))),d=(0,bC._D)(b,F,c),e=function(a,b){let c=b.filter(a=>!a.lowConfidence&&("org_chart"===a.requirement.form||dn.test(a.requirement.element)));if(0===c.length)return{chapters:a,changes:[]};let d=a.map(a=>({...a,sections:[...a.sections||[]]})),e=[],f=new Set;for(let a of c){let b=d.find(b=>(0,bC.NT)(b.title)===a.chapterTitle);if(!b||f.has(b.id))continue;f.add(b.id);let c=b.sections||(b.sections=[]);if(c.some(a=>dq.test(a)))continue;let g=e.find(a=>a.chapterTitle===b.title)||(e.push({chapterTitle:b.title,added:[],renamed:[]}),e[e.length-1]),h=c.findIndex(a=>dr.test(a));h>=0?(g.renamed.push({from:c[h],to:dp}),c[h]=dp):(c.push(dp),g.added.push(dp))}return{chapters:d,changes:e.filter(a=>a.added.length>0||a.renamed.length>0)}}(F,d.assignments);if(G=e.chapters,e.changes.length>0){let b=e.changes.reduce((a,b)=>a+b.added.length,0),c=e.changes.reduce((a,b)=>a+b.renamed.length,0);(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"structure-org-sections",status:"success",message:`组织机构承接:${b>0?`补入 ${b} 个「项目管理机构与岗位职责」小节`:""}${b>0&&c>0?"、":""}${c>0?`规范化 ${c} 个承接标题`:""}`,details:e.changes.map(a=>`${(0,av.GQ)(a.chapterTitle)}:${[...a.added.map(a=>`补入「${a}」`),...a.renamed.map(a=>`「${a.from}」→「${a.to}」`)].join(";")}`)},{subtitle:"组织机构承接"})}),a.global.emitProgress()}}}let H=await (0,aH.Mv)(a.understanding.evaluationItems.map(a=>a.title),G.map(cX));a.planning.finalBidStructureAudit=cY({template:a.prepare.template,chapters:G,requirement:a.global.input.requirement,evaluationItems:a.understanding.evaluationItems,semanticSimilarity:H});let I=u;if(!(0,p._C)(a.understanding.bidComposition)&&u.size>0){let b=b=>(0,av.GQ)(a.planning.finalBidStructureAudit.enrichedChapters.find(a=>a.id===b)?.title||b),c=[...u.entries()].flatMap(([a,c])=>c.map(c=>({chapterTitle:b(a),title:c.title,fields:c.fields})));if(c.length>0){let d=await dE({tables:c,requirementSummary:(0,bC.zD)(a.planning.tenderRequirements),boqCoverageSummary:(0,_.Hp)((0,_.v7)(a.understanding.preliminaryFactsModel)),templateName:a.prepare.template.name,signal:a.global.input.signal});if(d.removed.length>0){let c=new Set(d.removed.map(a=>`${a.chapterTitle}
324
323
  ${a.title}`));I=new Map([...u.entries()].map(([a,d])=>[a,d.filter(d=>!c.has(`${b(a)}
325
- ${d.title}`))])),(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"table-scope-audit",status:"success",message:`表格范围核对:剔除 ${d.removed.length} 项超范围规划表(非本标段工程实体)`,details:d.removed.map(a=>`${a.chapterTitle}:${a.title}(${a.reason})`)},{subtitle:"表格范围核对"})}),a.global.emitProgress()}else d.skipped&&((0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"table-scope-audit",status:"success",message:`表格范围核对:无可核对范围(${d.skipped})——不适用,非放弃`,details:[]},{subtitle:"表格范围核对"})}),a.global.emitProgress())}}let J=(0,aY.lR)({chapters:a.planning.finalBidStructureAudit.enrichedChapters,plannedTables:I,requiredTables:a.prepare.runtimePromptRules.requiredTables,bodyTablePolicy:a.understanding.bidComposition?.bodyTablePolicy}),K=J.chapters;if(!(0,p._C)(a.understanding.bidComposition)&&(0,bC.l)(a.planning.tenderRequirements)){let b=(0,aY.cR)((0,aY.K9)(a.planning.tenderRequirements?.entries||[]),a.planning.tenderRequirements?.structureRequirements||[]);if(b.length>0){let c=await (0,aH.Mv)(b.map(a=>a.source),K.map(a=>a.title)),d=(0,aY.c$)(K,b,c);K=d.chapters;let e=[];for(let a of K)for(let b of a.diagramRequirements||[])e.push(`${(0,av.GQ)(a.title)}:${b.split("(招标要求原文")[0]}`);(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"diagram-artifacts",status:"success",message:`图类呈现计划:识别 ${b.length} 项图类要求(${b.map(a=>a.name).join("、")}),注入 ${e.length} 项${d.unattached.length>0?`,未归属 ${d.unattached.length} 项(相似度不足不注入,防错挂)`:""}`,details:e},{subtitle:"图表呈现计划"})}),a.global.emitProgress()}}if(a.planning.effectiveChapters=K,(0,p._C)(a.understanding.bidComposition)){let b=a.understanding.bidComposition;(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"bid-composition-table-policy",status:"success",message:`编制规格消费:正文禁表(显式禁表句)——小节规划 ${t} 项表格需求与提示词必需表格 ${a.prepare.runtimePromptRules.requiredTables.length} 张均不进入正文,图表由终稿附表区 ${b.appendixPlan.length} 项附表承接`,details:[...b.conflicts.map(a=>`${a.rule} → ${a.resolution}`),...b.appendixPlan.map(a=>`附表${a.no}:${a.title}${"figure"===a.kind?"(图类,图件说明承载)":`(数据源:${a.dataSource})`}`)]},{subtitle:"表格计划"})}),a.global.emitProgress()}else if(a.understanding.bidComposition?.bidType==="blind"){let b=J.chapters.reduce((a,b)=>a+(b.tablePlans?.length||0),0);(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"bid-composition-table-policy",status:"success",message:`暗标编制规格消费:招标正文表格口径按证据判定为允许——表格计划 ${b} 项正常构建进入正文(原「暗标一律禁表」硬推已删除);正文图片仍禁(图类以表格化数据/文字框图表达)${J.unattachedRequiredTables.length>0?`;提示词必需表格 ${J.unattachedRequiredTables.length} 张未归属,交由终验兜底插入`:""}`,details:[...a.understanding.bidComposition.conflicts.map(a=>`${a.rule} → ${a.resolution}`),...a.understanding.bidComposition.appendixPlan.map(a=>`附表${a.no}:${a.title}${"figure"===a.kind?"(图类,图件说明承载)":`(数据源:${a.dataSource})`}`)]},{subtitle:"表格计划"})}),a.global.emitProgress()}else J.unattachedRequiredTables.length>0&&(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"required-tables-unattached",status:"success",message:`提示词必需表格归属:${J.unattachedRequiredTables.length} 张未匹配到明确章节(${J.unattachedRequiredTables.join("、")}),交由文档合成终验兜底插入`,details:["未归属必需表格不做语义错挂——防止表格落到不相关章节"]},{subtitle:"表格计划"})});a.planning.effectiveChapters=(b=a.planning.effectiveChapters).length?b.map((a,b)=>{let c=a.sections||[];if(c.length<2||!(0===b||/概况|总体理解|编制说明|编制依据/u.test(a.title)))return a;let d=c.findIndex(a=>/^(?:编制说明|编制依据)/u.test(a)||/工程概况|项目概况|基本概况/u.test(a));if(d<=0)return a;let e=[c[d],...c.filter((a,b)=>b!==d)];return{...a,sections:e}}):b,D>0&&((0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"outline-topic-filter",status:"success",message:`大纲小节主题过滤:剔除 ${D} 个评标纪律/商务报价类离题小节`,details:["被剔除小节不进入写作、目录与预算计划"]},{subtitle:"大纲主题约束"})}),a.global.emitProgress()),(a.planning.finalBidStructureAudit.issues.length>0||a.understanding.bidStructureAudit.issues.length>0)&&(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"bid-structure-audit",status:a.planning.finalBidStructureAudit.issues.some(a=>"blocker"===a.severity)?"failed":"success",message:`评标结构符合性校验:${a.planning.finalBidStructureAudit.diagnostics.length} 个结构组,${a.planning.finalBidStructureAudit.diagnostics.filter(a=>"satisfied"===a.status).length} 个已满足,${a.planning.finalBidStructureAudit.diagnostics.filter(a=>"missing"===a.status&&"required"===a.level).length} 个必查缺失(已自动补挂),${a.planning.finalBidStructureAudit.diagnostics.filter(a=>"fragmented"===a.status).length} 个分散`,details:[...a.planning.finalBidStructureAudit.diagnostics.map(a=>`${"satisfied"===a.status?"满足":"fragmented"===a.status?"分散":"补挂"}:${a.groupTitle}${"missing"===a.status?`(补挂小节:${a.missingSections.join("、")})`:""}`),...a.planning.finalBidStructureAudit.issues.map(a=>`提示:${a.message}`).slice(0,8)]},{subtitle:"评标结构校验"})}),a.prepare.template={...a.prepare.template,chapters:a.planning.effectiveChapters},a.planning.requirementsSimilarity=await (0,aH.Mv)([...(0,bC.Uk)(a.planning.tenderRequirements).map(({item:a})=>(0,bC.E6)(a)),...(a.planning.tenderRequirements?.structureRequirements||[]).map(bC.JX)],a.planning.effectiveChapters.map(a=>(0,bC.NT)(a.title))),a.planning.factTokenScopeClassifier=await (0,dv.h)(),a.planning.chapterIntentClassifier=await dE(a.planning.effectiveChapters.map(a=>({key:a.title,aliases:a.purpose?[`${a.title}${a.purpose}`]:[]}))),a.planning.professionalDepthClassifier=await (0,dF.e)(),a.planning.clarificationOverrides=(0,c8.ht)((a.understanding.allEvidence||[]).map(a=>({text:String(a.content||""),source:`${a.filePath||""} ${a.sectionTitle||""}`})));{let b=a.planning.earlyTruthAudit??(()=>{let b=[...a.understanding.preliminaryFactsModel?.preciseFacts||[],...a.understanding.preliminaryFactsModel?.project||[],...a.understanding.preliminaryFactsModel?.schedule||[],...a.understanding.preliminaryFactsModel?.quality||[],...a.understanding.preliminaryFactsModel?.safety||[]].map(a=>({key:a.key,label:a.fieldName,value:a.value,sourceFile:a.sourceFile})),c=[...(a.understanding.allEvidence||[]).map(a=>({text:String(a.content||""),source:`${a.filePath||""} ${a.sectionTitle||""}`})),...b.map(a=>({text:String(a.value??""),source:String(a.sourceFile||"")}))];return(0,A.iC)({facts:b,overrides:(0,ax.Oq)((0,ax.UD)(c)),labeledValues:(0,ax.Su)(c)})})();a.planning.caliberLedger=(0,A.wc)(b),a.planning.truthConstraint=(0,A.gu)(b)}a.planning.writingTaskBrief=(0,c6.G0)({chapters:a.planning.effectiveChapters,factsModel:a.understanding.preliminaryFactsModel,projectGraph:a.understanding.projectGraph||void 0,requirement:a.global.input.requirement,templateName:a.prepare.template.name,clarificationConstraint:[a.planning.truthConstraint,(0,c8.Tp)(a.planning.clarificationOverrides||[])].filter(Boolean).join("\n\n")}),a.planning.tenderWritingRulesText=i("tenderWritingRulesText",(0,bC.ey)(a.planning.tenderRequirements)),a.planning.projectContext=[a.planning.baseProjectContext,a.planning.tenderWritingRulesText].filter(Boolean).join("\n\n"),a.planning.chapterScopedProjectContext=b=>[a.planning.constructionOrgContext,a.planning.tenderWritingRulesText].filter(Boolean).join("\n\n"),a.planning.documentBudget=(0,j.tF)({requirement:d.requirement,promptTexts:d.promptTexts,template:a.prepare.template,chapters:a.planning.effectiveChapters,spec:a.prepare.documentSpec}),a.planning.plannedDocument=await a.planning.plannedDocumentTask,a.understanding.agentWorkflow.documentPlan=a.planning.plannedDocument.plan,a.understanding.agentWorkflow.nodes.push(a.planning.plannedDocument.node),(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:a.planning.plannedDocument.node.outputSummary||"Agent 文档规划完成",details:a.planning.plannedDocument.plan.chapters.map(a=>`${a.title}:${a.sections.length} 条细目`)},{subtitle:"Agent Document Planner"})}),a.global.checkpointChapterOrderIds=a.planning.effectiveChapters.map(a=>a.id);let L=a.planning.documentBudget.targetChars||[...a.planning.documentBudget.chapterTargets.values()].reduce((a,b)=>a+b,0),M=a.understanding.preliminaryFactsModel,N=(0,j.s)({pools:M?[M.project,M.schedule,M.quality,M.safety,M.resources,...Object.values(M.schemaFacts??{})]:[],preciseFacts:M?.preciseFacts}),O=N.parameters,P=(M?.tables??[]).reduce((a,b)=>a+(b.rows?.length??0),0),Q=N.basicFacts,R=(a.understanding.writerEvidence??[]).filter(a=>/[.](?:dwg|dxf)$/iu.test(String(a.filePath??""))).length,S=(0,j.KZ)({targetWords:L,parameters:O,boqRows:P,drawingFacts:R,basicFacts:Q});if(a.planning.evidenceDensity=S,(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"evidence-density-check",status:S.sufficient?"success":"failed",message:S.sufficient?`证据密度体检通过:资料可支撑约 ${S.supportableWords} 字(目标 ${S.targetWords} 字)`:`证据密度不足:资料可支撑约 ${S.supportableWords} 字,低于目标 ${S.targetWords} 字(差额约 ${Math.round(S.shortfall)} 字)`,details:S.remediation},{subtitle:"生成准备"})}),!S.sufficient)throw Error(`证据密度不足,无法支撑目标篇幅:${S.remediation.join(" ")}`);a.planning.generationStrategy=(0,g.JP)({template:a.prepare.template,targetWords:L,requirement:a.global.input.requirement,materialFileCount:a.prepare.materialFilePaths.length,evidenceCount:a.understanding.allEvidence.length}),a.planning.generationBudget=function(a){let b=Math.max(1,a.chapters.length),c=a.targetWords>0?Math.round(a.targetWords/b):1200,d=a.strategy,e=[],f=a.materialFileCount<4&&a.evidenceCount<6,g=Math.max(1,Math.min(b,(Number.isFinite(a.configuredChapterConcurrency)&&a.configuredChapterConcurrency>0?Math.floor(a.configuredChapterConcurrency):void 0)??b)),h=(0,aV.Qf)(a.targetWords),i="fast"===d.mode?1:Math.max(1,b),{floorChars:j,ceilingChars:k}=c>=6e3?{floorChars:14e3,ceilingChars:4e4}:c>=3e3?{floorChars:11e3,ceilingChars:28e3}:{floorChars:8e3,ceilingChars:18e3},l=d.repairRoundBudget?d.repairRoundBudget:Math.max(2,Math.min(4,2+ +(a.targetWords>=2e4)+ +!!f)),m=Math.min(l*b,Math.max(12,2*b));return"strict"===d.mode&&e.push("strict:风险领域关键词命中(专项/安全/质量/验收/合同/合规等)"),a.targetWords>=4e4&&e.push("strict:目标篇幅超长(≥4 万字)"),f&&e.push("strict:资料稀疏(资料包文件 <4 且可用证据 <6 条)"),"fast"===d.mode&&e.push("fast:小文档(≤6000 字且 ≤4 章)全局审查降级为 35% 抽检"),"longform"===d.mode&&e.push("longform:长文档(≥3 万字或 ≥8 章)"),"balanced"===d.mode&&e.push("balanced:常规篇幅文档,标准审查深度"),e.push(`全章节并行生成(${g}/${b} 章同批),审查流水线 ${i} 路,全局 LLM 并发不设上限,每章证据预算 ${Math.round(j/1e3)}k-${Math.round(k/1e3)}k 字符,修复轮次预算每章 ${l} 轮(文档级总池 ${m} 轮,收敛判定优先)`),{strategy:d,chapterConcurrency:g,reviewConcurrency:i,llmConcurrency:h,evidenceFloorChars:j,evidenceCeilingChars:k,repairRoundBudget:l,repairPoolBudget:m,triggers:e}}({template:a.prepare.template,chapters:a.planning.effectiveChapters,targetWords:L,requirement:a.global.input.requirement,materialFileCount:a.prepare.materialFilePaths.length,evidenceCount:a.understanding.allEvidence.length,hasVeryLargeExplicitChapter:a.planning.effectiveChapters.some(a=>(a.sections||[]).filter(Boolean).length>=30),configuredChapterConcurrency:(0,b0.z)().chapterConcurrency||0,strategy:a.planning.generationStrategy}),a.planning.generationDiagnostics=(0,g.Zk)(a.planning.generationStrategy),(a.understanding.earlyFactPool.factSanitize.truncated>0||a.understanding.earlyFactPool.factSanitize.dropped>0||a.understanding.earlyFactPool.factSanitize.repaired>0)&&(a.planning.generationDiagnostics.factSanitize={...a.understanding.earlyFactPool.factSanitize}),a.planning.planPhaseStartedAt=Date.now(),(0,aV.t5)(L),(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${a.planning.generationStrategy.mode} 生成策略:章节审查 ${a.planning.generationStrategy.enableChapterReview?"启用":"跳过"}、全局审查 ${a.planning.generationStrategy.enableGlobalReview?`${a.planning.generationStrategy.globalReviewSamplingRate&&a.planning.generationStrategy.globalReviewSamplingRate<1?`抽检 ${Math.round((a.planning.generationStrategy.globalReviewSamplingRate??1)*100)}%`:"启用"}`:"跳过"}、最终质量审查 ${a.planning.generationStrategy.enableFinalQualityReview?"启用":"跳过"}`,details:a.planning.generationBudget.triggers},{subtitle:"后台自动策略"})}),a.understanding.canonicalFacts.scopeConflicts.length>0&&(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"scope-conflict-resolution",status:"success",message:`源级数据口径冲突已裁决(补疑/澄清修正文件权威最高):${a.understanding.canonicalFacts.scopeConflicts.map(a=>a.resolution?`${a.scope} → ${a.resolution}`:`${a.scope} → 待人工复核`).join(";")}`,details:a.understanding.canonicalFacts.scopeConflicts.flatMap(a=>a.values.map(a=>`来源「${a.sourceFile||"未知文件"}」取值 ${a.value}${a.unit}`))},{subtitle:"数据口径裁决"})});let T=a.prepare.hasExplicitOutline?"OUTLINE 章节":"提示词大纲";a.planning.sectionPlanningStage=(0,k.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${r} 章统一融合规划(基于${T}、提示词强制小节与项目资料)——融合小节合计 ${q} 个(其中锁定 ${o} 个)、表格需求 ${t} 项`,details:v.length?[...v]:void 0},{subtitle:"小节规划策略"});let U=a.prepare.hasExplicitOutline?`;识别到 OUTLINE 章节 ${a.prepare.explicitPromptChapters.length} 个`:";未识别到有效 OUTLINE 章节(提示词缺显式大纲时派生会先失败,不该到达这里)",V=a.prepare.promptPlan.prompts.map(a=>`${a.category}|${a.id}|${a.name}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`);(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"role_binding",roleId:"prompt-plan",status:"success",message:`已绑定项目资料 ${a.prepare.materialFilePaths.length} 份、${a.prepare.promptPlan.prompts.length} 个有效提示词;写作 ${a.prepare.promptPlan.writerPrompts.length}、章节 ${a.prepare.promptPlan.chapterPrompts.length}、抽取 ${a.prepare.promptPlan.extractionPrompts.length};已自动抽取运行时规则 ${a.prepare.runtimePromptRules.executionSummary.length} 条${U}`,details:[...V,...a.prepare.runtimePromptRules.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:"提示词计划",roleName:"提示词计划"})}),(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${a.prepare.runtimePromptRules.executionSummary.length} 条,版本 ${a.prepare.runtimePromptRules.sourceHash}`,details:a.prepare.runtimePromptRules.executionSummary.length?[...a.prepare.runtimePromptRules.executionSummary,`必需表格:${a.prepare.runtimePromptRules.requiredTables.join("、")||"无"}`,`必含关键词:${a.prepare.runtimePromptRules.requiredKeywords?.join("、")||"无"}`,`禁含内容:${a.prepare.runtimePromptRules.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})}),(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"document-readiness",status:a.prepare.readiness.ready?"success":"failed",message:"生成准备度:绑定资料已就绪",details:a.prepare.readiness.diagnostics},{subtitle:"生成准备度检查"})}),(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"diversity-governance",status:"success",message:`多文档反雷同:组织视角「${a.planning.diversityProfile.perspective}」\xd7命名风格「${a.planning.diversityProfile.style}」;历史指纹避让 ${w.length} 个标题${y>0?`,撞名局部改名 ${y} 章${z>0?`(局部改名后仍近似 ${z} 处,已接受)`:""}`:""}`,details:[`历史指纹池 ${a.planning.fingerprintPool.entries.length} 条(仅本机历史文档标题与结构,无正文)`,`多样性画像 ${a.planning.diversityProfile.id}`]},{subtitle:"多样性治理"})}),(0,l.Wl)(a,{batch:"generation.planning",stage:a.planning.sectionPlanningStage}),a.global.emitProgress()}var dK=c(19898),dL=c(14070),dM=c(70963);async function dN(a){if(a.understanding.evidenceScopePaths=new Set(a.prepare.materialFilePaths),a.understanding.fileRoleByPath=new Map([...a.prepare.kindByPath.entries()].map(([a,b])=>[a,(0,de._W)(b)])),a.understanding.fileProcessingByPath=new Map([...a.prepare.processingByPath.entries()].map(([a,b])=>[a,b])),(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:"running",message:"正在读取项目资料包索引",details:["使用上传阶段已完成的解析、切片和索引结果","不在生成流程中重新解析或入库","准备按资料类型召回章节证据"],progress:{current:1,total:3,label:"读取索引"}},{subtitle:"知识库检索"})}),a.global.emitProgress(),a.understanding.project=await a.global.withProgressHeartbeat(()=>a.understanding.manager.getProject(a.prepare.projectRoot)),a.understanding.indexHealth=(0,s.EK)(a.understanding.project,[...a.understanding.evidenceScopePaths]),a.understanding.indexHealth.blockingIssues.length>0)throw Error(`生成前知识索引不可用:${a.understanding.indexHealth.blockingIssues.join(";")}`);a.understanding.availableEvidenceScopePaths=new Set(a.understanding.indexHealth.usablePaths),a.understanding.requestedEvidencePerChapter=(0,s.G2)(a.understanding.project,[...a.understanding.availableEvidenceScopePaths],a.global.input.maxEvidencePerChapter);let b=a.understanding.indexHealth.pendingJobs>0||0===a.understanding.indexHealth.usableChunkCount;a.understanding.rolePoolRisk=(0,dd.gq)({totalChunks:a.understanding.indexHealth.usableChunkCount,loadedChunks:Math.min(a.understanding.indexHealth.usableChunkCount,20*a.prepare.materialFilePaths.length),vectorReady:a.understanding.indexHealth.vectorStatus?"ready"===a.understanding.indexHealth.vectorStatus.status:void 0}),(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:b?"failed":"success",message:`已读取知识索引:项目资料 ${a.understanding.indexHealth.scopedRecords.length} 份,可用切片 ${a.understanding.indexHealth.usableChunkCount} 条`,details:[`项目资料:${a.understanding.evidenceScopePaths.size} 份`,`可用证据文件:${a.understanding.availableEvidenceScopePaths.size} 份`,`向量状态:${(0,s.EG)(a.understanding.indexHealth.vectorStatus?.status)}`,...a.understanding.indexHealth.warnings,"后续将按招标正文/清单/图纸/补疑等资料类型召回"],progress:{current:3,total:3,label:"索引已就绪"}},{subtitle:"知识库检索"})}),a.global.emitProgress(),(0,f.Te)(a.global.input.signal),a.understanding.allEvidence=[],a.understanding.retrievalCoverageReports=[],a.understanding.webResearchReport={enabled:a.prepare.webAccessConfig.enabled,queries:[],evidenceCount:0,filteredCount:0,chapters:[]},a.understanding.missingItems=[],a.understanding.clarificationRequests=[],a.understanding.unfixableDeclarations=[],a.understanding.failedChapterMessages=[],a.understanding.chapterGenerationStages=[],a.understanding.chapterDraftsByOrder=[],a.understanding.chapterGenerationStagesByOrder=[];let c=new Map,d=[],e=new Map;a.understanding.getCachedFileDetail=b=>{let c=`${b}::full`;if(!e.has(c))try{e.set(c,a.understanding.project.getFileDetail?.(b))}catch{e.set(c,void 0)}return e.get(c)},a.understanding.searchWithCache=async(b,e,g,h,i)=>{let j=(0,s.Iu)(h),k=i??(0,dK.materialRootsOfFiles)(e),l=(0,f.c6)({query:b,scopedFilePaths:e,effectiveMaterialRoots:k,limit:g,weights:j,generationMode:!0,reranker:!0}),m=c.get(l);if(m)return m;let n=await a.understanding.manager.search(a.prepare.projectRoot,b,{scope:"project",filters:{filePaths:e,materialRoots:k},limit:g,weights:j,generationMode:!0,disableReranker:!1}).catch(a=>(d.push({query:b,message:a instanceof Error?a.message:String(a)}),null));if(null===n)return[];let o=n.results||[];return(0,ax.f2)(o,a.planning.earlyOverrideList),c.set(l,o),o};let g={stage:(0,k.X5)({type:"file_understanding",roleId:"project-understanding",status:"running",message:`正在理解项目资料:${a.prepare.projectMaterialProfile.files.length} 份资料,${Object.values(a.prepare.projectMaterialProfile.groups).filter(a=>a.length>0).length} 类资料类型`,progress:{current:1,total:3,label:"资料理解"}},{subtitle:"项目资料理解"})};(0,l.Wl)(a,{batch:"generation.understanding",stage:g.stage}),a.global.emitProgress();let i=await (0,s.jX)({manager:a.understanding.manager,project:a.understanding.project,projectRoot:a.prepare.projectRoot,scopedFilePaths:[...a.understanding.availableEvidenceScopePaths].filter(Boolean).sort(),scopedMaterialRoots:a.prepare.materialScope.selectedMaterialRoots,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,signal:a.global.input.signal});i.length>0&&(a.understanding.allEvidence.push(...i),(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"knowledge_retrieval",roleId:"project-basic-evidence",status:"success",message:`已锁定项目基础事实证据 ${i.length} 条`,details:i.slice(0,8).map(a=>`${cr.basename(a.filePath)}|${a.sectionTitle||"正文片段"}|score=${a.score.toFixed(2)}`)},{subtitle:"基础事实召回"})}),a.global.emitProgress()),a.understanding.searchFailures=d,d.length>0&&((0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"knowledge_retrieval",roleId:"kb-search-failures",status:"failed",message:`知识库检索失败 ${d.length} 次(失败与「无命中」已分开计;失败结果不写缓存,同 query 后续会重试)`,details:d.slice(0,10).map(a=>`${a.query}:${a.message}`)},{subtitle:"基础事实召回"})}),a.global.emitProgress());let{safe:j,excluded:m}=await (0,cQ.a0)(a.understanding.allEvidence);a.understanding.writerEvidence=j,a.understanding.bidProcedureJudge=await (0,cQ.M8)(),m.length>0&&((0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"knowledge_retrieval",roleId:"evidence-content-safety",status:"success",message:`证据内容安全过滤:${m.length} 条投标程序/评标纪律类证据已从写作链断开(系统侧提取通道不受影响)`,details:m.slice(0,6).map(a=>`${cr.basename(a.filePath)}|${a.sectionTitle||"正文片段"}`)},{subtitle:"证据内容安全"})}),a.global.emitProgress()),a.understanding.safeProjectBasicEvidence=i.filter(a=>!m.includes(a)),a.understanding.excludedEvidenceKeys=new Set(m.map(cQ.hM)),a.understanding.earlyFactPool=(0,u.d6)({evidence:a.understanding.writerEvidence,template:a.prepare.template,spec:a.prepare.documentSpec,profile:a.prepare.domainProfile});let n=a.understanding.earlyFactPool.localFacts,o=[...n,...a.understanding.earlyFactPool.projectBasicFacts,...a.understanding.earlyFactPool.preciseFacts];a.understanding.scopedIntelligence=(0,dI.hp)({projectRoot:a.prepare.projectRoot,template:a.prepare.template,requirement:a.global.input.requirement,materialScope:a.prepare.materialScope});let q=[...(0,f.lX)(a.understanding.scopedIntelligence?.facts||[]),...o,...(0,v.UT)(a.understanding.writerEvidence)],r=(0,v.GZ)(q,a.prepare.projectRoot);a.understanding.preliminaryFactsModel=await (0,u.d7)(r,a.understanding.earlyFactPool.structuredTables,a.understanding.missingItems,a.prepare.documentSpec,a.prepare.domainProfile);{let b=[...a.understanding.allEvidence.map(a=>({text:String(a.content||""),source:`${a.filePath||""} ${a.sectionTitle||""}`})),...r.map(a=>({text:String(a.value??""),source:String(a.sourceFile||"")}))],c={facts:r.map(a=>({key:a.key,label:a.fieldName,value:a.value,sourceFile:a.sourceFile})),overrides:(0,ax.Oq)((0,ax.UD)(b)),labeledValues:(0,ax.Su)(b)},d=(0,A.iC)(c),e=d.resolved.flatMap(a=>(a.superseded||[]).map(b=>({superseded:b,effective:a.value,scope:[a.attribute],evidence:a.evidence,kind:"override"})));if(a.planning.earlyTruthAudit=d,a.planning.truthInputs=c,a.planning.earlyOverrideCount=e.length,e.length>0){let b=0,c=a=>{let c=(0,ax.M0)(String(a??""),e);return b+=c.applied.length,c.text};for(let a of r)a.value=c(a.value);let f=a.understanding.preliminaryFactsModel;for(let a of[f.project,f.schedule,f.quality,f.safety,f.resources,f.preciseFacts,f.bills,f.rules,f.specifications,f.drawings])for(let b of a||[])b.value=c(b.value);for(let b of a.understanding.writerEvidence)b.content=c(b.content);a.planning.earlyOverrideList=e,b>0&&((0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"fact_extraction",roleId:"effective-value-preposition",status:"success",message:`现行口径前置:${e.length} 组被取代值(${[...new Set(e.map(a=>`${a.superseded}→${a.effective}`))].slice(0,3).join("、")})已在写作输入中就地替换 ${b} 处`,details:[...d.resolved.filter(a=>a.superseded.length>0).slice(0,8).map(a=>`${a.attribute}:${a.value}(被取代:${a.superseded.join("、")})`)]},{subtitle:"现行口径前置"})}),a.global.emitProgress())}}for(let b of(a.understanding.agentWorkflow=(0,db.Qu)({template:a.prepare.template,requirement:a.global.input.requirement,projectRoot:a.prepare.projectRoot,facts:r,projectGraph:a.understanding.scopedIntelligence?.projectGraph,projectGraphSource:a.understanding.scopedIntelligence?"project-intelligence":void 0,materialScope:a.prepare.materialScope}),(0,db.SU)(a.understanding.agentWorkflow)))(0,l.Wl)(a,{batch:"generation.understanding",stage:b});if(a.understanding.scopedIntelligence&&(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"file_understanding",roleId:"project-intelligence-cache",status:"success",message:`已复用入库后资料包理解资产:${a.understanding.scopedIntelligence.files.length} 份资料`,details:[`项目级缓存时间:${new Date(a.understanding.scopedIntelligence.cache.createdAt).toLocaleString()}`,`资料包范围指纹:${a.understanding.scopedIntelligence.scope.scopeHash.slice(0,12)}`,`复用预计算事实:${a.understanding.scopedIntelligence.facts.length} 条`,`复用预计算项目图谱:${a.understanding.scopedIntelligence.projectGraph.works.length}工程/${a.understanding.scopedIntelligence.projectGraph.methods.length}工法/${a.understanding.scopedIntelligence.projectGraph.resources.length}资源`,`复用施工组织设计专项图谱:${a.understanding.scopedIntelligence.constructionOrganizationGraph.workPackages.length} 个工作包/${a.understanding.scopedIntelligence.constructionOrganizationGraph.controlMatrix.length} 条控制矩阵`,`图谱来源:${a.understanding.scopedIntelligence.cache.projectGraphMessage}`,`章节意图证据覆盖:${Object.keys(a.understanding.scopedIntelligence.evidenceByChapterId||{}).length}/${a.prepare.template.chapters.length} 章`,`排除正文不适用资料:${a.understanding.scopedIntelligence.files.filter(a=>!a.usableForBody).length} 份`]},{subtitle:"项目理解缓存 / 资料包"})}),a.global.emitProgress(),a.understanding.projectGraph=a.understanding.agentWorkflow.baseProjectGraph,!a.understanding.scopedIntelligence){(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"file_understanding",roleId:"project-graph",status:"running",message:`正在临时构建完整项目图谱:${a.understanding.allEvidence.length} 条证据 → LLM 结构化提取`,details:["缓存缺失或版本过期,建议重新构建项目理解缓存;本次生成将临时构建完整项目图谱。","提取:工程内容、施工方法、材料设备、技术标准、重点难点"],progress:{current:2,total:3,label:"项目图谱"}},{subtitle:"项目资料图谱分析"})}),a.global.emitProgress();let b=await a.global.withProgressHeartbeat(()=>(0,dM.i)({evidence:a.understanding.writerEvidence,signal:a.global.input.signal,projectRoot:a.prepare.projectRoot,requirement:a.global.input.requirement,templateId:a.prepare.template.id}));if(!b.graph)throw Error(`完整项目图谱构建失败:${b.stage.message||b.stage.status}`);a.understanding.projectGraph=b.graph,(0,l.Wl)(a,{batch:"generation.understanding",stage:b.stage}),a.global.emitProgress()}a.understanding.projectGraph&&(a.prepare.projectUnderstanding=(0,de._n)(a.prepare.template,a.prepare.projectMaterialProfile,a.understanding.projectGraph)),(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"file_understanding",roleId:"project-understanding",status:"success",message:`已完成项目资料理解:${a.prepare.projectMaterialProfile.files.length} 份资料、${Object.values(a.prepare.projectMaterialProfile.groups).filter(a=>a.length>0).length} 类资料类型${a.understanding.projectGraph?`、图谱增强 ${a.understanding.projectGraph.works.length} 项工程内容`:""}`,details:[...a.prepare.projectUnderstanding.chapterPlans.slice(0,10).map(a=>`${a.chapterTitle}:必用 ${a.mustUseMaterialKinds.length} 类资料、必覆盖 ${a.mustCover.length} 项`),...a.prepare.projectUnderstanding.profile.warnings.length?[`资料风险:${a.prepare.projectUnderstanding.profile.warnings.slice(0,3).join(";")}`]:[]]},{subtitle:"项目资料理解"})}),a.global.emitProgress(),a.understanding.canonicalFacts=(0,v.qD)({facts:q,projectGraph:a.understanding.projectGraph,requiredKeys:v.nC.map(a=>a.key),projectRoot:a.prepare.projectRoot,requirement:a.global.input.requirement,templateId:a.prepare.template.id}),a.understanding.preliminaryFactsModel.canonical=a.understanding.canonicalFacts;let t=(0,av._9)(a.prepare.template,a.prepare.documentSpec,{preserveExplicitOutline:a.prepare.hasExplicitOutline}),w=a.understanding.allEvidence.filter(a=>/评审|评分标准|评分办法|详细评审/u.test(`${a.sectionTitle||""}${a.content}`)).map(a=>a.content);a.understanding.evaluationItems=function(a){let b=a.join("\n"),c=new Map;for(let a of b.matchAll(/(\d{1,2})\s*[.、.]\s*([^;。\n]{4,60})/gu)){let b=a[2].trim().replace(/[“”"'"]/gu,"");if(!/[\u4e00-\u9fa5]{3}/u.test(b)&&!/[杯奖]/u.test(b)||/AI|大模型|评审|评分|分值|分项|子项|满分|得分|投标人须|详见|招标文件/u.test(b)||/公共资源|电子交易|加密|投标|开标|评标委员会|评标价|中标候选|中标人|评标程序|评标流程|异常低价|保函|保证金|资格审查|资格后审/u.test(b)||"technical"!==(0,cS.m)(b))continue;let d=Number(a[1]);if(!c.has(d)){let a=function(a){let b=a.replace(/^针对/u,"").replace(/^确保/u,"").replace(/的保障体系与措施$/u,"").replace(/的管理体系与措施$/u,"").replace(/保障体系与措施$/u,"").replace(/管理体系与措施$/u,"").replace(/[,、;,;]+$/u,"").trim();return!/[\u4e00-\u9fa5]{3}/u.test(b)&&!/[杯奖]/u.test(b)||/工期与质量/u.test(b)?"":b.length>24?b.slice(0,24):b}(b);if(a&&(0,av.ob)(a)||(0,av.ob)(b))continue;c.set(d,{index:d,text:b,title:a})}}return[...c.values()]}(w),w.length>0&&0===a.understanding.evaluationItems.length&&(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"bid-structure-audit",status:"skipped",message:"评审章节证据存在但未提取到评分条目标题:评分标准编号条目提取为空,承接审计将静默通过",details:["请检查招标文件评标办法章节编号格式;评分项要求(创优目标/绿色等级/禁编日期)由评分项要求提取通道覆盖"]},{subtitle:"评标结构校验"})});let x=await (0,aH.Mv)(a.understanding.evaluationItems.map(a=>a.title),t.map(cW));a.understanding.bidStructureAudit=cX({template:a.prepare.template,chapters:t,requirement:a.global.input.requirement,evaluationItems:a.understanding.evaluationItems,semanticSimilarity:x});let y=[];for(let b of[...a.understanding.evidenceScopePaths].sort()){if(!/招标|补疑|答疑|评标/u.test(b))continue;let c=a.understanding.getCachedFileDetail(b);if(c?.chunks?.length)for(let a of c.chunks)y.push(a.content||"")}a.understanding.bidComposition=(0,p.SD)({tenderTexts:y,requirement:a.global.input.requirement,requiredTables:a.prepare.runtimePromptRules.requiredTables});let z=(0,p.iJ)(a.understanding.bidComposition);if((0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"bid-composition",status:"success",message:z.message,details:z.details},{subtitle:"标书编制规格"})}),a.global.emitProgress(),"unknown"===a.understanding.bidComposition.bidType&&((0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"bid-composition-warning",status:"success",message:"标书类型判定告警:未识别暗标/明标标记——本次按常规口径生成(正文表格策略按招标证据判定、正文图片允许);若本项目实为暗标,正文图片与投标人标记可能未被禁止(暗标通常不得出现),请核对招标文件后重跑",details:["核查点:招标文件「施工组织设计采用」勾选项(标记字符变体与「按暗标/采用暗标评审」语义条款均已覆盖)或「暗标编制要求」条款","判定证据链见「标书编制规格」节点"]},{subtitle:"标书编制规格\xb7判定告警"})}),a.global.emitProgress()),a.understanding.tenderRequirementsTask=(async()=>{try{let b,c=dK.BID_REQUIREMENT_SOURCE_KINDS,d=[];for(let b of[...a.understanding.evidenceScopePaths].sort()){let e=a.understanding.fileRoleByPath.get(b),f=!!e&&c.has(e),g=!e&&/招标|补疑|答疑|评标/u.test(b)&&!/图纸|dwg|dxf|cad|平面图|系统图|立面图|剖面图|大样|详图|幕墙/iu.test(b);if(!f&&!g)continue;let h=a.understanding.getCachedFileDetail(b);if(h?.chunks?.length)for(let c of h.chunks)d.push({chapterId:"tender-requirements",filePath:h.file?.relativePath||b,score:1,content:c.content||"",roleId:a.understanding.fileRoleByPath.get(b),processingType:a.understanding.fileProcessingByPath.get(b),sectionTitle:c.sectionTitle,source:"pinned-evidence"})}let e=a.understanding.allEvidence.filter(a=>{let b=a.roleId;return b?c.has(b):/招标|评标|投标须知|专用合同|合同条款/u.test(`${a.filePath||""}${a.sectionTitle||""}`)&&!/图纸|dwg|dxf|cad|平面图|系统图|立面图|剖面图|大样|详图|幕墙|清单|boq|xls/iu.test(`${a.filePath||""}`)}),f=d.length>0?d:(0,h.QR)(e,{preservePinned:!0}),g="0"!==process.env.DOCUMENT_EXTRACTION_CACHE?(0,bC.Sf)({collectionEvidence:f}):void 0,i=g?(0,bC.jl)(a.prepare.projectRoot,g):void 0;return i?(b=i,(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"tender-requirements-cache",status:"success",message:"复用上次提取结果(招标资料哈希命中,跳过判定 LLM)",details:(0,bC.zD)(b)},{subtitle:"招标要求提取\xb7缓存复用"})}),a.global.emitProgress()):(b=await a.global.withProgressHeartbeat(()=>(0,bC.mg)(f,{signal:a.global.input.signal,diagnostics:a.planning.generationDiagnostics,onPhase:(b,c)=>{(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"running",message:b,details:c},{subtitle:"招标要求提取"})}),a.global.emitProgress()},onProgress:(b,c)=>{(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"running",message:`逐条判定进行中:第 ${b}/${c} 批(每批 40 条,序号严格对齐)`,progress:{current:b,total:c,label:"条款判定"},details:[]},{subtitle:"招标要求提取"})})}})),g&&(0,bC.e_)(a.prepare.projectRoot,g,b)),(0,bC.l)(b)?((0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"success",message:`招标要求结构化提取完成:要求 ${b.reconciliation.entryCount} 条、排除 ${b.reconciliation.excludedCount} 条(${b.reconciliation.batchCount} 批判定)`,details:(0,bC.zD)(b)},{subtitle:"招标要求提取"})}),a.global.emitProgress()):f.length>0&&((0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"skipped",message:"招标要求提取未获得有效结果(模型不可用或资料中无要求条款),章级验收自动跳过",details:[]},{subtitle:"招标要求提取"})}),a.global.emitProgress()),b.extracted&&b.reconciliation.undecidedCount>0&&((0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"tender-requirements-undecided",status:"skipped",message:`对账未闭合:${b.reconciliation.undecidedCount} 条条款未判定(LLM 输出缺号且重试后仍缺)`,details:["未判定条款不进入分配与验收;请检查 LLM 可用性"]},{subtitle:"招标要求提取\xb7对账"})}),a.global.emitProgress()),b}catch(b){return(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"skipped",message:"招标要求提取链异常,已降级为空模型(章级验收自动跳过)",details:[`异常信息:${b instanceof Error?b.message:String(b)}`,"请检查 LLM 可用性"]},{subtitle:"招标要求提取"})}),a.global.emitProgress(),(0,bC.Mx)(!1)}})(),a.planning.baseEffectiveChapters=(0,f.H1)(a.understanding.bidStructureAudit.enrichedChapters),a.prepare.template={...a.prepare.template,chapters:a.planning.baseEffectiveChapters},a.planning.plannedDocumentTask=(0,da.NP)({template:a.prepare.template,context:a.understanding.agentWorkflow,title:a.prepare.template.name}),a.planning.plannedDocumentTask.catch(()=>void 0),a.understanding.chapterGraphMap=new Map,a.understanding.projectGraph){let b=new Set;for(let c of[...a.understanding.projectGraph.works,...a.understanding.projectGraph.methods,...a.understanding.projectGraph.resources,...a.understanding.projectGraph.schedule,...a.understanding.projectGraph.standards,...a.understanding.projectGraph.risks,...a.understanding.projectGraph.requirements,...a.understanding.projectGraph.siteConditions])(c.sourceFiles||[]).forEach(a=>b.add(a));for(let c of a.planning.baseEffectiveChapters){let d=[c.title,c.purpose,...c.sections||[],...c.requiredFacts||[],...c.queries||[]].join(" "),e=a=>a&&((0,dL.C1)(a,d,.18)||(0,dL.C1)(a,c.title,.12)),f=/概况|总体|部署|施工|进度|工期|质量|安全|资源|人材机|材料|机械|劳动力|风险|危大|绿色|环保/u.test(d),g=a.understanding.projectGraph.works.filter(a=>a.name&&(e(a.name)||f)),h=a.understanding.projectGraph.methods.filter(a=>a.name&&(e(a.name)||(a.applicableWorks||[]).some(e)||f)),i=a.understanding.projectGraph.resources.filter(a=>a.name&&(e(a.name)||/资源|人材机|材料|机械|劳动力/u.test(d)&&/material|equipment|labor/u.test(a.type))),j=a.understanding.projectGraph.gaps.filter(a=>!(0,dI.Ut)(a)&&(e(a)||f)),k=new Set;for(let a of g)(a.sourceFiles||[]).forEach(a=>k.add(a));for(let a of h)(a.sourceFiles||[]).forEach(a=>k.add(a));for(let a of i)(a.sourceFiles||[]).forEach(a=>k.add(a));0===k.size&&f&&[...b].forEach(a=>k.add(a)),a.understanding.chapterGraphMap.set(c.id,{graphFiles:k,graphBoqItems:i.map(a=>({name:a.name,quantity:a.quantity,unit:a.unit,sourceFiles:a.sourceFiles||[]})),graphWorks:g.map(a=>a.name),graphMethods:h.map(a=>a.name),gaps:j})}a.understanding.scopedIntelligence||((0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"file_understanding",roleId:"project-graph-match",status:"success",message:`图谱→章节映射完成:${a.understanding.projectGraph.works.length}工程 ${a.understanding.projectGraph.methods.length}工法 ${a.understanding.projectGraph.resources.length}资源 → ${a.planning.baseEffectiveChapters.length}章`,details:a.planning.baseEffectiveChapters.map(b=>{let c=a.understanding.chapterGraphMap.get(b.id);return`${(0,av.GQ)(b.title)}:匹配文件${c?.graphFiles.size||0}个,BOQ项${c?.graphBoqItems.length||0}个`})},{subtitle:"图谱章节映射"})}),a.global.emitProgress())}}var dO=c(44533),dP=c(29281),dQ=c(6444),dR=c(85441),dS=c(73859),dT=c(92808);function dU(a){return[...new Set(a.filter(Boolean))]}function dV(a){let b=(0,dT.t0)(a,dT.hW);return b.length>0?b:["project_overview"]}function dW(a,b={}){let c=a.chapterDiagnostics.filter(a=>0===a.evidenceCount||a.missingFacts.length>0).slice(0,8).map(a=>`${a.title}:证据 ${a.evidenceCount} 条${a.missingFacts.length?`,缺失 ${a.missingFacts.slice(0,6).join("、")}`:""}`);return b.publicSafe?["## 生成事实使用边界",c.length?`章节证据风险:
324
+ ${d.title}`))])),(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"table-scope-audit",status:"success",message:`表格范围核对:剔除 ${d.removed.length} 项超范围规划表(非本标段工程实体)`,details:d.removed.map(a=>`${a.chapterTitle}:${a.title}(${a.reason})`)},{subtitle:"表格范围核对"})}),a.global.emitProgress()}else d.skipped&&((0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"table-scope-audit",status:"success",message:`表格范围核对:无可核对范围(${d.skipped})——不适用,非放弃`,details:[]},{subtitle:"表格范围核对"})}),a.global.emitProgress())}}let J=(0,aY.lR)({chapters:a.planning.finalBidStructureAudit.enrichedChapters,plannedTables:I,requiredTables:a.prepare.runtimePromptRules.requiredTables,bodyTablePolicy:a.understanding.bidComposition?.bodyTablePolicy}),K=J.chapters;if(!(0,p._C)(a.understanding.bidComposition)&&(0,bC.l)(a.planning.tenderRequirements)){let b=(0,aY.cR)((0,aY.K9)(a.planning.tenderRequirements?.entries||[]),a.planning.tenderRequirements?.structureRequirements||[]);if(b.length>0){let c=await (0,aH.Mv)(b.map(a=>a.source),K.map(a=>a.title)),d=(0,aY.c$)(K,b,c);K=d.chapters;let e=[];for(let a of K)for(let b of a.diagramRequirements||[])e.push(`${(0,av.GQ)(a.title)}:${b.split("(招标要求原文")[0]}`);(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"diagram-artifacts",status:"success",message:`图类呈现计划:识别 ${b.length} 项图类要求(${b.map(a=>a.name).join("、")}),注入 ${e.length} 项${d.unattached.length>0?`,未归属 ${d.unattached.length} 项(相似度不足不注入,防错挂)`:""}`,details:e},{subtitle:"图表呈现计划"})}),a.global.emitProgress()}}if(a.planning.effectiveChapters=K,(0,p._C)(a.understanding.bidComposition)){let b=a.understanding.bidComposition;(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"bid-composition-table-policy",status:"success",message:`编制规格消费:正文禁表(显式禁表句)——小节规划 ${t} 项表格需求与提示词必需表格 ${a.prepare.runtimePromptRules.requiredTables.length} 张均不进入正文,图表由终稿附表区 ${b.appendixPlan.length} 项附表承接`,details:[...b.conflicts.map(a=>`${a.rule} → ${a.resolution}`),...b.appendixPlan.map(a=>`附表${a.no}:${a.title}${"figure"===a.kind?"(图类,图件说明承载)":`(数据源:${a.dataSource})`}`)]},{subtitle:"表格计划"})}),a.global.emitProgress()}else if(a.understanding.bidComposition?.bidType==="blind"){let b=J.chapters.reduce((a,b)=>a+(b.tablePlans?.length||0),0);(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"bid-composition-table-policy",status:"success",message:`暗标编制规格消费:招标正文表格口径按证据判定为允许——表格计划 ${b} 项正常构建进入正文(原「暗标一律禁表」硬推已删除);正文图片仍禁(图类以表格化数据/文字框图表达)${J.unattachedRequiredTables.length>0?`;提示词必需表格 ${J.unattachedRequiredTables.length} 张未归属,交由终验兜底插入`:""}`,details:[...a.understanding.bidComposition.conflicts.map(a=>`${a.rule} → ${a.resolution}`),...a.understanding.bidComposition.appendixPlan.map(a=>`附表${a.no}:${a.title}${"figure"===a.kind?"(图类,图件说明承载)":`(数据源:${a.dataSource})`}`)]},{subtitle:"表格计划"})}),a.global.emitProgress()}else J.unattachedRequiredTables.length>0&&(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"required-tables-unattached",status:"success",message:`提示词必需表格归属:${J.unattachedRequiredTables.length} 张未匹配到明确章节(${J.unattachedRequiredTables.join("、")}),交由文档合成终验兜底插入`,details:["未归属必需表格不做语义错挂——防止表格落到不相关章节"]},{subtitle:"表格计划"})});a.planning.effectiveChapters=(b=a.planning.effectiveChapters).length?b.map((a,b)=>{let c=a.sections||[];if(c.length<2||!(0===b||/概况|总体理解|编制说明|编制依据/u.test(a.title)))return a;let d=c.findIndex(a=>/^(?:编制说明|编制依据)/u.test(a)||/工程概况|项目概况|基本概况/u.test(a));if(d<=0)return a;let e=[c[d],...c.filter((a,b)=>b!==d)];return{...a,sections:e}}):b,D>0&&((0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"outline-topic-filter",status:"success",message:`大纲小节主题过滤:剔除 ${D} 个评标纪律/商务报价类离题小节`,details:["被剔除小节不进入写作、目录与预算计划"]},{subtitle:"大纲主题约束"})}),a.global.emitProgress()),(a.planning.finalBidStructureAudit.issues.length>0||a.understanding.bidStructureAudit.issues.length>0)&&(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"bid-structure-audit",status:a.planning.finalBidStructureAudit.issues.some(a=>"blocker"===a.severity)?"failed":"success",message:`评标结构符合性校验:${a.planning.finalBidStructureAudit.diagnostics.length} 个结构组,${a.planning.finalBidStructureAudit.diagnostics.filter(a=>"satisfied"===a.status).length} 个已满足,${a.planning.finalBidStructureAudit.diagnostics.filter(a=>"missing"===a.status&&"required"===a.level).length} 个必查缺失(已自动补挂),${a.planning.finalBidStructureAudit.diagnostics.filter(a=>"fragmented"===a.status).length} 个分散`,details:[...a.planning.finalBidStructureAudit.diagnostics.map(a=>`${"satisfied"===a.status?"满足":"fragmented"===a.status?"分散":"补挂"}:${a.groupTitle}${"missing"===a.status?`(补挂小节:${a.missingSections.join("、")})`:""}`),...a.planning.finalBidStructureAudit.issues.map(a=>`提示:${a.message}`).slice(0,8)]},{subtitle:"评标结构校验"})}),a.prepare.template={...a.prepare.template,chapters:a.planning.effectiveChapters},a.planning.requirementsSimilarity=await (0,aH.Mv)([...(0,bC.Uk)(a.planning.tenderRequirements).map(({item:a})=>(0,bC.E6)(a)),...(a.planning.tenderRequirements?.structureRequirements||[]).map(bC.JX)],a.planning.effectiveChapters.map(a=>(0,bC.NT)(a.title))),a.planning.factTokenScopeClassifier=await (0,ds.h)(),a.planning.chapterIntentClassifier=await dB(a.planning.effectiveChapters.map(a=>({key:a.title,aliases:a.purpose?[`${a.title}${a.purpose}`]:[]}))),a.planning.professionalDepthClassifier=await (0,dC.e)(),a.planning.clarificationOverrides=(0,c5.ht)((a.understanding.allEvidence||[]).map(a=>({text:String(a.content||""),source:`${a.filePath||""} ${a.sectionTitle||""}`})));{let b=a.planning.earlyTruthAudit??(()=>{let b=[...a.understanding.preliminaryFactsModel?.preciseFacts||[],...a.understanding.preliminaryFactsModel?.project||[],...a.understanding.preliminaryFactsModel?.schedule||[],...a.understanding.preliminaryFactsModel?.quality||[],...a.understanding.preliminaryFactsModel?.safety||[]].map(a=>({key:a.key,label:a.fieldName,value:a.value,sourceFile:a.sourceFile})),c=[...(a.understanding.allEvidence||[]).map(a=>({text:String(a.content||""),source:`${a.filePath||""} ${a.sectionTitle||""}`})),...b.map(a=>({text:String(a.value??""),source:String(a.sourceFile||"")}))];return(0,A.iC)({facts:b,overrides:(0,ax.Oq)((0,ax.UD)(c)),labeledValues:(0,ax.Su)(c)})})();a.planning.caliberLedger=(0,A.wc)(b),a.planning.truthConstraint=(0,A.gu)(b)}a.planning.writingTaskBrief=(0,c3.G0)({chapters:a.planning.effectiveChapters,factsModel:a.understanding.preliminaryFactsModel,projectGraph:a.understanding.projectGraph||void 0,requirement:a.global.input.requirement,templateName:a.prepare.template.name,clarificationConstraint:[a.planning.truthConstraint,(0,c5.Tp)(a.planning.clarificationOverrides||[])].filter(Boolean).join("\n\n")}),a.planning.tenderWritingRulesText=i("tenderWritingRulesText",(0,bC.ey)(a.planning.tenderRequirements)),a.planning.projectContext=[a.planning.baseProjectContext,a.planning.tenderWritingRulesText].filter(Boolean).join("\n\n"),a.planning.chapterScopedProjectContext=b=>[a.planning.constructionOrgContext,a.planning.tenderWritingRulesText].filter(Boolean).join("\n\n"),a.planning.documentBudget=(0,j.tF)({requirement:d.requirement,promptTexts:d.promptTexts,template:a.prepare.template,chapters:a.planning.effectiveChapters,spec:a.prepare.documentSpec}),a.planning.plannedDocument=await a.planning.plannedDocumentTask,a.understanding.agentWorkflow.documentPlan=a.planning.plannedDocument.plan,a.understanding.agentWorkflow.nodes.push(a.planning.plannedDocument.node),(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"agent-document-planner",status:"success",message:a.planning.plannedDocument.node.outputSummary||"Agent 文档规划完成",details:a.planning.plannedDocument.plan.chapters.map(a=>`${a.title}:${a.sections.length} 条细目`)},{subtitle:"Agent Document Planner"})}),a.global.checkpointChapterOrderIds=a.planning.effectiveChapters.map(a=>a.id);let L=a.planning.documentBudget.targetChars||[...a.planning.documentBudget.chapterTargets.values()].reduce((a,b)=>a+b,0),M=a.understanding.preliminaryFactsModel,N=(0,j.s)({pools:M?[M.project,M.schedule,M.quality,M.safety,M.resources,...Object.values(M.schemaFacts??{})]:[],preciseFacts:M?.preciseFacts}),O=N.parameters,P=(M?.tables??[]).reduce((a,b)=>a+(b.rows?.length??0),0),Q=N.basicFacts,R=(a.understanding.writerEvidence??[]).filter(a=>/[.](?:dwg|dxf)$/iu.test(String(a.filePath??""))).length,S=(0,j.KZ)({targetWords:L,parameters:O,boqRows:P,drawingFacts:R,basicFacts:Q});if(a.planning.evidenceDensity=S,(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"evidence-density-check",status:S.sufficient?"success":"failed",message:S.sufficient?`证据密度体检通过:资料可支撑约 ${S.supportableWords} 字(目标 ${S.targetWords} 字)`:`证据密度不足:资料可支撑约 ${S.supportableWords} 字,低于目标 ${S.targetWords} 字(差额约 ${Math.round(S.shortfall)} 字)`,details:S.remediation},{subtitle:"生成准备"})}),!S.sufficient)throw Error(`证据密度不足,无法支撑目标篇幅:${S.remediation.join(" ")}`);a.planning.generationStrategy=(0,g.JP)({template:a.prepare.template,targetWords:L,requirement:a.global.input.requirement,materialFileCount:a.prepare.materialFilePaths.length,evidenceCount:a.understanding.allEvidence.length}),a.planning.generationBudget=function(a){let b=Math.max(1,a.chapters.length),c=a.targetWords>0?Math.round(a.targetWords/b):1200,d=a.strategy,e=[],f=a.materialFileCount<4&&a.evidenceCount<6,g=Math.max(1,Math.min(b,(Number.isFinite(a.configuredChapterConcurrency)&&a.configuredChapterConcurrency>0?Math.floor(a.configuredChapterConcurrency):void 0)??b)),h=(0,aV.Qf)(a.targetWords),i="fast"===d.mode?1:Math.max(1,b),{floorChars:j,ceilingChars:k}=c>=6e3?{floorChars:14e3,ceilingChars:4e4}:c>=3e3?{floorChars:11e3,ceilingChars:28e3}:{floorChars:8e3,ceilingChars:18e3},l=d.repairRoundBudget?d.repairRoundBudget:Math.max(2,Math.min(4,2+ +(a.targetWords>=2e4)+ +!!f)),m=Math.min(l*b,Math.max(12,2*b));return"strict"===d.mode&&e.push("strict:风险领域关键词命中(专项/安全/质量/验收/合同/合规等)"),a.targetWords>=4e4&&e.push("strict:目标篇幅超长(≥4 万字)"),f&&e.push("strict:资料稀疏(资料包文件 <4 且可用证据 <6 条)"),"fast"===d.mode&&e.push("fast:小文档(≤6000 字且 ≤4 章)全局审查降级为 35% 抽检"),"longform"===d.mode&&e.push("longform:长文档(≥3 万字或 ≥8 章)"),"balanced"===d.mode&&e.push("balanced:常规篇幅文档,标准审查深度"),e.push(`全章节并行生成(${g}/${b} 章同批),审查流水线 ${i} 路,全局 LLM 并发不设上限,每章证据预算 ${Math.round(j/1e3)}k-${Math.round(k/1e3)}k 字符,修复轮次预算每章 ${l} 轮(文档级总池 ${m} 轮,收敛判定优先)`),{strategy:d,chapterConcurrency:g,reviewConcurrency:i,llmConcurrency:h,evidenceFloorChars:j,evidenceCeilingChars:k,repairRoundBudget:l,repairPoolBudget:m,triggers:e}}({template:a.prepare.template,chapters:a.planning.effectiveChapters,targetWords:L,requirement:a.global.input.requirement,materialFileCount:a.prepare.materialFilePaths.length,evidenceCount:a.understanding.allEvidence.length,hasVeryLargeExplicitChapter:a.planning.effectiveChapters.some(a=>(a.sections||[]).filter(Boolean).length>=30),configuredChapterConcurrency:(0,b0.z)().chapterConcurrency||0,strategy:a.planning.generationStrategy}),a.planning.generationDiagnostics=(0,g.Zk)(a.planning.generationStrategy),(a.understanding.earlyFactPool.factSanitize.truncated>0||a.understanding.earlyFactPool.factSanitize.dropped>0||a.understanding.earlyFactPool.factSanitize.repaired>0)&&(a.planning.generationDiagnostics.factSanitize={...a.understanding.earlyFactPool.factSanitize}),a.planning.planPhaseStartedAt=Date.now(),(0,aV.t5)(L),(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"document-strategy",status:"success",message:`已自动选择 ${a.planning.generationStrategy.mode} 生成策略:章节审查 ${a.planning.generationStrategy.enableChapterReview?"启用":"跳过"}、全局审查 ${a.planning.generationStrategy.enableGlobalReview?`${a.planning.generationStrategy.globalReviewSamplingRate&&a.planning.generationStrategy.globalReviewSamplingRate<1?`抽检 ${Math.round((a.planning.generationStrategy.globalReviewSamplingRate??1)*100)}%`:"启用"}`:"跳过"}、最终质量审查 ${a.planning.generationStrategy.enableFinalQualityReview?"启用":"跳过"}`,details:a.planning.generationBudget.triggers},{subtitle:"后台自动策略"})}),a.understanding.canonicalFacts.scopeConflicts.length>0&&(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"scope-conflict-resolution",status:"success",message:`源级数据口径冲突已裁决(补疑/澄清修正文件权威最高):${a.understanding.canonicalFacts.scopeConflicts.map(a=>a.resolution?`${a.scope} → ${a.resolution}`:`${a.scope} → 待人工复核`).join(";")}`,details:a.understanding.canonicalFacts.scopeConflicts.flatMap(a=>a.values.map(a=>`来源「${a.sourceFile||"未知文件"}」取值 ${a.value}${a.unit}`))},{subtitle:"数据口径裁决"})});let T=a.prepare.hasExplicitOutline?"OUTLINE 章节":"提示词大纲";a.planning.sectionPlanningStage=(0,k.X5)({type:"validation",roleId:"section-planning",status:"success",message:`小节规划:${r} 章统一融合规划(基于${T}、提示词强制小节与项目资料)——融合小节合计 ${q} 个(其中锁定 ${o} 个)、表格需求 ${t} 项`,details:v.length?[...v]:void 0},{subtitle:"小节规划策略"});let U=a.prepare.hasExplicitOutline?`;识别到 OUTLINE 章节 ${a.prepare.explicitPromptChapters.length} 个`:";未识别到有效 OUTLINE 章节(提示词缺显式大纲时派生会先失败,不该到达这里)",V=a.prepare.promptPlan.prompts.map(a=>`${a.category}|${a.id}|${a.name}|${a.content.length} 字符|hash=${a.contentHash}|${a.contentPreview}`);(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"role_binding",roleId:"prompt-plan",status:"success",message:`已绑定项目资料 ${a.prepare.materialFilePaths.length} 份、${a.prepare.promptPlan.prompts.length} 个有效提示词;写作 ${a.prepare.promptPlan.writerPrompts.length}、章节 ${a.prepare.promptPlan.chapterPrompts.length}、抽取 ${a.prepare.promptPlan.extractionPrompts.length};已自动抽取运行时规则 ${a.prepare.runtimePromptRules.executionSummary.length} 条${U}`,details:[...V,...a.prepare.runtimePromptRules.executionSummary.map(a=>`runtimeRule|${a}`)]},{subtitle:"提示词计划",roleName:"提示词计划"})}),(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"runtime-prompt-rules",status:"success",message:`运行时提示词规则已抽取:${a.prepare.runtimePromptRules.executionSummary.length} 条,版本 ${a.prepare.runtimePromptRules.sourceHash}`,details:a.prepare.runtimePromptRules.executionSummary.length?[...a.prepare.runtimePromptRules.executionSummary,`必需表格:${a.prepare.runtimePromptRules.requiredTables.join("、")||"无"}`,`必含关键词:${a.prepare.runtimePromptRules.requiredKeywords?.join("、")||"无"}`,`禁含内容:${a.prepare.runtimePromptRules.forbiddenPatterns?.join("、")||"无"}`]:["未从提示词中识别到额外硬规则,使用系统默认质量规则"]},{subtitle:"提示词规则执行"})}),(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"document-readiness",status:a.prepare.readiness.ready?"success":"failed",message:"生成准备度:绑定资料已就绪",details:a.prepare.readiness.diagnostics},{subtitle:"生成准备度检查"})}),(0,l.Wl)(a,{batch:"generation.planning",stage:(0,k.X5)({type:"validation",roleId:"diversity-governance",status:"success",message:`多文档反雷同:组织视角「${a.planning.diversityProfile.perspective}」\xd7命名风格「${a.planning.diversityProfile.style}」;历史指纹避让 ${w.length} 个标题${y>0?`,撞名局部改名 ${y} 章${z>0?`(局部改名后仍近似 ${z} 处,已接受)`:""}`:""}`,details:[`历史指纹池 ${a.planning.fingerprintPool.entries.length} 条(仅本机历史文档标题与结构,无正文)`,`多样性画像 ${a.planning.diversityProfile.id}`]},{subtitle:"多样性治理"})}),(0,l.Wl)(a,{batch:"generation.planning",stage:a.planning.sectionPlanningStage}),a.global.emitProgress()}var dH=c(19898),dI=c(14070),dJ=c(70963);async function dK(a){if(a.understanding.evidenceScopePaths=new Set(a.prepare.materialFilePaths),a.understanding.fileRoleByPath=new Map([...a.prepare.kindByPath.entries()].map(([a,b])=>[a,(0,db._W)(b)])),a.understanding.fileProcessingByPath=new Map([...a.prepare.processingByPath.entries()].map(([a,b])=>[a,b])),(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:"running",message:"正在读取项目资料包索引",details:["使用上传阶段已完成的解析、切片和索引结果","不在生成流程中重新解析或入库","准备按资料类型召回章节证据"],progress:{current:1,total:3,label:"读取索引"}},{subtitle:"知识库检索"})}),a.global.emitProgress(),a.understanding.project=await a.global.withProgressHeartbeat(()=>a.understanding.manager.getProject(a.prepare.projectRoot)),a.understanding.indexHealth=(0,s.EK)(a.understanding.project,[...a.understanding.evidenceScopePaths]),a.understanding.indexHealth.blockingIssues.length>0)throw Error(`生成前知识索引不可用:${a.understanding.indexHealth.blockingIssues.join(";")}`);a.understanding.availableEvidenceScopePaths=new Set(a.understanding.indexHealth.usablePaths),a.understanding.requestedEvidencePerChapter=(0,s.G2)(a.understanding.project,[...a.understanding.availableEvidenceScopePaths],a.global.input.maxEvidencePerChapter);let b=a.understanding.indexHealth.pendingJobs>0||0===a.understanding.indexHealth.usableChunkCount;a.understanding.rolePoolRisk=(0,da.gq)({totalChunks:a.understanding.indexHealth.usableChunkCount,loadedChunks:Math.min(a.understanding.indexHealth.usableChunkCount,20*a.prepare.materialFilePaths.length),vectorReady:a.understanding.indexHealth.vectorStatus?"ready"===a.understanding.indexHealth.vectorStatus.status:void 0}),(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"knowledge_retrieval",roleId:"knowledge-index",status:b?"failed":"success",message:`已读取知识索引:项目资料 ${a.understanding.indexHealth.scopedRecords.length} 份,可用切片 ${a.understanding.indexHealth.usableChunkCount} 条`,details:[`项目资料:${a.understanding.evidenceScopePaths.size} 份`,`可用证据文件:${a.understanding.availableEvidenceScopePaths.size} 份`,`向量状态:${(0,s.EG)(a.understanding.indexHealth.vectorStatus?.status)}`,...a.understanding.indexHealth.warnings,"后续将按招标正文/清单/图纸/补疑等资料类型召回"],progress:{current:3,total:3,label:"索引已就绪"}},{subtitle:"知识库检索"})}),a.global.emitProgress(),(0,f.Te)(a.global.input.signal),a.understanding.allEvidence=[],a.understanding.retrievalCoverageReports=[],a.understanding.webResearchReport={enabled:a.prepare.webAccessConfig.enabled,queries:[],evidenceCount:0,filteredCount:0,chapters:[]},a.understanding.missingItems=[],a.understanding.clarificationRequests=[],a.understanding.unfixableDeclarations=[],a.understanding.failedChapterMessages=[],a.understanding.chapterGenerationStages=[],a.understanding.chapterDraftsByOrder=[],a.understanding.chapterGenerationStagesByOrder=[];let c=new Map,d=[],e=new Map;a.understanding.getCachedFileDetail=b=>{let c=`${b}::full`;if(!e.has(c))try{e.set(c,a.understanding.project.getFileDetail?.(b))}catch{e.set(c,void 0)}return e.get(c)},a.understanding.searchWithCache=async(b,e,g,h,i)=>{let j=(0,s.Iu)(h),k=i??(0,dH.materialRootsOfFiles)(e),l=(0,f.c6)({query:b,scopedFilePaths:e,effectiveMaterialRoots:k,limit:g,weights:j,generationMode:!0,reranker:!0}),m=c.get(l);if(m)return m;let n=await a.understanding.manager.search(a.prepare.projectRoot,b,{scope:"project",filters:{filePaths:e,materialRoots:k},limit:g,weights:j,generationMode:!0,disableReranker:!1}).catch(a=>(d.push({query:b,message:a instanceof Error?a.message:String(a)}),null));if(null===n)return[];let o=n.results||[];return(0,ax.f2)(o,a.planning.earlyOverrideList),c.set(l,o),o};let g={stage:(0,k.X5)({type:"file_understanding",roleId:"project-understanding",status:"running",message:`正在理解项目资料:${a.prepare.projectMaterialProfile.files.length} 份资料,${Object.values(a.prepare.projectMaterialProfile.groups).filter(a=>a.length>0).length} 类资料类型`,progress:{current:1,total:3,label:"资料理解"}},{subtitle:"项目资料理解"})};(0,l.Wl)(a,{batch:"generation.understanding",stage:g.stage}),a.global.emitProgress();let i=await (0,s.jX)({manager:a.understanding.manager,project:a.understanding.project,projectRoot:a.prepare.projectRoot,scopedFilePaths:[...a.understanding.availableEvidenceScopePaths].filter(Boolean).sort(),scopedMaterialRoots:a.prepare.materialScope.selectedMaterialRoots,fileRoleByPath:a.understanding.fileRoleByPath,fileProcessingByPath:a.understanding.fileProcessingByPath,signal:a.global.input.signal});i.length>0&&(a.understanding.allEvidence.push(...i),(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"knowledge_retrieval",roleId:"project-basic-evidence",status:"success",message:`已锁定项目基础事实证据 ${i.length} 条`,details:i.slice(0,8).map(a=>`${cr.basename(a.filePath)}|${a.sectionTitle||"正文片段"}|score=${a.score.toFixed(2)}`)},{subtitle:"基础事实召回"})}),a.global.emitProgress()),a.understanding.searchFailures=d,d.length>0&&((0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"knowledge_retrieval",roleId:"kb-search-failures",status:"failed",message:`知识库检索失败 ${d.length} 次(失败与「无命中」已分开计;失败结果不写缓存,同 query 后续会重试)`,details:d.slice(0,10).map(a=>`${a.query}:${a.message}`)},{subtitle:"基础事实召回"})}),a.global.emitProgress());let{safe:j,excluded:m}=await (0,cR.a0)(a.understanding.allEvidence);a.understanding.writerEvidence=j,a.understanding.bidProcedureJudge=await (0,cR.M8)(),m.length>0&&((0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"knowledge_retrieval",roleId:"evidence-content-safety",status:"success",message:`证据内容安全过滤:${m.length} 条投标程序/评标纪律类证据已从写作链断开(系统侧提取通道不受影响)`,details:m.slice(0,6).map(a=>`${cr.basename(a.filePath)}|${a.sectionTitle||"正文片段"}`)},{subtitle:"证据内容安全"})}),a.global.emitProgress()),a.understanding.safeProjectBasicEvidence=i.filter(a=>!m.includes(a)),a.understanding.excludedEvidenceKeys=new Set(m.map(cR.hM)),a.understanding.earlyFactPool=(0,u.d6)({evidence:a.understanding.writerEvidence,template:a.prepare.template,spec:a.prepare.documentSpec,profile:a.prepare.domainProfile});let n=a.understanding.earlyFactPool.localFacts,o=[...n,...a.understanding.earlyFactPool.projectBasicFacts,...a.understanding.earlyFactPool.preciseFacts];a.understanding.scopedIntelligence=(0,dF.hp)({projectRoot:a.prepare.projectRoot,template:a.prepare.template,requirement:a.global.input.requirement,materialScope:a.prepare.materialScope});let q=[...(0,f.lX)(a.understanding.scopedIntelligence?.facts||[]),...o,...(0,v.UT)(a.understanding.writerEvidence)],r=(0,v.GZ)(q,a.prepare.projectRoot);a.understanding.preliminaryFactsModel=await (0,u.d7)(r,a.understanding.earlyFactPool.structuredTables,a.understanding.missingItems,a.prepare.documentSpec,a.prepare.domainProfile);{let b=[...a.understanding.allEvidence.map(a=>({text:String(a.content||""),source:`${a.filePath||""} ${a.sectionTitle||""}`})),...r.map(a=>({text:String(a.value??""),source:String(a.sourceFile||"")}))],c={facts:r.map(a=>({key:a.key,label:a.fieldName,value:a.value,sourceFile:a.sourceFile})),overrides:(0,ax.Oq)((0,ax.UD)(b)),labeledValues:(0,ax.Su)(b)},d=(0,A.iC)(c),e=d.resolved.flatMap(a=>(a.superseded||[]).map(b=>({superseded:b,effective:a.value,scope:[a.attribute],evidence:a.evidence,kind:"override"})));if(a.planning.earlyTruthAudit=d,a.planning.truthInputs=c,a.planning.earlyOverrideCount=e.length,e.length>0){let b=0,c=a=>{let c=(0,ax.M0)(String(a??""),e);return b+=c.applied.length,c.text};for(let a of r)a.value=c(a.value);let f=a.understanding.preliminaryFactsModel;for(let a of[f.project,f.schedule,f.quality,f.safety,f.resources,f.preciseFacts,f.bills,f.rules,f.specifications,f.drawings])for(let b of a||[])b.value=c(b.value);for(let b of a.understanding.writerEvidence)b.content=c(b.content);a.planning.earlyOverrideList=e,b>0&&((0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"fact_extraction",roleId:"effective-value-preposition",status:"success",message:`现行口径前置:${e.length} 组被取代值(${[...new Set(e.map(a=>`${a.superseded}→${a.effective}`))].slice(0,3).join("、")})已在写作输入中就地替换 ${b} 处`,details:[...d.resolved.filter(a=>a.superseded.length>0).slice(0,8).map(a=>`${a.attribute}:${a.value}(被取代:${a.superseded.join("、")})`)]},{subtitle:"现行口径前置"})}),a.global.emitProgress())}}for(let b of(a.understanding.agentWorkflow=(0,c8.Qu)({template:a.prepare.template,requirement:a.global.input.requirement,projectRoot:a.prepare.projectRoot,facts:r,projectGraph:a.understanding.scopedIntelligence?.projectGraph,projectGraphSource:a.understanding.scopedIntelligence?"project-intelligence":void 0,materialScope:a.prepare.materialScope}),(0,c8.SU)(a.understanding.agentWorkflow)))(0,l.Wl)(a,{batch:"generation.understanding",stage:b});if(a.understanding.scopedIntelligence&&(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"file_understanding",roleId:"project-intelligence-cache",status:"success",message:`已复用入库后资料包理解资产:${a.understanding.scopedIntelligence.files.length} 份资料`,details:[`项目级缓存时间:${new Date(a.understanding.scopedIntelligence.cache.createdAt).toLocaleString()}`,`资料包范围指纹:${a.understanding.scopedIntelligence.scope.scopeHash.slice(0,12)}`,`复用预计算事实:${a.understanding.scopedIntelligence.facts.length} 条`,`复用预计算项目图谱:${a.understanding.scopedIntelligence.projectGraph.works.length}工程/${a.understanding.scopedIntelligence.projectGraph.methods.length}工法/${a.understanding.scopedIntelligence.projectGraph.resources.length}资源`,`复用施工组织设计专项图谱:${a.understanding.scopedIntelligence.constructionOrganizationGraph.workPackages.length} 个工作包/${a.understanding.scopedIntelligence.constructionOrganizationGraph.controlMatrix.length} 条控制矩阵`,`图谱来源:${a.understanding.scopedIntelligence.cache.projectGraphMessage}`,`章节意图证据覆盖:${Object.keys(a.understanding.scopedIntelligence.evidenceByChapterId||{}).length}/${a.prepare.template.chapters.length} 章`,`排除正文不适用资料:${a.understanding.scopedIntelligence.files.filter(a=>!a.usableForBody).length} 份`]},{subtitle:"项目理解缓存 / 资料包"})}),a.global.emitProgress(),a.understanding.projectGraph=a.understanding.agentWorkflow.baseProjectGraph,!a.understanding.scopedIntelligence){(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"file_understanding",roleId:"project-graph",status:"running",message:`正在临时构建完整项目图谱:${a.understanding.allEvidence.length} 条证据 → LLM 结构化提取`,details:["缓存缺失或版本过期,建议重新构建项目理解缓存;本次生成将临时构建完整项目图谱。","提取:工程内容、施工方法、材料设备、技术标准、重点难点"],progress:{current:2,total:3,label:"项目图谱"}},{subtitle:"项目资料图谱分析"})}),a.global.emitProgress();let b=await a.global.withProgressHeartbeat(()=>(0,dJ.i)({evidence:a.understanding.writerEvidence,signal:a.global.input.signal,projectRoot:a.prepare.projectRoot,requirement:a.global.input.requirement,templateId:a.prepare.template.id}));if(!b.graph)throw Error(`完整项目图谱构建失败:${b.stage.message||b.stage.status}`);a.understanding.projectGraph=b.graph,(0,l.Wl)(a,{batch:"generation.understanding",stage:b.stage}),a.global.emitProgress()}a.understanding.projectGraph&&(a.prepare.projectUnderstanding=(0,db._n)(a.prepare.template,a.prepare.projectMaterialProfile,a.understanding.projectGraph)),(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"file_understanding",roleId:"project-understanding",status:"success",message:`已完成项目资料理解:${a.prepare.projectMaterialProfile.files.length} 份资料、${Object.values(a.prepare.projectMaterialProfile.groups).filter(a=>a.length>0).length} 类资料类型${a.understanding.projectGraph?`、图谱增强 ${a.understanding.projectGraph.works.length} 项工程内容`:""}`,details:[...a.prepare.projectUnderstanding.chapterPlans.slice(0,10).map(a=>`${a.chapterTitle}:必用 ${a.mustUseMaterialKinds.length} 类资料、必覆盖 ${a.mustCover.length} 项`),...a.prepare.projectUnderstanding.profile.warnings.length?[`资料风险:${a.prepare.projectUnderstanding.profile.warnings.slice(0,3).join(";")}`]:[]]},{subtitle:"项目资料理解"})}),a.global.emitProgress(),a.understanding.canonicalFacts=(0,v.qD)({facts:q,projectGraph:a.understanding.projectGraph,requiredKeys:v.nC.map(a=>a.key),projectRoot:a.prepare.projectRoot,requirement:a.global.input.requirement,templateId:a.prepare.template.id}),a.understanding.preliminaryFactsModel.canonical=a.understanding.canonicalFacts;let t=(0,av._9)(a.prepare.template,a.prepare.documentSpec,{preserveExplicitOutline:a.prepare.hasExplicitOutline}),w=a.understanding.allEvidence.filter(a=>/评审|评分标准|评分办法|详细评审/u.test(`${a.sectionTitle||""}${a.content}`)).map(a=>a.content);a.understanding.evaluationItems=function(a){let b=a.join("\n"),c=new Map;for(let a of b.matchAll(/(\d{1,2})\s*[.、.]\s*([^;。\n]{4,60})/gu)){let b=a[2].trim().replace(/[“”"'"]/gu,"");if(!/[\u4e00-\u9fa5]{3}/u.test(b)&&!/[杯奖]/u.test(b)||/AI|大模型|评审|评分|分值|分项|子项|满分|得分|投标人须|详见|招标文件/u.test(b)||/公共资源|电子交易|加密|投标|开标|评标委员会|评标价|中标候选|中标人|评标程序|评标流程|异常低价|保函|保证金|资格审查|资格后审/u.test(b)||"technical"!==(0,cT.m)(b))continue;let d=Number(a[1]);if(!c.has(d)){let a=function(a){let b=a.replace(/^针对/u,"").replace(/^确保/u,"").replace(/的保障体系与措施$/u,"").replace(/的管理体系与措施$/u,"").replace(/保障体系与措施$/u,"").replace(/管理体系与措施$/u,"").replace(/[,、;,;]+$/u,"").trim();return!/[\u4e00-\u9fa5]{3}/u.test(b)&&!/[杯奖]/u.test(b)||/工期与质量/u.test(b)?"":b.length>24?b.slice(0,24):b}(b);if(a&&(0,av.ob)(a)||(0,av.ob)(b))continue;c.set(d,{index:d,text:b,title:a})}}return[...c.values()]}(w),w.length>0&&0===a.understanding.evaluationItems.length&&(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"bid-structure-audit",status:"skipped",message:"评审章节证据存在但未提取到评分条目标题:评分标准编号条目提取为空,承接审计将静默通过",details:["请检查招标文件评标办法章节编号格式;评分项要求(创优目标/绿色等级/禁编日期)由评分项要求提取通道覆盖"]},{subtitle:"评标结构校验"})});let x=await (0,aH.Mv)(a.understanding.evaluationItems.map(a=>a.title),t.map(cX));a.understanding.bidStructureAudit=cY({template:a.prepare.template,chapters:t,requirement:a.global.input.requirement,evaluationItems:a.understanding.evaluationItems,semanticSimilarity:x});let y=[];for(let b of[...a.understanding.evidenceScopePaths].sort()){if(!/招标|补疑|答疑|评标/u.test(b))continue;let c=a.understanding.getCachedFileDetail(b);if(c?.chunks?.length)for(let a of c.chunks)y.push(a.content||"")}a.understanding.bidComposition=(0,p.SD)({tenderTexts:y,requirement:a.global.input.requirement,requiredTables:a.prepare.runtimePromptRules.requiredTables});let z=(0,p.iJ)(a.understanding.bidComposition);if((0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"bid-composition",status:"success",message:z.message,details:z.details},{subtitle:"标书编制规格"})}),a.global.emitProgress(),"unknown"===a.understanding.bidComposition.bidType&&((0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"bid-composition-warning",status:"success",message:"标书类型判定告警:未识别暗标/明标标记——本次按常规口径生成(正文表格策略按招标证据判定、正文图片允许);若本项目实为暗标,正文图片与投标人标记可能未被禁止(暗标通常不得出现),请核对招标文件后重跑",details:["核查点:招标文件「施工组织设计采用」勾选项(标记字符变体与「按暗标/采用暗标评审」语义条款均已覆盖)或「暗标编制要求」条款","判定证据链见「标书编制规格」节点"]},{subtitle:"标书编制规格\xb7判定告警"})}),a.global.emitProgress()),a.understanding.tenderRequirementsTask=(async()=>{try{let b,c=dH.BID_REQUIREMENT_SOURCE_KINDS,d=[];for(let b of[...a.understanding.evidenceScopePaths].sort()){let e=a.understanding.fileRoleByPath.get(b),f=!!e&&c.has(e),g=!e&&/招标|补疑|答疑|评标/u.test(b)&&!/图纸|dwg|dxf|cad|平面图|系统图|立面图|剖面图|大样|详图|幕墙/iu.test(b);if(!f&&!g)continue;let h=a.understanding.getCachedFileDetail(b);if(h?.chunks?.length)for(let c of h.chunks)d.push({chapterId:"tender-requirements",filePath:h.file?.relativePath||b,score:1,content:c.content||"",roleId:a.understanding.fileRoleByPath.get(b),processingType:a.understanding.fileProcessingByPath.get(b),sectionTitle:c.sectionTitle,source:"pinned-evidence"})}let e=a.understanding.allEvidence.filter(a=>{let b=a.roleId;return b?c.has(b):/招标|评标|投标须知|专用合同|合同条款/u.test(`${a.filePath||""}${a.sectionTitle||""}`)&&!/图纸|dwg|dxf|cad|平面图|系统图|立面图|剖面图|大样|详图|幕墙|清单|boq|xls/iu.test(`${a.filePath||""}`)}),f=d.length>0?d:(0,h.QR)(e,{preservePinned:!0}),g="0"!==process.env.DOCUMENT_EXTRACTION_CACHE?(0,bC.Sf)({collectionEvidence:f}):void 0,i=g?(0,bC.jl)(a.prepare.projectRoot,g):void 0;return i?(b=i,(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"tender-requirements-cache",status:"success",message:"复用上次提取结果(招标资料哈希命中,跳过判定 LLM)",details:(0,bC.zD)(b)},{subtitle:"招标要求提取\xb7缓存复用"})}),a.global.emitProgress()):(b=await a.global.withProgressHeartbeat(()=>(0,bC.mg)(f,{signal:a.global.input.signal,diagnostics:a.planning.generationDiagnostics,onPhase:(b,c)=>{(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"running",message:b,details:c},{subtitle:"招标要求提取"})}),a.global.emitProgress()},onProgress:(b,c)=>{(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"running",message:`逐条判定进行中:第 ${b}/${c} 批(每批 40 条,序号严格对齐)`,progress:{current:b,total:c,label:"条款判定"},details:[]},{subtitle:"招标要求提取"})})}})),g&&(0,bC.e_)(a.prepare.projectRoot,g,b)),(0,bC.l)(b)?((0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"success",message:`招标要求结构化提取完成:要求 ${b.reconciliation.entryCount} 条、排除 ${b.reconciliation.excludedCount} 条(${b.reconciliation.batchCount} 批判定)`,details:(0,bC.zD)(b)},{subtitle:"招标要求提取"})}),a.global.emitProgress()):f.length>0&&((0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"skipped",message:"招标要求提取未获得有效结果(模型不可用或资料中无要求条款),章级验收自动跳过",details:[]},{subtitle:"招标要求提取"})}),a.global.emitProgress()),b.extracted&&b.reconciliation.undecidedCount>0&&((0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"tender-requirements-undecided",status:"skipped",message:`对账未闭合:${b.reconciliation.undecidedCount} 条条款未判定(LLM 输出缺号且重试后仍缺)`,details:["未判定条款不进入分配与验收;请检查 LLM 可用性"]},{subtitle:"招标要求提取\xb7对账"})}),a.global.emitProgress()),b}catch(b){return(0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"validation",roleId:"tender-requirements-extraction",status:"skipped",message:"招标要求提取链异常,已降级为空模型(章级验收自动跳过)",details:[`异常信息:${b instanceof Error?b.message:String(b)}`,"请检查 LLM 可用性"]},{subtitle:"招标要求提取"})}),a.global.emitProgress(),(0,bC.Mx)(!1)}})(),a.planning.baseEffectiveChapters=(0,f.H1)(a.understanding.bidStructureAudit.enrichedChapters),a.prepare.template={...a.prepare.template,chapters:a.planning.baseEffectiveChapters},a.planning.plannedDocumentTask=(0,c7.NP)({template:a.prepare.template,context:a.understanding.agentWorkflow,title:a.prepare.template.name}),a.planning.plannedDocumentTask.catch(()=>void 0),a.understanding.chapterGraphMap=new Map,a.understanding.projectGraph){let b=new Set;for(let c of[...a.understanding.projectGraph.works,...a.understanding.projectGraph.methods,...a.understanding.projectGraph.resources,...a.understanding.projectGraph.schedule,...a.understanding.projectGraph.standards,...a.understanding.projectGraph.risks,...a.understanding.projectGraph.requirements,...a.understanding.projectGraph.siteConditions])(c.sourceFiles||[]).forEach(a=>b.add(a));for(let c of a.planning.baseEffectiveChapters){let d=[c.title,c.purpose,...c.sections||[],...c.requiredFacts||[],...c.queries||[]].join(" "),e=a=>a&&((0,dI.C1)(a,d,.18)||(0,dI.C1)(a,c.title,.12)),f=/概况|总体|部署|施工|进度|工期|质量|安全|资源|人材机|材料|机械|劳动力|风险|危大|绿色|环保/u.test(d),g=a.understanding.projectGraph.works.filter(a=>a.name&&(e(a.name)||f)),h=a.understanding.projectGraph.methods.filter(a=>a.name&&(e(a.name)||(a.applicableWorks||[]).some(e)||f)),i=a.understanding.projectGraph.resources.filter(a=>a.name&&(e(a.name)||/资源|人材机|材料|机械|劳动力/u.test(d)&&/material|equipment|labor/u.test(a.type))),j=a.understanding.projectGraph.gaps.filter(a=>!(0,dF.Ut)(a)&&(e(a)||f)),k=new Set;for(let a of g)(a.sourceFiles||[]).forEach(a=>k.add(a));for(let a of h)(a.sourceFiles||[]).forEach(a=>k.add(a));for(let a of i)(a.sourceFiles||[]).forEach(a=>k.add(a));0===k.size&&f&&[...b].forEach(a=>k.add(a)),a.understanding.chapterGraphMap.set(c.id,{graphFiles:k,graphBoqItems:i.map(a=>({name:a.name,quantity:a.quantity,unit:a.unit,sourceFiles:a.sourceFiles||[]})),graphWorks:g.map(a=>a.name),graphMethods:h.map(a=>a.name),gaps:j})}a.understanding.scopedIntelligence||((0,l.Wl)(a,{batch:"generation.understanding",stage:(0,k.X5)({type:"file_understanding",roleId:"project-graph-match",status:"success",message:`图谱→章节映射完成:${a.understanding.projectGraph.works.length}工程 ${a.understanding.projectGraph.methods.length}工法 ${a.understanding.projectGraph.resources.length}资源 → ${a.planning.baseEffectiveChapters.length}章`,details:a.planning.baseEffectiveChapters.map(b=>{let c=a.understanding.chapterGraphMap.get(b.id);return`${(0,av.GQ)(b.title)}:匹配文件${c?.graphFiles.size||0}个,BOQ项${c?.graphBoqItems.length||0}个`})},{subtitle:"图谱章节映射"})}),a.global.emitProgress())}}var dL=c(44533),dM=c(29281),dN=c(6444),dO=c(85441),dP=c(73859),dQ=c(92808);function dR(a){return[...new Set(a.filter(Boolean))]}function dS(a){let b=(0,dQ.t0)(a,dQ.hW);return b.length>0?b:["project_overview"]}function dT(a,b={}){let c=a.chapterDiagnostics.filter(a=>0===a.evidenceCount||a.missingFacts.length>0).slice(0,8).map(a=>`${a.title}:证据 ${a.evidenceCount} 条${a.missingFacts.length?`,缺失 ${a.missingFacts.slice(0,6).join("、")}`:""}`);return b.publicSafe?["## 生成事实使用边界",c.length?`章节证据风险:
326
325
  ${c.join("\n")}`:"","资料不足的事实不得编造;仅施工组织、计划安排、资源配置类数据可在文档要求允许时进行计划推导并标注。"].filter(Boolean).join("\n"):["## 后台生成准备度",`可生成:${a.ready?"是":"否"}`,a.missingRoles.length?`资料诊断:部分模板期望资料类型未从绑定文件中明确识别,生成时仅使用已绑定资料中的事实`:"",a.weakRoles.length?`资料诊断:部分资料类型证据较弱,生成时不得补写资料未明确的事实`:"",c.length?`章节级证据风险:
327
- ${c.join("\n")}`:""].filter(Boolean).join("\n")}var dX=c(38032);function dY(){return{parsed:!1,globalRequirements:[],chapterRequirements:[],factClues:[],styleRequirements:[],mandatoryBlockText:"",summary:""}}let dZ=[(0,aA.y4)("你是用户生成要求的语义解析专家。"),'把用户的生成提示词完整解析为可逐条核验的结构化要求清单,不得遗漏用户的任何实质要求;不得把通用客套话(如"请帮我生成""谢谢")当作要求。\n要求必须逐条短句(每条 ≤60 字)、可核验(生成后能判断是否满足);一条要求只写一件事,复合要求必须拆分。\nglobalRequirements:全文级强制要求——写作内容、深度、覆盖面、表格、量化要求等不限定具体章节的要求;若要求明确指向某个章节,必须放入 chapterRequirements 而不是 globalRequirements。\nchapterRequirements:章节级要求——chapterTitle 必须原样取自给定的章节列表,不得编造不存在的章节名;同一章节的多条要求合并为一条记录。\nfactClues:用户提示词中显式给出的项目专属事实线索——含数值、单位、规格、型号、标准编号、日期、地点、规模、金额、目标的短句(如"一般路灯 100W 109套、120W 9套""计划工期 365 日历天""开挖深度 5.2m");要求类语句("必须写X")不算事实线索;线索必须原样保留数值与表述,不得改写或换算。\nstyleRequirements:写作风格与格式要求(语气、详略、表格偏好、禁止风格等),最多 8 条。\n只返回 JSON。'].join("\n");function d$(a,b){let c=String(a||"").trim().replace(/^\d+[.、))]\s*/u,"");return!c||c.length>b?"":c}async function d_(a){let b=(a.requirement||"").trim(),c=(a.chapterTitles||[]).filter(Boolean),d=dY();if(!b||b.length<4||b.length<=40&&!/[::]|\n/u.test(b))return d;try{let e=await (0,aV.bb)(dZ,`章节列表(chapterRequirements 的 chapterTitle 必须原样取自以下列表):${c.join("、")||"(无)"}
326
+ ${c.join("\n")}`:""].filter(Boolean).join("\n")}var dU=c(38032);function dV(){return{parsed:!1,globalRequirements:[],chapterRequirements:[],factClues:[],styleRequirements:[],mandatoryBlockText:"",summary:""}}let dW=[(0,aA.y4)("你是用户生成要求的语义解析专家。"),'把用户的生成提示词完整解析为可逐条核验的结构化要求清单,不得遗漏用户的任何实质要求;不得把通用客套话(如"请帮我生成""谢谢")当作要求。\n要求必须逐条短句(每条 ≤60 字)、可核验(生成后能判断是否满足);一条要求只写一件事,复合要求必须拆分。\nglobalRequirements:全文级强制要求——写作内容、深度、覆盖面、表格、量化要求等不限定具体章节的要求;若要求明确指向某个章节,必须放入 chapterRequirements 而不是 globalRequirements。\nchapterRequirements:章节级要求——chapterTitle 必须原样取自给定的章节列表,不得编造不存在的章节名;同一章节的多条要求合并为一条记录。\nfactClues:用户提示词中显式给出的项目专属事实线索——含数值、单位、规格、型号、标准编号、日期、地点、规模、金额、目标的短句(如"一般路灯 100W 109套、120W 9套""计划工期 365 日历天""开挖深度 5.2m");要求类语句("必须写X")不算事实线索;线索必须原样保留数值与表述,不得改写或换算。\nstyleRequirements:写作风格与格式要求(语气、详略、表格偏好、禁止风格等),最多 8 条。\n只返回 JSON。'].join("\n");function dX(a,b){let c=String(a||"").trim().replace(/^\d+[.、))]\s*/u,"");return!c||c.length>b?"":c}async function dY(a){let b=(a.requirement||"").trim(),c=(a.chapterTitles||[]).filter(Boolean),d=dV();if(!b||b.length<4||b.length<=40&&!/[::]|\n/u.test(b))return d;try{let e=await (0,aV.bb)(dW,`章节列表(chapterRequirements 的 chapterTitle 必须原样取自以下列表):${c.join("、")||"(无)"}
328
327
 
329
328
  用户要求全文:
330
329
  ${b}
331
330
 
332
- 返回 JSON:{"globalRequirements":["要求1"],"chapterRequirements":[{"chapterTitle":"章标题","requirements":["要求1"]}],"factClues":["事实线索1"],"styleRequirements":["风格要求1"]}`,{maxTokens:3e3,temperature:0,signal:a.signal,diagnostics:a.diagnostics,prefixKey:"requirement-semantics"}),f=[...new Set((e?.globalRequirements||[]).map(a=>d$("string"==typeof a?a:a?.text,60)).filter(Boolean))].slice(0,24),g=[...new Set((e?.factClues||[]).map(a=>d$("string"==typeof a?a:a?.text,120)).filter(Boolean))].slice(0,24),h=[...new Set((e?.styleRequirements||[]).map(a=>d$("string"==typeof a?a:a?.text,60)).filter(Boolean))].slice(0,8),i=(e?.chapterRequirements||[]).map(a=>({chapterTitle:d$(a?.chapterTitle,60),requirements:[...new Set((a?.requirements||[]).map(a=>d$("string"==typeof a?a:a?.text,60)).filter(Boolean))].slice(0,12)})).filter(a=>0===c.length||c.some(b=>b===a.chapterTitle||a.chapterTitle.includes(b)||b.includes(a.chapterTitle))).filter(a=>a.chapterTitle&&a.requirements.length>0).slice(0,16);if(!(f.length>0||i.length>0||g.length>0))return d;let j=[...f,...i.flatMap(a=>a.requirements),...h],k=[],l=0;for(let a of j){if(l+a.length+8>3e3)break;k.push(a),l+=a.length+8}let m=k.length>0?["【用户强制要求——最高优先级,必须逐条满足;用户要求与系统默认规则冲突时,以用户要求为准】",...k.map((a,b)=>`${b+1}. ${a}`),"以上要求来自用户提示词语义解析,生成、检查和修复必须共同遵守。"].join("\n"):"";return{parsed:!0,globalRequirements:f,chapterRequirements:i,factClues:g,styleRequirements:h,mandatoryBlockText:m,summary:`用户要求解析:全文级 ${f.length} 条、章节级 ${i.length} 组、事实线索 ${g.length} 条、风格 ${h.length} 条`}}catch(b){let a=b instanceof Error?b.message:String(b);return console.error(`[requirementSemantics] 用户提示词语义解析失败:${a}`),{...d,parseFailed:!0,parseFailureReason:a}}}var d0=c(77416);async function d1(a){try{let{listGeneratedDocuments:b,getGeneratedDocument:d}=await Promise.resolve().then(c.bind(c,48661)),e=b(a).filter(a=>"generating"!==a.status).slice(0,20).map(b=>d(b.id,a)).filter(a=>!!a).flatMap(a=>{let b=a.reviewMetadata?.telemetry?.repairHeat;return b&&Object.keys(b).length>0?[{exportedAt:a.completedAt||a.updatedAt,repairHeat:b}]:(a.exportReports||[]).map(a=>({exportedAt:a.exportedAt,repairHeat:a.repairHeat}))}),{constraintSuggestions:f}=(0,d0.C$)(e);return(0,d0.Hz)(f)}catch{return""}}async function d2(a){let b=(0,dX.iA)({promptIds:a.global.input.promptIds??[],requirement:a.global.input.requirement||"",projectRoot:a.global.input.projectRoot||(0,dO.aY)(),title:a.global.input.title}),c=(0,dX.TQ)(b);if(a.prepare.derivation=b,a.prepare.projectRoot=cr.resolve(a.global.input.projectRoot||(0,dO.aY)()),!a.prepare.projectRoot)throw Error("No knowledge base project found");a.prepare.projectId=(0,dK.computeProjectId)(a.prepare.projectRoot),a.prepare.template=c,a.understanding.manager=(0,dO.getMultiProjectManager)(),a.global.chapterDrafts=[],a.global.checkpointChapterOrderIds=[],a.global.emitProgress=b=>{let c=b?[...b].sort((b,c)=>{let d=a.global.checkpointChapterOrderIds.indexOf(b.id),e=a.global.checkpointChapterOrderIds.indexOf(c.id);return(d<0?Number.MAX_SAFE_INTEGER:d)-(e<0?Number.MAX_SAFE_INTEGER:e)}):void 0;a.global.input.onProgress?.(c?{chapters:c}:void 0)};let d=Math.max(15e3,Math.min(6e4,Number(process.env.DOCUMENT_GENERATION_HEARTBEAT_MS??3e4)));if(a.global.withProgressHeartbeat=async b=>{let c=setInterval(()=>{a.global.input.signal?.aborted||a.global.emitProgress(a.global.chapterDrafts)},d);try{return await b()}finally{clearInterval(c)}},(0,l.Wl)(a,{batch:"generation.prepare",stage:(0,k.X5)({type:"role_binding",roleId:"document-spec-derivation",status:"running",message:`生成任务已创建,正在从提示词派生文档规格:${a.prepare.template.name}`,details:[`当前项目:${a.prepare.projectId}`,`资料目录:${(0,dO.NW)(a.prepare.projectRoot)}`,`文档名称:${b.title}(来源:${"human"===b.derivation.titleSource?"人工指定":"skill"===b.derivation.titleSource?"技能声明":"按项目名 + 文档类型派生"})`,`工程类型:${b.derivation.projectType};命中技能 ${b.derivation.matchedSkillIds.length}/${b.derivation.skillPoolSize} 个(读技能 ${b.derivation.matchReads} 次)`,`章节大纲:${b.chapters.length} 章,来源「${b.derivation.outlineSource}」;提示词 ${b.derivation.promptChars} 字符`,`生效提示词:${b.derivation.prompts.map(a=>`${a.name}(${a.category},${a.chars} 字符)`).join(";")}`,"正在读取项目资料包与提示词文本"],progress:{current:1,total:4,label:"初始化配置"}},{subtitle:"文档规格派生",roleName:"文档规格派生",order:0})}),a.global.emitProgress(),a.prepare.promptPlan=(0,e.CD)(a.global.input.promptIds??[]),a.prepare.promptIds=[...a.global.input.promptIds??[]],(0,l.Wl)(a,{batch:"generation.prepare",stage:(0,k.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在分析提示词要求与项目资料包",details:["解析提示词里的显式大纲","读取项目资料包","自动识别资料类型并构建项目理解"],progress:{current:1,total:3,label:"准备分析"}},{subtitle:"生成准备"})}),a.global.emitProgress(),a.prepare.materialScope=(0,db.ZR)(a.prepare.projectRoot,a.prepare.template,[(0,g.fC)(a.prepare.promptPlan.prompts),a.global.input.requirement||""].filter(Boolean).join("\n\n"),a.global.input.materialRoot?{materialRoot:a.global.input.materialRoot}:{}),a.prepare.materialScope.ambiguous||!a.prepare.materialScope.locked||0===a.prepare.materialScope.selectedFiles.length)throw Error(`资料范围未锁定:${a.prepare.materialScope.reason}`);a.prepare.materialFilePaths=a.prepare.materialScope.selectedFiles;let f=a.prepare.materialScope.selectedRoots;f.length>0&&((0,l.Wl)(a,{batch:"generation.prepare",stage:(0,k.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"知识库索引与资料清单已同步",details:[`本次生成使用的资料:${f.join("、")}(${a.prepare.materialFilePaths.length} 份资料),库内其他资料组切片保留不清理`],progress:{current:1,total:3,label:"准备分析"}},{subtitle:"生成准备"})}),a.global.emitProgress()),a.prepare.projectMaterialProfile=(0,de.W9)(a.prepare.projectRoot,{selectedFiles:a.prepare.materialScope.selectedFiles,selectedRoots:a.prepare.materialScope.selectedRoots}),a.prepare.projectUnderstanding=(0,de._n)(a.prepare.template,a.prepare.projectMaterialProfile);let{kindByPath:h,processingByPath:i}=(0,de.Hz)(a.prepare.projectMaterialProfile);a.prepare.kindByPath=h,a.prepare.processingByPath=i;let j=(0,g.fC)([...a.prepare.promptPlan.writerPrompts,...a.prepare.promptPlan.chapterPrompts]),m=(0,av.cs)([{text:a.global.input.requirement,source:"用户需求",strict:!0}]),n=(0,av.cs)([{text:j,source:"提示词",strict:!0}]);a.prepare.explicitPromptChapters=m.length>=2?m:n,a.prepare.hasExplicitOutline=a.prepare.explicitPromptChapters.length>=2,(0,l.Wl)(a,{batch:"generation.prepare",stage:(0,k.X5)({type:"validation",roleId:"document-spec-derivation",status:"success",message:`文档规格已派生:提示词显式大纲 ${a.prepare.explicitPromptChapters.length} 章 → 生效 ${a.prepare.template.chapters.length} 章(并入技能声明的章级职责 ${b.derivation.perChapter.reduce((a,b)=>a+b.skillIds.length,0)} 处)`,details:[`章节来源:${b.derivation.outlineSource}(章数 ≥ 2 的显式大纲是章结构的唯一来源)`,`生效章节:${a.prepare.template.chapters.map(a=>a.title).slice(0,12).join("、")}${a.prepare.template.chapters.length>12?" …":""}`,...b.derivation.perChapter.filter(a=>a.skillIds.length>0).slice(0,12).map(a=>`${a.title}|章域 ${a.domains.join("/")||"未识别"}|技能 ${a.skillIds.join("、")}`)]},{subtitle:"生成准备"})}),a.global.emitProgress(),a.prepare.projectMaterialSummary=await a.global.withProgressHeartbeat(()=>Promise.resolve((0,dR.P)(a.prepare.projectRoot,{requirement:a.global.input.requirement,boundFilePaths:a.prepare.materialFilePaths}))),(0,l.Wl)(a,{batch:"generation.prepare",stage:(0,k.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在生成自动文档规格并评估生成准备度",details:[`项目资料:${a.prepare.materialFilePaths.length} 份`,`资料类型:${Object.values(a.prepare.projectMaterialProfile.groups).filter(a=>a.length>0).length} 类`,"生成事实字段与章节约束"],progress:{current:2,total:3,label:"规格评估"}},{subtitle:"生成准备"})}),a.global.emitProgress();let o=await a.global.withProgressHeartbeat(()=>Promise.resolve((0,dQ.x)(a.prepare.template,a.global.input.requirement||"")));if(a.prepare.documentSpec=o.spec,a.prepare.domainProfile=(0,dS.$i)(a.prepare.template,a.global.input.requirement||""),a.prepare.readiness=function(a){var b,c,d;let e=a.resolvedRoles.filter(a=>a.required&&!a.satisfied).map(a=>a.role),f=a.resolvedRoles.filter(a=>a.weak).map(a=>a.role),g=(b=a.template,c=a.spec,d=a.summary,b.chapters.map(a=>{let b=function(a,b){let c=b.chapterRules.find(b=>b.id===a.id||b.title===a.title),d=(c?.requiredFactIds||[]).map(a=>b.factFields.find(b=>b.id===a)?.name).filter(Boolean);return dU([...a.requiredFacts||[],...d])}(a,c),e=dU([...dV([a.title,a.purpose,...a.queries||[],...a.sections||[]].join("\n")),...b.flatMap(a=>dV(a))]),f=e.filter(a=>(d.materialInventory[a]||[]).length>0),g=f.reduce((a,b)=>a+(d.materialInventory[b]||[]).length,0),h=b.filter(a=>dV(a).some(a=>f.includes(a))),i=b.filter(a=>!h.includes(a));return{chapterId:a.id,title:a.title,requiredFacts:b,coveredFacts:h,missingFacts:i,requiredRoles:e,satisfiedRoles:f,evidenceCount:g}})),h=[],i=[];0===a.template.chapters.length&&i.push("模板未配置章节,建议通过模板章节或显式 OUTLINE 提供文档结构"),a.template.chapters.some(a=>!a.purpose&&(!a.queries||0===a.queries.length)&&(!a.requiredFacts||0===a.requiredFacts.length))&&i.push("部分模板章节缺少 purpose、queries 或 requiredFacts,生成质量可能不稳定"),a.summary.source.ambiguous&&h.push(a.summary.source.selectionReason),a.summary.fingerprint.confidence<.34&&i.push("材料指纹置信度较低,建议绑定明确的材料文件"),0===a.summary.source.selectedFiles&&h.push("未绑定可用项目资料文件,无法支撑文档生成"),e.length>0&&0===a.summary.source.selectedFiles&&i.push("模板未绑定可用项目资料文件,请先绑定参与生成的资料"),f.length>0&&0===a.summary.source.selectedFiles&&i.push("绑定资料证据较弱,请确认资料已完成索引");let j=g.filter(a=>0===a.evidenceCount);j.length>0&&i.push(`章节级证据覆盖较弱:${j.slice(0,5).map(a=>a.title).join("、")}`);let k=a.summary.coverage.satisfiedRoles,l=a.resolvedRoles.filter(a=>!a.required&&!a.satisfied).map(a=>a.role),m=[`资料范围:${a.summary.source.selectionReason},可用文件 ${a.summary.source.selectedFiles}/${a.summary.source.totalFiles} 份`,`已识别资料类型:${k.join("、")||"无"}`,a.summary.coverage.missingRoles.length?`待补充必需资料类型:${a.summary.coverage.missingRoles.join("、")}`:"必需资料类型已满足",e.length?`模板强相关资料角色缺失:${e.join("、")}`:"模板强相关资料角色已满足",l.length?`可选资料角色未识别:${l.join("、")}`:"",f.length?`证据较弱资料角色:${f.join("、")}`:""].filter(Boolean);return{ready:0===h.length,missingRoles:e,weakRoles:f,diagnostics:m,chapterDiagnostics:g,blockingIssues:h,warnings:i}}({template:a.prepare.template,spec:a.prepare.documentSpec,summary:a.prepare.projectMaterialSummary,resolvedRoles:[]}),!a.prepare.readiness.ready)throw Error(`生成准备度不足:${a.prepare.readiness.blockingIssues.join(";")}`);if(a.prepare.generationWritingConstraintsPrompt='【全文写作硬约束(每一章生成时必须遵守,违反即评审失分)】\n1. 禁止编造时间事实:开工日期、竣工日期、工期起止等未在项目资料中确认的日期一律不得写入正文;进度表述改用“开工后第 N 天”“第 N 周”等相对口径,或引用资料中已确认的日期。\n2. 禁止商务内容(全文零商务句):暂列金额、暂估价、综合单价、清单合价、税率、投标报价、付款、进度款、工程款、结算、保证金、违约金、预付款、保函等商务数据,以及“按合同约定执行”式付款/保证金/结算/违约商务声明句,一律不得写入施工组织设计正文——商务与合同条款的响应属商务标内容,技术标正文不得出现任何商务内容,商务口径只允许出现在项目信息表中。\n3. 禁止资料来源罗列话术:不得出现“根据/依据招标文件、工程量清单、图纸及答疑”式来源罗列句,直接陈述项目事实与施工安排;编制依据小节可集中列出依据文件。\n3b. 编制依据小节必须列出具体法规名称及文号:国家法律法规条目列出《中华人民共和国建筑法》(主席令第91号公布,2019年修正)、《建设工程质量管理条例》(国务院令第279号公布,2019年修订)等具体名称及文号;地方性法规与政府规章条目按工程所在地列出具体名称(省/市级现行有效法规,如"XX省建筑市场管理条例""XX市城市绿化管理条例"形态,名称须为工程所在地真实法规);规范标准条目列出《建筑工程施工质量验收统一标准》(GB 50300-2013)等具体编号;招标文件原文引用的法规按其原文列出。不得只写“国家现行法律、行政法规”“现行规范标准”“地方法规规章”等类别话术。\n3c. 编制依据的规范标准条目**逐条独立成行**(每行一条,行首统一用「- 」),不得把多条挤进同一长句用「、」连写——长同形列举易引发跳字残缺(如把「《建筑给水排水及采暖工程施工质量验收规范》(GB 50242-2002)」写成「《建筑给水排水及采暖50242-2002)」),写完后逐条自检书名号与括号是否成对。\n4. 禁止跨章复述概况:除“工程概况/项目概况”章节外,其余章节不得以“本项目为/本工程为”开头整段复述项目总体概况,应直接展开本章主题内容。\n5. 禁止后台内部话术与条款响应元语言:不得出现“工作包”“WRITER_MISSING_SECTION”“已确认资料”等系统内部术语与兜底话术,一律改写为正式施工组织设计表述;不得书写“招标要求响应(前附表响应条款)”“按上述条款执行”“按招标文件约定/要求”等条款响应条幅或调用式元语言(评标人视角即编制模板痕迹)——技术性前附表条款一律以投标人口吻的正式技术表述落位各章节;商务性前附表条款(付款/保证金/结算等)不在技术标响应。\n6. 合规数值红线(安全、职业健康、危大工程章节必须逐条对照,违反即合规失分):\n a. 高温停工按《防暑降温措施管理办法》(安监总安健〔2012〕89号):日最高气温达到40℃以上应停止当日室外露天作业;37℃~40℃时室外露天作业时间累计不得超过6小时且气温最高时段3小时内不得安排室外露天作业;35℃~37℃时应换班轮休缩短连续作业时间。不得写成42℃等其他阈值。\n b. 危大工程判定线按住建部令第37号及建办质〔2018〕31号:基坑(槽)土方开挖、支护、降水,开挖深度超过3m(含3m)属危大工程,超过5m(含5m)属超过一定规模(需专家论证);模板支撑搭设高度8m及以上或搭设跨度18m及以上属超过一定规模;落地式钢管脚手架搭设高度24m及以上属危大工程、50m及以上属超过一定规模,悬挑式脚手架分段架体搭设高度20m及以上属超过一定规模;采用非常规起重设备方法且单件起吊重量10kN及以上属危大工程、100kN及以上属超过一定规模。判定必须给出本项目对应参数(开挖深度/支撑高度/搭设高度/起吊重量),参数未在资料中确认的不得自行判定为危大或超危大。证据中含基坑底标高、\xb10.000对应绝对标高、垫层底标高等数值的,必须直接引用并据此给出开挖深度具体数值(开挖深度=地面标高-坑底标高),不得仅写“开挖深度超过3m”而不给数值;标高、坡率(如1:1.5)等设计参数应写入基坑支护与土方开挖相关小节。\n c. 专家论证程序按住建部令第37号:超过一定规模的危大工程专项方案应组织不少于5名符合专业要求的专家(从地方住建主管部门专家库选取)论证;修改后的方案由施工单位技术负责人审核签字、加盖单位公章,并由总监理工程师审查签字、加盖执业印章后方可实施。\n d. 监测预警值单一口径:同一监测指标(基坑位移速率、沉降预警值等)全文只能出现一个数值口径,不得前后矛盾;预警值优先引用设计文件明确值,无设计要求时按现行监测技术标准选取并注明依据。\n e. 自设数值自洽:自设的防护尺寸、频次、时间节点等数值必须与同章及跨章表述一致,且尽量引用现行规范依据;无规范依据的自设值不得写成硬性规定。工期缓冲/预留天数的用途(如"竣工验收缓冲""工序衔接缓冲")全文只能有一个口径,不得一处写竣工验收缓冲、另一处写工序衔接缓冲。\n7. 禁止数据自查话术:不得把表格口径推算、数据一致性自查过程写入正文(如"上表合计行…与…不一致,故…修正为…"),表格与正文数值必须直接自洽;不得把招标条款编号碎片(如"3项规定""1委员会确定中""56m15:…")作为小节标题。\n7b. 禁止清单计量口径话术:不得出现"按清单口径""按清单汇总口径""清单口径为""按清单逐项""分部小计""本页小计"等工程量清单计量文件内部口径表述;工程量直接以正式施工组织设计口径陈述("本工程土方挖方总量为…m\xb3"),不得说明数值的清单来源或口径换算过程。\n7c. 小节标题规范:小节标题必须是正式施工组织设计主题表述,禁止把模板说明性文字("每个单位工程独立制表""制表(一)(二)")、指令性文字("详见XX""另见XX""按要求填写")或商务口径词("计量签证""计价""结算")作为小节标题;章节编号必须连续(如 5.1、5.2、5.3),不得跳号。\n8. 禁止商务投标函内容:投标/评标纪律承诺、廉洁承诺、廉洁自律、行贿、串标、围标、弄虚作假、干扰评标等商务投标函条款与承诺一律不得写入施工组织设计正文(招标文件中的此类条款属商务文件应响应内容,不是技术标内容);本节只写技术方案与管理措施,不得以承诺句形式响应此类条款。\n9. 禁止自行分配清单规格拆分数值:清单给出规格-数量拆分(如一般路灯 100W 109套、120W 9套)时必须逐项照抄原值,不得改动或重新分配;清单只给总量的不得自行拆分(“其中 A 套、B 套”式自拆即数据错误)。同一规格-数量拆分在全文各章必须一致。\n10. 行文完整性:叙述句必须以句末标点(。;!?)收尾,禁止无标点悬空行尾——不得出现“提示语或主语残段(如“……施工”)+换行+列表/编号”式断句;括号、引号、书名号必须成对闭合;禁止连续重复标点(如“。。”“,,”);禁止与相邻行逐字相同的复读行;正文内的分行编号必须从 1 起连续,不得跳号、重号。\n11. 禁止转述合同管理程序条款:不得抄录或转述招标文件中的投标资格承诺原文(“拟派项目经理目前无在岗项目”“承诺从其他项目变更至本项目”类)与合同履约管理程序(开工令签发程序、项目经理变更批准程序、人员请假/更换/离场批准程序、保险投保办理程序、分包审批程序、资料报送审批备案期限、违约责任与罚款明细、工程照管责任起止);此类内容属商务标与合同管理范畴,技术标只写技术方案与现场管理措施——如项目经理到岗管理只写“项目经理按投标承诺到岗履职,全面负责本工程现场管理”,不展开变更与签发程序细节。',"0"!==process.env.DOCUMENT_WRITING_CONSTRAINTS_EVOLUTION){let b=await d1(a.prepare.projectRoot);b&&(a.prepare.generationWritingConstraintsPrompt=`${a.prepare.generationWritingConstraintsPrompt}
333
- ${b}`,(0,l.Wl)(a,{batch:"generation.prepare",stage:(0,k.X5)({type:"validation",roleId:"writing-constraints-evolution",status:"success",message:`写作硬约束自进化:已注入缺陷热力图规避提醒 ${b.length} 字符`,details:[b]},{subtitle:"写作硬约束"})}))}a.prepare.generationControlPrompt=[a.prepare.generationWritingConstraintsPrompt,a.prepare.projectUnderstanding.prompt,(0,dR.F)(a.prepare.projectMaterialSummary,{publicSafe:!0}),(0,dQ.N)(a.prepare.documentSpec,o.sourceHash,{publicSafe:!0}),dW(a.prepare.readiness,{publicSafe:!0})].filter(Boolean).join("\n\n"),a.prepare.diagnosticControlPrompt=[a.prepare.projectUnderstanding.prompt,(0,dR.F)(a.prepare.projectMaterialSummary),(0,dQ.N)(a.prepare.documentSpec,o.sourceHash),dW(a.prepare.readiness)].filter(Boolean).join("\n\n");let p=(0,g.fC)([...a.prepare.promptPlan.writerPrompts,...a.prepare.promptPlan.formattingPrompts]),q=(0,g.fC)([...a.prepare.promptPlan.writerPrompts,...a.prepare.promptPlan.chapterPrompts,...a.prepare.promptPlan.formattingPrompts]),r=(0,g.fC)(a.prepare.promptPlan.prompts);a.prepare.webAccessConfig=(0,dP.I)().load().webAccess||{enabled:!1,allowProjectFacts:!1,maxQueriesPerChapter:2,maxResultsPerQuery:3,trustedDomains:[]},a.prepare.runtimePromptRules=(0,aT.c_)({promptTexts:[a.prepare.generationControlPrompt,r].filter(Boolean).join("\n\n"),requirement:a.global.input.requirement,template:a.prepare.template,sourcePrompts:a.prepare.promptPlan.prompts.map(a=>({name:a.name,content:a.content}))}),a.prepare.runtimeRulesText=[(0,aT.el)(a.prepare.runtimePromptRules),(0,c4.$F)(a.prepare.webAccessConfig.enabled)].filter(Boolean).join("\n\n"),a.prepare.requirementSemantics=await a.global.withProgressHeartbeat(()=>d_({requirement:a.global.input.requirement,chapterTitles:a.prepare.template.chapters.map(a=>a.title),signal:a.global.input.signal,diagnostics:void 0}).catch(()=>dY())),a.prepare.requirementSemantics.parseFailed&&((0,l.Wl)(a,{batch:"generation.prepare",stage:(0,k.X5)({type:"validation",roleId:"requirement-semantics-parse",status:"failed",message:`用户生成要求的语义解析失败:强制要求**未注入写作、也未进入核验闭环**(${a.prepare.requirementSemantics.parseFailureReason})`,details:["影响:本次生成不会核验你在提示词里写下的强制要求,成稿可能不含它们。","建议:核对提示词措辞后重新生成;若反复失败,请检查模型配置与额度。"]},{subtitle:"生成准备"})}),a.global.emitProgress()),a.prepare.requirementSemantics.mandatoryBlockText&&(a.prepare.runtimeRulesText=`${a.prepare.runtimeRulesText}
331
+ 返回 JSON:{"globalRequirements":["要求1"],"chapterRequirements":[{"chapterTitle":"章标题","requirements":["要求1"]}],"factClues":["事实线索1"],"styleRequirements":["风格要求1"]}`,{maxTokens:3e3,temperature:0,signal:a.signal,diagnostics:a.diagnostics,prefixKey:"requirement-semantics"}),f=[...new Set((e?.globalRequirements||[]).map(a=>dX("string"==typeof a?a:a?.text,60)).filter(Boolean))].slice(0,24),g=[...new Set((e?.factClues||[]).map(a=>dX("string"==typeof a?a:a?.text,120)).filter(Boolean))].slice(0,24),h=[...new Set((e?.styleRequirements||[]).map(a=>dX("string"==typeof a?a:a?.text,60)).filter(Boolean))].slice(0,8),i=(e?.chapterRequirements||[]).map(a=>({chapterTitle:dX(a?.chapterTitle,60),requirements:[...new Set((a?.requirements||[]).map(a=>dX("string"==typeof a?a:a?.text,60)).filter(Boolean))].slice(0,12)})).filter(a=>0===c.length||c.some(b=>b===a.chapterTitle||a.chapterTitle.includes(b)||b.includes(a.chapterTitle))).filter(a=>a.chapterTitle&&a.requirements.length>0).slice(0,16);if(!(f.length>0||i.length>0||g.length>0))return d;let j=[...f,...i.flatMap(a=>a.requirements),...h],k=[],l=0;for(let a of j){if(l+a.length+8>3e3)break;k.push(a),l+=a.length+8}let m=k.length>0?["【用户强制要求——最高优先级,必须逐条满足;用户要求与系统默认规则冲突时,以用户要求为准】",...k.map((a,b)=>`${b+1}. ${a}`),"以上要求来自用户提示词语义解析,生成、检查和修复必须共同遵守。"].join("\n"):"";return{parsed:!0,globalRequirements:f,chapterRequirements:i,factClues:g,styleRequirements:h,mandatoryBlockText:m,summary:`用户要求解析:全文级 ${f.length} 条、章节级 ${i.length} 组、事实线索 ${g.length} 条、风格 ${h.length} 条`}}catch(b){let a=b instanceof Error?b.message:String(b);return console.error(`[requirementSemantics] 用户提示词语义解析失败:${a}`),{...d,parseFailed:!0,parseFailureReason:a}}}var dZ=c(77416);async function d$(a){try{let{listGeneratedDocuments:b,getGeneratedDocument:d}=await Promise.resolve().then(c.bind(c,48661)),e=b(a).filter(a=>"generating"!==a.status).slice(0,20).map(b=>d(b.id,a)).filter(a=>!!a).flatMap(a=>{let b=a.reviewMetadata?.telemetry?.repairHeat;return b&&Object.keys(b).length>0?[{exportedAt:a.completedAt||a.updatedAt,repairHeat:b}]:(a.exportReports||[]).map(a=>({exportedAt:a.exportedAt,repairHeat:a.repairHeat}))}),{constraintSuggestions:f}=(0,dZ.C$)(e);return(0,dZ.Hz)(f)}catch{return""}}async function d_(a){let b=(0,dU.iA)({promptIds:a.global.input.promptIds??[],requirement:a.global.input.requirement||"",projectRoot:a.global.input.projectRoot||(0,dL.aY)(),title:a.global.input.title}),c=(0,dU.TQ)(b);if(a.prepare.derivation=b,a.prepare.projectRoot=cr.resolve(a.global.input.projectRoot||(0,dL.aY)()),!a.prepare.projectRoot)throw Error("No knowledge base project found");a.prepare.projectId=(0,dH.computeProjectId)(a.prepare.projectRoot),a.prepare.template=c,a.understanding.manager=(0,dL.getMultiProjectManager)(),a.global.chapterDrafts=[],a.global.checkpointChapterOrderIds=[],a.global.emitProgress=b=>{let c=b?[...b].sort((b,c)=>{let d=a.global.checkpointChapterOrderIds.indexOf(b.id),e=a.global.checkpointChapterOrderIds.indexOf(c.id);return(d<0?Number.MAX_SAFE_INTEGER:d)-(e<0?Number.MAX_SAFE_INTEGER:e)}):void 0;a.global.input.onProgress?.(c?{chapters:c}:void 0)};let d=Math.max(15e3,Math.min(6e4,Number(process.env.DOCUMENT_GENERATION_HEARTBEAT_MS??3e4)));if(a.global.withProgressHeartbeat=async b=>{let c=setInterval(()=>{a.global.input.signal?.aborted||a.global.emitProgress(a.global.chapterDrafts)},d);try{return await b()}finally{clearInterval(c)}},(0,l.Wl)(a,{batch:"generation.prepare",stage:(0,k.X5)({type:"role_binding",roleId:"document-spec-derivation",status:"running",message:`生成任务已创建,正在从提示词派生文档规格:${a.prepare.template.name}`,details:[`当前项目:${a.prepare.projectId}`,`资料目录:${(0,dL.NW)(a.prepare.projectRoot)}`,`文档名称:${b.title}(来源:${"human"===b.derivation.titleSource?"人工指定":"skill"===b.derivation.titleSource?"技能声明":"按项目名 + 文档类型派生"})`,`工程类型:${b.derivation.projectType};命中技能 ${b.derivation.matchedSkillIds.length}/${b.derivation.skillPoolSize} 个(读技能 ${b.derivation.matchReads} 次)`,`章节大纲:${b.chapters.length} 章,来源「${b.derivation.outlineSource}」;提示词 ${b.derivation.promptChars} 字符`,`生效提示词:${b.derivation.prompts.map(a=>`${a.name}(${a.category},${a.chars} 字符)`).join(";")}`,"正在读取项目资料包与提示词文本"],progress:{current:1,total:4,label:"初始化配置"}},{subtitle:"文档规格派生",roleName:"文档规格派生",order:0})}),a.global.emitProgress(),a.prepare.promptPlan=(0,e.CD)(a.global.input.promptIds??[]),a.prepare.promptIds=[...a.global.input.promptIds??[]],(0,l.Wl)(a,{batch:"generation.prepare",stage:(0,k.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在分析提示词要求与项目资料包",details:["解析提示词里的显式大纲","读取项目资料包","自动识别资料类型并构建项目理解"],progress:{current:1,total:3,label:"准备分析"}},{subtitle:"生成准备"})}),a.global.emitProgress(),a.prepare.materialScope=(0,c8.ZR)(a.prepare.projectRoot,a.prepare.template,[(0,g.fC)(a.prepare.promptPlan.prompts),a.global.input.requirement||""].filter(Boolean).join("\n\n"),a.global.input.materialRoot?{materialRoot:a.global.input.materialRoot}:{}),a.prepare.materialScope.ambiguous||!a.prepare.materialScope.locked||0===a.prepare.materialScope.selectedFiles.length)throw Error(`资料范围未锁定:${a.prepare.materialScope.reason}`);a.prepare.materialFilePaths=a.prepare.materialScope.selectedFiles;let f=a.prepare.materialScope.selectedRoots;f.length>0&&((0,l.Wl)(a,{batch:"generation.prepare",stage:(0,k.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"知识库索引与资料清单已同步",details:[`本次生成使用的资料:${f.join("、")}(${a.prepare.materialFilePaths.length} 份资料),库内其他资料组切片保留不清理`],progress:{current:1,total:3,label:"准备分析"}},{subtitle:"生成准备"})}),a.global.emitProgress()),a.prepare.projectMaterialProfile=(0,db.W9)(a.prepare.projectRoot,{selectedFiles:a.prepare.materialScope.selectedFiles,selectedRoots:a.prepare.materialScope.selectedRoots}),a.prepare.projectUnderstanding=(0,db._n)(a.prepare.template,a.prepare.projectMaterialProfile);let{kindByPath:h,processingByPath:i}=(0,db.Hz)(a.prepare.projectMaterialProfile);a.prepare.kindByPath=h,a.prepare.processingByPath=i;let j=(0,g.fC)([...a.prepare.promptPlan.writerPrompts,...a.prepare.promptPlan.chapterPrompts]),m=(0,av.cs)([{text:a.global.input.requirement,source:"用户需求",strict:!0}]),n=(0,av.cs)([{text:j,source:"提示词",strict:!0}]);a.prepare.explicitPromptChapters=m.length>=2?m:n,a.prepare.hasExplicitOutline=a.prepare.explicitPromptChapters.length>=2,(0,l.Wl)(a,{batch:"generation.prepare",stage:(0,k.X5)({type:"validation",roleId:"document-spec-derivation",status:"success",message:`文档规格已派生:提示词显式大纲 ${a.prepare.explicitPromptChapters.length} 章 → 生效 ${a.prepare.template.chapters.length} 章(并入技能声明的章级职责 ${b.derivation.perChapter.reduce((a,b)=>a+b.skillIds.length,0)} 处)`,details:[`章节来源:${b.derivation.outlineSource}(章数 ≥ 2 的显式大纲是章结构的唯一来源)`,`生效章节:${a.prepare.template.chapters.map(a=>a.title).slice(0,12).join("、")}${a.prepare.template.chapters.length>12?" …":""}`,...b.derivation.perChapter.filter(a=>a.skillIds.length>0).slice(0,12).map(a=>`${a.title}|章域 ${a.domains.join("/")||"未识别"}|技能 ${a.skillIds.join("、")}`)]},{subtitle:"生成准备"})}),a.global.emitProgress(),a.prepare.projectMaterialSummary=await a.global.withProgressHeartbeat(()=>Promise.resolve((0,dO.P)(a.prepare.projectRoot,{requirement:a.global.input.requirement,boundFilePaths:a.prepare.materialFilePaths}))),(0,l.Wl)(a,{batch:"generation.prepare",stage:(0,k.X5)({type:"validation",roleId:"document-preparation",status:"running",message:"正在生成自动文档规格并评估生成准备度",details:[`项目资料:${a.prepare.materialFilePaths.length} 份`,`资料类型:${Object.values(a.prepare.projectMaterialProfile.groups).filter(a=>a.length>0).length} 类`,"生成事实字段与章节约束"],progress:{current:2,total:3,label:"规格评估"}},{subtitle:"生成准备"})}),a.global.emitProgress();let o=await a.global.withProgressHeartbeat(()=>Promise.resolve((0,dN.x)(a.prepare.template,a.global.input.requirement||"")));if(a.prepare.documentSpec=o.spec,a.prepare.domainProfile=(0,dP.$i)(a.prepare.template,a.global.input.requirement||""),a.prepare.readiness=function(a){var b,c,d;let e=a.resolvedRoles.filter(a=>a.required&&!a.satisfied).map(a=>a.role),f=a.resolvedRoles.filter(a=>a.weak).map(a=>a.role),g=(b=a.template,c=a.spec,d=a.summary,b.chapters.map(a=>{let b=function(a,b){let c=b.chapterRules.find(b=>b.id===a.id||b.title===a.title),d=(c?.requiredFactIds||[]).map(a=>b.factFields.find(b=>b.id===a)?.name).filter(Boolean);return dR([...a.requiredFacts||[],...d])}(a,c),e=dR([...dS([a.title,a.purpose,...a.queries||[],...a.sections||[]].join("\n")),...b.flatMap(a=>dS(a))]),f=e.filter(a=>(d.materialInventory[a]||[]).length>0),g=f.reduce((a,b)=>a+(d.materialInventory[b]||[]).length,0),h=b.filter(a=>dS(a).some(a=>f.includes(a))),i=b.filter(a=>!h.includes(a));return{chapterId:a.id,title:a.title,requiredFacts:b,coveredFacts:h,missingFacts:i,requiredRoles:e,satisfiedRoles:f,evidenceCount:g}})),h=[],i=[];0===a.template.chapters.length&&i.push("模板未配置章节,建议通过模板章节或显式 OUTLINE 提供文档结构"),a.template.chapters.some(a=>!a.purpose&&(!a.queries||0===a.queries.length)&&(!a.requiredFacts||0===a.requiredFacts.length))&&i.push("部分模板章节缺少 purpose、queries 或 requiredFacts,生成质量可能不稳定"),a.summary.source.ambiguous&&h.push(a.summary.source.selectionReason),a.summary.fingerprint.confidence<.34&&i.push("材料指纹置信度较低,建议绑定明确的材料文件"),0===a.summary.source.selectedFiles&&h.push("未绑定可用项目资料文件,无法支撑文档生成"),e.length>0&&0===a.summary.source.selectedFiles&&i.push("模板未绑定可用项目资料文件,请先绑定参与生成的资料"),f.length>0&&0===a.summary.source.selectedFiles&&i.push("绑定资料证据较弱,请确认资料已完成索引");let j=g.filter(a=>0===a.evidenceCount);j.length>0&&i.push(`章节级证据覆盖较弱:${j.slice(0,5).map(a=>a.title).join("、")}`);let k=a.summary.coverage.satisfiedRoles,l=a.resolvedRoles.filter(a=>!a.required&&!a.satisfied).map(a=>a.role),m=[`资料范围:${a.summary.source.selectionReason},可用文件 ${a.summary.source.selectedFiles}/${a.summary.source.totalFiles} 份`,`已识别资料类型:${k.join("、")||"无"}`,a.summary.coverage.missingRoles.length?`待补充必需资料类型:${a.summary.coverage.missingRoles.join("、")}`:"必需资料类型已满足",e.length?`模板强相关资料角色缺失:${e.join("、")}`:"模板强相关资料角色已满足",l.length?`可选资料角色未识别:${l.join("、")}`:"",f.length?`证据较弱资料角色:${f.join("、")}`:""].filter(Boolean);return{ready:0===h.length,missingRoles:e,weakRoles:f,diagnostics:m,chapterDiagnostics:g,blockingIssues:h,warnings:i}}({template:a.prepare.template,spec:a.prepare.documentSpec,summary:a.prepare.projectMaterialSummary,resolvedRoles:[]}),!a.prepare.readiness.ready)throw Error(`生成准备度不足:${a.prepare.readiness.blockingIssues.join(";")}`);if(a.prepare.generationWritingConstraintsPrompt='【全文写作硬约束(每一章生成时必须遵守,违反即评审失分)】\n1. 禁止编造时间事实:开工日期、竣工日期、工期起止等未在项目资料中确认的日期一律不得写入正文;进度表述改用“开工后第 N 天”“第 N 周”等相对口径,或引用资料中已确认的日期。\n2. 禁止商务内容(全文零商务句):暂列金额、暂估价、综合单价、清单合价、税率、投标报价、付款、进度款、工程款、结算、保证金、违约金、预付款、保函等商务数据,以及“按合同约定执行”式付款/保证金/结算/违约商务声明句,一律不得写入施工组织设计正文——商务与合同条款的响应属商务标内容,技术标正文不得出现任何商务内容,商务口径只允许出现在项目信息表中。\n3. 禁止资料来源罗列话术:不得出现“根据/依据招标文件、工程量清单、图纸及答疑”式来源罗列句,直接陈述项目事实与施工安排;编制依据小节可集中列出依据文件。\n3b. 编制依据小节必须列出具体法规名称及文号:国家法律法规条目列出《中华人民共和国建筑法》(主席令第91号公布,2019年修正)、《建设工程质量管理条例》(国务院令第279号公布,2019年修订)等具体名称及文号;地方性法规与政府规章条目按工程所在地列出具体名称(省/市级现行有效法规,如"XX省建筑市场管理条例""XX市城市绿化管理条例"形态,名称须为工程所在地真实法规);规范标准条目列出《建筑工程施工质量验收统一标准》(GB 50300-2013)等具体编号;招标文件原文引用的法规按其原文列出。不得只写“国家现行法律、行政法规”“现行规范标准”“地方法规规章”等类别话术。\n3c. 编制依据的规范标准条目**逐条独立成行**(每行一条,行首统一用「- 」),不得把多条挤进同一长句用「、」连写——长同形列举易引发跳字残缺(如把「《建筑给水排水及采暖工程施工质量验收规范》(GB 50242-2002)」写成「《建筑给水排水及采暖50242-2002)」),写完后逐条自检书名号与括号是否成对。\n4. 禁止跨章复述概况:除“工程概况/项目概况”章节外,其余章节不得以“本项目为/本工程为”开头整段复述项目总体概况,应直接展开本章主题内容。\n5. 禁止后台内部话术与条款响应元语言:不得出现“工作包”“WRITER_MISSING_SECTION”“已确认资料”等系统内部术语与兜底话术,一律改写为正式施工组织设计表述;不得书写“招标要求响应(前附表响应条款)”“按上述条款执行”“按招标文件约定/要求”等条款响应条幅或调用式元语言(评标人视角即编制模板痕迹)——技术性前附表条款一律以投标人口吻的正式技术表述落位各章节;商务性前附表条款(付款/保证金/结算等)不在技术标响应。\n6. 合规数值红线(安全、职业健康、危大工程章节必须逐条对照,违反即合规失分):\n a. 高温停工按《防暑降温措施管理办法》(安监总安健〔2012〕89号):日最高气温达到40℃以上应停止当日室外露天作业;37℃~40℃时室外露天作业时间累计不得超过6小时且气温最高时段3小时内不得安排室外露天作业;35℃~37℃时应换班轮休缩短连续作业时间。不得写成42℃等其他阈值。\n b. 危大工程判定线按住建部令第37号及建办质〔2018〕31号:基坑(槽)土方开挖、支护、降水,开挖深度超过3m(含3m)属危大工程,超过5m(含5m)属超过一定规模(需专家论证);模板支撑搭设高度8m及以上或搭设跨度18m及以上属超过一定规模;落地式钢管脚手架搭设高度24m及以上属危大工程、50m及以上属超过一定规模,悬挑式脚手架分段架体搭设高度20m及以上属超过一定规模;采用非常规起重设备方法且单件起吊重量10kN及以上属危大工程、100kN及以上属超过一定规模。判定必须给出本项目对应参数(开挖深度/支撑高度/搭设高度/起吊重量),参数未在资料中确认的不得自行判定为危大或超危大。证据中含基坑底标高、\xb10.000对应绝对标高、垫层底标高等数值的,必须直接引用并据此给出开挖深度具体数值(开挖深度=地面标高-坑底标高),不得仅写“开挖深度超过3m”而不给数值;标高、坡率(如1:1.5)等设计参数应写入基坑支护与土方开挖相关小节。\n c. 专家论证程序按住建部令第37号:超过一定规模的危大工程专项方案应组织不少于5名符合专业要求的专家(从地方住建主管部门专家库选取)论证;修改后的方案由施工单位技术负责人审核签字、加盖单位公章,并由总监理工程师审查签字、加盖执业印章后方可实施。\n d. 监测预警值单一口径:同一监测指标(基坑位移速率、沉降预警值等)全文只能出现一个数值口径,不得前后矛盾;预警值优先引用设计文件明确值,无设计要求时按现行监测技术标准选取并注明依据。\n e. 自设数值自洽:自设的防护尺寸、频次、时间节点等数值必须与同章及跨章表述一致,且尽量引用现行规范依据;无规范依据的自设值不得写成硬性规定。工期缓冲/预留天数的用途(如"竣工验收缓冲""工序衔接缓冲")全文只能有一个口径,不得一处写竣工验收缓冲、另一处写工序衔接缓冲。\n7. 禁止数据自查话术:不得把表格口径推算、数据一致性自查过程写入正文(如"上表合计行…与…不一致,故…修正为…"),表格与正文数值必须直接自洽;不得把招标条款编号碎片(如"3项规定""1委员会确定中""56m15:…")作为小节标题。\n7b. 禁止清单计量口径话术:不得出现"按清单口径""按清单汇总口径""清单口径为""按清单逐项""分部小计""本页小计"等工程量清单计量文件内部口径表述;工程量直接以正式施工组织设计口径陈述("本工程土方挖方总量为…m\xb3"),不得说明数值的清单来源或口径换算过程。\n7c. 小节标题规范:小节标题必须是正式施工组织设计主题表述,禁止把模板说明性文字("每个单位工程独立制表""制表(一)(二)")、指令性文字("详见XX""另见XX""按要求填写")或商务口径词("计量签证""计价""结算")作为小节标题;章节编号必须连续(如 5.1、5.2、5.3),不得跳号。\n8. 禁止商务投标函内容:投标/评标纪律承诺、廉洁承诺、廉洁自律、行贿、串标、围标、弄虚作假、干扰评标等商务投标函条款与承诺一律不得写入施工组织设计正文(招标文件中的此类条款属商务文件应响应内容,不是技术标内容);本节只写技术方案与管理措施,不得以承诺句形式响应此类条款。\n9. 禁止自行分配清单规格拆分数值:清单给出规格-数量拆分(如一般路灯 100W 109套、120W 9套)时必须逐项照抄原值,不得改动或重新分配;清单只给总量的不得自行拆分(“其中 A 套、B 套”式自拆即数据错误)。同一规格-数量拆分在全文各章必须一致。\n10. 行文完整性:叙述句必须以句末标点(。;!?)收尾,禁止无标点悬空行尾——不得出现“提示语或主语残段(如“……施工”)+换行+列表/编号”式断句;括号、引号、书名号必须成对闭合;禁止连续重复标点(如“。。”“,,”);禁止与相邻行逐字相同的复读行;正文内的分行编号必须从 1 起连续,不得跳号、重号。\n11. 禁止转述合同管理程序条款:不得抄录或转述招标文件中的投标资格承诺原文(“拟派项目经理目前无在岗项目”“承诺从其他项目变更至本项目”类)与合同履约管理程序(开工令签发程序、项目经理变更批准程序、人员请假/更换/离场批准程序、保险投保办理程序、分包审批程序、资料报送审批备案期限、违约责任与罚款明细、工程照管责任起止);此类内容属商务标与合同管理范畴,技术标只写技术方案与现场管理措施——如项目经理到岗管理只写“项目经理按投标承诺到岗履职,全面负责本工程现场管理”,不展开变更与签发程序细节。',"0"!==process.env.DOCUMENT_WRITING_CONSTRAINTS_EVOLUTION){let b=await d$(a.prepare.projectRoot);b&&(a.prepare.generationWritingConstraintsPrompt=`${a.prepare.generationWritingConstraintsPrompt}
332
+ ${b}`,(0,l.Wl)(a,{batch:"generation.prepare",stage:(0,k.X5)({type:"validation",roleId:"writing-constraints-evolution",status:"success",message:`写作硬约束自进化:已注入缺陷热力图规避提醒 ${b.length} 字符`,details:[b]},{subtitle:"写作硬约束"})}))}a.prepare.generationControlPrompt=[a.prepare.generationWritingConstraintsPrompt,a.prepare.projectUnderstanding.prompt,(0,dO.F)(a.prepare.projectMaterialSummary,{publicSafe:!0}),(0,dN.N)(a.prepare.documentSpec,o.sourceHash,{publicSafe:!0}),dT(a.prepare.readiness,{publicSafe:!0})].filter(Boolean).join("\n\n"),a.prepare.diagnosticControlPrompt=[a.prepare.projectUnderstanding.prompt,(0,dO.F)(a.prepare.projectMaterialSummary),(0,dN.N)(a.prepare.documentSpec,o.sourceHash),dT(a.prepare.readiness)].filter(Boolean).join("\n\n");let p=(0,g.fC)([...a.prepare.promptPlan.writerPrompts,...a.prepare.promptPlan.formattingPrompts]),q=(0,g.fC)([...a.prepare.promptPlan.writerPrompts,...a.prepare.promptPlan.chapterPrompts,...a.prepare.promptPlan.formattingPrompts]),r=(0,g.fC)(a.prepare.promptPlan.prompts);a.prepare.webAccessConfig=(0,dM.I)().load().webAccess||{enabled:!1,allowProjectFacts:!1,maxQueriesPerChapter:2,maxResultsPerQuery:3,trustedDomains:[]},a.prepare.runtimePromptRules=(0,aT.c_)({promptTexts:[a.prepare.generationControlPrompt,r].filter(Boolean).join("\n\n"),requirement:a.global.input.requirement,template:a.prepare.template,sourcePrompts:a.prepare.promptPlan.prompts.map(a=>({name:a.name,content:a.content}))}),a.prepare.runtimeRulesText=[(0,aT.el)(a.prepare.runtimePromptRules),(0,c1.$F)(a.prepare.webAccessConfig.enabled)].filter(Boolean).join("\n\n"),a.prepare.requirementSemantics=await a.global.withProgressHeartbeat(()=>dY({requirement:a.global.input.requirement,chapterTitles:a.prepare.template.chapters.map(a=>a.title),signal:a.global.input.signal,diagnostics:void 0}).catch(()=>dV())),a.prepare.requirementSemantics.parseFailed&&((0,l.Wl)(a,{batch:"generation.prepare",stage:(0,k.X5)({type:"validation",roleId:"requirement-semantics-parse",status:"failed",message:`用户生成要求的语义解析失败:强制要求**未注入写作、也未进入核验闭环**(${a.prepare.requirementSemantics.parseFailureReason})`,details:["影响:本次生成不会核验你在提示词里写下的强制要求,成稿可能不含它们。","建议:核对提示词措辞后重新生成;若反复失败,请检查模型配置与额度。"]},{subtitle:"生成准备"})}),a.global.emitProgress()),a.prepare.requirementSemantics.mandatoryBlockText&&(a.prepare.runtimeRulesText=`${a.prepare.runtimeRulesText}
334
333
 
335
334
  ${a.prepare.requirementSemantics.mandatoryBlockText}`),a.prepare.promptTexts=[a.prepare.generationControlPrompt,a.prepare.runtimeRulesText,`生成前规划章节结构:
336
- ${(0,aA.CK)(a.prepare.template)}`,p||q].filter(Boolean).join("\n\n"),a.prepare.promptDocumentRules=a.prepare.runtimePromptRules,a.prepare.factExtractionPromptTexts=[a.prepare.diagnosticControlPrompt,a.prepare.runtimeRulesText,(0,g.fC)([...a.prepare.promptPlan.extractionPrompts,...a.prepare.promptPlan.referencePrompts])].filter(Boolean).join("\n\n"),a.prepare.reviewPromptTexts=[a.prepare.generationControlPrompt,a.prepare.runtimeRulesText,(0,g.fC)([...a.prepare.promptPlan.writerPrompts,...a.prepare.promptPlan.chapterPrompts,...a.prepare.promptPlan.formattingPrompts])].filter(Boolean).join("\n\n"),a.prepare.repairPromptTexts=[a.prepare.generationControlPrompt,a.prepare.runtimeRulesText,(0,g.fC)(a.prepare.promptPlan.formattingPrompts)].filter(Boolean).join("\n\n"),(0,l.Wl)(a,{batch:"generation.prepare",stage:(0,k.X5)({type:"validation",roleId:"document-preparation",status:"success",message:`提示词要求与项目资料理解完成,识别 ${a.prepare.materialFilePaths.length} 份项目资料`,details:[(0,e.MD)(a.prepare.promptPlan),`项目资料包:${a.prepare.projectMaterialProfile.materialRoots.join("、")||"当前知识库"}`,`识别提示词 OUTLINE 章节:${a.prepare.explicitPromptChapters.length} 个(生效 ${a.prepare.template.chapters.length} 章 = 大纲 + 技能声明)`],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备"})}),a.global.emitProgress()}async function d3(a){(0,f.Te)(a.signal);let b={global:{input:a},prepare:{},understanding:{},planning:{},blueprint:{chapterConcurrency:0,reviewConcurrency:0,reviewSemaphore:new f.jf(1),reviewTaskPool:[],basicFactSearchResults:[],integratedBlueprint:void 0,blueprintActive:!1,requirementAssignments:[],structureAssignments:[],structureUnattached:[],billFactLock:void 0,drawingFactLock:void 0},chapterLoop:{draftPhaseStartedAt:0,chapterDraftsFinal:[],globalReviewPhaseStartedAt:0}};await d2(b),(0,l.sI)(b,"prepare"),await dN(b),(0,l.sI)(b,"understand"),await dJ(b),(0,l.sI)(b,"plan"),await dm(b),(0,l.sI)(b,"blueprint"),await dj(b),(0,l.sI)(b,"write");let c=[],d={documentId:b.global.input.diversitySeed},e=!1;if(b.planning.generationStrategy.enableGlobalReview){let a=await bd({globalReviewSamplingRate:b.planning.generationStrategy.globalReviewSamplingRate,chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,template:b.prepare.template,reviewPromptTexts:b.prepare.reviewPromptTexts,repairPromptTexts:b.prepare.repairPromptTexts,requirement:b.global.input.requirement,signal:b.global.input.signal,projectContext:b.planning.projectContext,generationDiagnostics:b.planning.generationDiagnostics,preliminaryFactsModel:b.understanding.preliminaryFactsModel,scopeConflicts:b.understanding.canonicalFacts.scopeConflicts,emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat,nodeEmit:d,blueprintData:b.blueprint.integratedBlueprint?.validation.passed?b.blueprint.integratedBlueprint.data:void 0,billFactLock:b.blueprint.billFactLock,bidComposition:b.understanding.bidComposition});c=a.issues,e=a.dedupRan}else await a8({chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,template:b.prepare.template,repairPromptTexts:b.prepare.repairPromptTexts,projectContext:b.planning.projectContext,requirement:b.global.input.requirement,signal:b.global.input.signal,generationDiagnostics:b.planning.generationDiagnostics,emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat,nodeEmit:d,bidComposition:b.understanding.bidComposition});for(let a=0;a<3;a+=1){let a=await bc({chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,template:b.prepare.template,repairPromptTexts:b.prepare.repairPromptTexts,requirement:b.global.input.requirement,signal:b.global.input.signal,generationDiagnostics:b.planning.generationDiagnostics,emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat,nodeEmit:d,bidComposition:b.understanding.bidComposition});if(!a?.plannedSectionFixApplied)break}let{tableFixApplied:h}=await a5({effectiveChapters:b.planning.effectiveChapters,chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,template:b.prepare.template,repairPromptTexts:b.prepare.repairPromptTexts,requirement:b.global.input.requirement,signal:b.global.input.signal,generationDiagnostics:b.planning.generationDiagnostics,emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat,nodeEmit:d,bidComposition:b.understanding.bidComposition});return(h||!e)&&(c=await a3({chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,globalConsistencyIssues:c,emitProgress:b.global.emitProgress,nodeEmit:d})),!function(a){let{generationDiagnostics:b,chapterDraftsFinal:c,emitProgress:d}=a,e=b.evidence,f=b.llm,g=(0,aH.Bd)();b.semantic=g;let h=g.embedCacheHits+g.embedCacheMisses,i=h>0?Math.round(1e4*g.embedCacheHits/h)/100:null,j=(f.promptCacheHitTokens||0)+(f.promptCacheMissTokens||0),l=j>0?Math.round(1e4*(f.promptCacheHitTokens||0)/j)/100:null,m=f.layerChars,n=m?m.l0+m.l1+m.l2+m.l3:0,o=a=>n>0?Math.round(1e4*a/n)/100:0,p=m&&n>0?`上下文分层:L0 system 恒定 ${m.l0} 字(${o(m.l0)}%)、L1 任务级 ${m.l1} 字(${o(m.l1)}%)、L2 章级 ${m.l2} 字(${o(m.l2)}%)、L3 小节级 ${m.l3} 字(${o(m.l3)}%)`:"上下文分层:本次生成未采集 L0-L3 分层统计",q=(0,k.X5)({type:"validation",roleId:"budget-trim-report",status:"success",message:`预算裁剪报告:证据 ${e.raw} 条 → 采用 ${e.used} 条(噪声过滤 ${e.filteredNoise} 条、预算兜底裁剪 ${e.budgetDropped} 条),证据上下文 ${e.contextChars} 字`,details:[`证据质量:平均噪声分 ${e.avgNoiseScore},平均事实密度 ${e.avgFactDensity}`,`证据分层(T0 关键事实/T1 高相关片段/T2 目录索引):T0 注入 ${e.t0Chars||0} 字、T1 注入 ${e.t1Chars||0} 字、T2 索引 ${e.t2Lines||0} 行、目录省略 ${e.omittedChars||0} 字——A2 块级增量压缩后 T1 应显著低于 T0+T2`,`检索:${e.searchQueries} 组查询,耗时 ${Math.round(e.searchMs/1e3)} 秒`,`证据双通道覆盖度(P2-B 观测采集):预分配注入 ${e.intentEvidenceInjected??0} 条(最终留存 ${e.intentEvidenceUsed??0} 条)/运行时召回注入 ${e.retrievedEvidenceInjected??0} 条(最终留存 ${e.retrievedEvidenceUsed??0} 条)`,`LLM:${f.calls} 次调用,失败 ${f.failures} 次,重试 ${f.retries} 次,schema 校验失败 ${f.schemaFailures} 次`,`LLM 上下文输入:${f.inputChars||0} 字符(system+user)${f.unlayeredChars?`(其中未分层调用 ${f.unlayeredChars} 字符,占比 ${Math.round(f.unlayeredChars/(f.inputChars||1)*1e4)/100}%)`:""},输入 ${f.inputTokens||0} token / 输出 ${f.outputTokens||0} token`,p,null===l?"上下文缓存:提供商未返回 prefix cache 指标(prompt_cache_hit/miss_tokens),无法观测命中率":`上下文缓存:命中 ${f.promptCacheHitTokens} token / 未命中 ${f.promptCacheMissTokens} token(命中率 ${l}%)——未命中占比高说明固定前缀未收敛,system/user 分离(A5)后应显著上升`,`推理 token:${f.reasoningTokens?`${f.reasoningTokens} token(思考未完全关闭,disableThinking 未生效风险)`:"0(思考已关闭)"}`,null===i?"bge 嵌入缓存:本次生成无嵌入调用":`bge 嵌入缓存:命中 ${g.embedCacheHits} 条 / 未命中 ${g.embedCacheMisses} 条(命中率 ${i}%,全局 LRU 容量 ${process.env.DOCUMENT_EMBED_CACHE_SIZE||2e3})`,"防爆兜底类软限制(保留并逐项记录裁剪量):selectEvidenceByBudget 的 maxItems/maxChars、uniqueEvidence 噪声过滤、evidenceBundlePrompt 的 maxChars、块级证据 top-k 截断、块级 facts 截断","语义取舍类软限制(已迁移本地语义模型):evaluationTexts 词面过滤→条目对象化、criterionFeatures 二字滑窗→bge-small 余弦、章节证据字符硬截→语义排序取 top-k","LLM 输出侧:schema 校验(截断位置可诊断)、空响应重试提示词收敛、块成稿 maxTokens 按目标字数 1:1.2(不走 thinking \xd76 放大)"]},{subtitle:"预算裁剪审计"});a1(a.nodeEmit,"finalize.qualityGates",q),d(c)}({generationDiagnostics:b.planning.generationDiagnostics,chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,emitProgress:b.global.emitProgress,nodeEmit:d}),b.planning.generationDiagnostics.metrics.push({name:"phase:global-review",startedAt:b.chapterLoop.globalReviewPhaseStartedAt,endedAt:Date.now(),durationMs:Date.now()-b.chapterLoop.globalReviewPhaseStartedAt}),(0,g.X6)(b.planning.generationDiagnostics,"phase:finalize",()=>cN({pausedByRequest:!0===b.global.pausedByRequest,chapterDrafts:b.chapterLoop.chapterDraftsFinal,chapterDraftsByOrder:b.understanding.chapterDraftsByOrder,chapterGenerationStagesByOrder:b.understanding.chapterGenerationStagesByOrder,clarificationOverrides:b.planning.clarificationOverrides,clarificationAmendments:b.planning.clarificationAmendments,chapterGenerationStages:b.understanding.chapterGenerationStages,effectiveChapters:b.planning.effectiveChapters,template:b.prepare.template,allEvidence:b.understanding.allEvidence,documentSpec:b.prepare.documentSpec,projectMaterialProfile:b.prepare.projectMaterialProfile,projectMaterialSummary:b.prepare.projectMaterialSummary,domainProfile:b.prepare.domainProfile,documentBudget:b.planning.documentBudget,promptTexts:b.prepare.promptTexts,reviewPromptTexts:b.prepare.reviewPromptTexts,repairPromptTexts:b.prepare.repairPromptTexts,input:b.global.input,generationStrategy:b.planning.generationStrategy,generationDiagnostics:b.planning.generationDiagnostics,chapterScopedContext:b.planning.chapterScopedProjectContext,promptIds:b.prepare.promptIds,promptDocumentRules:b.prepare.promptDocumentRules,projectUnderstanding:b.prepare.projectUnderstanding,projectContext:b.planning.projectContext,projectRoot:b.prepare.projectRoot,projectId:b.prepare.projectId,readiness:b.prepare.readiness,documentId:a.diversitySeed,factExtractionPromptTexts:b.prepare.factExtractionPromptTexts,blueprintData:b.blueprint.integratedBlueprint?.validation.passed?b.blueprint.integratedBlueprint.data:void 0,bidComposition:b.understanding.bidComposition,billFactLock:b.blueprint.billFactLock,drawingFactLock:b.blueprint.drawingFactLock,requirementSemantics:b.prepare.requirementSemantics,hasExplicitOutline:b.prepare.hasExplicitOutline,missingItems:b.understanding.missingItems,clarificationRequests:b.understanding.clarificationRequests,unfixableDeclarations:b.understanding.unfixableDeclarations,retrievalCoverageReports:b.understanding.retrievalCoverageReports,failedChapterMessages:b.understanding.failedChapterMessages,webResearchReport:b.understanding.webResearchReport,indexHealth:b.understanding.indexHealth,globalConsistencyIssues:c,scopeConflicts:b.understanding.canonicalFacts.scopeConflicts,writingTaskBrief:b.planning.writingTaskBrief,evaluationCriteriaItems:b.understanding.evaluationItems.map(a=>a.title).filter(Boolean),tenderRequirements:b.planning.tenderRequirements,requirementAssignments:b.blueprint.requirementAssignments,requirementsSimilarity:b.planning.requirementsSimilarity,factTokenScopeClassifier:b.planning.factTokenScopeClassifier,professionalDepthClassifier:b.planning.professionalDepthClassifier,agentWorkflow:cM(b.understanding.agentWorkflow),emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat,...void 0!==b.global.nodeLogBaseDir?{nodeLogBaseDir:b.global.nodeLogBaseDir}:{}}))}c(64753),c(18292),c(87635),c(39372)},80323:(a,b,c)=>{c.d(b,{GA:()=>y,R2:()=>G,Y5:()=>F,Y6:()=>A,bs:()=>H});var d=c(31846),e=c(1218),f=c(11248),g=c(95294),h=c(82437),i=c(1358),j=c(10025),k=c(22157);let l=/OCR|乱码|识别错误|无法确认|语义断裂|页码/u,m=/暂列金额|暂估价|预留金/u,n=/^\d+(?:\.\d+)?\s*(?:%|元|万元|亿元|项|个|天|月|年|周|小时|分钟|人|次|份|批|层)$|^\d{4}[.\-/]\d{1,2}$/u,o=/^[A-Za-z]{1,4}\s*[-–—]?\s*\d{1,3}$/u,p=/^(?:精确参数|技术参数|参数|参数规格|规格参数|数据|指标|其他|其它|备注|说明|未分类)$/u,q=/(?:GB|JGJ|CJJ|CJ|JG|JT|TB|SL|DL|HG|SH|YB|SY|GA|QB|WS|JC|NB|CECS|ISO|IEC|JTG|DB)\s*\/?\s*T?\s*[\d.]{4,}/iu,r=/^[A-Za-z]{1,3}\s*\d+(?:\.\d+)?[A-Za-z]?$/u,s=/[。!?]|[::]\s*[\d((]|(?:应|须|不得|必须|严禁|宜)[^,。;]{0,20}(?:采用|符合|按照|满足|设置|办理|执行|组织|进行|大于|小于|超过|支付|承担|参加|具备|具有|提供|建立|完成|取得|达到|构成|包括|包含|纳入|列入|签署|加盖)|[^,。;]{6,}为[^,。;]{6,}/u,t=/(?:有限公司|有限责任公司|股份公司|集团公司|公司|事务所|管理处|管理局|委员会|服务中心)$/u;function u(a){return`${a.key||""} ${a.fieldName||""} ${a.value||""}`.trim()}function v(a,b=new Set){if(!a)return{usable:[],noiseExcluded:[]};let c=a.factIndex?.parameterFacts?.length?a.factIndex.parameterFacts:a.preciseFacts||[],d=new Set,i=[],k=[];for(let a of c){if(!a)continue;let c=String(a.value||"").trim();if(!c||b.has((0,f.K3)(c))||l.test(u(a))||(0,e.ZR)(a)||m.test(u(a)))continue;let v=(0,g.MO)(c);if(v){k.push({fact:a,category:v});continue}if(function(a){let b=String(a.value||"").trim();if(!b)return"空值";let c=(0,h.j4)(b);if(c)return c;let d=String(a.key||"").trim();return p.test(d)&&!r.test(b)&&!q.test(b)&&n.test(b)?"裸量碎片(键为通用桶、值无概念词,正文无从逐字落位)":RegExp(j.yJ,"u").test(b)?"变更叙述(非可落位参数)":b.length>=18&&s.test(b)?"条文句(非短语级参数)":b.length>=30&&(b.match(/[,、;]/gu)||[]).length>=2?"多小句条款句(非短语级参数)":/(?:\d)\s*(?:\d)(?:\s*\d){2,}/u.test(b)&&/(?:北|南|东|西|侧|号|路|街|村|镇|区)\s*\d/u.test(b)?"OCR 数字复写残片":t.test(b)?"单位/机构名(非工程参数)":/[==]/u.test(b)?"表格公式/口径残片(非值)":/^《[^》]{2,60}》\s*[((]?[A-Z]{1,6}\d{0,4}\s*\/?\s*T?\s*[\d.]{3,}/u.test(b)?"规范引用条目(属编制依据,非工程参数)":!o.test(b)||q.test(b)||r.test(b)?void 0:"清单/图签编码"}(a)||z.test(String(a.key||"").trim()))continue;let w=`${a.key}|${(0,f.K3)(c)}`;d.has(w)||(d.add(w),i.push(a))}return{usable:i,noiseExcluded:k}}function w(a,b=[]){let c=new Set;for(let e of(0,d.TC)(a,b))for(let a of(0,d.XF)(e))c.add(a);return[...c]}function x(a,b){let c=u(a),d=0;for(let a of b)c.includes(a)&&(d+=1);return d}function y(a,b,c={}){let d=function(a,b,c={}){let{usable:d}=v(a,c.supersededValues);if(0===d.length)return[];let e=w(b,c.sections||[]);return 0===e.length?[]:d.map(a=>({fact:a,score:x(a,e)})).filter(a=>a.score>0).sort((a,b)=>b.score-a.score||String(a.fact.key).localeCompare(String(b.fact.key),"zh")||String(a.fact.value).localeCompare(String(b.fact.value),"zh")).map(a=>a.fact)}(a,b,c);if(0===d.length)return[];let e=Math.max(1,c.maxChars??3600),f=[],g=0;for(let a of d){let b=a.fieldName&&a.fieldName!==a.key?`(${a.fieldName})`:"",c=String(a.objectName||"").trim(),d=c?`- ${c}|${a.key}${b}=${String(a.value).slice(0,80)}`:`- ${a.key}${b}:${String(a.value).slice(0,80)}`;if(g+d.length+1>e)break;f.push(d),g+=d.length+1}let h=d.slice(f.length);return 0===f.length?[]:[`【本章可靠参数清单(资料事实链参数索引:${d.length} 项与本章相关的规格/参数/数量/时间/比例/标准编号,须逐项在正文对应位置自然写入,保持原值原形态(数字、单位、编号中的连字符与年份不得改写、拆分或省略);商务金额/单价/税率/预留金类数据一律不得写入正文)】`,'【逐对象写实铁律】带对象前缀的条目(「对象|属性=值」)必须写到**该对象**的正文处——**禁止把某对象的参数写到另一对象**;同一属性在不同对象下各有其值(如「基础垫层 100mm」与「地坪垫层 300mm」并列)是**正确**的,不得"统一"或只取其一。',...f,...h.length>0?[`- 另需落位(仅列名,共${h.length}项,须同样逐项写入正文):${h.map(a=>String(a.key)).join("、")}`]:[]]}let z=/^(?:项目名称|项目编号|招标人|建设单位|建设地点|建设规模|计划工期|合同工期|总工期|开工日期|质量标准|质量目标|合同估算价|最高投标限价|招标范围|施工范围|投标人|开标|评标|资金来源|编制依据|安全生产许可证)/u;function A(a){let b=0,c=0,d=[];for(let e of a){if(String(e.objectName||"").trim()){b+=1;continue}if(z.test(String(e.key||"").trim())){c+=1;continue}d.length<12&&d.push(`${String(e.key).slice(0,20)}:${String(e.value).slice(0,30)}`)}let e=a.length-b-c,f=b+e;return{total:a.length,bound:b,projectLevel:c,unbound:e,bindRate:f>0?b/f:1,unboundSamples:d}}let B=/[一—–‑﹣]/gu,C=/(?:约(?:为)?|大约|大概|左右|共计|总计|合计|合计为|不小于|不少于|不超过|不大于|应不少于)/gu,D=/^(?:dn|de|d|φ|ф)/iu;function E(a,b,c=[],d={}){let{usable:e,noiseExcluded:g}=v(b,d.supersededValues),h=(0,f.K3)(a||""),j=h.replace(B,"-"),k=c.map(a=>w(a.title,a.sections||[])),l=[],m=[],n=[];for(let a of e){if(function(a,b,c=""){let d=(0,f.K3)(b);return!!d&&(!!(a.includes(d)||b.split(/[、,,;;/|]+/u).map(a=>(0,f.K3)(a)).filter(a=>a.length>=5).some(b=>a.includes(b)))||!!c&&function(a,b,c){let d=(0,f.K3)(c).replace(B,"-");if(d.length>=5&&b.includes(d))return!0;let e=d.replace(C,"");if(e.length>=5&&e!==d&&b.includes(e))return!0;let g=(0,i.Ih)(e);if(g.length>=5&&g!==e&&b.includes(g)||(0,i.Ih)(b).includes(g))return!0;if(D.test(d)){let b=d.replace(D,"dn");if(b.length>=4&&a.includes(b))return!0}return!1}(a,c,b))}(h,String(a.value),j)){l.push(a);continue}(k.some(b=>b.length>0&&x(a,b)>0)?m:n).push(a)}return{totalParams:e.length,used:l,relevantMissed:m,irrelevantMissed:n,noiseExcluded:g}}function F(a){let b=a.chapters||[],c=E(a.markdown,a.factsModel,b,{supersededValues:a.supersededValues});if(0===c.totalParams)return;let d=c.used.length,e=c.relevantMissed.length,f=d+e;return{totalParams:c.totalParams,usedParams:d,relevantMissedCount:e,relevantMissed:c.relevantMissed.slice(0,20).map(a=>`${a.key}:${String(a.value).slice(0,60)}`),irrelevantMissedCount:c.irrelevantMissed.length,noiseExcludedCount:c.noiseExcluded.length,noiseExcluded:c.noiseExcluded.slice(0,10).map(a=>`[${a.category}]${a.fact.key}:${String(a.fact.value).slice(0,50)}`),rate:b.length>0&&f>0?d/f:null}}function G(a,b,c=[]){let d=new Map;if(0===c.length)return d;let e=E(a,b,c).relevantMissed;if(0===e.length)return d;let f=c.map(a=>w(a.title,a.sections||[]));for(let a of e){let b=String(a.value).trim();if(0===b.length||b.length>80)continue;let c=f.map((b,c)=>({index:c,score:0===b.length?0:x(a,b)})).filter(a=>a.score>0).sort((a,b)=>b.score-a.score||a.index-b.index)[0];if(c){let a=d.get(c.index)??[];a.push(b),d.set(c.index,a)}}return d}function H(a,b,c=[],d={}){if(0===c.length)return[];let e=E(a,b,c,d),f=e.used.length+e.relevantMissed.length;if(f<8||e.used.length/f>=.9)return[];let g=e.relevantMissed.slice(0,3).map(a=>String(a.value).slice(0,30));return[{level:"error",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`可靠参数义务落位不足:${e.used.length}/${f}(相关而遗漏 ${e.relevantMissed.length} 项${g.length>0?`,缺失如 ${g.join("、")}`:""})`,suggestion:"请将资料中的可靠参数(规格/型号/尺寸/强度/规范编号等)在对应章节的对应位置自然写入,保持原值原形态(数字、单位、编号中的连字符与年份不得改写、拆分或省略);商务金额、单价、税率、预留金类数据一律不得写入正文。",provenance:{detectorId:"parameter-obligation-usage",fingerprint:(0,k.c6)(a)}}]}},81892:(a,b,c)=>{c.d(b,{G0:()=>m,OA:()=>i,Xv:()=>l,hS:()=>g,uQ:()=>h});var d=c(29055),e=c(68977);let f="每条重点难点必须写成「难点事项 | 成因与风险来源 | 应对措施 | 责任岗位 | 检查频次 | 整改闭环要求」式条目,两个半项缺一不可:① **归因**:明确写出成因与风险来源——须用「成因」「风险来源」「风险源于」「致险因素」等字面表述,不得只描述现象;② **量化**:写出量化控制目标(数值+单位或频次,如「开挖深度不超过 3m」「每 200m 划分一段」「压实度不低于 95%」「巡检 1 次日」「导行通道宽度不小于 4m」);重难点以表格呈现时按行逐条判定:文档级模板化检测线只取②量化——「数值+单位/频次」条目占比须 ≥50%(①归因表述为观测项,不计入该线);块级质检(重难点类章)另按①②双达标率 ≥50% 验收",g=[{pattern:/概况|总体|理解|说明|编制/u,goal:"以项目资料已确认的事实卡片展开工程概况与总体理解,不得空泛概述",mustCover:["工程名称、建设地点、建设规模、计划工期、质量标准等资料已确认事实","现场条件与招标范围边界","编制依据与适用范围(按五类逐项列全:招标文件及补疑补遗、国家法律法规、国家/行业现行规范标准、地方法规规章、企业管理体系;地方法规规章必须结合工程所在地属地的现行地方性法规与政府规章,不得只写笼统一句话)","B5 专业工程清单:资料识别的专业工程逐个展开(不少于 5 个,每个专业工程写明作业对象与工程量、工序顺序、施工方法三方面要素,落到工程量与工艺参数)",`重点难点分析(本类章普遍承载该内容):${f}`]},{pattern:/主要施工内容/u,goal:"按专业工程展开作业对象与工程量、工序顺序、施工方法三方面要素(呈现形式不限),落到工程量与工艺参数",mustCover:["资料识别的专业工程(不少于5个)","每个专业工程的作业对象与工程量/工序顺序/施工方法三方面要素","工程量、材料设备规格、检测验收与资料闭环"]},{pattern:/主要分部分项工程施工方案|主要施工方法/u,goal:"按分项工程方案展开作业对象与工程量、工序顺序、施工方法三方面要素(呈现形式不限),落到工艺参数与工序顺序",mustCover:["资料明确的专业工程范围(逐项展开分项工程方案)","每个分项方案的作业对象与工程量/工序顺序/施工方法三方面要素","每个分项方案不少于4个工艺参数与至少1处3环节以上工序顺序表达","工艺参数来自绑定材料或行业通用规范值,不得编造"]},{pattern:/重点|难点/u,goal:"识别项目重点难点并给出针对性对策,每项落到责任岗位与验收节点",mustCover:["重点难点成因与影响范围","对应施工内容与专项措施","责任岗位、检查频次、整改闭环",f]},{pattern:/部署|总体|流水|顺序/u,goal:"明确施工部署逻辑、流水段划分与资源调配机制",mustCover:["施工区段与流水划分","各阶段施工顺序与穿插关系","资源动态调配机制"]},{pattern:/进度|工期/u,goal:"围绕总工期与关键节点展开进度保障",mustCover:["总进度计划与关键节点","周/日计划分解","进度偏差识别与纠偏措施"]},{pattern:/质量/u,goal:"覆盖材料验收、过程控制、隐蔽验收、整改复验的质量闭环",mustCover:["质量目标与验收依据","三检制度与样板引路","隐蔽工程验收与材料复试","见证取样送检、试块养护、分部分项报验等质量保障制度逐项落位","质量通病防治与闭环整改","保修与缺陷责任期承诺"]},{pattern:/安全|危大|风险/u,goal:"覆盖风险识别、危大工程专项方案、检查整改与应急响应",mustCover:["安全目标与量化控制指标(如杜绝重伤及以上事故、轻伤事故频率控制值、安全达标率),须以承诺句式明确写出","危险源辨识与风险分级","危大工程辨识清单逐项完整(按项目实际情况覆盖基坑支护与降水、模板支撑、脚手架、起重吊装、吊篮、拆除等适用项,逐项写明辨识依据,不得遗漏)","B6 危大分级参数—判定绑定(硬要求):每一类危大工程的判定必须写「本项目实际参数 + 判定阈值对照 + 结论」三要素(如「本项目基坑开挖深度 1.75m,对照《危险性较大的分部分项工程安全管理规定》开挖深度超过 3m 属危大工程的阈值,判定本工程基坑不属于危大工程」);**禁止只抄规范阈值**(如只写「开挖深度超过 3m 的沟槽土方开挖工程」而不给本项目实际深度);参数取自资料原文,不得编造","危大工程专项方案编制与审批程序","安全交底与隐患排查闭环","施工现场临时用电三级配电两级保护:总配电箱/分配电箱/开关箱三级配电,两级漏电保护(总箱与开关箱各一级,漏电动作电流与动作时间参数落位),TN-S 接零保护系统,漏电保护器每周试跳 1 次","B5 生产安全事故应急预案与应急演练(八部分结构:总则、组织机构及职责、风险分析与危险源辨识、应急物资设备与通讯保障、专项应急预案、应急响应、后期处置、培训演练):逐部分展开,演练频次量化(如每半年 1 次),物资储备清单化"]},{pattern:/资源|材料|设备|劳动力|人材机/u,goal:"说明资源配置依据、进场验收与保管调配",mustCover:["机械设备投入计划","分阶段劳动力计划","材料进场计划与验收"]},{pattern:/文明|绿色|环保|扬尘|噪声/u,goal:"覆盖扬尘噪声管控、四节一环保与智慧监测",mustCover:["扬尘治理六个百分百逐项落位(施工工地周边 100% 围挡、物料堆放 100% 覆盖、出入车辆 100% 冲洗、施工现场地面 100% 硬化、拆迁工地 100% 湿法作业、渣土车辆 100% 密闭运输;不涉及拆迁的写明豁免理由)","扬尘噪声分时段管控","监测预警与台账","绿色施工与四节一环保措施:绿色施工按《绿色施工评价标准》GB/T 50640 分阶段评价(每阶段不少于 1 次,评价记录归档)","B5 四节一环保量化指标:节水(非传统水源利用率/用水量控制)、节材(材料损耗率/废弃物回收率)、节地(土方平衡率)、节能(能耗指标)各至少 1 项带单位量化指标,附录八基准对照项逐项量化响应"]},{pattern:/应急|预案/u,goal:"覆盖应急组织、物资储备与专项预案",mustCover:["应急组织架构","应急物资储备","专项预案与演练计划"]},{pattern:/竣工|验收|移交|保修/u,goal:"覆盖竣工清理、验收移交与保修响应",mustCover:["竣工清理与垃圾外运","缺陷修补与复验","验收移交与保修响应"]},{pattern:/工资|劳务|实名/u,goal:"覆盖劳务实名制与农民工工资保障闭环",mustCover:["建筑工人实名制管理(实名登记率 100%、实名制管理平台考勤)","农民工工资专用账户与银行代发(专用账户开设、按月足额代发、工资保证金)","考勤与工资支付台账","工伤保险办理与参保信息管理(作业人员工伤保险按项目参保、参保信息纳入实名制管理、工伤事故申报处置流程)"]},{pattern:/交通导改|交通导行|交通组织|导改|管线保护|占道/u,goal:"覆盖现状调查、分阶段导改、通行保障与地下管线保护,落到导改阶段划分与保通对象",mustCover:["现状交通与地下管线调查(交通流量、沿线单位出入口、管线权属与埋深)","分阶段导改方案与围挡设置(导改阶段划分、导改路线、通行能力校核、围挡撤除条件)","行人与沿线单位通行保障(人行通道、无障碍通行、出入口保通)","地下管线探测与保护措施(探测方法、保护形式、监护与应急)","导改标志标线与夜间警示设施(标志、标线、夜间警示)"],projectTypes:["municipal"]},{pattern:/居民|扰民|既有(?:设施|管线|建筑|构筑物)保护|沟通协调|公众参与/u,goal:"覆盖居民诉求、扰民控制、通行保障与既有设施保护,落到受影响户数、作业时段与责任人",mustCover:["受影响居民与诉求调查(受影响户数、诉求清单、调查方式)","扰民因素识别与控制措施(噪声、扬尘、振动、作业时段)","分区施工与居民通行保障(施工分区、通行路线、临时通道)","既有设施保护措施(既有管线、既有构筑物、保护形式)","沟通公示与投诉响应(公示方式、联系渠道、响应时限)"],projectTypes:["renovation"]},{pattern:/成品保护|半成品保护|交叉施工|交叉作业/u,goal:"覆盖成品保护策划、交接验收、分部位保护与交叉作业协调,落到责任岗位与责任转移时点",mustCover:["成品保护策划与责任划分(保护对象清单、责任岗位、交接制度)","交接验收与责任转移时点(交接条件、交接记录、责任转移时点)","分部位成品保护措施(地面、墙面、吊顶、门窗、设备)","交叉施工作业面协调(工序穿插顺序、作业面移交、冲突处理)","成品损坏责任认定与修复(损坏记录、责任认定、修复与复验)"],projectTypes:["decoration"]}];function h(a,b=[]){if(0===b.length)return g.find(b=>b.pattern.test(a));let c=g.filter(b=>b.pattern.test(a));if(0!==c.length)return c.find(a=>a.projectTypes?.length&&(0,d.zj)(a,b))??c.find(a=>!a.projectTypes?.length)??c[0]}let i=["【结构完整性红线】有序列表编号必须从「1.」起连续、不得跳号或重号,小节内列表独立起编、不得继承父级编号;编号后必须紧跟实质内容(禁止孤立编号);禁止双重冒号「::」「;:」「。:」等行尾标点残留;禁止句子中途截断(行尾无终止标点)与整段重复行;每个小节必须有实质正文,禁止只写标题的空小节","【表格规范红线】每张表只允许一个表头行(禁止重复表头),表名必须独立成行(禁止混入表头首格);**数据行不得留空单元格,也不得用「—/——」占位**——每格必须有内容且有值;禁止用「若干/约/待定/暂无/待补充」等模糊表达代替具体数据;合计行数值必须可由明细行相加推导;列数与表头一致;说明性内容必须用段落承载,禁止用表格单元格堆砌正文。规格型号列尤其注意:机械设备由投标人自行选型时,**选型结论本身就是必须写出的值**(写具体型号,或招标/图纸给出的规格),不得以「—」留空搪塞","【数据口径红线(宁缺毋假)】同一指标(劳动力总数、机械台数、工期阶段划分、班组人数等)全文档只允许一套口径,禁止在不同章节或表格中并列矛盾数值;禁止自行取平均值、保守值、众数等在多套口径中盲选统一;无法从资料锁定唯一数值时不得写具体数值(改用定性表述或显式标注待核),严禁编造数值或将候选值随手择一写入","【禁止资料堆砌伪段落】禁止以「本项目主要施工内容包括:X的Y量为Z……」「经识别,本项目工程量为:……」式清单罗列句充当正文段落;禁止把资料条目用顿号/分号首尾相接拼成伪句子;每段必须是连贯的施工描述(含施工对象、工序逻辑、工艺做法、参数落位),工程量清单类明细如需呈现应使用规范表格,不得用罗列句复制表格内容",'【禁止自伤式假设与短板表述】不得以假设或否定前提描述自身合规状态——禁止「如涉及危险性较大的分部分项工程…未经审批不得实施」「若发现缺项/矛盾…补测」「本工程不允许分包」类表述(评标人读作"可能不合规");也不得主动暴露短板(设计图纸不一致、工程量组价缺失、资料缺项、踏勘发现矛盾);一律改写为**已落实的正向做法**(逐项辨识分级管控、按程序处理、开工前完成核对闭环、自主组织实施严禁违法分包)',"【禁止两可表述】同一事项必须给出**唯一确定**的做法与参数,禁止「A 或 B」「A/B」「按…或…执行」式悬置选择(如「采用塔吊或施工电梯」「放坡或支护」「按设计坡率」);系统已裁决的计划类数值与做法按其口径唯一写出,不得并列候选值","【工期时序与分批口径红线】时间表述必须符合施工时序逻辑:前期准备动作(施工方案编制报审、图纸会审、交底、考察、封样、检测、培训演练、采购调查等)的完成时限必须落在施工准备阶段内,禁止出现「开工令下发后第 N 日内」且 N 达到或超过总工期的写法(等同于把前期动作排到竣工日);机械、设备、劳动力分批进场表述(首批/剩余/补充进场)各批次数量必须能合计推导为进场总数且与资源配置表同口径,禁止分批数量与总数互相矛盾","【禁止指向型表述与缺资料搪塞】不得以指向他处替代具体做法与参数——禁止「按设计图纸控制/计量/要求/施工/确定/执行」「按图纸」「以图纸为准」「详见\xd7\xd7大样图/详图」「参见《…》+图集编号(如20S515/29、皖2015S209)」类写法;**同样禁止**「资料未提供该参数」「待补充/待确认/待核实」「以设计文件为准」类搪塞(本产品不存在资料缺参数的情形)。每一条都必须写出本项目已确认的具体做法与参数实值(取蓝图/工程量清单/图纸标注/规范的确定值);若该条目的权威值尚未绑定给出,按**同专业已确认的等效做法+已有资料**写实,不得指向、不得留空、不得写「未提供」","【编制依据五类逐项列全(本章设「编制依据/编制说明」小节时适用)】设该小节的章节必须**逐条列出具体名称**(以类别话术代替即判未写:「国家现行法律、行政法规」「现行规范标准」「地方法规规章」式写法不得出现),五类缺一不可:① 招标文件及补疑补遗(名称、编号与招标文件一致,含答疑澄清文件);② 国家法律法规(《…法》形态的具体法律名称);③ 国家/行业现行规范标准(《…规范/规程/标准》+编号—年号,按本工程分部分项选择现行版本,**编号必须能在项目资料(招标文件/清单/图纸/设计说明)中查到**,查不到的编号视为编造);④ 地方法规规章(工程所在地属地的现行地方性法规与政府规章,名称须含工程所在地的省/市名,不得写笼统一句话);⑤ 企业管理体系文件(质量/环境/职业健康安全管理体系文件与内部管理制度)。**未设该小节的章节不得新增该小节**;既有条目不得删除或替换(补列条目与既有条目并列成行或成表)"],j="B8 现行口径铁律:正文只陈述**现行值**——计划工期、合同金额、开工日期等以真值层裁决后的生效值为准(具体生效值与被取代值见下文「现行口径」硬约束块,逐条照办);**禁止出现被取代的旧值,也禁止叙述变更过程**(不得写「原365日历天现变更修改为330日历天」「招标阶段计划工期为365日历天,现澄清变更为330日历天」「经澄清/答疑…调整为…」「招标澄清文件明确…」类说明——评标人只看现行口径);以工期为参照的时限(如「开工后第N日内完成…」)必须落在现行工期之内",k="B7 蓝图权威值必须写具体数字:劳动力峰值、机械设备台数、里程碑节点天数等由系统蓝图统一裁决的数值,必须原样写出(如「劳动力峰值 XX 人」「挖掘机 X 台」),不得只写「按总进度计划控制」「按施工部署确定」类控制原则,也不得自行推算另设";function l(a){let b=(a.globalWritingFocus||[]).filter(a=>/^B[78]\s|^项目规模事实卡|^项目可信基础事实|^【规范术语显性落位】|^B5 属地创优目标/u.test(a));return[a.truthConstraint,a.clarificationConstraint,a.amendmentConstraint,...b,a.hazardBindingBlock].filter(a=>!!(a&&a.trim()))}function m(a){let b=(0,d.yt)({template:{id:"runtime",name:a.templateName||"",outputTitle:"",description:"",category:"",chapters:a.chapters},chapters:a.chapters,requirement:a.requirement}),c=(0,d.un)({template:{id:"runtime",name:a.templateName||"",outputTitle:"",description:"",category:"",chapters:a.chapters},chapters:a.chapters,requirement:a.requirement}),f=/施工组织设计|施工组织|施组|技术标/u.test(`${a.templateName||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`)||b.length>0,g=Object.values(a.factsModel?.canonical?.byKey||{}).filter(a=>{let b=String(a.value||"").replace(/\s+/gu,"");return!/^[约为]?[::]?\d+(?:\.\d+)?(?:mm|cm|米|m|kN|KN|kn|kg|t|吨)/u.test(b)||!!(0,e.LM)(b,"m")}).map(a=>`${a.label}=${a.value}`),l=g.filter(a=>/建设规模|建筑面积|占地|用地面积|装配|层数|高度/u.test(a)).slice(0,8),m=["正文必须落到本项目资料已确认的事实,不得使用模板化空话或跨小节复制段落","措施类内容必须可核查:每项措施写清执行主体(谁做)、动作与量化标准(做什么、达标线是多少)、检查频次(多久一次)与问题处置(不达标怎么处理、由谁验证、留下什么记录);**闭环要用实质动作表达**(复测、送检、旁站、检验批验收、实测实量、资料归档等),禁止以“复查销项”“整改销项”“复查确认”一类无执行主体、无依据、无记录的零信息尾词收句;同一收尾表达全文不得超过 4 次;相邻小节不得同句式开头","措施类段落必须落位完整要素链——方案(专项施工方案/技术措施)、流程(施工工序/工艺流程)、执行主体(岗位)、检查频次(每周/每日不少于 N 次)、验收与处置(检测/试验/验收/整改/复验的具体做法)——五类要素按业务实质写清即可,**不要求出现特定字词**,也不要求逐段齐备(避免为凑要素而填充套话)","【规范术语显性落位】凡涉及强制性管理制度的段落,小节标题与正文首句必须显性使用规范术语原词(如「建筑工人实名制管理」「农民工工资专用账户」「生产安全事故应急预案与应急演练」「危险性较大的分部分项工程」「扬尘污染防治措施」「绿色施工与四节一环保」「施工现场临时用电三级配电两级保护」),禁止只写近义改写(如把“实名制管理”写成“人员考勤登记”、把“应急预案”写成“处置办法”);评审按规范术语原词做语义匹配,术语不显性即判内容缺失","正文每 1000 字至少落位 6 处带单位量化工艺参数(mm/MPa/养护天数/间距/压实度等),施工流程与施工方法须有明确的工序顺序表达(相邻小节不得同句式开头,同一句式全文不得反复使用,禁止以固定句模复读),每个分部分项方案至少 1 处 3 环节以上工序顺序表达",'专业工程类小节必须覆盖作业对象与工程量、工序顺序、施工方法三方面要素(必须融入连贯段落叙述,禁止以"施工概况/施工流程/施工方法"等结构标签充当标题或段落开头引导),小节标题用专业工程正式名称(如"拆除工程"),禁止使用"工作包"等后台概念命名','质量目标与创优目标必须使用招标文件原文的奖项名称逐字落位,禁止替换、降级或省略为其他奖项名称(如把招标文件指定奖项写成其他奖项);招标文件"确保/达到"类等级要求不得弱化为"争创/争取"',"B5 属地创优目标(属地适配项):招标文件未明确具体奖项时,正文必须提出不低于招标文件要求的属地创优目标(如“争创市级优质工程”“争创市级安全文明标准化工地”,市名须为工程所在地),并在质量与文明施工章节落位","B5 表格数据一致性(实测缺陷:合计行与阶段明细之和不符、班组人数多值并存):表格类内容(劳动力投入、材料配置、机械设备等)合计行数值必须与上方明细行数据一致、可由各行相加推导;各阶段人数与全项目峰值人数必须显式区分口径并保持一致(如写明“阶段高峰人数按阶段分别统计,合计行仅列全项目峰值口径”);同一班组人数在配置表与进退场表中必须同值,不得多值并存",...i,a.clarificationConstraint||""].filter(Boolean),n=a.chapters.map(b=>{let d=h(b.title,c),e=(a.projectGraph?.works||[]).filter(a=>a.name&&(b.title.includes(a.name.slice(0,2))||/概况|总体|施工内容|方案|施工/u.test(b.title))).slice(0,10),f=(a.projectGraph?.resources||[]).filter(a=>a.quantity&&/概况|资源|总体|施工内容|方案/u.test(b.title)).slice(0,12).map(a=>({itemCode:"",itemName:a.name,quantity:a.quantity,unit:a.unit}));return{chapterId:b.id,chapterTitle:b.title,writingGoal:d?.goal||"结合本章标题与项目资料事实展开专业内容,避免泛化叙述",mustCover:[...d?.mustCover||[],...(b.requiredFacts||[]).slice(0,6)],factDomains:[...b.requiredFacts||[],...e.map(a=>a.name)].slice(0,10),evidenceRefs:b.queries.slice(0,6).map(a=>({filePath:a,kind:"query",priority:"should"})),boqTargets:f,drawingTargets:[],gaps:[]}});return{documentType:f?"施工组织设计":"专业文档",globalWritingFocus:f?[...m,j,"招标硬性要求必须逐项明确响应:质量标准、计划工期、缺陷责任期与保修、安全文明目标、项目经理及组织机构;工期/质量/保修类承诺可在概况与质量章节落位,不得遗漏",...l.length?[`项目规模事实卡(口径裁决值,正文引用规模数据必须与之一致,不得混淆总占地与建筑总量口径):${l.join(";")}`]:[],...g.length?[`项目可信基础事实(写作时必须优先落位):${g.slice(0,10).join(";")}`]:[],k]:[...m.slice(0,2),j,k],chapters:n}}},82437:(a,b,c)=>{c.d(b,{DK:()=>M,Jo:()=>w,eA:()=>h,gu:()=>J,hf:()=>y,iC:()=>I,j4:()=>r,oj:()=>n,tI:()=>L,wc:()=>N});var d=c(10025),e=c(19898),f=c(95294);let g=/补遗|补疑|答疑|澄清|question/i;function h(a,b){return(0,e.sourcePriorityOf)(a,b)}function i(a){let b=[...String(a||"").matchAll(/(20\d{2})[.\-年](\d{1,2})[.\-月](\d{1,2})/g)].map(a=>1e4*Number(a[1])+100*Number(a[2])+Number(a[3]));if(b.length>0)return Math.max(...b);let c=/(\d{1,2})\s*(?:招标)?(?:答疑|澄清|补遗|补疑)(?:文件|公告|书)?/u.exec(a)?.[1];return c?1e3+Number(c):0}let j=/^(?:子项名称|图名|图号|比例|制图|审核|版次)\s*[::]/u,k=/^(?:子项名称图名|图名图号|设计单位名称|制图人|审核人|比例尺)$/u,l=/^(?:【[^】]{0,16}】|—+|待定|暂无?|未提供|详见|如上|同前)$/u,m=/^(?:【[^】]{0,24}】|—+|[待暂](?:定|补充|确认|核实|无|缺)|不详|未知|不适用|未在资料(?:中|里)?(?:明确)?(?:体现|给出|提供|说明|标注|载明|列明|查到|查得)|(?:资料|文件|图纸|清单)(?:中|里)?(?:均|也)?未(?:明确|体现|给出|提供|说明|标注|载明|列明|涉及|提及|识别|获取|解析|提取|查到)|未(?:明确|体现|提供|涉及|提及|给出|标注|说明|描述|予明确|识别|获取|解析|提取|匹配|查到)|系统暂未(?:从知识库确认)?|无法确认|无相关(?:资料|信息|内容|记录)|无此(?:项|内容|信息)|以(?:图纸|清单|资料|招标文件)为准|详见|如上|同前|同上)$/u;function n(a){let b=a.replace(/^【/u,"").replace(/】$/u,"").replace(/[\s。;;,,、..]+$/u,"").trim();return b.length>0&&b.length<=24&&m.test(b)}let o=/^(?:见|详见|参见|按|依据)\s*(?:招标文件|招标公告|投标须知|图纸|设计|清单|规范|合同)/u,p=/暂列金额|暂估价|预留金|投标报价|报价明细|综合单价|单价|合价|税率|增值税|利润|结算/u,q=/^(?:分部小计|本页小计|小计|合计|总计|综合单价|措施项目费|规费|税金|按实|暂估|暂列金额)$/u;function r(a,b={}){let c=String(a||"").trim();return c?c.length>260?"超长(疑为段落而非值)":(c.match(/([\u4e00-\u9fa5])\1/gu)||[]).length>=2?"OCR 复写噪声":!b.allowProse&&c.length>40&&/[。;!?]$/u.test(c)?"段落而非值":j.test(c)&&c.length<=14||k.test(c)?"图签/图名串格":l.test(c)?"占位/未提供值":n(c)?"缺席声明(资料未给出该信息)":o.test(c)?"指向值(非值本身)":q.test(c)?"清单内部口径词":(c.match(/[\u4e00-\u9fa5]{2,8}\s*[::]/gu)||[]).length>=3?"表格串格(多字段粘连)":!1!==b.includePoolNoise&&(0,f.MO)(c)?"池噪声(图签/坐标/残片/粘连)":c.length>=12&&/(?:以及|和|与|或|的|了|在|为|按|由|及)$/u.test(c)?"截断值":void 0:"空值"}function s(a){let b=String(a||"").trim(),c=/^(?<main>[^((]{1,40})[((](?<inner>[\s\S]{12,})[))]\s*$/u.exec(b);if(!c?.groups)return{value:b};let d=c.groups.inner;return/;|;|余同|标注:|图纸标注|以下同/u.test(d)||d.length>30?{value:c.groups.main.trim(),note:d.slice(0,80)}:{value:b}}let t=/(?:开挖深度|搭设高度|支撑高度|吊装重量|起吊重量|搭设跨度|施工总荷载|集中线荷载|基坑深度)[^。;]{0,14}?(?:超过|达到|不小于|大于)\s*\d+(?:\.\d+)?\s*(?:mm|cm|m|米|t|吨|kg|kN)[^。;]{0,24}?的[^。;]{0,20}工程/u,u=RegExp(`${d.yJ}\\s*[::]?`,"u"),v=new Map;function w(a){let b=String(a||"").trim();if(!b)return{value:"",shape:"text"};let c=u.exec(b),d=c?b.slice(c.index+c[0].length):b,e=[{shape:"date",re:/\d{4}\s*年\s*\d{1,2}\s*月\s*\d{1,2}\s*日/u},{shape:"money",re:/\d+(?:\.\d+)?\s*(?:万元|亿元|元)/u},{shape:"standard",re:/(?:GB|JGJ|CJJ|DB|CECS|ISO|IEC)\s*\/?\s*T?\s*[\d.]+/iu},{shape:"spec",re:/(?:C\d{2,3}|HRB\d{3,4}|HPB\d{3}|DN\s*\d+|Φ\s*\d+|φ\s*\d+|\d+(?:\.\d+)?\s*(?:mm|cm|kV|MPa|kPa|kW|W|A|V))/u},{shape:"measure",re:/\d+(?:\.\d+)?\s*(?:m2|m3|m²|m³|㎡|m|km|kg|t|吨|个|座|套|台|根|块|樘|扇|片|组|件|孔|盏|项|处|层|日历天|天|%)/u}].filter(a=>a.re.test(d));if(0===e.length)return{value:b.slice(0,80),shape:"text"};let f=e[0];return{value:function(a,b){let c=String(a||"").trim(),d={date:/\d{4}\s*年\s*\d{1,2}\s*月\s*\d{1,2}\s*日/gu,money:/\d+(?:\.\d+)?\s*(?:万元|亿元|元)/gu,standard:/(?:GB|JGJ|CJJ|DB|CECS|ISO|IEC)\s*\/?\s*T?\s*[\d.]+(?:-\d{2,4})?/giu,spec:/(?:C\d{2,3}|HRB\d{3,4}|HPB\d{3}|DN\s*\d+|Φ\s*\d+|φ\s*\d+|\d+(?:\.\d+)?\s*(?:mm|cm|kV|MPa|kPa|kW|W|A|V))/gu,measure:/\d+(?:\.\d+)?\s*(?:m2|m3|m²|m³|㎡|m|km|kg|t|吨|个|座|套|台|根|块|樘|扇|片|组|件|孔|盏|项|处|层|日历天|天|%)/gu};if("text"===b)return c.slice(0,80);let e=(d[b]||d.measure).source,f=[...c.matchAll(function(a){let b=v.get(a);if(b)return b.lastIndex=0,b;let c=RegExp(a,"gu");return v.set(a,c),c}(e))].map(a=>a[0].trim());if(0===f.length)return c.slice(0,80);let g=u.exec(c);if(g){let a=c.slice(g.index+g[0].length),b=RegExp(e,"u").exec(a);if(b)return b[0].trim()}return f[f.length-1]}(b,f.shape),shape:f.shape}}function x(a){let b=String(a||"").trim(),c=/[\u4e00-\u9fa5]([A-Za-z][A-Za-z0-9]{5,})/u.exec(b),d=c?b.slice(0,(c.index??0)+1):b;return d=d.replace(/([\u4e00-\u9fa5])\d{3,}$/u,"$1"),/省|市|区|县|路|街|交口|镇|乡/u.test(d)&&(d=d.replace(/([\u4e00-\u9fa5])[\d\s]{3,}(?=[\u4e00-\u9fa5]|$)/gu,"$1")),d}function y(a,b){let c=String(b||"").trim(),d=String(a||"").trim(),e=(c&&c===d?c:`${c}${d}`).replace(/\s+/gu,"");return e?/开工日期|开工时间|startDate/i.test(e)?"开工日期":/竣工日期|完工日期|endDate/i.test(e)?"竣工日期":/质量标准|质量目标|quality/i.test(e)?"质量标准":/建设规模|建筑面积|规模|scale/i.test(e)?"建设规模":/建设地点|工程地点|location/i.test(e)?"建设地点":/招标人|建设单位|owner/i.test(e)?"招标人":/暂列金额|暂列金/u.test(e)?"暂列金额":/估算|限价|控制价|投资|金额|amount/i.test(e)?"合同金额":/项目名称|工程名称|projectName/i.test(e)?"项目名称":/项目编号|工程编号|projectCode/i.test(e)?"项目编号":/工期|日历天|duration|schedule/i.test(e)&&!/节点|阶段|考核|开工|竣工/i.test(e)?"计划工期":e.slice(0,40):""}function z(a){let b=String(a||"").trim();b=b.replace(/(\d{4})\s*年\s*(\d{1,2})\s*月\s*(\d{1,2})\s*日/gu,(a,b,c,d)=>`${b}年${Number(c)}月${Number(d)}日`);let c=/^([\d,]+(?:\.\d+)?)\s*(亿元|万元|元)$/u.exec(b);if(c){let a=Number(c[1].replace(/,/gu,""))*("亿元"===c[2]?1e8:"万元"===c[2]?1e4:1);Number.isFinite(a)&&(b=`${a.toFixed(2)}元`)}return b}function A(a){let b=String(a||"").replace(/^\/+/u,""),c=b.indexOf("/");return c>0?b.slice(0,c):b}let B=/(?:计划|方案|措施|制度|职责|体系|程序|规划|组织|安排|要求|标准|办法|流程|台账|记录)$/u,C=/^[A-Za-z]{1,6}\s?[-/]?\s?\d{1,6}(?:\.\d+)?$/u,D=/(?:规格|型号|等级|管径|直径|厚度|强度等级|牌号|标号|尺寸)$/u,E=["参数","要求","标准","数据","指标","信息"],F=/(?:工期|节点|日期|期限|周期|时长|时间|时刻|进度计划)$/u,G=/\d{4}\s*年\s*\d{1,2}\s*月|\d+\s*个?\s*(?:日历天|天|个月|月|周|年|小时|工作日)/u,H=/(?:工期|节点|阶段|开工|竣工|完工|完成|封顶|验收|日历天|工作日|月份|年度|季度)/u;function I(a){let b=a.overrides||[],c=[],e=new Map;a.facts.forEach((b,d)=>{let f=String(b.value??"").trim();if(!f)return;let g=y(String(b.key||""),b.label);if(!g)return;let j=String(b.sourceFile||b.source||""),k=s(f),l=String(b.sourceFile||b.source||""),m=a.subjectOf?a.subjectOf({key:b.key,label:b.label,sourceFile:l}):"",n=/澄清|变更|补疑|补遗|修改为|调整为|更正/u.test(k.value)&&!/^(?:见|详见|参见)/u.test(k.value),o=(a,b)=>{let c=e.get(a)||[];c.push({subject:m,attribute:a,value:b,source:l,priority:h(l),order:1e3*i(l)+d,clarified:n}),e.set(a,c)},p=function(a,b,c){let d=String(c||""),e=[],f=y(a,b),g=d.split(/[::]/u),h=/(?:变更|澄清|修改|调整|更正|修正|如下|其中|例如|即|注|说明)$|为$/u;for(let a=0;a+1<g.length;a+=1){let b=/([\u4e00-\u9fa5]{2,10})$/u.exec(g[a]||"")?.[1];if(!b||h.test(b))continue;let c=(g[a+1]||"").trim();if(t.test(c))continue;let d=c.slice(0,40);if(!/\d/u.test(d))continue;let i=y(b,b);i&&i!==f&&e.push({attribute:i,value:d})}return e}(String(b.key||""),b.label,k.value);for(let a of p){let b=w(s(a.value).value).value;r(b)||o(a.attribute,b)}let q=r(k.value);if(q)return void c.push({attribute:g,value:k.value.slice(0,60),source:j,reason:q});let u=x(w(k.value).value);if(p.some(a=>a.value.includes(u)||u.includes(a.value.replace(/[((].*$/u,"").trim())))return;if(r(u)){let a=x(k.value).slice(0,80);if(!/省|市|区|县|路|街|交口/u.test(a)||r(a))return;o(g,a);return}let v=function(a,b){let c=String(a||"").trim(),d=String(b||"").trim();if(!c||!d)return;if(B.test(c)&&C.test(d))return`值-标签形态不相容:文本型属性「${c}」取了裸型号值「${d}」`;if(F.test(c)&&!G.test(d)&&!H.test(d))return`值-标签形态不相容:时间型属性「${c}」取了无日期/时长的值「${d.slice(0,40)}」`;let e=E.reduce((a,b)=>a+(c.split(b).length-1),0);return c.length>=8&&e>=2?`值-标签形态不相容:属性名「${c}」为多标签拼接,不作为口径属性`:D.test(c)&&d.length>30&&/[,。;,;]/u.test(d)?`值-标签形态不相容:规格型属性「${c}」取了长句值`:void 0}(g,u);if(v)return void c.push({attribute:g,value:u.slice(0,60),source:j,reason:v});o(g,u)});let f=new Set((a.labeledValues||[]).map(a=>y(a.attribute,a.attribute)).filter(Boolean));for(let b of a.labeledValues||[]){let a=y(b.attribute,b.attribute);if(!a)continue;let c=s(b.value);if(r(c.value,{allowProse:!0,includePoolNoise:!1}))continue;let d=e.get(a)||[];d.push({subject:"",attribute:a,value:w(c.value).value,source:b.source,priority:b.supersedesPriorMaterials?99:h(b.source),order:1e3*i(b.source)+500,clarified:b.clarified??!0}),e.set(a,d)}for(let[a,b]of e){if(b.length<2||b.some(a=>!a.source.includes("/")))continue;let d=new Map;for(let a of b){let b=A(a.source);d.set(b,(d.get(b)||0)+1)}if(d.size<=1)continue;let f=[...d.entries()].sort((a,b)=>b[1]-a[1]||a[0].localeCompare(b[0],"zh-Hans-CN"))[0][0];for(let d of b)A(d.source)!==f&&c.push({attribute:a,value:d.value.slice(0,60),source:d.source,reason:`跨资料包(本项目资料包:${f})`});e.set(a,b.filter(a=>A(a.source)===f))}let j=[];for(let[a,c]of e){let e=function(a,b,c=""){if(0===a.length)return;let e=new Set,f=[];for(let d of b){if("override"!==d.kind||!a.some(a=>a.value.includes(d.superseded))||(e.add(d.superseded),a.some(a=>a.value===d.effective)||f.some(a=>a.value===d.effective)))continue;let b=d.evidence[0]?.source||"";f.push({subject:a[0].subject,attribute:a[0].attribute,value:d.effective,source:b,priority:h(b,c),order:1e3*i(b)+900,clarified:!0})}let j=[...a.filter(a=>![...e].some(b=>a.value.includes(b))),...f];if(0===j.length&&(j=[...a]),1===j.length)return{winner:j[0],rule:"R1",superseded:[...e]};let k=/(?:路|街|道|巷|号|交口|北侧|南侧|东侧|西侧|经开区|开发区|镇|村)/u,l=j.filter(a=>k.test(a.value)&&/省|市|区|县/u.test(a.value));if(l.length>0&&l.length<j.length&&(j=l),1===j.length)return{winner:j[0],rule:"R1.5",superseded:[...e]};let m=new Set(f),n=j.filter(a=>!m.has(a)&&(!!a.clarified||g.test(a.source)&&u.test(a.value)));if(n.length>0&&n.length<j.filter(a=>!m.has(a)).length&&(j=[...n,...j.filter(a=>m.has(a))]),1===j.length)return{winner:j[0],rule:"R2.5",superseded:[...e]};let o=Math.max(...j.map(a=>a.priority)),p=j.filter(a=>a.priority===o);if(1===p.length)return{winner:p[0],rule:"R2",superseded:[...e]};let q=Math.max(...p.map(a=>i(a.source)));if(q>0){let a=p.filter(a=>i(a.source)===q);if(1===a.length)return{winner:a[0],rule:"R3",superseded:[...e]};p=a}let r=a=>{let b=/(\d{1,2}(?:\.\d{1,2}){1,3})/u.exec(a.source+a.value);return b?Number(b[1].split(".").reduce((a,b)=>a+Number(b),0)):0};if(1===new Set(p.map(a=>a.source)).size){let a=Math.max(...p.map(r));if(a>0){let b=p.filter(b=>r(b)===a);if(1===b.length)return{winner:b[0],rule:"R4",superseded:[...e]};p=b}}let s=/(?:省|市|区|县|镇|路|街|道|巷|号|交口|北侧|南侧|东侧|西侧|经开区|开发区)/u,t=p.filter(a=>s.test(a.value));if(t.length>=1&&t.length<p.length)return{winner:t.reduce((a,b)=>b.value.length>a.value.length?b:a,t[0]),rule:"R5",superseded:[...e]};let v=(0,d.dm)(p[0].value);if("measure"===v||"spec"===v){let a=p.filter(a=>70>=h(a.source,c));if(1===a.length)return{winner:a[0],rule:"R5",superseded:[...e]};a.length>1&&(p=a)}if("money"===v){let a=p.filter(a=>h(a.source,c)>=90);if(1===a.length)return{winner:a[0],rule:"R5",superseded:[...e]};a.length>1&&(p=a)}let w=new Map;for(let a of p){let b=z(a.value);w.set(b,(w.get(b)||0)+1)}let x=Math.max(...w.values()),y=p.filter(a=>w.get(z(a.value))===x);return 1===y.length?{winner:y[0],rule:"R6",superseded:[...e]}:{winner:function(a,b){return[...a].sort((a,c)=>a.clarified!==c.clarified?a.clarified?-1:1:i(a.source)!==i(c.source)?i(c.source)-i(a.source):a.priority!==c.priority?c.priority-a.priority:/standard/u.test(b)?a.value.localeCompare(c.value,"zh-Hans-CN"):a.value.length!==c.value.length?c.value.length-a.value.length:a.value.localeCompare(c.value,"zh-Hans-CN"))[0]}(p=y,v),rule:"R7",superseded:[...e]}}(c,b,a);if(!e)continue;let k=(0,d.dm)(e.winner.value),l=f.has(a)&&["measure","money","date","standard"].includes(k)?c.map(a=>a.value).filter(a=>a!==e.winner.value):[],m=function(a,b){let c=new Map;for(let d of b)"override"===d.kind&&a.some(a=>a.value.includes(d.superseded))&&c.set(d.superseded,d.effective);return c}(c,b),n=e.superseded.filter(b=>f.has(a)||m.get(b)===e.winner.value),o=f.has(a)?b.filter(a=>"override"===a.kind&&a.superseded!==e.winner.value&&z(a.effective)===z(e.winner.value)&&(0,d.dm)(a.superseded)===k).map(a=>a.superseded):[];j.push({subject:e.winner.subject,attribute:a,value:e.winner.value,rule:e.rule,evidence:[{source:e.winner.source,snippet:e.winner.value.slice(0,120)}],superseded:[...new Set([...n.filter(a=>a!==e.winner.value),...o,...l])],caliber:f.has(a)&&!p.test(a),candidates:c})}return j.sort((a,b)=>a.attribute.localeCompare(b.attribute,"zh-Hans-CN")),{resolved:j,noiseRejected:c}}function J(a){let b=a.resolved.filter(a=>a.superseded.length>0),c=a.resolved.filter(a=>a.caliber&&0===a.superseded.length),d=[];return b.length>0&&d.push(["【现行口径(真值层裁决,硬约束)】下列属性已按资料优先级与变更链裁决出**唯一现行值**;全文(正文、表格、信息表、进度计划、节点)必须一致使用,被取代值仅在引用变更过程时可出现(如「招标文件原为 X,经答疑澄清变更为 Y」),不得单独陈述现状:",...b.map(a=>`- ${a.attribute}:现行为「${a.value}」;被取代(不得作为现行口径):${a.superseded.join("、")}`)].join("\n")),c.length>0&&d.push(["【项目级口径(必须在正文出现)】下列口径是本项目的唯一现行值,必须在正文相应位置(工程概况/编制说明/工期与进度等)**逐字写出**(数值、单位、日期形态均不得改写或省略):",...c.map(a=>`- ${a.attribute}:${a.value}`)].join("\n")),d.join("\n\n")}let K=new Set(["measure","money","date","standard","spec"]);function L(a,b){let c=[],e=a,f=()=>e.replace(/\s+/gu,"");for(let a of b){if(!a.caliber)continue;let b=String(a.attribute||"").trim(),g=String(a.value||"").trim();if(!b||!g||!K.has((0,d.dm)(g))||f().includes(g.replace(/\s+/gu,"")))continue;let h=`${b}为${g}。`,i=e.indexOf(b),j=-1;if(i>=0){let a=e.lastIndexOf("\n",i)+1,b=e.indexOf("\n",i);e.slice(a,b<0?e.length:b).trimStart().startsWith("|")||(j=i)}if(j>=0){let a=j+b.length;for(;a<e.length&&!/[。;;\n]/u.test(e[a]);)a+=1;if(a>=e.length||e.slice(j,a).includes(g))continue;e="\n"===e[a]?`${e.slice(0,a)}
335
+ ${(0,aA.CK)(a.prepare.template)}`,p||q].filter(Boolean).join("\n\n"),a.prepare.promptDocumentRules=a.prepare.runtimePromptRules,a.prepare.factExtractionPromptTexts=[a.prepare.diagnosticControlPrompt,a.prepare.runtimeRulesText,(0,g.fC)([...a.prepare.promptPlan.extractionPrompts,...a.prepare.promptPlan.referencePrompts])].filter(Boolean).join("\n\n"),a.prepare.reviewPromptTexts=[a.prepare.generationControlPrompt,a.prepare.runtimeRulesText,(0,g.fC)([...a.prepare.promptPlan.writerPrompts,...a.prepare.promptPlan.chapterPrompts,...a.prepare.promptPlan.formattingPrompts])].filter(Boolean).join("\n\n"),a.prepare.repairPromptTexts=[a.prepare.generationControlPrompt,a.prepare.runtimeRulesText,(0,g.fC)(a.prepare.promptPlan.formattingPrompts)].filter(Boolean).join("\n\n"),(0,l.Wl)(a,{batch:"generation.prepare",stage:(0,k.X5)({type:"validation",roleId:"document-preparation",status:"success",message:`提示词要求与项目资料理解完成,识别 ${a.prepare.materialFilePaths.length} 份项目资料`,details:[(0,e.MD)(a.prepare.promptPlan),`项目资料包:${a.prepare.projectMaterialProfile.materialRoots.join("、")||"当前知识库"}`,`识别提示词 OUTLINE 章节:${a.prepare.explicitPromptChapters.length} 个(生效 ${a.prepare.template.chapters.length} 章 = 大纲 + 技能声明)`],progress:{current:3,total:3,label:"准备完成"}},{subtitle:"生成准备"})}),a.global.emitProgress()}async function d0(a){(0,f.Te)(a.signal);let b={global:{input:a},prepare:{},understanding:{},planning:{},blueprint:{chapterConcurrency:0,reviewConcurrency:0,reviewSemaphore:new f.jf(1),reviewTaskPool:[],basicFactSearchResults:[],integratedBlueprint:void 0,blueprintActive:!1,requirementAssignments:[],structureAssignments:[],structureUnattached:[],billFactLock:void 0,drawingFactLock:void 0},chapterLoop:{draftPhaseStartedAt:0,chapterDraftsFinal:[],globalReviewPhaseStartedAt:0}};await d_(b),(0,l.sI)(b,"prepare"),await dK(b),(0,l.sI)(b,"understand"),await dG(b),(0,l.sI)(b,"plan"),await dj(b),(0,l.sI)(b,"blueprint"),await dg(b),(0,l.sI)(b,"write");let c=[],d={documentId:b.global.input.diversitySeed},e=!1;if(b.planning.generationStrategy.enableGlobalReview){let a=await bd({globalReviewSamplingRate:b.planning.generationStrategy.globalReviewSamplingRate,chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,template:b.prepare.template,reviewPromptTexts:b.prepare.reviewPromptTexts,repairPromptTexts:b.prepare.repairPromptTexts,requirement:b.global.input.requirement,signal:b.global.input.signal,projectContext:b.planning.projectContext,generationDiagnostics:b.planning.generationDiagnostics,preliminaryFactsModel:b.understanding.preliminaryFactsModel,scopeConflicts:b.understanding.canonicalFacts.scopeConflicts,emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat,nodeEmit:d,blueprintData:b.blueprint.integratedBlueprint?.validation.passed?b.blueprint.integratedBlueprint.data:void 0,billFactLock:b.blueprint.billFactLock,bidComposition:b.understanding.bidComposition});c=a.issues,e=a.dedupRan}else await a8({chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,template:b.prepare.template,repairPromptTexts:b.prepare.repairPromptTexts,projectContext:b.planning.projectContext,requirement:b.global.input.requirement,signal:b.global.input.signal,generationDiagnostics:b.planning.generationDiagnostics,emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat,nodeEmit:d,bidComposition:b.understanding.bidComposition});for(let a=0;a<3;a+=1){let a=await bc({chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,template:b.prepare.template,repairPromptTexts:b.prepare.repairPromptTexts,requirement:b.global.input.requirement,signal:b.global.input.signal,generationDiagnostics:b.planning.generationDiagnostics,emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat,nodeEmit:d,bidComposition:b.understanding.bidComposition});if(!a?.plannedSectionFixApplied)break}let{tableFixApplied:h}=await a5({effectiveChapters:b.planning.effectiveChapters,chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,template:b.prepare.template,repairPromptTexts:b.prepare.repairPromptTexts,requirement:b.global.input.requirement,signal:b.global.input.signal,generationDiagnostics:b.planning.generationDiagnostics,emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat,nodeEmit:d,bidComposition:b.understanding.bidComposition});return(h||!e)&&(c=await a3({chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,globalConsistencyIssues:c,emitProgress:b.global.emitProgress,nodeEmit:d})),!function(a){let{generationDiagnostics:b,chapterDraftsFinal:c,emitProgress:d}=a,e=b.evidence,f=b.llm,g=(0,aH.Bd)();b.semantic=g;let h=g.embedCacheHits+g.embedCacheMisses,i=h>0?Math.round(1e4*g.embedCacheHits/h)/100:null,j=(f.promptCacheHitTokens||0)+(f.promptCacheMissTokens||0),l=j>0?Math.round(1e4*(f.promptCacheHitTokens||0)/j)/100:null,m=f.layerChars,n=m?m.l0+m.l1+m.l2+m.l3:0,o=a=>n>0?Math.round(1e4*a/n)/100:0,p=m&&n>0?`上下文分层:L0 system 恒定 ${m.l0} 字(${o(m.l0)}%)、L1 任务级 ${m.l1} 字(${o(m.l1)}%)、L2 章级 ${m.l2} 字(${o(m.l2)}%)、L3 小节级 ${m.l3} 字(${o(m.l3)}%)`:"上下文分层:本次生成未采集 L0-L3 分层统计",q=(0,k.X5)({type:"validation",roleId:"budget-trim-report",status:"success",message:`预算裁剪报告:证据 ${e.raw} 条 → 采用 ${e.used} 条(噪声过滤 ${e.filteredNoise} 条、预算兜底裁剪 ${e.budgetDropped} 条),证据上下文 ${e.contextChars} 字`,details:[`证据质量:平均噪声分 ${e.avgNoiseScore},平均事实密度 ${e.avgFactDensity}`,`证据分层(T0 关键事实/T1 高相关片段/T2 目录索引):T0 注入 ${e.t0Chars||0} 字、T1 注入 ${e.t1Chars||0} 字、T2 索引 ${e.t2Lines||0} 行、目录省略 ${e.omittedChars||0} 字——A2 块级增量压缩后 T1 应显著低于 T0+T2`,`检索:${e.searchQueries} 组查询,耗时 ${Math.round(e.searchMs/1e3)} 秒`,`证据双通道覆盖度(P2-B 观测采集):预分配注入 ${e.intentEvidenceInjected??0} 条(最终留存 ${e.intentEvidenceUsed??0} 条)/运行时召回注入 ${e.retrievedEvidenceInjected??0} 条(最终留存 ${e.retrievedEvidenceUsed??0} 条)`,`LLM:${f.calls} 次调用,失败 ${f.failures} 次,重试 ${f.retries} 次,schema 校验失败 ${f.schemaFailures} 次`,`LLM 上下文输入:${f.inputChars||0} 字符(system+user)${f.unlayeredChars?`(其中未分层调用 ${f.unlayeredChars} 字符,占比 ${Math.round(f.unlayeredChars/(f.inputChars||1)*1e4)/100}%)`:""},输入 ${f.inputTokens||0} token / 输出 ${f.outputTokens||0} token`,p,null===l?"上下文缓存:提供商未返回 prefix cache 指标(prompt_cache_hit/miss_tokens),无法观测命中率":`上下文缓存:命中 ${f.promptCacheHitTokens} token / 未命中 ${f.promptCacheMissTokens} token(命中率 ${l}%)——未命中占比高说明固定前缀未收敛,system/user 分离(A5)后应显著上升`,`推理 token:${f.reasoningTokens?`${f.reasoningTokens} token(思考未完全关闭,disableThinking 未生效风险)`:"0(思考已关闭)"}`,null===i?"bge 嵌入缓存:本次生成无嵌入调用":`bge 嵌入缓存:命中 ${g.embedCacheHits} 条 / 未命中 ${g.embedCacheMisses} 条(命中率 ${i}%,全局 LRU 容量 ${process.env.DOCUMENT_EMBED_CACHE_SIZE||2e3})`,"防爆兜底类软限制(保留并逐项记录裁剪量):selectEvidenceByBudget 的 maxItems/maxChars、uniqueEvidence 噪声过滤、evidenceBundlePrompt 的 maxChars、块级证据 top-k 截断、块级 facts 截断","语义取舍类软限制(已迁移本地语义模型):evaluationTexts 词面过滤→条目对象化、criterionFeatures 二字滑窗→bge-small 余弦、章节证据字符硬截→语义排序取 top-k","LLM 输出侧:schema 校验(截断位置可诊断)、空响应重试提示词收敛、块成稿 maxTokens 按目标字数 1:1.2(不走 thinking \xd76 放大)"]},{subtitle:"预算裁剪审计"});a1(a.nodeEmit,"finalize.qualityGates",q),d(c)}({generationDiagnostics:b.planning.generationDiagnostics,chapterDraftsFinal:b.chapterLoop.chapterDraftsFinal,emitProgress:b.global.emitProgress,nodeEmit:d}),b.planning.generationDiagnostics.metrics.push({name:"phase:global-review",startedAt:b.chapterLoop.globalReviewPhaseStartedAt,endedAt:Date.now(),durationMs:Date.now()-b.chapterLoop.globalReviewPhaseStartedAt}),(0,g.X6)(b.planning.generationDiagnostics,"phase:finalize",()=>cO({pausedByRequest:!0===b.global.pausedByRequest,chapterDrafts:b.chapterLoop.chapterDraftsFinal,chapterDraftsByOrder:b.understanding.chapterDraftsByOrder,chapterGenerationStagesByOrder:b.understanding.chapterGenerationStagesByOrder,clarificationOverrides:b.planning.clarificationOverrides,clarificationAmendments:b.planning.clarificationAmendments,chapterGenerationStages:b.understanding.chapterGenerationStages,effectiveChapters:b.planning.effectiveChapters,template:b.prepare.template,allEvidence:b.understanding.allEvidence,documentSpec:b.prepare.documentSpec,projectMaterialProfile:b.prepare.projectMaterialProfile,projectMaterialSummary:b.prepare.projectMaterialSummary,domainProfile:b.prepare.domainProfile,documentBudget:b.planning.documentBudget,promptTexts:b.prepare.promptTexts,reviewPromptTexts:b.prepare.reviewPromptTexts,repairPromptTexts:b.prepare.repairPromptTexts,input:b.global.input,generationStrategy:b.planning.generationStrategy,generationDiagnostics:b.planning.generationDiagnostics,chapterScopedContext:b.planning.chapterScopedProjectContext,promptIds:b.prepare.promptIds,promptDocumentRules:b.prepare.promptDocumentRules,projectUnderstanding:b.prepare.projectUnderstanding,projectContext:b.planning.projectContext,projectRoot:b.prepare.projectRoot,projectId:b.prepare.projectId,readiness:b.prepare.readiness,documentId:a.diversitySeed,factExtractionPromptTexts:b.prepare.factExtractionPromptTexts,blueprintData:b.blueprint.integratedBlueprint?.validation.passed?b.blueprint.integratedBlueprint.data:void 0,bidComposition:b.understanding.bidComposition,billFactLock:b.blueprint.billFactLock,drawingFactLock:b.blueprint.drawingFactLock,requirementSemantics:b.prepare.requirementSemantics,hasExplicitOutline:b.prepare.hasExplicitOutline,missingItems:b.understanding.missingItems,clarificationRequests:b.understanding.clarificationRequests,unfixableDeclarations:b.understanding.unfixableDeclarations,retrievalCoverageReports:b.understanding.retrievalCoverageReports,failedChapterMessages:b.understanding.failedChapterMessages,webResearchReport:b.understanding.webResearchReport,indexHealth:b.understanding.indexHealth,globalConsistencyIssues:c,scopeConflicts:b.understanding.canonicalFacts.scopeConflicts,writingTaskBrief:b.planning.writingTaskBrief,evaluationCriteriaItems:b.understanding.evaluationItems.map(a=>a.title).filter(Boolean),tenderRequirements:b.planning.tenderRequirements,requirementAssignments:b.blueprint.requirementAssignments,requirementsSimilarity:b.planning.requirementsSimilarity,factTokenScopeClassifier:b.planning.factTokenScopeClassifier,professionalDepthClassifier:b.planning.professionalDepthClassifier,agentWorkflow:cN(b.understanding.agentWorkflow),emitProgress:b.global.emitProgress,withProgressHeartbeat:b.global.withProgressHeartbeat,...void 0!==b.global.nodeLogBaseDir?{nodeLogBaseDir:b.global.nodeLogBaseDir}:{}}))}c(64753),c(18292),c(87635),c(39372)},75251:(a,b,c)=>{c.d(b,{As:()=>k,C4:()=>E,FW:()=>r,NN:()=>y,az:()=>M,e:()=>J,j9:()=>s,uv:()=>w,w6:()=>z});var d=c(7148);function e(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function f(a){let b=Number.parseFloat(a.replace(/[,,\s]/gu,""));return Number.isFinite(b)?b:void 0}function g(a,b){return Math.abs(a-b)<=.01+1e-6*Math.max(Math.abs(a),Math.abs(b))}function h(a,b){return!!g(a,b)||Number.isInteger(a)&&(Math.trunc(b)===a||Math.round(b)===a)}function i(a){return a.replace(/\s+/gu,"").toLowerCase()}function j(a){return(0,d.Sn)(String(a||""))}let k=/(?:每|厚度|宽度|高度|深度|长度|直径|间距|净距|坡度|标高|偏差|误差|系数|等级|龄期|温度|含水率|压实度|密度|功率|电压|照度|色温|耐火|强度|抗渗|配合比|搭接|错缝|含水|埋深|覆土|预留|预埋|伸缩|沉降|变形|垂直度|平整度|倾角|坡度|模数|螺距|壁厚|净空|层高|埋设|位置|距离|半径|周长|坡度|距地|距墙|距顶|距梁|距楼|离地|离墙)/u,l=/^(?:以上|以下|以内|左右|及[^。;;,,]{0,8}(?:以上|以下|以内|左右))/u;function m(a){let b=[],c=[],d=new Map,e=new Map,h=a.billFactLock;if(h)for(let a of h.entries){let e=Number.isFinite(a.quantity)?a.quantity:void 0;for(let g of(void 0!==e&&(b.push({name:(a.name||"").trim(),value:e,unit:(a.unit||"").trim(),description:a.description||"",source:"bill"}),c.push(e)),a.specQuantityPairs||[])){let b=(g.spec||"").replace(/\s+/gu,"").toLowerCase(),e=/^([\d,,]+(?:\.\d+)?)\s*(.*)$/u.exec((g.quantity||"").trim()),h=e?f(e[1]):void 0;if(!b||void 0===h)continue;let i=d.get(b)||[];i.push({value:h,unit:(e?.[2]||"").trim(),entryName:a.name,spec:(g.spec||"").trim()}),d.set(b,i),c.push(h)}}for(let[d,f]of Object.entries(a.blueprintData?.quantities??{})){if("number"!=typeof f?.value||!Number.isFinite(f.value))continue;for(let a of(b.push({name:d.trim(),value:f.value,unit:(f.unit||"").trim(),description:"",source:"blueprint"}),c.push(f.value),f.groups??[]))c.push(a.value);let a=f.specBreakdown??[];if(a.length>=2){let b=a.reduce((a,b)=>a+b.value,0);for(let h of(e.set(d.trim(),{value:f.value,unit:(f.unit||"").trim(),specs:new Map(a.map(a=>[i(a.spec),a.value])),breakdown:a.map(a=>({spec:a.spec,value:a.value})),partitioned:g(b,f.value)}),a))c.push(h.value)}}return!function(a,b){if(!a)return;let c=a=>{if("number"==typeof a){Number.isFinite(a)&&b.push(a);return}if("string"==typeof a){for(let c of a.matchAll(/\d+(?:\.\d+)?/gu))b.push(Number.parseFloat(c[0]));return}if(Array.isArray(a))return void a.forEach(c);a&&"object"==typeof a&&Object.values(a).forEach(c)};[a.project,a.schedule,a.quality,a.safety,a.resources,a.preciseFacts,a.bills,a.drawings,a.rules,a.specifications,a.tables].forEach(c)}(a.factsModel,c),{entries:b,numberPool:c,specValues:d,aggregateSpecs:e}}let n=/(?:合计|共计|总计|总共|总量|总数|总长|全长|总长度|总数量|总面积|总重量|小计)(?:为|达|约|共|计)?\s*([\d,,]+(?:\.\d+)?)\s*(立方米|m³|m3|平方米|㎡|m²|m2|公里|千米|km|kg|吨|t|座|个|套|处|盏|棵|株|樘|扇|根|块|片|组|件|孔|间|栋|幢|户|米|m)(?![a-zA-Z0-9²³])/gu;function o(a,b,c=2){if(!a||!b)return!1;let d=Math.min(a.length,8);for(let e=d;e>=c;e-=1)for(let c=0;c+e<=a.length;c+=1)if(b.includes(a.slice(c,c+e)))return!0;return!1}function p(a,b){let c=function(a){switch(j(a)){case"m":return"(?:m|米)";case"km":return"(?:km|公里|千米)";case"m2":return"(?:m2|m\xb2|㎡|平方米)";case"m3":return"(?:m3|m\xb3|立方米)";case"t":return"(?:t|吨)";case"kg":return"(?:kg|千克)";default:return e((a||"").trim())}}(b.unit);for(let d of function(a){let b=`${a}`,c=new Set([b]),[d,e]=b.split(".");return d.length>=4&&c.add(`${d.replace(/\B(?=(\d{3})+(?!\d))/gu,",")}${e?`.${e}`:""}`),[...c]}(b.value)){let f=e(d);if(RegExp(`${f}\\s*(?:${c})|(?:${c})\\s*${f}`,"u").test(a)||b.value>=100&&RegExp(`(?<![\\d.])${f}(?![\\d])`,"u").test(a))return!0}return!1}function q(a,b,c){let d=a.filter(a=>a.name.length>=2&&o(a.name,c));if(d.length<2||d.length>24)return[];for(let a=0;a<d.length;a+=1)for(let c=a+1;c<d.length;c+=1){let e=d[a],f=d[c];if(!(e.name===f.name&&g(e.value,f.value))&&g(e.value+f.value,b))return[e,f]}return[]}let r=/(?:合计|共计|总计|总共|总量|总数|总长|全长|总长度|总数量|总面积|总重量|小计)(?:为|达|约|共|计)?\s*$/u;function s(a){let b=j(a.unit);if(!(a.total>0)||!b||!a.context)return null;let c=a.values.filter(c=>c.value>0&&c.name.length>=2&&j(c.unit)===b&&o(c.name,a.context));if(c.length<2)return null;let d=new Map;for(let a of c){let b=`${a.name}\u0000${a.kind??"entry"}`,c=d.get(b);c?c.push(a):d.set(b,[a])}for(let b of d.values())if(!(b.length<2)&&g(b.reduce((a,b)=>a+b.value,0),a.total))return b;let e=new Map;for(let a of c){let b=a.value.toFixed(4),c=e.get(b);c?c.push(a):e.set(b,[a])}for(let b of c)for(let c of e.get((a.total-b.value).toFixed(4))??[])if(c!==b&&c.name!==b.name&&g(b.value+c.value,a.total))return[b,c];return null}function t(a,b,c,d,e){let f=new Map;for(let a of d.entries){if(!(a.value>0)||j(a.unit)!==b)continue;let c=`${a.source}\u0000${a.name}`;f.set(c,(f.get(c)||0)+a.value)}let h=[];for(let[a,b]of f)if(o(a.slice(a.indexOf("\0")+1),c)&&(h.some(a=>g(a,b))||h.push(b),h.length>=24))break;if(0===h.length)return!1;let i=b=>g(b,a)||function(a,b){let c=0,d=a.length;for(;c<d;){let e=c+d>>1;a[e]<b?c=e+1:d=e}for(let d=Math.max(0,c-1);d<=Math.min(a.length-1,c+1);d+=1)if(g(a[d],b))return!0;return!1}(e,a-b);if(h.some(a=>i(a)))return!0;for(let a=0;a<h.length;a+=1)for(let b=a+1;b<h.length;b+=1)if(i(h[a]+h[b]))return!0;return!1}function u(a,b){let c=[];if(0===b.entries.length)return c;let d=new Set,e=[...b.numberPool].sort((a,b)=>a-b);for(let h of a.matchAll(n)){let i=f(h[1]);if(void 0===i)continue;let k=j(h[2]),l=h.index??0,m=l+h[0].length,n=b.entries.filter(a=>a.value>0&&j(a.unit)===k);if(0===n.length)continue;let r=a.slice(Math.max(0,l-40),l+h[0].length+40),s=a.slice(Math.max(0,l-20),l+h[0].length),u=n.filter(a=>a.name.length>=3&&s.includes(a.name)).sort((a,b)=>b.name.length-a.name.length)[0];if(u){if(g(u.value,i)){let b=q(n,i,r);if(b.length>=2){let e=a.slice(Math.max(0,l-150),l+h[0].length+150),f=b.filter(a=>!p(e,a));if(f.length>0){let a=b.map(a=>`「${a.name}」${a.value}${a.unit}`).join(" + "),e=`合计数值应分项显式:「${u.name} ${i}${h[2]}」= ${a},但正文未展示分项(缺 ${f.map(a=>`${a.name} ${a.value}${a.unit}`).join("、")}),无法核对合计来源`;d.has(e)||(d.add(e),c.push({issue:{level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:e,suggestion:`在合计值附近补充分项明细(${a}),使合计数值可逐项核对;分项值必须取自工程量清单原文,不得改动。`},matchStart:l,matchEnd:m}))}}continue}let f=i-u.value,j=n.find(a=>a!==u&&a.name!==u.name&&g(a.value,f));if(j){let b=a.slice(Math.max(0,l-150),l+h[0].length+150);if(p(b,u)&&p(b,j))continue;let e=`合计值与权威不符:「${u.name}」清单权威 ${u.value}${h[2]};正文 ${i}${h[2]} \u2248 ${u.value} + ${j.value}(「${j.name}」)——若「${j.name}」应计入「${u.name}」合计,须在正文显式分项;若不应计入(重复计入),须改回权威值 ${u.value}${h[2]}`;d.has(e)||(d.add(e),c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:e,suggestion:`核对合计口径:「${u.name}」合计为 ${u.value}${h[2]}(清单权威)。若正文需表达 ${u.value} + ${j.value},则显式写成「${u.name} ${u.value}${h[2]}、${j.name} ${j.value}${h[2]},合计 ${i}${h[2]}」;否则将合计改回 ${u.value}${h[2]}(差额 ${Math.round(1e4*f)/1e4}${h[2]} 属「${j.name}」,不得并入)。`},matchStart:l,matchEnd:m}));continue}if(t(i,k,r,b,e))continue;let o=`合计值与权威不符:「${u.name}」合计为 ${u.value}${h[2]}(清单权威),正文写 ${i}${h[2]},且差额不属任何清单条目,需核对合计口径`;d.has(o)||(d.add(o),c.push({issue:{level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:o,suggestion:`核对「${u.name}」的合计口径:若为多分项之和,请写明与权威一致的分项分解;若为单一总量,改为清单权威值 ${u.value}${u.unit||h[2]}。`},matchStart:l,matchEnd:m}));continue}let v=q(n,i,r);if(v.length>=2){let b=a.slice(Math.max(0,l-150),l+h[0].length+150),e=v.filter(a=>!p(b,a));if(e.length>0){let a=v.map(a=>`「${a.name}」${a.value}${a.unit}`).join(" + "),b=`合计数值应分项显式:正文合计 ${i}${h[2]} = ${a},但未展示分项(缺 ${e.map(a=>`${a.name} ${a.value}${a.unit}`).join("、")}),无法核对合计来源`;d.has(b)||(d.add(b),c.push({issue:{level:"warning",severity:"warning",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:b,suggestion:`在合计值附近补充分项明细(${a});分项值必须取自工程量清单原文,不得改动。`},matchStart:l,matchEnd:m}))}continue}{let a=new Map;for(let b of n)a.set(b.name,(a.get(b.name)||0)+b.value);let b=!1;for(let c of a.values())if(g(c,i)){b=!0;break}if(b)continue}if(t(i,k,r,b,e))continue;let w=n.filter(a=>o(a.name,r)),x=n.some(a=>g(a.value,i)),y=b.numberPool.some(a=>g(a,i));if(!x&&!y&&w.length>0){let a=`合计值无权威来源:正文「${h[0].trim()}」在清单事实锁与蓝图参数桶中找不到同值来源,违反无据不写`;if(d.has(a))continue;d.add(a),c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:a,suggestion:"删除该合计数值或改为与清单权威一致的合计值;无权威来源的合计数不得进入交付文本。"},matchStart:l,matchEnd:m})}}return c}function v(a,b,c){let d=Math.max(0,b-60),e=a.slice(d,b),f=-1;for(let a=e.length-1;a>=0;a-=1)if(/[,、;;。!?!?\n]/u.test(e[a])){f=d+a;break}if(-1===f||b-f>40)return null;let g=/[,、;;]/u.test(a[f]),h=g?f:f+1,i=g?c:c+ +!!/[,、;;]/u.test(a[c]||"");return i<=h?null:{start:h,end:i,excerpt:a.slice(h,i).trim()}}function w(a,b){let c=m({markdown:a,...b});if(0===c.entries.length)return{markdown:a,fixedCount:0,details:[]};let d=a,e=[];for(let a=1;a<=4;a+=1){let a=[];for(let b of u(d,c)){if(!b.issue.message.startsWith("合计值无权威来源"))continue;let c=v(d,b.matchStart,b.matchEnd);c&&a.push(c)}if(0===a.length)break;let b=0,f=1/0;for(let c of[...a].sort((a,b)=>b.start-a.start))c.end>f||(d=d.slice(0,c.start)+d.slice(c.end),f=c.start,b+=1,e.push(`删除无源合计「${c.excerpt.slice(0,40)}」`));if(0===b)break}return{markdown:d,fixedCount:e.length,details:e}}function x(a,b,c){let d=m({markdown:a,...b});if(0===d.entries.length)return{markdown:a,fixedCount:0,details:[]};let e=a,f=[];for(let a=1;a<=4;a+=1){let a=[];for(let f of L(e,d,b.billFactLock)){if(!f.issue.message.startsWith(c.prefix))continue;let b=v(e,f.matchStart,f.matchEnd);b&&a.push(b)}if(0===a.length)break;let g=0,h=1/0;for(let b of[...a].sort((a,b)=>b.start-a.start))b.end>h||(e=e.slice(0,b.start)+e.slice(b.end),h=b.start,g+=1,f.push(c.detail(b.excerpt.slice(0,40))));if(0===g)break}return{markdown:e,fixedCount:f.length,details:f}}function y(a,b){return x(a,b,{prefix:"名称-数值绑定无源",detail:a=>`删除无源绑定「${a}」`})}function z(a,b){return x(a,b,{prefix:"名称-数值绑定错位",detail:a=>`删除错位绑定「${a}」`})}let A=/(?:DN|De|Φ|φ|Ø|dn|de)\s*\d+(?:\.\d+)?|(?<![A-Za-z0-9])[CM]\d{2,3}(?![0-9])|HRB\d+|HPB\d+|(?<![A-Za-z0-9])\d{2,4}\s*[×xX*]\s*\d{2,4}(?![0-9])|(?<![A-Za-z0-9])\d+(?:\.\d+)?\s*[kK]?[Ww](?![A-Za-z0-9])/gu,B=/运输车|搅拌车|罐车|挖掘机|挖机|装载机|压路机|摊铺机|打夯机|夯实机|洒水车|浇水车|吊车|起重机|泵车|地泵|发电机组|发电机|电焊机|空压机|水泵|提升泵|潜水泵|雾炮机|充桩|桩机|机械|设备|机具|车辆|机组/u;function C(a,b){for(let[c,d]of a.aggregateSpecs)if(d.specs.has(b))return{entryName:c,info:d}}function D(a,b){let c=[];if(0===b.specValues.size&&0===b.aggregateSpecs.size)return c;let d=new Set;for(let e of a.matchAll(A)){let h,j=i(e[0]),m=b.specValues.get(j)??[],n=C(b,j);if(0===m.length&&!n)continue;let p=(e.index??0)+e[0].length,q=a.slice(p,p+36),r=/^([^。;;\n|]{0,16}?)([\d,,]+(?:\.\d+)?)\s*(座|个|套|盏|台|根|块|樘|扇|片|组|件|孔|米|m|km|公里|平方米|m2|㎡|m²|立方米|m3|m³|吨|t|kg)(?![a-zA-Z0-9²³])/u.exec(q);if(!r||k.test(r[1])||l.test(q.slice(r[1].length+r[2].length+r[3].length))||/不大于|不超过|不得大于|不得超过/.test(r[1]))continue;let s=r[1],t=a.slice(Math.max(0,p+s.length-8),p+s.length);if(/\d\s*[~~至\-—–]\s*$/u.test(t))continue;if(/[、,,]/u.test(s)){let a=s.split(/[、,,]/u).pop()||"";if(/[\u4e00-\u9fa5]/u.test(a)&&!/合计|小计|共计|总计|总量|用量|总长|共/u.test(a))continue}if("台"===r[3]||"套"===r[3]){let b=p+r[1].length+r[2].length+r[3].length;if(B.test(r[1])||B.test(a.slice(b,b+12)))continue}if(/总长|全长|长度|管长|延米/u.test(r[1])&&/^(?:m|米|km|公里)$/u.test(r[3])||/^共$/u.test(r[1]||"")&&/(?:钢筋|配筋|编号)/u.test(a.slice(Math.max(0,(e.index||0)-60),(e.index||0)+60)))continue;let u=f(r[2]);if(void 0===u||0===u||m.some(a=>g(a.value,u)))continue;let v=n?.info.specs.get(j);if(void 0!==v&&g(v,u))continue;let w=new Map;for(let a of m){let b=w.get(a.entryName);b?b.value+=a.value:w.set(a.entryName,{value:a.value,unit:a.unit})}let x=[...w.values()].sort((a,b)=>b.value-a.value);if(m.length>=2&&x.some(a=>g(a.value,u)))continue;if(n?.info.partitioned&&void 0!==v&&g(n.info.value,u)){let a=i(r[1]);if(![...n.info.specs.keys()].some(b=>b!==j&&a.includes(b))){let a=n.info.breakdown.map(a=>`${a.spec} ${a.value}${n.info.unit}`).join(" + "),b=`规格-数值绑定错位:「${e[0]}」处数值 ${u}${r[3]} 是「${n.entryName}」的跨规格名称合计(${a}),不属于单一规格「${e[0]}」——名称合计不得挂给单一规格,须写该规格小计 ${v}${r[3]}(确需写合计须显式分解)`;if(!d.has(b)){d.add(b);let f=p+r[1].length;c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:b,suggestion:`「${e[0]}」的数量须写该规格小计 ${v}${r[3]};名称合计须显式分解为 ${a}(合计 ${n.info.value}${n.info.unit}),不得把合计值挂在单一规格名下。`},specToken:e[0],value:u,unit:r[3],valueStart:f,valueEnd:f+r[2].length,groupSumCandidates:[{value:v,unit:n.info.unit},...x.filter(a=>!g(a.value,u))]})}}continue}for(let[a,c]of b.specValues){if(a===j)continue;let b=c.find(a=>g(a.value,u));if(b){h={spec:b.spec||a,entryName:b.entryName};break}}if(!h||r[1]&&o(h.entryName,r[1]))continue;let y=`规格-数值绑定错位:正文「${e[0]} ${u}${r[3]}」中 ${u}${r[3]} 属规格「${h.spec}」(清单条目「${h.entryName}」),不属于「${e[0]}」的清单数量`;if(d.has(y))continue;d.add(y);let z=p+r[1].length;c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:y,suggestion:`「${e[0]}」的数量必须引用清单中该规格条目的原值(如 ${m.map(a=>`${a.value}${a.unit}`).join("、")});「${h.spec}」的数量不得张冠李戴至「${e[0]}」。`},specToken:e[0],value:u,unit:r[3],valueStart:z,valueEnd:z+r[2].length,groupSumCandidates:x.filter(a=>!g(a.value,u))})}for(let e of a.matchAll(A)){let h=i(e[0]),j=C(b,h);if(!j?.info.partitioned)continue;let l=j.info.specs.get(h);if(void 0===l)continue;let m=e.index??0,n=a.slice(Math.max(0,m-24),m),p=/([\d,,]+(?:\.\d+)?)\s*(座|个|套|盏|台|根|块|樘|扇|片|组|件|孔|米|m|km|公里|平方米|m2|㎡|m²|立方米|m3|m³|吨|t|kg)\s*([^。;;\n|0-9²³]{0,12})$/u.exec(n);if(!p)continue;let q=p[3];if(!/[((]|为|系|采用|型号|规格|灯型|类型/u.test(q)||k.test(q))continue;let r=f(p[1]);if(void 0===r||!g(j.info.value,r)||g(l,r)||!o(j.entryName,n))continue;let s=i(a.slice(Math.max(0,m-60),m+60));if([...j.info.specs.keys()].filter(a=>s.includes(a)).length>=2)continue;let t=m-q.length-p[2].length-p[1].length,u=`${h}@${t}`;if(d.has(u))continue;d.add(u);let v=j.info.breakdown.map(a=>`${a.spec} ${a.value}${j.info.unit}`).join(" + ");c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规格-数值绑定错位:正文「…${r}${p[2]}${q}${e[0]}…」中 ${r}${p[2]} 为「${j.entryName}」的跨规格名称合计(${v}),其后紧随单一规格「${e[0]}」易被读作全部为该规格;名称合计须显式分解`,suggestion:`数量 ${r}${p[2]} 保留不动;把规格表述改为显式分解,如「${r}${p[2]}(${v})」或逐规格列写「${v}」;不得以名称合计搭配单一规格描述。`},specToken:e[0],value:r,unit:p[2],valueStart:t,valueEnd:t+p[1].length,groupSumCandidates:[]})}if(b.aggregateSpecs.size>0){let e=0;for(let h of a.split("\n")){let a=e;if(e+=h.length+1,!h.includes("|")||/^\s*\|?[\s:|-]*\|?\s*$/u.test(h))continue;let j=new Map;for(let a of h.matchAll(A)){let c=i(a[0]),d=C(b,c);if(!d?.info.partitioned)continue;let e=d.info.specs.get(c);if(void 0===e)continue;let f=j.get(d.entryName)||[];f.some(a=>a.key===c)||f.push({key:c,raw:a[0].trim(),specSum:e}),j.set(d.entryName,f)}if(1!==j.size)continue;let[k,l]=[...j.entries()][0];if(1!==l.length)continue;let m=b.aggregateSpecs.get(k);if(!m)continue;let{key:n,raw:p,specSum:q}=l[0];if(o(k,h))for(let e of h.matchAll(/\|([^|\n]*)/gu)){let h=e[1].trim(),i=/^([\d,,]+(?:\.\d+)?)\s*(?:座|个|套|盏|台|根|块|樘|扇|片|组|件|孔|米|m|km|公里|平方米|m2|㎡|m²|立方米|m3|m³|吨|t|kg)?$/u.exec(h);if(!i)continue;let j=f(i[1]);if(void 0===j||!g(m.value,j)||g(q,j)||(b.specValues.get(n)??[]).some(a=>g(a.value,j)))continue;let l=a+(e.index??0)+1+e[1].indexOf(i[1]),o=`${n}@${l}`;if(d.has(o))continue;d.add(o);let r=m.breakdown.map(a=>`${a.spec} ${a.value}${m.unit}`).join(" + ");c.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`规格-数值绑定错位:表格行「${p}…」的数量 ${j}${m.unit} 是「${k}」的跨规格名称合计(${r}),该行规格为「${p}」应填其小计 ${q}${m.unit}`,suggestion:`该行数量改为 ${q}${m.unit};名称合计请另立「合计」行或显式分解为 ${r}。`},specToken:p,value:j,unit:m.unit,valueStart:l,valueEnd:l+i[1].length,groupSumCandidates:[{value:q,unit:m.unit}]})}}}return c}function E(a,b){let c=m({markdown:a,...b});if(0===c.specValues.size&&0===c.aggregateSpecs.size)return{markdown:a,fixedCount:0,details:[]};let e=a,f=[];for(let a=1;a<=8;a+=1){let a=D(e,c).filter(a=>a.groupSumCandidates.length>0);if(0===a.length)break;let b=0;for(let g of[...a].sort((a,b)=>b.valueStart-a.valueStart)){let a,h,i=g.groupSumCandidates.find(a=>{var b,c;return b=a.unit,(0,d.Sn)(b)===(c=g.unit,(0,d.Sn)(c))});if(i)a=e.slice(0,g.valueStart)+`${i.value}`+e.slice(g.valueEnd),h=`「${g.specToken}」绑定数值 ${g.value}${g.unit} → 组和值 ${i.value}${g.unit}`;else{let b=g.valueStart;for(;b>0&&/\s/u.test(e[b-1]);)b-=1;let c=g.valueEnd+g.unit.length;a=e.slice(0,b)+e.slice(c),h=`「${g.specToken}」移除张冠李戴数值 ${g.value}${g.unit}(无同单位替换候选,值不属该规格)`}D(a,c).some(a=>{let b=a.valueStart-g.valueStart;return b>=-4&&b<=4})||(e=a,b+=1,f.push(h))}if(0===b)break}return{markdown:e,fixedCount:f.length,details:f}}let F=/(?:埋深|覆土(?:厚度|深度)?|管顶覆土)(?:不小于|不大于|不低于|不超过|约|为|达|控制在|一般|宜|应)?[^。;;\n|]{0,10}?([\d,,]+(?:\.\d+)?)\s*(mm|cm|米|m)(?![a-zA-Z0-9²³])/gu,G=/(?:约为|大约|约计|约|将近|近)\s*([\d,,]+(?:\.\d+)?)\s*(点|处|座|个|套|盏|棵|株|樘|扇|根|块|片|组|件|孔|间|栋|幢|户|米|公里|km|m2|㎡|m²|平方米|m3|m³|立方米|kg|吨|t|l|升|kw|w)(?![a-zA-Z0-9²³³])/giu,H=/([\d,,]+(?:\.\d+)?)\s*余\s*(点|处|座|个|套|盏|棵|株|樘|扇|根|块|片|组|件|孔|间|栋|幢|户|米|公里|km|m2|㎡|m²|平方米|m3|m³|立方米|kg|吨|t)(?![a-zA-Z0-9²³])/gu,I=/[节制合履签违公盟密租最接靠邻附距离]/u,J=/^(?:管道|工程|材料|项目|施工|工作|设备|设施|系统|区域|场地|道路|建筑|结构|基础|主体|管网|土建|安装|装饰|装修|土方|绿化|照明|给水|排水|电气|挖方|填方|回填|弃方|外运|运输|检测|试验|测量|清理|拆除|清淤|维护|养护|管理|服务|其他|以上|以下|其中|包括|采用|使用|型号|规格|数量|单位|合计|总计|长度|面积|体积|重量)$/u,K=/(木质|木|铝合金|铝|不锈钢|塑钢|塑料|塑|钢|铁|砼|混凝土|铸铁|铜|复合)(门|窗|井|灯|护栏|围栏|盖板|雨水口)/gu;function L(a,b,c){let d=[],e=new Set,i=new Set,m=new Map;if(c)for(let a of c.entries){let b=(a.name||"").trim();if(b.length<2||!Number.isFinite(a.quantity))continue;let c=`${b}\u0000${j(a.unit)}`,d=m.get(c)||{count:0,samples:[]};d.count+=1;let e=`${a.quantity}${a.unit}`;d.samples.length<3&&!d.samples.includes(e)&&d.samples.push(e),m.set(c,d)}let n=b.entries.map(a=>`${a.name} ${a.description}`).join("\n"),p=new Map;{let a=new Map;for(let c of b.entries){if(!(c.value>0))continue;let b=`${c.source}\u0000${c.name}`,d=a.get(b);d?d.sum+=c.value:a.set(b,{name:c.name,sum:c.value})}for(let b of a.values()){let a=p.get(b.name)||[];a.push(b.sum),p.set(b.name,a)}}let q=new Map,r=new Map,s=new Map,t=(a,c,d)=>{let e=`${a}\u0000${c}`,f=q.get(e);if(f||(f=b.entries.filter(b=>b.name===a&&j(b.unit)===c&&b.value>0).map(a=>Math.round(100*a.value)),q.set(e,f)),f.length<2)return!1;let g=`${e}\u0000${Math.round(100*d)}`,h=r.get(g);if(void 0!==h)return h;let i=function(a,b){if(a.length<2||b<=0)return!1;let c=[...a].sort((a,b)=>a-b);if(c.some(a=>a===b))return!1;let d=c.reduce((a,b)=>a+b,0);if(b>d)return!1;let e=d-b;if(e>0&&e!==b){let a=Math.max(b,e);for(let d=0;d<c.length;d+=1)for(let f=d+1;f<c.length;f+=1){let g=c[d]+c[f];if(g>a)break;if(g===b||g===e)return!0}let d=0,f=c.length-1;for(;d<=f;){let a=d+f>>1;if(c[a]===e)return c.length>=3;c[a]<e?d=a+1:f=a-1}}else for(let a=0;a<c.length;a+=1)for(let d=a+1;d<c.length;d+=1){let e=c[a]+c[d];if(e>b)break;if(e===b)return!0}if(c.length>40)return!1;let f=Math.ceil(c.length/2),g=c.slice(0,f),h=c.slice(f),i=a=>{let b=new Set([0]);for(let c of a){let a=new Set;for(let d of b)a.add(d),a.add(d+c);b=a}return b},j=i(h);for(let a of i(g))if(j.has(b-a))return!0;return!1}(f,Math.round(100*d));return r.set(g,i),i},u=(a,c)=>{let d=p.get(a)||[];if(0===d.length)return!1;let e=`${a}\u0000${Math.round(100*c)}`,f=s.get(e);if(void 0!==f)return f;let h=d.some(a=>b.numberPool.some(b=>g(a+b,c)));return s.set(e,h),h};if(c)for(let n of c.entries){let c=(n.name||"").trim();if(c.length<2||J.test(c)||!Number.isFinite(n.quantity))continue;let q=0,r=0;for(;r<6;){let s=a.indexOf(c,q);if(s<0)break;if(q=s+c.length,r+=1,/\d$/u.test(c)&&/^[\d.]/u.test(a.slice(s+c.length,s+c.length+1))){q=s+1;continue}if("量"===a.slice(s+c.length,s+c.length+1))continue;let v=a.slice(s+c.length,s+c.length+20),w=/^([^。;;\n|]{0,12}?)([\d,,]+(?:\.\d+)?)\s*(座|个|套|处|盏|棵|株|樘|扇|根|块|片|组|件|孔|间|栋|幢|户|米|m|km|公里|平方米|m2|㎡|m²|立方米|m3|m³|kg|吨|t)(?![a-zA-Z0-9²³])/u.exec(v);if(!w||k.test(w[1])||l.test(v.slice(w[1].length+w[2].length+w[3].length)))continue;let x=f(w[2]);if(void 0===x||0===x||h(x,n.quantity))continue;let y=j(w[3]);if(y!==j(n.unit)||b.entries.some(a=>a.name===c&&h(x,a.value)&&j(a.unit)===y)||(p.get(c)||[]).some(a=>g(a,x))||t(c,y,x)||u(c,x))continue;let z=a.slice(Math.max(0,s-32),s+c.length+20);if(function(a,b,c,d){for(let[e,f]of d)if(e!==b&&(e.includes(b)||b.includes(e)||o(e,c))&&f.some(b=>g(b,a)))return!0;return!1}(x,c,z,p))continue;let A=b.entries.find(a=>a.name!==c&&g(a.value,x)&&j(a.unit)===y);if(A&&o(A.name,z))continue;if(A){let a=`${s}\u0000${x}\u0000${y}`;if(i.has(a))continue;i.add(a);let b=m.get(`${c}\u0000${y}`),f=b&&b.count>1?`名称-数值绑定错位:「${c}」处数值 ${x}${w[3]} 属清单条目「${A.name}」(${A.value}${A.unit}),与同名清单条目(共 ${b.count} 条,如 ${b.samples.join("、")} 等)的权威数量均不符`:`名称-数值绑定错位:「${c}」处数值 ${x}${w[3]} 属清单条目「${A.name}」(${A.value}${A.unit}),与「${c}」清单数量 ${n.quantity}${n.unit} 不符`;if(e.has(f))continue;e.add(f),d.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:f,suggestion:b&&b.count>1?`核对「${c}」的数量口径:同名清单条目共 ${b.count} 条(如 ${b.samples.join("、")} 等),逐一核对后引用对应条目数量;引用「${A.name}」数量时须明确对象名称,不得张冠李戴。`:`核对「${c}」的数量口径:清单权威值为 ${n.quantity}${n.unit};引用「${A.name}」数量时须明确对象名称,不得张冠李戴。`},matchStart:s,matchEnd:s+c.length+w[0].length});continue}if(function(a,b,c,d){let e=a.slice(Math.max(0,b-40),b+c+40),f=[];for(let a of e.matchAll(/\d+(?:\.\d+)?/gu)){let b=Number.parseFloat(a[0]);Number.isFinite(b)&&!g(b,d)&&f.push(b)}for(let a=0;a<f.length;a+=1)for(let b=a+1;b<f.length;b+=1)if(g(f[a]+f[b],d)||g(Math.abs(f[a]-f[b]),d))return!0;return!1}(a,s,c.length,x)||b.numberPool.some(a=>g(a,x)))continue;let B=`${s}\u0000${x}\u0000${y}`;if(i.has(B))continue;i.add(B);let C=m.get(`${c}\u0000${y}`),D=C&&C.count>1?`名称-数值绑定无源:「${c}」处数值 ${x}${w[3]} 与同名清单条目(共 ${C.count} 条,如 ${C.samples.join("、")} 等)的权威数量均不符,且在全部权威数据中找不到同值来源`:`名称-数值绑定无源:「${c}」处数值 ${x}${w[3]} 与清单权威 ${n.quantity}${n.unit} 不符,且在全部权威数据中找不到同值来源`;e.has(D)||(e.add(D),d.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:D,suggestion:C&&C.count>1?`核对「${c}」的数量口径:同名清单条目共 ${C.count} 条(如 ${C.samples.join("、")} 等),逐一核对后引用对应条目的权威数量;无权威来源的数值不得与清单条目名称绑定出现。`:`将「${c}」的数量改为清单权威值 ${n.quantity}${n.unit};无权威来源的数值不得与清单条目名称绑定出现。`},matchStart:s,matchEnd:s+c.length+w[0].length}))}}for(let c of a.matchAll(K)){let h=c[0];if(n.includes(h))continue;let i=c[2],k=a.slice((c.index??0)+h.length,(c.index??0)+h.length+16),l=/^([^。;;\n|]{0,10}?)([\d,,]+(?:\.\d+)?)\s*(樘|扇|套|座|盏|个)(?![a-zA-Z0-9²³])/u.exec(k);if(!l)continue;let m=f(l[2]);if(void 0===m)continue;let o=b.entries.find(a=>a.name.includes(i)&&g(a.value,m)&&j(a.unit)===j(l[3]));if(!o)continue;let p=`名称口径不符:正文「${h} ${m}${l[3]}」——${m}${l[3]} 对应清单「${o.name}」条目,清单中不存在「${h}」,名称与清单权威不符`;if(e.has(p))continue;e.add(p);let q=c.index??0;d.push({issue:{level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:p,suggestion:`名称必须与清单条目口径一致:将「${h}」改为「${o.name}」(或清单原文名称);名称与数量绑定不得自行替换材质/类型限定词。`},matchStart:q,matchEnd:q+h.length+l[0].length})}return d}function M(a){let b=a.markdown||"";if(!b)return[];let c=m(a);if(0===c.entries.length&&0===c.numberPool.length)return[];let d=[...u(b,c).map(a=>a.issue),...D(b,c).map(a=>a.issue),...function(a,b){let c=[],d=new Set;for(let e of a.matchAll(F)){let a=f(e[1]);if(void 0===a)continue;let h=e[2];if(("mm"===h?a/1e3:"cm"===h?a/100:a)<=10)continue;let i=b.entries.find(b=>g(b.value,a)&&/总长|全长|总长度|长度|管线/u.test(b.name)),j=`数值语义槽位错位:正文「${e[0].trim()}」——埋深/覆土数值 ${a}${h} 超出物理合理范围(管道埋深一般 <10m)${i?`,且该数值与权威「${i.name}」(${i.value}${i.unit})一致,疑似把总长/长度口径误用作埋深`:",疑似口径混用"}`;d.has(j)||(d.add(j),c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:j,suggestion:`核对槽位语义:埋深/覆土深度应在 0.3~10m 合理区间(以设计图纸为准);总长/长度类数值不得用于埋深描述${i?`(「${i.name}」为 ${i.value}${i.unit})`:""}。`}))}return c}(b,c),...function(a,b){let c=[];if(0===b.numberPool.length)return c;let d=new Set,e=(a,e,g)=>{let h=f(a);if(void 0===h||function(a,b){let c=a>=1e3?Math.max(10,.02*a):a>=100?5:a>=10?1:.5;return b.some(b=>Math.abs(b-a)<=c||Math.abs(b-a)<=Math.max(1e-6,.02*Math.abs(b)))}(h,b.numberPool))return;let i=`近似数值不可推导:正文「${g.trim()}」的 ${h}${e} 在清单/蓝图/事实主表中无同值或近似来源,违反无据不写`;d.has(i)||(d.add(i),c.push({level:"error",severity:"blocker",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:i,suggestion:"删除该近似表述,或改用权威数据可推导的数值(清单/蓝图同值口径);「约/近」类近似数值必须可闭合到权威来源。"}))};for(let b of a.matchAll(G)){let c=b.index??0,d=a.slice(Math.max(0,c-1),c);I.test(d)||e(b[1],b[2],b[0])}for(let b of a.matchAll(H))e(b[1],b[2],b[0]);return c}(b,c),...L(b,c,a.billFactLock).map(a=>a.issue)],e=[],h=new Set;for(let a of d){let b=`${a.severity||a.level}|${a.message}`;h.has(b)||(h.add(b),e.push(a))}return e}},76193:(a,b,c)=>{c.d(b,{AM:()=>t,EH:()=>K,HM:()=>w,Id:()=>k,Jq:()=>H,Qi:()=>F,Xh:()=>J,Z8:()=>n,ll:()=>E,rk:()=>A,uM:()=>I,wF:()=>M,yT:()=>C});var d=c(73024),e=c(76760),f=c(51190),g=c(22157),h=c(44505),i=c(10751),j=c(93675);let k=[{id:"schedule",extract:a=>(0,h.GG)(a.factsModel)},{id:"assemblyRate",extract:a=>(0,h.hI)(a.factsModel)},{id:"supportSystem",extract:a=>(0,h.P3)(a.factsModel)},{id:"laborPeak",extract:a=>(0,i.yB)(a.blueprint)},{id:"greeningMaintenance",extract:a=>(0,h.Dq)(a.factsModel)},{id:"blueprint",extract:a=>a.blueprint},{id:"canonicalFacts",extract:a=>(0,f.mN)({facts:a.structuredFacts??[],markdown:a.markdown??""})}],l=new Set(["fixed","exempt","manual"]),m=[],n={"generation-completeness":{kind:"terminal-only",reason:"装配级缺失(章节不齐/提示词未生效/预算中断)——它的成因发生在写作之前或之外,写作期没有可自检的落点;处置是补配置或重跑,不是改正文"},"gating-checklist":{kind:"terminal-only",reason:"交付门禁 checklist 的确定性判据(证据齐备/事实来源/无占位),依赖全稿与资料完备度,写作期不可判"},"chapter-block-degradation":{kind:"terminal-only",reason:'记录"写作期已发生的损失"(块失守 → 章降级成稿):它的写作期对应物是块级质检与重试(已存在),本条是事后如实记账,不重复自检'},"ambiguous-either-or":{kind:"constraint",channel:"块任务卡"},"area-arithmetic":{kind:"constraint",channel:"块任务卡"},"atlas-reference-phrase":{kind:"constraint",channel:"全局约束"},"authority-audit-gap":{kind:"constraint",channel:"块任务卡"},"auto-spec-validation":{kind:"self-check",stage:"章成稿后"},"basic-info-schedule-field":{kind:"constraint",channel:"块任务卡"},"basis-regulations-coverage":{kind:"constraint",channel:"块任务卡"},"basis-regulations-cross":{kind:"terminal-only",reason:"编制依据的跨章比对需全文依据清单集合(单章成稿时其余章的依据尚未产生)"},"bid-composition-body-figure":{kind:"self-check",stage:"章成稿后"},"bid-composition-body-table":{kind:"self-check",stage:"章成稿后"},"bidder-qualification-section":{kind:"constraint",channel:"全局约束"},"block-attribution-quantification":{kind:"constraint",channel:"块任务卡"},"block-fact-density":{kind:"constraint",channel:"块任务卡"},"block-filler-phrase":{kind:"self-check",stage:"块成稿后"},"block-format-constraints":{kind:"constraint",channel:"全局约束"},"block-numeric-reconciliation":{kind:"constraint",channel:"块任务卡"},"block-requirement-anchor":{kind:"self-check",stage:"块成稿后"},"block-structure-contract":{kind:"self-check",stage:"章成稿后"},"block-templating":{kind:"self-check",stage:"块成稿后"},"blueprint-citation-consistency":{kind:"constraint",channel:"块任务卡"},"blueprint-value-placement":{kind:"constraint",channel:"块任务卡"},"boq-division-coverage":{kind:"constraint",channel:"块任务卡"},"boq-placement":{kind:"constraint",channel:"块任务卡"},"boq-row-trace":{kind:"constraint",channel:"块任务卡"},"caliber-consistency":{kind:"constraint",channel:"块任务卡"},"chapter-dependency":{kind:"terminal-only",reason:"章间依赖关系是全文拓扑性质"},"chapter-fact-density":{kind:"constraint",channel:"块任务卡"},"clause-recitation":{kind:"constraint",channel:"块任务卡"},"closed-loop-density":{kind:"self-check",stage:"章成稿后"},"closure-phrase-density-cap":{kind:"constraint",channel:"全局约束"},"collision-numbered-heading":{kind:"terminal-only",reason:"编号冲突需全文标题集合,跨章同名编号在单章内不可见"},"commercial-data-in-body":{kind:"constraint",channel:"全局约束"},"construction-org-bonus-module":{kind:"constraint",channel:"块任务卡"},"construction-org-chapter-data-coverage":{kind:"constraint",channel:"块任务卡"},"construction-org-consistency":{kind:"terminal-only",reason:"施工组织一致性跨章比对"},"construction-org-control-loop":{kind:"self-check",stage:"章成稿后"},"construction-org-division-section":{kind:"self-check",stage:"章成稿后"},"construction-org-generic-language":{kind:"constraint",channel:"全局约束"},"construction-org-major-content":{kind:"constraint",channel:"块任务卡"},"construction-org-professional-audit":{kind:"constraint",channel:"块任务卡"},"construction-org-professional-chain":{kind:"constraint",channel:"块任务卡"},"construction-system-coverage":{kind:"constraint",channel:"块任务卡"},"critical-section-depth":{kind:"self-check",stage:"章成稿后"},"critical-section-fact-density":{kind:"constraint",channel:"块任务卡"},"cross-chapter-consistency":{kind:"terminal-only",reason:"跨章口径一致性本质依赖全章文本"},"cross-chapter-duplicate-section":{kind:"terminal-only",reason:"跨章重复小节需全文小节集合"},"cross-project-value-copy":{kind:"terminal-only",reason:"跨项目值拷贝需与其它项目产物比对"},"cross-section-numeric-conflict":{kind:"terminal-only",reason:"跨小节数值冲突需小节集合比对"},"dangerous-applicability":{kind:"constraint",channel:"块任务卡"},"dangerous-list-consistency":{kind:"constraint",channel:"块任务卡"},"dangling-conjunction":{kind:"self-check",stage:"章成稿后"},"degenerate-content":{kind:"self-check",stage:"块成稿后"},"document-budget":{kind:"terminal-only",reason:"篇幅为全文度量,由预算层与压缩轮收敛"},"document-delivery-score":{kind:"terminal-only",reason:"交付置信度是全文派生评分,不指向具体文本缺陷"},"drawing-pointer-phrase":{kind:"constraint",channel:"块任务卡"},"drawing-reference":{kind:"constraint",channel:"块任务卡"},"duplicate-basic-info":{kind:"terminal-only",reason:"同一基础信息在全文多处出现,需全文扫描"},"duplicate-paragraph":{kind:"terminal-only",reason:"重复段落需全文段落集合"},"duplicate-table":{kind:"terminal-only",reason:"重复表格需全文表格集合"},"emergency-section-depth":{kind:"self-check",stage:"章成稿后"},"equipment-batch-conflict":{kind:"constraint",channel:"块任务卡"},"equipment-entry-timing":{kind:"constraint",channel:"块任务卡"},"evaluation-criteria-coverage":{kind:"constraint",channel:"块任务卡"},"evidence-usage-coverage":{kind:"constraint",channel:"块任务卡"},"excavation-depth-lock":{kind:"constraint",channel:"块任务卡"},"excavation-hazard-classification":{kind:"constraint",channel:"块任务卡"},"fabricated-award":{kind:"constraint",channel:"块任务卡"},"fabricated-start-date":{kind:"constraint",channel:"块任务卡"},"fact-consistency":{kind:"constraint",channel:"块任务卡"},"fact-coverage":{kind:"constraint",channel:"块任务卡"},"fact-reconciliation":{kind:"constraint",channel:"块任务卡"},"field-value-mismatch":{kind:"constraint",channel:"块任务卡"},"figure-substitute-table":{kind:"self-check",stage:"章成稿后"},"finish-thickness":{kind:"constraint",channel:"块任务卡"},"flow-form-repeat":{kind:"constraint",channel:"块任务卡"},"formal-content-integrity":{kind:"constraint",channel:"全局约束"},"formal-heading-hierarchy":{kind:"self-check",stage:"章成稿后"},"formal-placeholder":{kind:"constraint",channel:"全局约束"},"formal-style":{kind:"constraint",channel:"全局约束"},"formal-text-gate":{kind:"constraint",channel:"全局约束"},"formula-residue":{kind:"constraint",channel:"全局约束"},"foundation-form-residue":{kind:"constraint",channel:"块任务卡"},"generated-fact-verification":{kind:"constraint",channel:"块任务卡"},"generic-professional-content":{kind:"constraint",channel:"块任务卡"},"greening-maintenance-mismatch":{kind:"constraint",channel:"块任务卡"},"hazard-exclusion-contradiction":{kind:"constraint",channel:"块任务卡"},"hazard-parameter-binding":{kind:"constraint",channel:"块任务卡"},"heading-duplicate":{kind:"terminal-only",reason:"同名标题需全文标题集合比对"},"heading-uncovered-engineering-items":{kind:"self-check",stage:"章成稿后"},"hollow-table-cell":{kind:"self-check",stage:"章成稿后"},"identity-marks-forbidden":{kind:"constraint",channel:"全局约束"},"innovation-tech-coverage":{kind:"constraint",channel:"块任务卡"},"instruction-like-heading":{kind:"self-check",stage:"章成稿后"},"internal-terminology-anchor":{kind:"constraint",channel:"全局约束"},"inverted-date-range":{kind:"constraint",channel:"块任务卡"},"local-adaptation-keyword":{kind:"constraint",channel:"块任务卡"},"major-content-governance":{kind:"self-check",stage:"章成稿后"},"management-measure-number":{kind:"constraint",channel:"块任务卡"},"meta-discourse-declaration":{kind:"terminal-only",reason:'提示词侧只有「正文末尾不得输出自我总结或合规声明段落」一条(覆盖不到正文中段的"不再另行出现其他口径"句),检测面宽于写作口径;现行处置为确定性同词表清洗器零损失收敛 + 终检复核'},"min-chapter-section":{kind:"terminal-only",reason:"章间小节数均衡属全文结构度量"},"node-schedule-consistency":{kind:"constraint",channel:"块任务卡"},"numeric-traceability":{kind:"constraint",channel:"块任务卡"},"overview-recap":{kind:"terminal-only",reason:"概况段跨章复述需全文概况段集合与位置关系"},"page-target":{kind:"terminal-only",reason:"页数为全文估算度量信号(永远 warning)"},"paragraph-generic":{kind:"constraint",channel:"全局约束"},"paragraph-near-duplicate":{kind:"terminal-only",reason:"近重复需全文段落集合两两比对"},"paragraph-opening-repeat":{kind:"constraint",channel:"全局约束"},"paragraph-tail-repeat":{kind:"self-check",stage:"块成稿后"},"parameter-concept-conflict":{kind:"constraint",channel:"块任务卡"},"parameter-obligation-usage":{kind:"constraint",channel:"块任务卡"},"phase-labor-mixing":{kind:"constraint",channel:"块任务卡"},"planned-auto-spec-gate":{kind:"self-check",stage:"章成稿后"},"planned-section-placement":{kind:"self-check",stage:"章成稿后"},"planned-structure":{kind:"self-check",stage:"章成稿后"},"precise-fact-usage":{kind:"constraint",channel:"块任务卡"},"preliminary-action-timing":{kind:"constraint",channel:"块任务卡"},"process-spec-conflict":{kind:"constraint",channel:"块任务卡"},"professional-content":{kind:"constraint",channel:"块任务卡"},"professional-score":{kind:"terminal-only",reason:"专业评分是全文派生评分"},"project-basic-placeholder":{kind:"constraint",channel:"全局约束"},"project-contamination":{kind:"constraint",channel:"全局约束"},"project-type-consistency":{kind:"constraint",channel:"全局约束"},"prompt-document-rule":{kind:"constraint",channel:"全局约束"},"prompt-example-leak":{kind:"constraint",channel:"全局约束"},"punctuation-artifact":{kind:"constraint",channel:"全局约束"},"repeated-word":{kind:"terminal-only",reason:"重复词需全文词频统计(单块内低频也构成全文高频)"},"requirements-coverage":{kind:"constraint",channel:"块任务卡"},"resource-breakdown-consistency":{kind:"terminal-only",reason:"资源分解与蓝图权威比对,需全章资源陈述集合"},"resource-consistency":{kind:"terminal-only",reason:"资源总量一致性需跨章资源口径比对"},"resource-triad-section-hierarchy":{kind:"terminal-only",reason:"资源三要素章节层级属全文结构"},"schedule-duration-overrun":{kind:"constraint",channel:"块任务卡"},"stage-schedule-consistency":{kind:"constraint",channel:"块任务卡"},"section-content-integrity":{kind:"self-check",stage:"章成稿后"},"section-count-overflow":{kind:"self-check",stage:"章成稿后"},"section-numbering":{kind:"terminal-only",reason:"章节编号连续性依赖全文标题序列(后续章未写时无法判定编号是否断档)"},"self-undermining-candidate":{kind:"terminal-only",reason:'判据依赖 L3 bge 语义锚点(每块一批嵌入且 provider 不可用即抛),负向词闸单独不足以判定(块级上界实测命中系正常风险描述,需语义层否决);按"异常不得等于通过"块级接线会把语义不可用放大为整章块块判否,代价高于收益'},"sentence-pattern-repeat":{kind:"constraint",channel:"全局约束"},"sentence-tail-repeat":{kind:"constraint",channel:"全局约束"},"six-hundred-percent-coverage":{kind:"constraint",channel:"块任务卡"},"skeleton-fingerprint":{kind:"terminal-only",reason:"骨架指纹是跨段/跨章相似度度量"},"source-enumeration":{kind:"constraint",channel:"全局约束"},"spec-gate-rules":{kind:"self-check",stage:"章成稿后"},"spec-location-mismatch":{kind:"constraint",channel:"块任务卡"},"stage-phrasing":{kind:"terminal-only",reason:"阶段表述一致性需跨章比对阶段划分"},"standard-final":{kind:"self-check",stage:"章成稿后"},"street-light-count-mismatch":{kind:"constraint",channel:"块任务卡"},"structure-integrity":{kind:"self-check",stage:"章成稿后"},"support-form-fact-consistency":{kind:"constraint",channel:"块任务卡"},"support-system-conflict":{kind:"constraint",channel:"块任务卡"},"table-arithmetic-consistency":{kind:"constraint",channel:"块任务卡"},"table-caption":{kind:"constraint",channel:"全局约束"},"table-content-leak":{kind:"self-check",stage:"章成稿后"},"table-quality":{kind:"self-check",stage:"章成稿后"},"table-spam":{kind:"self-check",stage:"章成稿后"},"templated-label":{kind:"self-check",stage:"章成稿后"},"tertiary-heading":{kind:"self-check",stage:"章成稿后"},"title-integrity":{kind:"self-check",stage:"章成稿后"},"toc-consistency":{kind:"terminal-only",reason:"目录与正文标题需全文双向比对,单章成稿时正文其余部分尚未产生"},"truncated-sentence":{kind:"constraint",channel:"全局约束"},"web-evidence-leakage":{kind:"constraint",channel:"全局约束"},"writer-missing-section":{kind:"self-check",stage:"章成稿后"},"chapter-focus-mustcover":{kind:"self-check",stage:"章成稿后"},"emergency-plan-coverage":{kind:"terminal-only",reason:"风险源证据跨章分布(基坑在土方章、临时用电在临电章、有限空间在排水章),单章成稿时判不出「本项目有哪些风险源」"},"field-value-authority":{kind:"terminal-only",reason:"真值层裁决结果在全文收口后才定型(答疑值级覆盖/被取代值都在链上变化),单章成稿时比对基准尚不稳定"},"four-news-substance":{kind:"terminal-only",reason:"须与全文的项目实体清单比对(实体来自各章),单章成稿时实体清单不完整"},"criteria-substantive-attainment":{kind:"terminal-only",reason:"承接审计的输入是招标评分表条目 \xd7 全文正文,单章成稿时正文其余部分尚未产生"},"hazard-grade-consistency":{kind:"terminal-only",reason:"危大分级结论跨章分布(危大清单章 + 安全章 + 各专业章),单章成稿时全文其余部分尚未产生,写作期判不出「正文有没有给这个类别结论」"}},o=[],p=new Set(["structure","table","fact_consistency","evidence_coverage","professional_chain","control_loop","format","style","scope"]),q=[{id:"spec-gate-rules",scope:"full-document",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"配置门禁容器(事实/章节/表格/图片/页数/文本多族混合,规则随模板与提示词动态生成),无单一可锚定修复目标"},{id:"auto-spec-validation",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"仅唯一阻断族(后台流程话术)由 WORKFLOW_PHRASE_RE 清洗覆盖;后台优化建议/基础事实候选/材料未提供 3 词未入清洗表"},{id:"fact-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"多值冲突源于绑定材料组内同名不同值,只能由用户确认绑定范围/资料侧裁决,正文改写不可能消除"},{id:"figure-substitute-table",scope:"full-document",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"图类要求无承载(既无图题也无等效数据表)需补写数据表并加题注,属内容补写而非确定性改写;写入侧应由图类呈现计划同时下达「图 or 等效表」二选一,本检测器为交付前兜底"},{id:"project-type-consistency",scope:"full-document",category:"scope",fixerDisposition:"manual",fixerDispositionReason:"项目类型与正文用词矛盾(如产业园标准化厂房项目出现「自然村/村内/多村并行」)属内容性质错误:自动改写会改变叙述口径与上下文语义,须人工确认后按正确策略重新生成;根治在写入侧(resolveDerivationStrategy 类型守卫 + 策略驱动分组称谓),本检测器为交付前安全网"},{id:"project-contamination",scope:"full-document",category:"scope",fixerDisposition:"fixed",fixerDispositionReason:"对象名污染分支由 sanitizeContaminationCandidates 覆盖;文档编号分支(documentContaminationService.ts:18)无修复器"},{id:"project-basic-placeholder",scope:"full-document",category:"format",fixerDisposition:"manual",fixerDispositionReason:"同源专用修复器 repairKnownProjectBasicPlaceholders 已按「删除无用代码」口径移除(全仓零调用、注册表看不见);当前仅表内占位被 canonical 事实替代,表外正文占位无覆盖"},{id:"standard-final",scope:"full-document",category:"structure",fixerDisposition:"exempt",fixerDispositionReason:"standard-final 组整组重跑的结果容器登记,不产出自身 issue;组内子检测器各自锚定即可"},{id:"fact-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"fixed",fixerDispositionReason:"stageFactLanding 与检测同源同池(uncoveredImportantFacts + 同一事实池),接线 documentPipeline.ts:74"},{id:"page-target",scope:"full-document",category:"structure",fixerDisposition:"exempt",fixerDispositionReason:"页数为估算度量信号(永远 warning 不阻断),无独立可修缺陷;超幅族由字数口径的 length-compression-repair 轮收敛"},{id:"document-budget",scope:"full-document",category:"structure"},{id:"formal-text-gate",scope:"full-document",category:"format"},{id:"generation-completeness",scope:"full-document",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"装配级缺失(章节不齐 / 提示词未生效 / 预算中断),非正文改写可解——由用户补配置或重跑;判据自证接线的同一批(A1)"},{id:"gating-checklist",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"交付门禁 checklist 的确定性判据(证据齐备/事实来源/无占位等)转成的阻断,由资料完备度决定"},{id:"chapter-block-degradation",scope:"chapter",category:"structure",fixerDisposition:"manual",fixerDispositionReason:'生成阶段的损失记录(块失守 → 章降级成稿)。刻意不进 SNAPSHOT_DETECTOR_IDS:即便修复轮把该小节补回,这条仍真实(当时确已丢弃)。归因含"基础设施中断(调用未发起)"与"内容缺陷"两类,抬头可辨'},{id:"heading-uncovered-engineering-items",scope:"full-document",category:"structure"},{id:"writer-missing-section",scope:"full-document",category:"structure",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"由 planned-section-repair 轮按 reason=empty 重写清除;planned=false 的小节不入选"},{id:"critical-section-depth",scope:"chapter",category:"structure"},{id:"critical-section-fact-density",scope:"chapter",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"须内容补写,但 issue 无 provenance,按 provenance 过滤的补写轮消费不到(接线 provenance 后可改判 fixed)"},{id:"chapter-fact-density",scope:"chapter",category:"evidence_coverage",fixerDisposition:"exempt",fixerDispositionReason:"质量报告阶段被降级为 info(消息尾句命中 FLOW_DIAGNOSTIC_ISSUE_RE)不阻断;其修复手段是写作期块级重写重试"},{id:"construction-org-professional-audit",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"聚合 issue 无 category/provenance 无法被锚定消费,且 5 通道中 3 通道(参数密度/工作包要素/表格空字段)无修复器"}],r=[{id:"toc-consistency",scope:"full-document",category:"structure",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"fixTocFromBody 按正文实际结构重建目录,检测定位=修复定位,已接线三处"},{id:"hazard-grade-consistency",scope:"chapter",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"本条**无自动消费端**:确定性替换无从下手(重写须落回参数来源/条款号/相邻类别结论),LLM 轮亦刻意不接——危大分级是法定结论(属危大⇒专项方案,超危大⇒专家论证),而同源复检的 oracle(canonical 绑定)实测存在绑定侧取值争议(合工大「搭设高度50m以内」按区间上限取 50m,恰好跨过 ≥50m 档,而正文自述 15m 以内),自动改写会把绑定侧错误写进交付正文。处置=转人工:硬阻断导出 + 人工复核清单(fingerprint=hazard+类别 可精确定位);根治在绑定侧。"},{id:"chapter-focus-mustcover",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"义务未落位的修复动作是「按本章写作重点重写正文」,不存在确定性修复器——这类缺口只能由作者补写,确定性替换无从下手。**无自动消费轮**(原声明的「章级重写轮定向消费」实测不存在,详见上方纠正注):命中经 classifyBlockingIssue 硬阻断导出 + 进人工复核清单;根治在写作期的义务分配。"},{id:"section-numbering",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"section-count-overflow",scope:"chapter",category:"structure"},{id:"heading-duplicate",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"structure-integrity",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"templated-label",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"title-integrity",scope:"full-document",category:"structure"},{id:"evaluation-criteria-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"正文核心词缺位须内容补写且无修复轮消费;上游只有预防性补挂(constructionBidStructure.ts:445)"},{id:"requirements-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"fixed",fixerDispositionReason:"requirement-response-repair 轮按 provenance 定向补写(requirementResponseRepair.ts:51)"},{id:"fabricated-start-date",scope:"full-document",category:"fact_consistency",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"需语义判断该日期是编造还是合法的招标/法规成文日期,确定性删除必误伤;仅 patchGuard 预防式预检,无存量修复"},{id:"field-value-mismatch",scope:"full-document",category:"fact_consistency",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"无实现;权威值在 factsModel 可取属可确定性实现但未实现,现只能转人工"},{id:"area-arithmetic",scope:"full-document",category:"fact_consistency",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"地上/地下/单体哪个是错值须资料裁决;同族 scale 修复器显式声明对该三项不做确定性替换"},{id:"resource-consistency",scope:"full-document",category:"fact_consistency",authorities:["laborPeak"]},{id:"node-schedule-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"fixNodeScheduleConflicts(fixers.ts:1010),挂 applyNumericConsistencyDeterministicFixes steps"},{id:"cross-section-numeric-conflict",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"fixCrossSectionNumericConflicts(fixers.ts:1195),同链 steps"},{id:"fact-reconciliation",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"greening-maintenance-mismatch",scope:"full-document",category:"fact_consistency",authorities:["greeningMaintenance"]},{id:"street-light-count-mismatch",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"正文常为分型号明细而清单只锁总数,确定性替换会写坏;同族 greening-maintenance 有修复器,此其一无"},{id:"spec-location-mismatch",scope:"full-document",category:"fact_consistency"},{id:"blueprint-citation-consistency",scope:"full-document",category:"fact_consistency",authorities:["blueprint"],fixerDisposition:"fixed",fixerDispositionReason:"fixQuantityAuthorityConflicts(fixers.ts:1304)经 quantityAnchors 直连,含链尾重放"},{id:"cross-project-value-copy",scope:"full-document",category:"fact_consistency",authorities:["blueprint"],fixerDisposition:"fixed",fixerDispositionReason:"global-consistency-repair 轮消费(globalQualityGates.ts:1398);无专用确定性修复器"},{id:"phase-labor-mixing",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"equipment-batch-conflict",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"preliminary-action-timing",scope:"full-document",category:"fact_consistency",authorities:["blueprint"],fixerDisposition:"fixed",fixerDispositionReason:"fixPreliminaryActionTimingDeterministically 与检测共用 scanPreliminaryActionTimingFindings 同源单扫描,接线 postReviewSurface.ts:274"},{id:"foundation-form-residue",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"global-consistency-repair 轮消费(globalQualityGates.ts:1407→:1500)"},{id:"ambiguous-either-or",scope:"full-document",category:"fact_consistency",authorities:["supportSystem"]},{id:"excavation-depth-lock",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"global-consistency-repair 轮消费,另有路由特例与权威值注入(:1533/:1580)"},{id:"excavation-hazard-classification",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"需按 canonical 深度补写分级结论句,当前无任何修复路径"},{id:"support-form-fact-consistency",scope:"full-document",category:"fact_consistency",authorities:["supportSystem"],fixerDisposition:"manual",fixerDispositionReason:"与 support-system-conflict 判据不同源(读 canonical.byKey.foundation_support_form),不可复用其修复器"},{id:"equipment-entry-timing",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"fixEquipmentEntryTimingDeterministically(postReviewSurface.ts:287),与检测同源单扫描"},{id:"fabricated-award",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"白名单外奖项须回招标原文逐字比对并整体改写创优叙述,无确定性路径"},{id:"bidder-qualification-section",scope:"full-document",category:"scope",fixerDisposition:"fixed",fixerDispositionReason:"stripTenderClauseFragmentHeadings(markdownCleanup.ts:622)删标题;仅覆盖两条句式规则,资格词表分支未覆盖"},{id:"cross-chapter-duplicate-section",scope:"chapter",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"同名小节归并需判断内容归属,确定性路径被有意排除(dedupeDuplicateSectionHeadings 仅章内)"},{id:"basic-info-schedule-field",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"现有归一化的收场是「非法值被拒收→单元格变空」,属以删除通过门禁(P2-2 同口径禁止),不判 fixed"},{id:"duplicate-table",scope:"full-document",category:"table"},{id:"duplicate-paragraph",scope:"full-document",category:"structure"},{id:"paragraph-near-duplicate",scope:"full-document",category:"style",fixerDisposition:"manual",fixerDispositionReason:"近重复段落之间无从确定「哪份是原稿、哪份是副本」(重复处常含另一处缺失的信息),确定性删除即信息丢失;无定向修复轮消费(不带章锚点)→ 交付前残留即转人工复核清单(provenance 可追溯检测器身份),人工合并去重(保信息完整的一处)后重生成"},{id:"paragraph-tail-repeat",scope:"full-document",category:"style",deterministicSafe:!0},{id:"collision-numbered-heading",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"inverted-date-range",scope:"full-document",category:"fact_consistency",deterministicSafe:!0},{id:"resource-triad-section-hierarchy",scope:"full-document",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"修复需重排章节层级/拆分小节,结构性重写且无确定性路径"},{id:"support-system-conflict",scope:"full-document",category:"fact_consistency",authorities:["supportSystem"],fixerDisposition:"fixed",fixerDispositionReason:"fixSupportSystemConflicts(fixers.ts:38),同链 steps;权威为 slope 才动作(mixed/undefined/pile 均不动作,mixed 因混合体系合法、undefined 因权威未知无从裁决),属部分覆盖"},{id:"dangerous-list-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"两处清单需合并为唯一清单并统一项名与分级,属内容改写"},{id:"hazard-exclusion-contradiction",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"排除声明与清单孰对取决于资料是否真达判定阈值,须资料裁决"},{id:"six-hundred-percent-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"补写型修复器已随 4.41「零确定性正文注入」架构决策删除(fixers.ts:1625),内容缺失只能由生成侧补齐"},{id:"self-undermining-candidate",scope:"full-document",category:"style"},{id:"paragraph-opening-repeat",scope:"full-document",category:"style",deterministicSafe:!0},{id:"flow-form-repeat",scope:"full-document",category:"style"},{id:"skeleton-fingerprint",scope:"full-document",category:"style"},{id:"sentence-pattern-repeat",scope:"full-document",category:"style"},{id:"sentence-tail-repeat",scope:"full-document",category:"style"},{id:"repeated-word",scope:"full-document",category:"style",deterministicSafe:!0},{id:"commercial-data-in-body",scope:"full-document",category:"scope",fixerDisposition:"fixed",fixerDispositionReason:"stripCommercialDataBodyLines(postReviewSurface.ts:209),与检测同口径"},{id:"overview-recap",scope:"full-document",category:"style"},{id:"closure-phrase-density-cap",scope:"full-document",category:"style",fixerDisposition:"manual",fixerDispositionReason:"缺陷是词频密度(语义/文风改写),无修复轮按 provenance 消费;fiveElementClosureBoost 的补句池刻意避开闭环密度词"},{id:"parameter-concept-conflict",scope:"full-document",category:"fact_consistency"},{id:"internal-terminology-anchor",scope:"full-document",category:"style",deterministicSafe:!0},{id:"construction-system-coverage",scope:"chapter",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"某专业系统整章零覆盖须补写施工方案正文,属内容生成"},{id:"dangerous-applicability",scope:"full-document",category:"evidence_coverage"},{id:"innovation-tech-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"缺节场景可被补写轮间接覆盖,但「小节 <200 字的部分成稿」场景无任何路径(补写轮 alsoAnchoredTo 接上后可改判 fixed)"},{id:"instruction-like-heading",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"仅 tender-clause-heading-strip 一支(^#{3,4} 且判据为 isTenderClauseFragmentTitle);主判据 instructionTitleRe(是否涉及/按需生成/视情况/注意事项)与 H2 级碎片无任何正文修复器"},{id:"formal-heading-hierarchy",scope:"full-document",category:"structure",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"非法 H2 的现成修复器 demoteNonFormalH2 已按「删除无用代码」口径移除(全仓零调用);当前无任何生产修复路径"},{id:"formal-content-integrity",scope:"full-document",category:"format",deterministicSafe:!0,fixerDisposition:"manual",fixerDispositionReason:"截断句须补全句子内容;fixTruncatedSentenceArtifacts 修的是标点叠用且锚在另一个 id 上,非同源"},{id:"punctuation-artifact",scope:"full-document",category:"format",deterministicSafe:!0},{id:"table-quality",scope:"full-document",category:"table",deterministicSafe:!0},{id:"table-spam",scope:"full-document",category:"table",deterministicSafe:!0},{id:"basis-regulations-coverage",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"basis-regulations-cross",scope:"full-document",category:"fact_consistency"},{id:"resource-breakdown-consistency",scope:"full-document",category:"fact_consistency",authorities:["blueprint"]},{id:"section-content-integrity",scope:"chapter",category:"structure"},{id:"professional-content",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"缺项须补写专业内容,全仓无同源修复函数;且本 issue 无 provenance,按 provenance 过滤的修复轮消费不到,属真孤儿"},{id:"professional-score",scope:"chapter",category:"professional_chain"},{id:"generic-professional-content",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"判据=词面 8 词命中≥6 + bge 语义门;最近的套话修复器(isTemplatePrefixSentence + FILLER_SEMANTIC_QUERIES)判据不同源,不构成覆盖"},{id:"management-measure-number",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"需补责任主体/频次/台账/整改复查的语义补写,确定性路径不存在;且无 provenance,修复轮看不见"},{id:"closed-loop-density",scope:"full-document",category:"control_loop",fixerDisposition:"exempt",fixerDispositionReason:"纯度量信号:判据是闭环块密度对标 max(6,字数/1500),注释自述与评分同口径不阻断门禁;补闭环词还会撞 closure-phrase-density-cap 上限,不宜自动改"},{id:"cross-chapter-consistency",scope:"full-document",category:"fact_consistency"},{id:"process-spec-conflict",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"applyDeterministicConsistencyFixes 与检测端同判据同归属规则(collectLayerNumbers+buildSpecActionGate),已接线两条确定性链"},{id:"evidence-usage-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"缺陷是「未引用该类事实」,只能靠补写正文;fact-distribution-round 与 important-unplaced-facts 轮判据均不同源且不复检本 id"},{id:"paragraph-generic",scope:"full-document",category:"style",fixerDisposition:"manual",fixerDispositionReason:"判据=段落长度 + 10 词泛化表 + bge 具体性门;fillerParagraphIssues 用另一套 17 条词面 + 14 语义原型,同族不同判据"},{id:"construction-org-generic-language",scope:"chapter",category:"style",fixerDisposition:"fixed",fixerDispositionReason:"由 templating-repair 轮消费(该轮走 globalQualityGates 内联的 fillerDensityReport,非本 id 产出的 issue;本 gate 为内联检查的同族检测器,见幻影锚点收口说明)"},{id:"construction-org-control-loop",scope:"chapter",category:"control_loop"},{id:"construction-org-professional-chain",scope:"chapter",category:"professional_chain"},{id:"construction-org-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"需按资料裁决哪个口径为真且涉及跨表改写;同族修复器(fixEquipmentBatchConflicts/fixLaborPeakConflict/resource-breakdown)判据均不同源"},{id:"construction-org-chapter-data-coverage",scope:"chapter",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"属「章内缺项目事实」的补写型缺陷,仅生成侧/人工可解"},{id:"construction-org-major-content",scope:"chapter",category:"professional_chain"},{id:"construction-org-division-section",scope:"chapter",category:"structure"},{id:"major-content-governance",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"仅清单口径词族有修复器(postReviewSurface.ts:313);表格承载正文族无,仍走终门禁"},{id:"construction-org-bonus-module",scope:"chapter",category:"professional_chain",fixerDisposition:"exempt",fixerDispositionReason:"加分项建议而非缺陷(代码自述为避免污染缺陷计分,只产出 info 级「高分模块」建议)"},{id:"chapter-dependency",scope:"chapter",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"需在指定章补写投入调配/工艺控制/应急闭环内容,属语义补写;且无 provenance"},{id:"document-delivery-score",scope:"full-document",category:"professional_chain",fixerDisposition:"exempt",fixerDispositionReason:"纯评分汇总载体(总分 x/10 的元信息),其内部调用的三个检测器各自已有 id 与处置,本 id 不产出缺陷"},{id:"generated-fact-verification",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"反查失败数值的自动消除即删除式修复(P2-2 已明令禁止),补齐权威属资料侧动作——与 numeric-traceability 同口径"},{id:"numeric-traceability",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"修复器已按 P2-2 停用(删除式修复被明令禁止);补齐权威值属资料/配置侧动作"},{id:"table-arithmetic-consistency",scope:"full-document",category:"evidence_coverage"},{id:"duplicate-basic-info",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"fixDuplicateBasicInfoTables 覆盖重复表族;「表前重复逐项叙述」族未覆盖(已扩展锚定到该修复器)"},{id:"formal-style",scope:"full-document",category:"style"},{id:"tertiary-heading",scope:"full-document",category:"structure",deterministicSafe:!0},{id:"min-chapter-section",scope:"chapter",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"mergeDuplicateThematicSections 与检测共用桶键 classifyThematicSectionKey,接线 duplicate-theme-merge 轮;精确同名小节族另由 heading-duplicate-merge 覆盖"},{id:"planned-section-placement",scope:"chapter",category:"structure",fixerDisposition:"manual",fixerDispositionReason:"链尾确定性提升覆盖「降级为 H4」形态(delivery-structure-closure);整节漏写属写作缺项,交 LLM 定向补写小节(provenance 已打点)"},{id:"hollow-table-cell",scope:"full-document",category:"table",fixerDisposition:"manual",fixerDispositionReason:"按「表\xd7列」聚合报出,交 LLM 按列补真实值(同章正文通常已有同口径数据)"},{id:"schedule-duration-overrun",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"按生效工期重排进度计划与节点天序(源头解析已取变更后口径,残留为写作期漂移)"},{id:"stage-schedule-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"阶段行天序/口径倒挂由 LLM 按生效工期与阶段顺序重排(与 schedule-duration-overrun 同族,同属写作期漂移)"},{id:"caliber-consistency",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"被取代值由链尾 delivery-structure-closure 按真值层覆盖表**确定性替换**(不依赖本检测器锚定);本检测器报出的是「生效值整体未落位」类残留,进人工复核清单"},{id:"hazard-parameter-binding",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"content-depth-repair 定向补写:在危大判定处补本项目实际参数 + 阈值对照 + 结论"},{id:"blueprint-value-placement",scope:"full-document",category:"professional_chain",fixerDisposition:"fixed",fixerDispositionReason:"content-depth-repair 定向补写:按蓝图权威值写资源配置具体数值"},{id:"dangling-conjunction",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"content-depth-repair 定向补全被截断的句子成分(标点类残片另有 fixTruncatedSentenceArtifacts)"},{id:"precise-fact-usage",scope:"full-document",category:"fact_consistency"},{id:"parameter-obligation-usage",scope:"full-document",category:"fact_consistency"},{id:"boq-placement",scope:"full-document",category:"evidence_coverage"},{id:"stage-phrasing",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"阶段划分口径统一是跨章语义改写(把异己口径逐句对齐到唯一口径),不存在确定性修复器;provenance 已补,修复轮可按指纹定向消费"},{id:"field-value-authority",scope:"full-document",category:"fact_consistency",fixerDisposition:"manual",fixerDispositionReason:"正文写错基础信息字段值的修复动作是「按真值层裁决值改写该字段」,属语义定位改写;issue 带 provenance 可按字段名定向消费"},{id:"four-news-substance",scope:"full-document",category:"professional_chain",fixerDisposition:"exempt",fixerDispositionReason:'只出 info/suggestion(不阻断、不进人工清单):实体缺失 ⇒ 可移植可判,但"可移植 ⇏ 套话",真判套话须 LLM(templatingReview),故不设修复器'},{id:"emergency-plan-coverage",scope:"full-document",category:"professional_chain",fixerDisposition:"manual",fixerDispositionReason:"补编专项预案属语义写作(要写应急组织/响应流程/物资与演练,不是补一句名词),不存在确定性修复器。issue 带 provenance(fingerprint=plan),修复轮可按预案名定向消费。"},{id:"emergency-section-depth",scope:"full-document",category:"structure"},{id:"boq-row-trace",scope:"full-document",category:"evidence_coverage",fixerDisposition:"exempt",fixerDispositionReason:"只产 warning,既不断阻断也不进人工清单(清单由 blockingIssues 构建);同轴真缺口另有 blocker 通道 boq-placement"},{id:"drawing-reference",scope:"full-document",category:"evidence_coverage"},{id:"drawing-pointer-phrase",scope:"full-document",category:"evidence_coverage",fixerDisposition:"manual",fixerDispositionReason:"指向型表述的修复是用具体做法替换指向(须定位蓝图/清单权威值,属语义改写而非字面替换);4.55.24 先建立判据与写作前红线并显性进人工清单,定向改写轮排期 4.55.25"},{id:"web-evidence-leakage",scope:"full-document",category:"scope",fixerDisposition:"exempt",fixerDispositionReason:"warning 级度量信号不阻断、不进人工清单,且全仓不存在该词族的删除/改写函数"},{id:"formal-placeholder",scope:"full-document",category:"format",deterministicSafe:!0},{id:"prompt-example-leak",scope:"full-document",category:"format",fixerDisposition:"manual",fixerDispositionReason:"「疑似样例」删除必误伤(样例块可能撞合法正文);已实现并已接线,但无消费轮(全仓无修复器消费该 id)"},{id:"degenerate-content",scope:"chapter",category:"style",fixerDisposition:"manual",fixerDispositionReason:"唯一可能消费它的章级重扫入口 lightweightChapterIssues 已按「删除无用代码」口径移除(全仓零调用);退化输出的修复等同重新生成小节"},{id:"planned-auto-spec-gate",scope:"full-document",category:"structure"},{id:"bid-composition-body-table",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"dismantleBodyTables 同判据 LLM 拆表改写;finalize 侧只重跑禁表分支(章级授权口径未覆盖)"},{id:"bid-composition-body-figure",scope:"full-document",category:"structure",fixerDisposition:"fixed",fixerDispositionReason:"removeUnwantedDrawingImages(markdownComposer.ts:1905)与检测共用 FIGURE_PLACEHOLDER_RE"},{id:"identity-marks-forbidden",scope:"full-document",category:"format",fixerDisposition:"manual",fixerDispositionReason:"需删/改写业绩获奖证书类敏感句,可自动化但未实现;当前只有写作期与修复提示词约束"},{id:"planned-structure",scope:"full-document",category:"structure"},{id:"table-caption",scope:"full-document",category:"format"},{id:"prompt-document-rule",scope:"full-document",category:"format",fixerDisposition:"fixed",fixerDispositionReason:"applyPromptDocumentRules 覆盖残留封面/目录/缺必需表/禁止词行;指令型标题、缺指定一级章节、缺关键词、字数不足族无实现"},{id:"local-adaptation-keyword",scope:"full-document",category:"evidence_coverage",fixerDisposition:"fixed",fixerDispositionReason:"仅 blocker 通道(工伤保险缺失)有修复器(postReviewSurface.ts:301);另两条属度量/增强项,不阻断"},{id:"boq-division-coverage",scope:"full-document",category:"evidence_coverage",fixerDisposition:"fixed",fixerDispositionReason:"enforceBoqDivisionCoverageInMethodChapters(postReviewSurface.ts:400)链尾确定性补写"}],s=[{id:"table-line-residue",kind:"deterministic",anchoredTo:"table-quality",giveUpOnFailure:!0},{id:"templated-labels",kind:"deterministic",anchoredTo:"templated-label",giveUpOnFailure:!0},{id:"structure-integrity",kind:"deterministic",anchoredTo:"structure-integrity",giveUpOnFailure:!0},{id:"embedded-heading-split",kind:"deterministic",anchoredTo:"planned-structure",giveUpOnFailure:!0},{id:"repeated-words",kind:"deterministic",anchoredTo:"repeated-word",giveUpOnFailure:!0},{id:"duplicate-tables",kind:"deterministic",anchoredTo:"duplicate-table",giveUpOnFailure:!0},{id:"finish-thickness",kind:"deterministic",anchoredTo:"finish-thickness",giveUpOnFailure:!0},{id:"slot-depth-value",kind:"deterministic",anchoredTo:"fact-reconciliation",authorities:["blueprint"],giveUpOnFailure:!0},{id:"spec-quantity-binding",kind:"deterministic",anchoredTo:"fact-reconciliation",authorities:["blueprint"],giveUpOnFailure:!0},{id:"labor-peak",kind:"deterministic",anchoredTo:"resource-consistency",authorities:["laborPeak"],giveUpOnFailure:!0},{id:"phase-labor-values",kind:"deterministic",anchoredTo:"phase-labor-mixing",authorities:["blueprint"],giveUpOnFailure:!0},{id:"resource-breakdown",kind:"deterministic",anchoredTo:"resource-breakdown-consistency",authorities:["blueprint"],giveUpOnFailure:!0},{id:"equipment-batch-values",kind:"deterministic",anchoredTo:"equipment-batch-conflict",authorities:["blueprint"],giveUpOnFailure:!0},{id:"internal-table-row-dup",kind:"deterministic",anchoredTo:"table-spam",giveUpOnFailure:!0},{id:"duplicate-basic-info-tables",kind:"deterministic",anchoredTo:"table-quality",alsoAnchoredTo:["duplicate-basic-info"],giveUpOnFailure:!0},{id:"fallback-placeholder-rows",kind:"deterministic",anchoredTo:"formal-placeholder",giveUpOnFailure:!0},{id:"greening-maintenance",kind:"deterministic",anchoredTo:"greening-maintenance-mismatch",authorities:["greeningMaintenance"],giveUpOnFailure:!0},{id:"paragraph-opening-repeat",kind:"deterministic",anchoredTo:"paragraph-opening-repeat",giveUpOnFailure:!0},{id:"paragraph-tail-repeat",kind:"deterministic",anchoredTo:"paragraph-tail-repeat",giveUpOnFailure:!0},{id:"collision-numbered-heading",kind:"deterministic",anchoredTo:"collision-numbered-heading",giveUpOnFailure:!0},{id:"heading-uncovered-items",kind:"deterministic",anchoredTo:"heading-uncovered-engineering-items",giveUpOnFailure:!0},{id:"inverted-date-range",kind:"deterministic",anchoredTo:"inverted-date-range",giveUpOnFailure:!0},{id:"zero-length-date-range",kind:"deterministic",anchoredTo:"cross-chapter-consistency",giveUpOnFailure:!0},{id:"truncated-sentence",kind:"deterministic",anchoredTo:"truncated-sentence",giveUpOnFailure:!0},{id:"meta-discourse",kind:"deterministic",anchoredTo:"meta-discourse-declaration",giveUpOnFailure:!0},{id:"formula-residue",kind:"deterministic",anchoredTo:"formula-residue",giveUpOnFailure:!0},{id:"self-undermining",kind:"deterministic",anchoredTo:"self-undermining-candidate",giveUpOnFailure:!0},{id:"ambiguous-either-or",kind:"deterministic",anchoredTo:"ambiguous-either-or",authorities:["supportSystem"],giveUpOnFailure:!0},{id:"tender-meta-language",kind:"deterministic",anchoredTo:"formal-style",giveUpOnFailure:!0},{id:"formal-source-residue",kind:"deterministic",anchoredTo:"formal-style",giveUpOnFailure:!0},{id:"forbidden-configuration",kind:"deterministic",anchoredTo:"formal-text-gate",giveUpOnFailure:!0},{id:"duplicate-response-line",kind:"deterministic",anchoredTo:"duplicate-paragraph",giveUpOnFailure:!0},{id:"atlas-reference",kind:"deterministic",anchoredTo:"atlas-reference-phrase",giveUpOnFailure:!0},{id:"tertiary-h4-dedupe",kind:"deterministic",anchoredTo:"tertiary-heading",giveUpOnFailure:!0},{id:"standard-citation-truncation",kind:"deterministic",anchoredTo:"structure-integrity",giveUpOnFailure:!0},{id:"internal-term-heading",kind:"deterministic",anchoredTo:"internal-terminology-anchor",giveUpOnFailure:!0},{id:"skeleton-fingerprint-variants",kind:"deterministic",anchoredTo:"skeleton-fingerprint",giveUpOnFailure:!0},{id:"flow-form-variants",kind:"deterministic",anchoredTo:"flow-form-repeat",giveUpOnFailure:!0},{id:"truncated-title-completion",kind:"deterministic",anchoredTo:"title-integrity",giveUpOnFailure:!0},{id:"sentence-like-heading-split",kind:"deterministic",anchoredTo:"title-integrity",giveUpOnFailure:!0},{id:"heading-duplicate-merge",kind:"deterministic",anchoredTo:"heading-duplicate",giveUpOnFailure:!0},{id:"section-renumber",kind:"deterministic",anchoredTo:"section-numbering",giveUpOnFailure:!0}],t=["autoSpecGateRepair","basisRegulationsCrossRepair","basisRegulationsRepair","contentDepthRepair","controlLoopRepair","dangerousApplicabilityRepair","lengthCompressionRepair","numericVerification","postReviewSurface","professionalChainRepair","quotationBalanceRepair","requirementResponseRepair","requirementVerification"],u=[{id:"numeric-arbiter-concept",kind:"deterministic",anchoredTo:"parameter-concept-conflict",giveUpOnFailure:!0},{id:"numeric-arbiter-spec",kind:"deterministic",anchoredTo:"spec-location-mismatch",giveUpOnFailure:!0}],v=[{id:"numeric-chain-node-schedule",kind:"deterministic",anchoredTo:"node-schedule-consistency",giveUpOnFailure:!0},{id:"numeric-chain-cross-section",kind:"deterministic",anchoredTo:"cross-section-numeric-conflict",giveUpOnFailure:!0},{id:"numeric-chain-support-system",kind:"deterministic",anchoredTo:"support-system-conflict",authorities:["supportSystem"],giveUpOnFailure:!0},{id:"numeric-chain-quantity-authority",kind:"deterministic",anchoredTo:"blueprint-citation-consistency",authorities:["blueprint"],giveUpOnFailure:!0},{id:"equipment-entry-timing-clean",kind:"deterministic",anchoredTo:"equipment-entry-timing",giveUpOnFailure:!0},{id:"commercial-data-body-strip",kind:"deterministic",anchoredTo:"commercial-data-in-body",giveUpOnFailure:!0},{id:"listing-jargon-strip",kind:"deterministic",anchoredTo:"major-content-governance",giveUpOnFailure:!0},{id:"work-injury-statement-fix",kind:"deterministic",anchoredTo:"local-adaptation-keyword",giveUpOnFailure:!0},{id:"boq-division-coverage-closure",kind:"deterministic",anchoredTo:"boq-division-coverage",giveUpOnFailure:!0},{id:"drawing-image-strip",kind:"deterministic",anchoredTo:"bid-composition-body-figure",giveUpOnFailure:!0},{id:"tender-clause-heading-strip",kind:"deterministic",anchoredTo:"bidder-qualification-section",alsoAnchoredTo:["instruction-like-heading"],giveUpOnFailure:!0},{id:"formal-source-phrase-clean",kind:"deterministic",anchoredTo:"source-enumeration",giveUpOnFailure:!0},{id:"toc-consistency-rebuild",kind:"deterministic",anchoredTo:"toc-consistency",giveUpOnFailure:!0},{id:"prompt-document-rules-apply",kind:"deterministic",anchoredTo:"prompt-document-rule",giveUpOnFailure:!0},{id:"workflow-phrase-clean",kind:"deterministic",anchoredTo:"auto-spec-validation",giveUpOnFailure:!0},{id:"contamination-candidate-sanitize",kind:"deterministic",anchoredTo:"project-contamination",giveUpOnFailure:!0},{id:"preliminary-action-timing-clean",kind:"deterministic",anchoredTo:"preliminary-action-timing",authorities:["blueprint"],giveUpOnFailure:!0},{id:"process-spec-conflict-fix",kind:"deterministic",anchoredTo:"process-spec-conflict",giveUpOnFailure:!0}],w={factLanding:"fact-landing",tableRepair:"table-repair",tableArithmeticRepair:"table-arithmetic-repair",tableCaptionRepair:"table-caption-repair",duplicateThemeMerge:"duplicate-theme-merge"},x=[{id:"near-duplicate-section-merge",kind:"deterministic",anchoredTo:"section-count-overflow",giveUpOnFailure:!0},{id:"empty-section-strip",kind:"deterministic",anchoredTo:"section-content-integrity",giveUpOnFailure:!0},{id:"duplicate-theme-merge",kind:"deterministic",anchoredTo:"min-chapter-section",giveUpOnFailure:!0}],y=["source-enumeration","internal-terminology-anchor","fabricated-start-date","repeated-word","writer-missing-section","meta-discourse-declaration","formula-residue","finish-thickness","formal-placeholder","truncated-sentence"],z=[{id:"fact-landing",kind:"llm-patch",anchoredTo:"fact-coverage",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"table-repair",kind:"llm-patch",anchoredTo:"table-quality",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"table-execution-repair",kind:"llm-patch",anchoredTo:"bid-composition-body-table",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"templating-repair",kind:"llm-patch",anchoredTo:"construction-org-generic-language",alsoAnchoredTo:["sentence-pattern-repeat","sentence-tail-repeat"],patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"workpackage-skeleton-repair",kind:"llm-patch",anchoredTo:"construction-org-division-section",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"planned-section-repair",kind:"llm-patch",anchoredTo:"writer-missing-section",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"global-consistency-repair",kind:"llm-patch",anchoredTo:"cross-chapter-consistency",alsoAnchoredTo:["foundation-form-residue","excavation-depth-lock"],patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"cross-project-value-copy-repair",kind:"llm-patch",anchoredTo:"cross-project-value-copy",authorities:["blueprint"],patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"requirement-response-repair",kind:"llm-patch",anchoredTo:"requirements-coverage",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"numeric-verification",kind:"llm-patch",anchoredTo:"authority-audit-gap",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"quotation-balance-repair",kind:"llm-patch",anchoredTo:"punctuation-artifact",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"content-depth-repair",kind:"llm-patch",anchoredTo:"critical-section-depth",alsoAnchoredTo:["emergency-section-depth","construction-org-major-content","construction-org-division-section","precise-fact-usage","parameter-obligation-usage","overview-recap","professional-score","boq-placement","drawing-reference","hazard-parameter-binding","blueprint-value-placement","dangling-conjunction"],patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"control-loop-repair",kind:"llm-patch",anchoredTo:"construction-org-control-loop",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"professional-chain-repair",kind:"llm-patch",anchoredTo:"construction-org-professional-chain",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"basis-regulations-repair",kind:"llm-patch",anchoredTo:"basis-regulations-coverage",authorities:["blueprint"],patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"basis-regulations-cross-repair",kind:"llm-patch",anchoredTo:"basis-regulations-cross",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"dangerous-applicability-repair",kind:"llm-patch",anchoredTo:"dangerous-applicability",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"auto-spec-gate-repair",kind:"llm-patch",anchoredTo:"planned-auto-spec-gate",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"length-compression-repair",kind:"llm-patch",anchoredTo:"document-budget",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"table-caption-repair",kind:"llm-patch",anchoredTo:"table-caption",patchGuard:{detectors:[...y]},giveUpOnFailure:!0},{id:"table-arithmetic-repair",kind:"llm-patch",anchoredTo:"table-arithmetic-consistency",patchGuard:{detectors:[...y]},giveUpOnFailure:!0}],A=["fact-landing-round","table-repair-round","semantic-choice-conflict","deterministic-stage5","formal-source-clean","planned-section-final","commercial-strip","table-deterministic-repair","numeric-verification","requirement-response-repair","requirement-verification","content-depth-repair","control-loop-repair","professional-chain-repair","post-review-surface","terminology-strip","regulation-number-typo","quotation-balance-repair","basis-regulations-repair","basis-regulations-cross-repair","dangerous-applicability-repair","auto-spec-gate-repair","toc-consistency","length-compression-repair","fact-distribution-round","table-arithmetic-repair","empty-section-sweep","section-alignment-sweep","templating-sweep","duplicate-theme-merge","table-caption-repair","delivery-structure-closure","sentence-pattern-sweep","duplicate-sentence-collapse","templating-tail-replay"],B=new Set;function C(a,b){return B.add(a),D(a,b())}function D(a,b){if(!Array.isArray(b))return b;let c=!1,d=b.map(b=>b&&"object"==typeof b?"string"!=typeof b.message||b.provenance&&"object"==typeof b.provenance?b:(c=!0,{...b,provenance:{detectorId:a,fingerprint:(0,g.c6)(`${a}\u0000${b.message}`)}}):b);return c?d:b}async function E(a,b){B.add(a);try{return D(a,await b())}catch(c){let b=c instanceof Error?c.message:String(c);return console.error(`[gen] detector degraded: ${a} failed, fallback to warning issue:`,c),G.add(a),[{level:"warning",severity:"warning",category:"format",owner:"system",repairability:"manual_review",provenance:{detectorId:a,fingerprint:""},message:`交付前检测器「${a}」执行失败,已降级为待复核:${b}`,suggestion:`此为检测器基础设施异常,非正文内容缺陷——该检测维度**本次未执行**(已计入降级检测器清单,见「交付前检测器执行情况」节点)。可稍后重新生成复核,或人工复核该检测维度。`}]}}function F(a){return a.filter(a=>{let b=a.provenance?.detectorId;return!!b&&J(b)?.fixerDisposition==="manual"})}let G=new Set;function H(a){let b=("full-validation"===a?q:r).map(a=>a.id);return{executed:b.filter(a=>B.has(a)&&!G.has(a)),degraded:b.filter(a=>G.has(a)),declaredMissing:b.filter(a=>!B.has(a))}}let I=[...q,...r,{id:"criteria-substantive-attainment",scope:"full-document",category:"professional_chain",fixerDisposition:"exempt",fixerDispositionReason:"只出 warning(不阻断):判定依据含嵌入代理量,须人工/后续 N 类机制复核;不设确定性修复器"},{id:"authority-audit-gap",scope:"full-document",category:"fact_consistency",fixerDisposition:"fixed",fixerDispositionReason:"numeric-verification 轮收敛(numericVerification.ts:131)。覆盖已被削弱:其确定性兜底 demoteUnsourcedNumericTokens 已按 P2-2 停用,只剩 LLM 一条路"},{id:"source-enumeration",scope:"full-document",category:"style",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"cleanFormalSourcePhrases(deterministicStage5.ts:161)与检测共用同一词表。4.55.36 \xa7L3-11 已接 det()(documentFinalValidation 终检复核)"},{id:"meta-discourse-declaration",scope:"full-document",category:"style",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"fixMetaDiscourseDeclarations(SURFACE_FIX_STEPS meta-discourse 步,与检测同词表 META_DECLARATION_RE)。4.55.36 \xa7L3-11 已接 det() 终检复核"},{id:"finish-thickness",scope:"full-document",category:"fact_consistency",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"fixFinishThickness 除以 10(SURFACE_FIX_STEPS finish-thickness 步,与检测同判据 FINISH_THICKNESS_CONTEXT_WORD)。4.55.36 \xa7L3-11 已接 det() 终检复核"},{id:"formula-residue",scope:"full-document",category:"format",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"fixFormulaResidues(SURFACE_FIX_STEPS formula-residue 步,与检测同判据 FORMULA_FORM_RE)。4.55.36 \xa7L3-11 已接 det() 终检复核"},{id:"truncated-sentence",scope:"full-document",category:"format",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"链尾 cleanStructureDefects→closeTruncatedLineTail 闭合 boundary 形态(SURFACE_FIX_STEPS structure-integrity 步 + truncated-sentence 步标点残片收敛);tail 形态只报不删(尾段是可读正文)交修复轮。4.55.36 \xa7L3-11 已接 det()"},{id:"atlas-reference-phrase",scope:"full-document",category:"format",deterministicSafe:!0,fixerDisposition:"fixed",fixerDispositionReason:"stripDrawingPointerPhrases 经 fixFormalSourceResidue 在 SURFACE_FIX_STEPS formal-source-residue 步(stage5 + round-2 双链)确定性小句级删除。4.55.36 \xa7L3-11 已接 det() 终检复核"},{id:"block-structure-contract",scope:"chapter",category:"structure",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门,返回计数不产出 ValidationIssue,无对象可被 FixerEntry 锚定(重写重试即其修复手段)"},{id:"block-fact-density",scope:"chapter",category:"evidence_coverage",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 BlockDensityAssessment,首轮阻断重写即其修复手段"},{id:"block-templating",scope:"chapter",category:"style",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 BlockTemplatingVerdict;终检侧由 templating-repair 轮承载"},{id:"block-attribution-quantification",scope:"chapter",category:"professional_chain",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 AttributionQuantificationVerdict"},{id:"block-numeric-reconciliation",scope:"chapter",category:"fact_consistency",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 NumericReconciliation,阻断重写即修复手段"},{id:"block-requirement-anchor",scope:"chapter",category:"evidence_coverage",fixerDisposition:"exempt",fixerDispositionReason:'写作期块级执行器门:锚点未落位即阻断本块重写(提示词里同一份锚点已声明"必须逐字落位"),终检侧由 requirements-coverage 复核'},{id:"block-format-constraints",scope:"chapter",category:"format",fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回命中行;终检侧同词表门为 formal-text-gate"},{id:"block-filler-phrase",scope:"chapter",category:"style",deterministicSafe:!0,fixerDisposition:"exempt",fixerDispositionReason:"写作期块级执行器门:不产出 ValidationIssue 只返回 BlockFillerPhraseVerdict,首轮阻断重写即其修复手段(反馈只要求改写命中短语、保留句中实质信息)"},{id:"clause-recitation",scope:"chapter",category:"style",deterministicSafe:!0,fixerDisposition:"exempt",fixerDispositionReason:"写作期块任务卡约束通道:检测结果只用于升级/降级约束措辞(不回写正文、不产出 ValidationIssue),无对象可被 FixerEntry 锚定"},{id:"table-content-leak",scope:"chapter",category:"table",deterministicSafe:!0,fixerDisposition:"exempt",fixerDispositionReason:"章成稿后自检:进章问题清单(待优化 + 诊断),修复动作是结构性改写(改回表格/补主谓),不在确定性修复链内,故无 FixerEntry 可锚定"}];function J(a){return I.find(b=>b.id===a)}function K(){return[...s,...u,...x,...v,...z]}function L(a,b){let c=new Set(a??[]),d=new Set(b??[]);if(c.size!==d.size)return!1;for(let a of c)if(!d.has(a))return!1;return!0}function M(){let a=[],b=[...K()];for(let c of b){let b=J(c.anchoredTo);if(!b){a.push(`修复器 ${c.id} 锚定检测器 ${c.anchoredTo} 未在注册表声明(检测定位=修复定位强制同源)`);continue}for(let d of(L(c.authorities,b.authorities)||a.push(`修复器 ${c.id}(authorities=${JSON.stringify(c.authorities??[])})与锚定检测器 ${c.anchoredTo}(authorities=${JSON.stringify(b.authorities??[])})权威口径不一致`),c.alsoAnchoredTo??[])){let b=J(d);b?L(c.authorities,b.authorities)||a.push(`修复器 ${c.id}(authorities=${JSON.stringify(c.authorities??[])})与扩展锚定检测器 ${d}(authorities=${JSON.stringify(b.authorities??[])})权威口径不一致`):a.push(`修复器 ${c.id} 扩展锚定检测器 ${d} 未在注册表声明(检测定位=修复定位强制同源)`)}if("llm-patch"===c.kind&&!c.patchGuard){a.push(`LLM patch 修复器 ${c.id} 未声明 patchGuard(修复过程会重新引入已知坏内容,必须预检)`);continue}for(let b of c.patchGuard?.detectors??[]){let d=J(b);d?d.deterministicSafe||a.push(`修复器 ${c.id} patchGuard 引用检测器 ${b} 未标记 deterministicSafe(patchGuard 只收录零误伤确定性检测器)`):a.push(`修复器 ${c.id} patchGuard 引用检测器 ${b} 未在注册表声明`)}}for(let[b,c]of s.entries())s.slice(0,b).some(a=>a.id===c.id)&&a.push(`确定性修复器锚定声明重复:${c.id}`);let c=new Set(j.a.map(a=>a.key));for(let b of c)s.some(a=>a.id===b)||a.push(`确定性修复器 ${b} 已接入 SURFACE_FIX_STEPS 但未在 DETERMINISTIC_FIXER_ANCHORS 声明锚定检测器`);for(let b of s)c.has(b.id)||a.push(`确定性修复器锚定声明 ${b.id} 无对应 SURFACE_FIX_STEPS 键(声明多余或键已改名)`);for(let[b,c]of u.entries())u.slice(0,b).some(a=>a.id===c.id)&&a.push(`数值裁决器修复器声明重复:${c.id}`);for(let[b,c]of x.entries())x.slice(0,b).some(a=>a.id===c.id)&&a.push(`章草稿级修复器声明重复:${c.id}`);for(let[b,c]of v.entries())v.slice(0,b).some(a=>a.id===c.id)&&a.push(`链内确定性修复器声明重复:${c.id}`);let f=new Set([...s,...u,...x,...z].map(a=>a.id));for(let b of v)f.has(b.id)&&a.push(`链内确定性修复器 ${b.id} 与其它声明表重名(FixerEntry.id 须全局唯一,否则按 id 追溯修复器产生歧义)`);for(let b of I)b.category&&p.has(b.category)||a.push(`检测器 ${b.id} 声明了非法 category(当前=${b.category||"缺失"};合法值:${[...p].join("、")})`);if(a.push(...function(a){let b=[],c=new Set;for(let b of a.fixers)for(let a of(c.add(b.anchoredTo),b.alsoAnchoredTo??[]))c.add(a);let d=new Set(a.pending);for(let c of(d.size!==a.pending.length&&b.push("PENDING_FIXER_DISPOSITION 存在重复 id(欠账清单须唯一)"),d))a.detectors.some(a=>a.id===c)||b.push(`PENDING_FIXER_DISPOSITION 声明了未登记的检测器 ${c}(已改名或已删除,请同步移出欠账清单)`);for(let e of a.detectors){let a=c.has(e.id),f=e.fixerDisposition;if(d.has(e.id)){f?b.push(`检测器 ${e.id} 已完成处置声明(${f})却仍在 PENDING_FIXER_DISPOSITION 中——请从欠账清单移出`):a&&b.push(`检测器 ${e.id} 已有修复器锚定却仍在 PENDING_FIXER_DISPOSITION 中——请从欠账清单移出`);continue}if(!f){a?e.fixerDispositionReason&&b.push(`检测器 ${e.id} 写了 fixerDispositionReason 却未声明 fixerDisposition(说明须挂在明确处置上)`):b.push(`检测器 ${e.id} 既无修复器锚定、也未声明 fixerDisposition(孤儿必须显式 'exempt' 或 'manual' 并说明理由,不得沉默)`);continue}if(!l.has(f)){b.push(`检测器 ${e.id} 声明了非法 fixerDisposition(当前=${f};合法值:${[...l].join("、")})`);continue}"fixed"!==f||a||b.push(`检测器 ${e.id} 声明 fixerDisposition='fixed' 但无任何 FixerEntry 锚定它(声明与事实不符)`),"fixed"!==f&&(a&&b.push(`检测器 ${e.id} 声明 fixerDisposition='${f}' 但已有修复器锚定——声明与事实不符(应改为 'fixed' 或移除多余锚定)`),e.fixerDispositionReason?.trim()||b.push(`检测器 ${e.id} 声明 fixerDisposition='${f}' 但未给出理由(exempt/manual 必须书面说明为何不需要修复器)`))}return b}({detectors:I,fixers:b,pending:m})),a.push(...function(a){let b=[],c=new Set(a.pending);c.size!==a.pending.length&&b.push("PENDING_WRITING_TIME_DISPOSITION 存在重复 id(欠账清单须唯一)");let d=new Set(a.detectors.map(a=>a.id));for(let a of c)d.has(a)||b.push(`PENDING_WRITING_TIME_DISPOSITION 声明了未登记的检测器 ${a}(已改名或已删除,请同步移出欠账清单)`);for(let[c,e]of Object.entries(a.dispositions))d.has(c)||b.push(`写作期处置表声明了未登记的检测器 ${c}(已改名或已删除,请同步删除该条)`),"terminal-only"!==e.kind||e.reason.trim()||b.push(`检测器 ${c} 声明 terminal-only 但 reason 为空——「只能终检」必须书面写明理由,否则与沉默缺省无异`);for(let d of a.detectors){let e=a.dispositions[d.id];if(e){c.has(d.id)&&b.push(`检测器 ${d.id} 已声明写作期处置(${e.kind})却仍在欠账清单中——请从欠账清单移出`);continue}c.has(d.id)||b.push(`检测器 ${d.id} 既未声明 writingTimeDisposition 也未进欠账清单——新增检测器必须当场给出写作期处置(constraint / self-check / terminal-only+理由)`)}return b}({detectors:I,dispositions:n,pending:o})),a.push(...function(a){let b=[],c=new Set(a.declared);for(let d of a.rounds){let a=/while\s*\(\s*rounds\s*<|for\s*\(\s*let\s+round\s*=|while\s*\(\s*pending\.length\s*>\s*0\s*&&\s*rounds\s*</u.test(d.source),e=c.has(d.name);a&&!e&&b.push(`修复轮 ${d.name} 实现里含收敛循环,但未登记进 SELF_CONVERGING_REPAIR_ROUNDS——其在 FixerEntry 里被声明为「单轮失败即放弃」(giveUpOnFailure: true),声明与事实相反`),!a&&e&&b.push(`修复轮 ${d.name} 登记在 SELF_CONVERGING_REPAIR_ROUNDS,但实现里没有收敛循环——登记表已漂移,请同步(要么轮真的在收敛,要么从表里删掉)`)}return b}({rounds:function(){try{let a=e.join(__dirname,"finalize","repairRounds");return d.readdirSync(a).filter(a=>a.endsWith(".ts")).map(b=>({name:b.replace(/\.ts$/u,""),source:d.readFileSync(e.join(a,b),"utf8")}))}catch{return[]}}(),declared:t})),a.length>0)throw Error(`检测器/修复器注册表一致性校验失败(${a.length} 项):
336
+ ${a.map(a=>`- ${a}`).join("\n")}`)}},77416:(a,b,c)=>{c.d(b,{C$:()=>e,Hz:()=>f,ZS:()=>h});let d={"fact-landing-round":"未覆盖重要事实落地","table-repair-round":"表格缺失或格式错误","semantic-choice-conflict":"语义矛盾数值冲突","deterministic-stage5":"确定性缺陷(来源罗列/内部术语/编造日期)","formal-source-clean":"资料来源罗列话术","planned-section-final":"规划小节内容缺失","commercial-strip":"商务数据泄漏","table-deterministic-repair":"表格数据不一致","post-review-surface":"评审后兜底缺陷","terminology-strip":"内部术语泄漏","toc-consistency":"目录与正文不一致"};function e(a){let b=[],c=[];if(a.length<3)return{retireCandidates:b,constraintSuggestions:c};let d=[...a].sort((a,b)=>a.exportedAt-b.exportedAt),e=d.slice(-3),f=d.slice(0,-3),g=new Set;for(let a of[...f,...e])for(let b of Object.keys(a.repairHeat||{}))g.add(b);for(let a of g){let d=e.map(b=>b.repairHeat?.[a]);if(f.some(b=>(b.repairHeat?.[a]?.hits??0)>0)&&d.every(a=>void 0!==a&&0===a.hits)&&b.push(a),d.every(a=>void 0!==a&&a.hits>0&&a.failed/a.hits>=.5)){let b=d.reduce((a,b)=>a+(b?b.failed/b.hits:0),0)/d.length;c.push(`${a}|${(100*b).toFixed(0)}%|连续3次`)}}return{retireCandidates:b,constraintSuggestions:c}}function f(a){if(0===a.length)return"";let b="【缺陷热力图自进化提醒(历史高频缺陷前置规避)】",c=a.map(a=>{let[b,c="",e=""]=a.split("|"),f=d[b]??g[b]??b,h=c?`(历史修复失败率 ${c})`:"";return`${f}${h}${e}内高频出现,本章写作时前置规避。`}).join(" "),e=`${b} ${c}`;if(e.length<=300)return e;let f=c.slice(0,300-b.length-4).replace(/\s+$/u,"");return`${b} ${f}…`}let g={"repair:detector-missing":"判据漏了(没有任何判据指得出该改哪里)","repair:detector-unwired":"判据有但没接线(判据指得出目标,通道没接上)","repair:writing-capacity":"写作能力不足(定位到、改了,复检仍未改善)","repair:material-insufficient":"材料不足(定位到,资料侧没有可用证据)"};function h(a){let b={"detector-missing":0,"detector-unwired":0,"writing-capacity":0,"material-insufficient":0,unclassified:0},c=[],d=new Map;for(let e of a){if(b[e.attribution]+=1,"detector-missing"===e.attribution&&c.push(e),!e.nodeId)continue;let a=d.get(e.nodeId)??{attempts:0,attributions:new Set};"unclassified"!==e.attribution&&a.attributions.add(e.attribution),("unfixable"===e.outcome||"rolled-back"===e.outcome)&&(a.attempts+=1),d.set(e.nodeId,a)}let e=a.length-b.unclassified,f=[];if(e>0)for(let c of["detector-missing","detector-unwired","writing-capacity","material-insufficient"]){let d=b[c]/e;d<.5||f.push(`repair:${c}|${(100*d).toFixed(0)}%|近${a.length}次修复`)}let g=[...d.entries()].filter(([,a])=>a.attempts>=2).map(([a,b])=>({nodeId:a,attempts:b.attempts,attributions:[...b.attributions]})).sort((a,b)=>b.attempts-a.attempts||a.nodeId.localeCompare(b.nodeId));return{total:a.length,attributionCounts:b,blindSpots:c,stubbornNodes:g,constraintSuggestions:f}}},80323:(a,b,c)=>{c.d(b,{GA:()=>y,R2:()=>G,Y5:()=>F,Y6:()=>A,bs:()=>H});var d=c(31846),e=c(1218),f=c(11248),g=c(95294),h=c(82437),i=c(1358),j=c(10025),k=c(22157);let l=/OCR|乱码|识别错误|无法确认|语义断裂|页码/u,m=/暂列金额|暂估价|预留金/u,n=/^\d+(?:\.\d+)?\s*(?:%|元|万元|亿元|项|个|天|月|年|周|小时|分钟|人|次|份|批|层)$|^\d{4}[.\-/]\d{1,2}$/u,o=/^[A-Za-z]{1,4}\s*[-–—]?\s*\d{1,3}$/u,p=/^(?:精确参数|技术参数|参数|参数规格|规格参数|数据|指标|其他|其它|备注|说明|未分类)$/u,q=/(?:GB|JGJ|CJJ|CJ|JG|JT|TB|SL|DL|HG|SH|YB|SY|GA|QB|WS|JC|NB|CECS|ISO|IEC|JTG|DB)\s*\/?\s*T?\s*[\d.]{4,}/iu,r=/^[A-Za-z]{1,3}\s*\d+(?:\.\d+)?[A-Za-z]?$/u,s=/[。!?]|[::]\s*[\d((]|(?:应|须|不得|必须|严禁|宜)[^,。;]{0,20}(?:采用|符合|按照|满足|设置|办理|执行|组织|进行|大于|小于|超过|支付|承担|参加|具备|具有|提供|建立|完成|取得|达到|构成|包括|包含|纳入|列入|签署|加盖)|[^,。;]{6,}为[^,。;]{6,}/u,t=/(?:有限公司|有限责任公司|股份公司|集团公司|公司|事务所|管理处|管理局|委员会|服务中心)$/u;function u(a){return`${a.key||""} ${a.fieldName||""} ${a.value||""}`.trim()}function v(a,b=new Set){if(!a)return{usable:[],noiseExcluded:[]};let c=a.factIndex?.parameterFacts?.length?a.factIndex.parameterFacts:a.preciseFacts||[],d=new Set,i=[],k=[];for(let a of c){if(!a)continue;let c=String(a.value||"").trim();if(!c||b.has((0,f.K3)(c))||l.test(u(a))||(0,e.ZR)(a)||m.test(u(a)))continue;let v=(0,g.MO)(c);if(v){k.push({fact:a,category:v});continue}if(function(a){let b=String(a.value||"").trim();if(!b)return"空值";let c=(0,h.j4)(b);if(c)return c;let d=String(a.key||"").trim();return p.test(d)&&!r.test(b)&&!q.test(b)&&n.test(b)?"裸量碎片(键为通用桶、值无概念词,正文无从逐字落位)":RegExp(j.yJ,"u").test(b)?"变更叙述(非可落位参数)":b.length>=18&&s.test(b)?"条文句(非短语级参数)":b.length>=30&&(b.match(/[,、;]/gu)||[]).length>=2?"多小句条款句(非短语级参数)":/(?:\d)\s*(?:\d)(?:\s*\d){2,}/u.test(b)&&/(?:北|南|东|西|侧|号|路|街|村|镇|区)\s*\d/u.test(b)?"OCR 数字复写残片":t.test(b)?"单位/机构名(非工程参数)":/[==]/u.test(b)?"表格公式/口径残片(非值)":/^《[^》]{2,60}》\s*[((]?[A-Z]{1,6}\d{0,4}\s*\/?\s*T?\s*[\d.]{3,}/u.test(b)?"规范引用条目(属编制依据,非工程参数)":!o.test(b)||q.test(b)||r.test(b)?void 0:"清单/图签编码"}(a)||z.test(String(a.key||"").trim()))continue;let w=`${a.key}|${(0,f.K3)(c)}`;d.has(w)||(d.add(w),i.push(a))}return{usable:i,noiseExcluded:k}}function w(a,b=[]){let c=new Set;for(let e of(0,d.TC)(a,b))for(let a of(0,d.XF)(e))c.add(a);return[...c]}function x(a,b){let c=u(a),d=0;for(let a of b)c.includes(a)&&(d+=1);return d}function y(a,b,c={}){let d=function(a,b,c={}){let{usable:d}=v(a,c.supersededValues);if(0===d.length)return[];let e=w(b,c.sections||[]);return 0===e.length?[]:d.map(a=>({fact:a,score:x(a,e)})).filter(a=>a.score>0).sort((a,b)=>b.score-a.score||String(a.fact.key).localeCompare(String(b.fact.key),"zh")||String(a.fact.value).localeCompare(String(b.fact.value),"zh")).map(a=>a.fact)}(a,b,c);if(0===d.length)return[];let e=Math.max(1,c.maxChars??3600),f=[],g=0;for(let a of d){let b=a.fieldName&&a.fieldName!==a.key?`(${a.fieldName})`:"",c=String(a.objectName||"").trim(),d=c?`- ${c}|${a.key}${b}=${String(a.value).slice(0,80)}`:`- ${a.key}${b}:${String(a.value).slice(0,80)}`;if(g+d.length+1>e)break;f.push(d),g+=d.length+1}let h=d.slice(f.length);return 0===f.length?[]:[`【本章可靠参数清单(资料事实链参数索引:${d.length} 项与本章相关的规格/参数/数量/时间/比例/标准编号,须逐项在正文对应位置自然写入,保持原值原形态(数字、单位、编号中的连字符与年份不得改写、拆分或省略);商务金额/单价/税率/预留金类数据一律不得写入正文)】`,'【逐对象写实铁律】带对象前缀的条目(「对象|属性=值」)必须写到**该对象**的正文处——**禁止把某对象的参数写到另一对象**;同一属性在不同对象下各有其值(如「基础垫层 100mm」与「地坪垫层 300mm」并列)是**正确**的,不得"统一"或只取其一。',...f,...h.length>0?[`- 另需落位(仅列名,共${h.length}项,须同样逐项写入正文):${h.map(a=>String(a.key)).join("、")}`]:[]]}let z=/^(?:项目名称|项目编号|招标人|建设单位|建设地点|建设规模|计划工期|合同工期|总工期|开工日期|质量标准|质量目标|合同估算价|最高投标限价|招标范围|施工范围|投标人|开标|评标|资金来源|编制依据|安全生产许可证)/u;function A(a){let b=0,c=0,d=[];for(let e of a){if(String(e.objectName||"").trim()){b+=1;continue}if(z.test(String(e.key||"").trim())){c+=1;continue}d.length<12&&d.push(`${String(e.key).slice(0,20)}:${String(e.value).slice(0,30)}`)}let e=a.length-b-c,f=b+e;return{total:a.length,bound:b,projectLevel:c,unbound:e,bindRate:f>0?b/f:1,unboundSamples:d}}let B=/[一—–‑﹣]/gu,C=/(?:约(?:为)?|大约|大概|左右|共计|总计|合计|合计为|不小于|不少于|不超过|不大于|应不少于)/gu,D=/^(?:dn|de|d|φ|ф)/iu;function E(a,b,c=[],d={}){let{usable:e,noiseExcluded:g}=v(b,d.supersededValues),h=(0,f.K3)(a||""),j=h.replace(B,"-"),k=c.map(a=>w(a.title,a.sections||[])),l=[],m=[],n=[];for(let a of e){if(function(a,b,c=""){let d=(0,f.K3)(b);return!!d&&(!!(a.includes(d)||b.split(/[、,,;;/|]+/u).map(a=>(0,f.K3)(a)).filter(a=>a.length>=5).some(b=>a.includes(b)))||!!c&&function(a,b,c){let d=(0,f.K3)(c).replace(B,"-");if(d.length>=5&&b.includes(d))return!0;let e=d.replace(C,"");if(e.length>=5&&e!==d&&b.includes(e))return!0;let g=(0,i.Ih)(e);if(g.length>=5&&g!==e&&b.includes(g)||(0,i.Ih)(b).includes(g))return!0;if(D.test(d)){let b=d.replace(D,"dn");if(b.length>=4&&a.includes(b))return!0}return!1}(a,c,b))}(h,String(a.value),j)){l.push(a);continue}(k.some(b=>b.length>0&&x(a,b)>0)?m:n).push(a)}return{totalParams:e.length,used:l,relevantMissed:m,irrelevantMissed:n,noiseExcluded:g}}function F(a){let b=a.chapters||[],c=E(a.markdown,a.factsModel,b,{supersededValues:a.supersededValues});if(0===c.totalParams)return;let d=c.used.length,e=c.relevantMissed.length,f=d+e;return{totalParams:c.totalParams,usedParams:d,relevantMissedCount:e,relevantMissed:c.relevantMissed.slice(0,20).map(a=>`${a.key}:${String(a.value).slice(0,60)}`),irrelevantMissedCount:c.irrelevantMissed.length,noiseExcludedCount:c.noiseExcluded.length,noiseExcluded:c.noiseExcluded.slice(0,10).map(a=>`[${a.category}]${a.fact.key}:${String(a.fact.value).slice(0,50)}`),rate:b.length>0&&f>0?d/f:null}}function G(a,b,c=[]){let d=new Map;if(0===c.length)return d;let e=E(a,b,c).relevantMissed;if(0===e.length)return d;let f=c.map(a=>w(a.title,a.sections||[]));for(let a of e){let b=String(a.value).trim();if(0===b.length||b.length>80)continue;let c=f.map((b,c)=>({index:c,score:0===b.length?0:x(a,b)})).filter(a=>a.score>0).sort((a,b)=>b.score-a.score||a.index-b.index)[0];if(c){let a=d.get(c.index)??[];a.push(b),d.set(c.index,a)}}return d}function H(a,b,c=[],d={}){if(0===c.length)return[];let e=E(a,b,c,d),f=e.used.length+e.relevantMissed.length;if(f<8||e.used.length/f>=.9)return[];let g=e.relevantMissed.slice(0,3).map(a=>String(a.value).slice(0,30));return[{level:"error",category:"fact_consistency",owner:"llm",repairability:"llm_repairable",message:`可靠参数义务落位不足:${e.used.length}/${f}(相关而遗漏 ${e.relevantMissed.length} 项${g.length>0?`,缺失如 ${g.join("、")}`:""})`,suggestion:"请将资料中的可靠参数(规格/型号/尺寸/强度/规范编号等)在对应章节的对应位置自然写入,保持原值原形态(数字、单位、编号中的连字符与年份不得改写、拆分或省略);商务金额、单价、税率、预留金类数据一律不得写入正文。",provenance:{detectorId:"parameter-obligation-usage",fingerprint:(0,k.c6)(a)}}]}},81892:(a,b,c)=>{c.d(b,{G0:()=>m,OA:()=>i,Xv:()=>l,hS:()=>g,uQ:()=>h});var d=c(29055),e=c(68977);let f="每条重点难点必须写成「难点事项 | 成因与风险来源 | 应对措施 | 责任岗位 | 检查频次 | 整改闭环要求」式条目,两个半项缺一不可:① **归因**:明确写出成因与风险来源——须用「成因」「风险来源」「风险源于」「致险因素」等字面表述,不得只描述现象;② **量化**:写出量化控制目标(数值+单位或频次,如「开挖深度不超过 3m」「每 200m 划分一段」「压实度不低于 95%」「巡检 1 次日」「导行通道宽度不小于 4m」);重难点以表格呈现时按行逐条判定:文档级模板化检测线只取②量化——「数值+单位/频次」条目占比须 ≥50%(①归因表述为观测项,不计入该线);块级质检(重难点类章)另按①②双达标率 ≥50% 验收",g=[{pattern:/概况|总体|理解|说明|编制/u,goal:"以项目资料已确认的事实卡片展开工程概况与总体理解,不得空泛概述",mustCover:["工程名称、建设地点、建设规模、计划工期、质量标准等资料已确认事实","现场条件与招标范围边界","编制依据与适用范围(按五类逐项列全:招标文件及补疑补遗、国家法律法规、国家/行业现行规范标准、地方法规规章、企业管理体系;地方法规规章必须结合工程所在地属地的现行地方性法规与政府规章,不得只写笼统一句话)","B5 专业工程清单:资料识别的专业工程逐个展开(不少于 5 个,每个专业工程写明作业对象与工程量、工序顺序、施工方法三方面要素,落到工程量与工艺参数)",`重点难点分析(本类章普遍承载该内容):${f}`]},{pattern:/主要施工内容/u,goal:"按专业工程展开作业对象与工程量、工序顺序、施工方法三方面要素(呈现形式不限),落到工程量与工艺参数",mustCover:["资料识别的专业工程(不少于5个)","每个专业工程的作业对象与工程量/工序顺序/施工方法三方面要素","工程量、材料设备规格、检测验收与资料闭环"]},{pattern:/主要分部分项工程施工方案|主要施工方法/u,goal:"按分项工程方案展开作业对象与工程量、工序顺序、施工方法三方面要素(呈现形式不限),落到工艺参数与工序顺序",mustCover:["资料明确的专业工程范围(逐项展开分项工程方案)","每个分项方案的作业对象与工程量/工序顺序/施工方法三方面要素","每个分项方案不少于4个工艺参数与至少1处3环节以上工序顺序表达","工艺参数来自绑定材料或行业通用规范值,不得编造"]},{pattern:/重点|难点/u,goal:"识别项目重点难点并给出针对性对策,每项落到责任岗位与验收节点",mustCover:["重点难点成因与影响范围","对应施工内容与专项措施","责任岗位、检查频次、整改闭环",f]},{pattern:/部署|总体|流水|顺序/u,goal:"明确施工部署逻辑、流水段划分与资源调配机制",mustCover:["施工区段与流水划分","各阶段施工顺序与穿插关系","资源动态调配机制"]},{pattern:/进度|工期/u,goal:"围绕总工期与关键节点展开进度保障",mustCover:["总进度计划与关键节点","周/日计划分解","进度偏差识别与纠偏措施"]},{pattern:/质量/u,goal:"覆盖材料验收、过程控制、隐蔽验收、整改复验的质量闭环",mustCover:["质量目标与验收依据","三检制度与样板引路","隐蔽工程验收与材料复试","见证取样送检、试块养护、分部分项报验等质量保障制度逐项落位","质量通病防治与闭环整改","保修与缺陷责任期承诺"]},{pattern:/安全|危大|风险/u,goal:"覆盖风险识别、危大工程专项方案、检查整改与应急响应",mustCover:["安全目标与量化控制指标(如杜绝重伤及以上事故、轻伤事故频率控制值、安全达标率),须以承诺句式明确写出","危险源辨识与风险分级","危大工程辨识清单逐项完整(按项目实际情况覆盖基坑支护与降水、模板支撑、脚手架、起重吊装、吊篮、拆除等适用项,逐项写明辨识依据,不得遗漏)","B6 危大分级参数—判定绑定(硬要求):每一类危大工程的判定必须写「本项目实际参数 + 判定阈值对照 + 结论」三要素(如「本项目基坑开挖深度 1.75m,对照《危险性较大的分部分项工程安全管理规定》开挖深度超过 3m 属危大工程的阈值,判定本工程基坑不属于危大工程」);**禁止只抄规范阈值**(如只写「开挖深度超过 3m 的沟槽土方开挖工程」而不给本项目实际深度);参数取自资料原文,不得编造","危大工程专项方案编制与审批程序","安全交底与隐患排查闭环","施工现场临时用电三级配电两级保护:总配电箱/分配电箱/开关箱三级配电,两级漏电保护(总箱与开关箱各一级,漏电动作电流与动作时间参数落位),TN-S 接零保护系统,漏电保护器每周试跳 1 次","B5 生产安全事故应急预案与应急演练(八部分结构:总则、组织机构及职责、风险分析与危险源辨识、应急物资设备与通讯保障、专项应急预案、应急响应、后期处置、培训演练):逐部分展开,演练频次量化(如每半年 1 次),物资储备清单化"]},{pattern:/资源|材料|设备|劳动力|人材机/u,goal:"说明资源配置依据、进场验收与保管调配",mustCover:["机械设备投入计划","分阶段劳动力计划","材料进场计划与验收"]},{pattern:/文明|绿色|环保|扬尘|噪声/u,goal:"覆盖扬尘噪声管控、四节一环保与智慧监测",mustCover:["扬尘治理六个百分百逐项落位(施工工地周边 100% 围挡、物料堆放 100% 覆盖、出入车辆 100% 冲洗、施工现场地面 100% 硬化、拆迁工地 100% 湿法作业、渣土车辆 100% 密闭运输;不涉及拆迁的写明豁免理由)","扬尘噪声分时段管控","监测预警与台账","绿色施工与四节一环保措施:绿色施工按《绿色施工评价标准》GB/T 50640 分阶段评价(每阶段不少于 1 次,评价记录归档)","B5 四节一环保量化指标:节水(非传统水源利用率/用水量控制)、节材(材料损耗率/废弃物回收率)、节地(土方平衡率)、节能(能耗指标)各至少 1 项带单位量化指标,附录八基准对照项逐项量化响应"]},{pattern:/应急|预案/u,goal:"覆盖应急组织、物资储备与专项预案",mustCover:["应急组织架构","应急物资储备","专项预案与演练计划"]},{pattern:/竣工|验收|移交|保修/u,goal:"覆盖竣工清理、验收移交与保修响应",mustCover:["竣工清理与垃圾外运","缺陷修补与复验","验收移交与保修响应"]},{pattern:/工资|劳务|实名/u,goal:"覆盖劳务实名制与农民工工资保障闭环",mustCover:["建筑工人实名制管理(实名登记率 100%、实名制管理平台考勤)","农民工工资专用账户与银行代发(专用账户开设、按月足额代发、工资保证金)","考勤与工资支付台账","工伤保险办理与参保信息管理(作业人员工伤保险按项目参保、参保信息纳入实名制管理、工伤事故申报处置流程)"]},{pattern:/交通导改|交通导行|交通组织|导改|管线保护|占道/u,goal:"覆盖现状调查、分阶段导改、通行保障与地下管线保护,落到导改阶段划分与保通对象",mustCover:["现状交通与地下管线调查(交通流量、沿线单位出入口、管线权属与埋深)","分阶段导改方案与围挡设置(导改阶段划分、导改路线、通行能力校核、围挡撤除条件)","行人与沿线单位通行保障(人行通道、无障碍通行、出入口保通)","地下管线探测与保护措施(探测方法、保护形式、监护与应急)","导改标志标线与夜间警示设施(标志、标线、夜间警示)"],projectTypes:["municipal"]},{pattern:/居民|扰民|既有(?:设施|管线|建筑|构筑物)保护|沟通协调|公众参与/u,goal:"覆盖居民诉求、扰民控制、通行保障与既有设施保护,落到受影响户数、作业时段与责任人",mustCover:["受影响居民与诉求调查(受影响户数、诉求清单、调查方式)","扰民因素识别与控制措施(噪声、扬尘、振动、作业时段)","分区施工与居民通行保障(施工分区、通行路线、临时通道)","既有设施保护措施(既有管线、既有构筑物、保护形式)","沟通公示与投诉响应(公示方式、联系渠道、响应时限)"],projectTypes:["renovation"]},{pattern:/成品保护|半成品保护|交叉施工|交叉作业/u,goal:"覆盖成品保护策划、交接验收、分部位保护与交叉作业协调,落到责任岗位与责任转移时点",mustCover:["成品保护策划与责任划分(保护对象清单、责任岗位、交接制度)","交接验收与责任转移时点(交接条件、交接记录、责任转移时点)","分部位成品保护措施(地面、墙面、吊顶、门窗、设备)","交叉施工作业面协调(工序穿插顺序、作业面移交、冲突处理)","成品损坏责任认定与修复(损坏记录、责任认定、修复与复验)"],projectTypes:["decoration"]}];function h(a,b=[]){if(0===b.length)return g.find(b=>b.pattern.test(a));let c=g.filter(b=>b.pattern.test(a));if(0!==c.length)return c.find(a=>a.projectTypes?.length&&(0,d.zj)(a,b))??c.find(a=>!a.projectTypes?.length)??c[0]}let i=["【结构完整性红线】有序列表编号必须从「1.」起连续、不得跳号或重号,小节内列表独立起编、不得继承父级编号;编号后必须紧跟实质内容(禁止孤立编号);禁止双重冒号「::」「;:」「。:」等行尾标点残留;禁止句子中途截断(行尾无终止标点)与整段重复行;每个小节必须有实质正文,禁止只写标题的空小节","【表格规范红线】每张表只允许一个表头行(禁止重复表头),表名必须独立成行(禁止混入表头首格);**数据行不得留空单元格,也不得用「—/——」占位**——每格必须有内容且有值;禁止用「若干/约/待定/暂无/待补充」等模糊表达代替具体数据;合计行数值必须可由明细行相加推导;列数与表头一致;说明性内容必须用段落承载,禁止用表格单元格堆砌正文。规格型号列尤其注意:机械设备由投标人自行选型时,**选型结论本身就是必须写出的值**(写具体型号,或招标/图纸给出的规格),不得以「—」留空搪塞","【数据口径红线(宁缺毋假)】同一指标(劳动力总数、机械台数、工期阶段划分、班组人数等)全文档只允许一套口径,禁止在不同章节或表格中并列矛盾数值;禁止自行取平均值、保守值、众数等在多套口径中盲选统一;无法从资料锁定唯一数值时不得写具体数值(改用定性表述或显式标注待核),严禁编造数值或将候选值随手择一写入","【禁止资料堆砌伪段落】禁止以「本项目主要施工内容包括:X的Y量为Z……」「经识别,本项目工程量为:……」式清单罗列句充当正文段落;禁止把资料条目用顿号/分号首尾相接拼成伪句子;每段必须是连贯的施工描述(含施工对象、工序逻辑、工艺做法、参数落位),工程量清单类明细如需呈现应使用规范表格,不得用罗列句复制表格内容",'【禁止自伤式假设与短板表述】不得以假设或否定前提描述自身合规状态——禁止「如涉及危险性较大的分部分项工程…未经审批不得实施」「若发现缺项/矛盾…补测」「本工程不允许分包」类表述(评标人读作"可能不合规");也不得主动暴露短板(设计图纸不一致、工程量组价缺失、资料缺项、踏勘发现矛盾);一律改写为**已落实的正向做法**(逐项辨识分级管控、按程序处理、开工前完成核对闭环、自主组织实施严禁违法分包)',"【禁止两可表述】同一事项必须给出**唯一确定**的做法与参数,禁止「A 或 B」「A/B」「按…或…执行」式悬置选择(如「采用塔吊或施工电梯」「放坡或支护」「按设计坡率」);系统已裁决的计划类数值与做法按其口径唯一写出,不得并列候选值","【工期时序与分批口径红线】时间表述必须符合施工时序逻辑:前期准备动作(施工方案编制报审、图纸会审、交底、考察、封样、检测、培训演练、采购调查等)的完成时限必须落在施工准备阶段内,禁止出现「开工令下发后第 N 日内」且 N 达到或超过总工期的写法(等同于把前期动作排到竣工日);机械、设备、劳动力分批进场表述(首批/剩余/补充进场)各批次数量必须能合计推导为进场总数且与资源配置表同口径,禁止分批数量与总数互相矛盾","【禁止指向型表述与缺资料搪塞】不得以指向他处替代具体做法与参数——禁止「按设计图纸控制/计量/要求/施工/确定/执行」「按图纸」「以图纸为准」「详见\xd7\xd7大样图/详图」「参见《…》+图集编号(如20S515/29、皖2015S209)」类写法;**同样禁止**「资料未提供该参数」「待补充/待确认/待核实」「以设计文件为准」类搪塞(本产品不存在资料缺参数的情形)。每一条都必须写出本项目已确认的具体做法与参数实值(取蓝图/工程量清单/图纸标注/规范的确定值);若该条目的权威值尚未绑定给出,按**同专业已确认的等效做法+已有资料**写实,不得指向、不得留空、不得写「未提供」","【编制依据五类逐项列全(本章设「编制依据/编制说明」小节时适用)】设该小节的章节必须**逐条列出具体名称**(以类别话术代替即判未写:「国家现行法律、行政法规」「现行规范标准」「地方法规规章」式写法不得出现),五类缺一不可:① 招标文件及补疑补遗(名称、编号与招标文件一致,含答疑澄清文件);② 国家法律法规(《…法》形态的具体法律名称);③ 国家/行业现行规范标准(《…规范/规程/标准》+编号—年号,按本工程分部分项选择现行版本,**编号必须能在项目资料(招标文件/清单/图纸/设计说明)中查到**,查不到的编号视为编造);④ 地方法规规章(工程所在地属地的现行地方性法规与政府规章,名称须含工程所在地的省/市名,不得写笼统一句话);⑤ 企业管理体系文件(质量/环境/职业健康安全管理体系文件与内部管理制度)。**未设该小节的章节不得新增该小节**;既有条目不得删除或替换(补列条目与既有条目并列成行或成表)"],j="B8 现行口径铁律:正文只陈述**现行值**——计划工期、合同金额、开工日期等以真值层裁决后的生效值为准(具体生效值与被取代值见下文「现行口径」硬约束块,逐条照办);**禁止出现被取代的旧值,也禁止叙述变更过程**(不得写「原365日历天现变更修改为330日历天」「招标阶段计划工期为365日历天,现澄清变更为330日历天」「经澄清/答疑…调整为…」「招标澄清文件明确…」类说明——评标人只看现行口径);以工期为参照的时限(如「开工后第N日内完成…」)必须落在现行工期之内",k="B7 蓝图权威值必须写具体数字:劳动力峰值、机械设备台数、里程碑节点天数等由系统蓝图统一裁决的数值,必须原样写出(如「劳动力峰值 XX 人」「挖掘机 X 台」),不得只写「按总进度计划控制」「按施工部署确定」类控制原则,也不得自行推算另设";function l(a){let b=(a.globalWritingFocus||[]).filter(a=>/^B[78]\s|^项目规模事实卡|^项目可信基础事实|^【规范术语显性落位】|^B5 属地创优目标/u.test(a));return[a.truthConstraint,a.clarificationConstraint,a.amendmentConstraint,...b,a.hazardBindingBlock].filter(a=>!!(a&&a.trim()))}function m(a){let b=(0,d.yt)({template:{id:"runtime",name:a.templateName||"",outputTitle:"",description:"",category:"",chapters:a.chapters},chapters:a.chapters,requirement:a.requirement}),c=(0,d.un)({template:{id:"runtime",name:a.templateName||"",outputTitle:"",description:"",category:"",chapters:a.chapters},chapters:a.chapters,requirement:a.requirement}),f=/施工组织设计|施工组织|施组|技术标/u.test(`${a.templateName||""} ${a.requirement||""} ${a.chapters.map(a=>a.title).join(" ")}`)||b.length>0,g=Object.values(a.factsModel?.canonical?.byKey||{}).filter(a=>{let b=String(a.value||"").replace(/\s+/gu,"");return!/^[约为]?[::]?\d+(?:\.\d+)?(?:mm|cm|米|m|kN|KN|kn|kg|t|吨)/u.test(b)||!!(0,e.LM)(b,"m")}).map(a=>`${a.label}=${a.value}`),l=g.filter(a=>/建设规模|建筑面积|占地|用地面积|装配|层数|高度/u.test(a)).slice(0,8),m=["正文必须落到本项目资料已确认的事实,不得使用模板化空话或跨小节复制段落","措施类内容必须可核查:每项措施写清执行主体(谁做)、动作与量化标准(做什么、达标线是多少)、检查频次(多久一次)与问题处置(不达标怎么处理、由谁验证、留下什么记录);**闭环要用实质动作表达**(复测、送检、旁站、检验批验收、实测实量、资料归档等),禁止以“复查销项”“整改销项”“复查确认”一类无执行主体、无依据、无记录的零信息尾词收句;同一收尾表达全文不得超过 4 次;相邻小节不得同句式开头","措施类段落必须落位完整要素链——方案(专项施工方案/技术措施)、流程(施工工序/工艺流程)、执行主体(岗位)、检查频次(每周/每日不少于 N 次)、验收与处置(检测/试验/验收/整改/复验的具体做法)——五类要素按业务实质写清即可,**不要求出现特定字词**,也不要求逐段齐备(避免为凑要素而填充套话)","【规范术语显性落位】凡涉及强制性管理制度的段落,小节标题与正文首句必须显性使用规范术语原词(如「建筑工人实名制管理」「农民工工资专用账户」「生产安全事故应急预案与应急演练」「危险性较大的分部分项工程」「扬尘污染防治措施」「绿色施工与四节一环保」「施工现场临时用电三级配电两级保护」),禁止只写近义改写(如把“实名制管理”写成“人员考勤登记”、把“应急预案”写成“处置办法”);评审按规范术语原词做语义匹配,术语不显性即判内容缺失","正文每 1000 字至少落位 6 处带单位量化工艺参数(mm/MPa/养护天数/间距/压实度等),施工流程与施工方法须有明确的工序顺序表达(相邻小节不得同句式开头,同一句式全文不得反复使用,禁止以固定句模复读),每个分部分项方案至少 1 处 3 环节以上工序顺序表达",'专业工程类小节必须覆盖作业对象与工程量、工序顺序、施工方法三方面要素(必须融入连贯段落叙述,禁止以"施工概况/施工流程/施工方法"等结构标签充当标题或段落开头引导),小节标题用专业工程正式名称(如"拆除工程"),禁止使用"工作包"等后台概念命名','质量目标与创优目标必须使用招标文件原文的奖项名称逐字落位,禁止替换、降级或省略为其他奖项名称(如把招标文件指定奖项写成其他奖项);招标文件"确保/达到"类等级要求不得弱化为"争创/争取"',"B5 属地创优目标(属地适配项):招标文件未明确具体奖项时,正文必须提出不低于招标文件要求的属地创优目标(如“争创市级优质工程”“争创市级安全文明标准化工地”,市名须为工程所在地),并在质量与文明施工章节落位","B5 表格数据一致性(实测缺陷:合计行与阶段明细之和不符、班组人数多值并存):表格类内容(劳动力投入、材料配置、机械设备等)合计行数值必须与上方明细行数据一致、可由各行相加推导;各阶段人数与全项目峰值人数必须显式区分口径并保持一致(如写明“阶段高峰人数按阶段分别统计,合计行仅列全项目峰值口径”);同一班组人数在配置表与进退场表中必须同值,不得多值并存",...i,a.clarificationConstraint||""].filter(Boolean),n=a.chapters.map(b=>{let d=h(b.title,c),e=(a.projectGraph?.works||[]).filter(a=>a.name&&(b.title.includes(a.name.slice(0,2))||/概况|总体|施工内容|方案|施工/u.test(b.title))).slice(0,10),f=(a.projectGraph?.resources||[]).filter(a=>a.quantity&&/概况|资源|总体|施工内容|方案/u.test(b.title)).slice(0,12).map(a=>({itemCode:"",itemName:a.name,quantity:a.quantity,unit:a.unit}));return{chapterId:b.id,chapterTitle:b.title,writingGoal:d?.goal||"结合本章标题与项目资料事实展开专业内容,避免泛化叙述",mustCover:[...d?.mustCover||[],...(b.requiredFacts||[]).slice(0,6)],factDomains:[...b.requiredFacts||[],...e.map(a=>a.name)].slice(0,10),evidenceRefs:b.queries.slice(0,6).map(a=>({filePath:a,kind:"query",priority:"should"})),boqTargets:f,drawingTargets:[],gaps:[]}});return{documentType:f?"施工组织设计":"专业文档",globalWritingFocus:f?[...m,j,"招标硬性要求必须逐项明确响应:质量标准、计划工期、缺陷责任期与保修、安全文明目标、项目经理及组织机构;工期/质量/保修类承诺可在概况与质量章节落位,不得遗漏",...l.length?[`项目规模事实卡(口径裁决值,正文引用规模数据必须与之一致,不得混淆总占地与建筑总量口径):${l.join(";")}`]:[],...g.length?[`项目可信基础事实(写作时必须优先落位):${g.slice(0,10).join(";")}`]:[],k]:[...m.slice(0,2),j,k],chapters:n}}},82437:(a,b,c)=>{c.d(b,{DK:()=>M,Jo:()=>w,eA:()=>h,gu:()=>J,hf:()=>y,iC:()=>I,j4:()=>r,oj:()=>n,tI:()=>L,wc:()=>N});var d=c(10025),e=c(19898),f=c(95294);let g=/补遗|补疑|答疑|澄清|question/i;function h(a,b){return(0,e.sourcePriorityOf)(a,b)}function i(a){let b=[...String(a||"").matchAll(/(20\d{2})[.\-年](\d{1,2})[.\-月](\d{1,2})/g)].map(a=>1e4*Number(a[1])+100*Number(a[2])+Number(a[3]));if(b.length>0)return Math.max(...b);let c=/(\d{1,2})\s*(?:招标)?(?:答疑|澄清|补遗|补疑)(?:文件|公告|书)?/u.exec(a)?.[1];return c?1e3+Number(c):0}let j=/^(?:子项名称|图名|图号|比例|制图|审核|版次)\s*[::]/u,k=/^(?:子项名称图名|图名图号|设计单位名称|制图人|审核人|比例尺)$/u,l=/^(?:【[^】]{0,16}】|—+|待定|暂无?|未提供|详见|如上|同前)$/u,m=/^(?:【[^】]{0,24}】|—+|[待暂](?:定|补充|确认|核实|无|缺)|不详|未知|不适用|未在资料(?:中|里)?(?:明确)?(?:体现|给出|提供|说明|标注|载明|列明|查到|查得)|(?:资料|文件|图纸|清单)(?:中|里)?(?:均|也)?未(?:明确|体现|给出|提供|说明|标注|载明|列明|涉及|提及|识别|获取|解析|提取|查到)|未(?:明确|体现|提供|涉及|提及|给出|标注|说明|描述|予明确|识别|获取|解析|提取|匹配|查到)|系统暂未(?:从知识库确认)?|无法确认|无相关(?:资料|信息|内容|记录)|无此(?:项|内容|信息)|以(?:图纸|清单|资料|招标文件)为准|详见|如上|同前|同上)$/u;function n(a){let b=a.replace(/^【/u,"").replace(/】$/u,"").replace(/[\s。;;,,、..]+$/u,"").trim();return b.length>0&&b.length<=24&&m.test(b)}let o=/^(?:见|详见|参见|按|依据)\s*(?:招标文件|招标公告|投标须知|图纸|设计|清单|规范|合同)/u,p=/暂列金额|暂估价|预留金|投标报价|报价明细|综合单价|单价|合价|税率|增值税|利润|结算/u,q=/^(?:分部小计|本页小计|小计|合计|总计|综合单价|措施项目费|规费|税金|按实|暂估|暂列金额)$/u;function r(a,b={}){let c=String(a||"").trim();return c?c.length>260?"超长(疑为段落而非值)":(c.match(/([\u4e00-\u9fa5])\1/gu)||[]).length>=2?"OCR 复写噪声":!b.allowProse&&c.length>40&&/[。;!?]$/u.test(c)?"段落而非值":j.test(c)&&c.length<=14||k.test(c)?"图签/图名串格":l.test(c)?"占位/未提供值":n(c)?"缺席声明(资料未给出该信息)":o.test(c)?"指向值(非值本身)":q.test(c)?"清单内部口径词":(c.match(/[\u4e00-\u9fa5]{2,8}\s*[::]/gu)||[]).length>=3?"表格串格(多字段粘连)":!1!==b.includePoolNoise&&(0,f.MO)(c)?"池噪声(图签/坐标/残片/粘连)":c.length>=12&&/(?:以及|和|与|或|的|了|在|为|按|由|及)$/u.test(c)?"截断值":void 0:"空值"}function s(a){let b=String(a||"").trim(),c=/^(?<main>[^((]{1,40})[((](?<inner>[\s\S]{12,})[))]\s*$/u.exec(b);if(!c?.groups)return{value:b};let d=c.groups.inner;return/;|;|余同|标注:|图纸标注|以下同/u.test(d)||d.length>30?{value:c.groups.main.trim(),note:d.slice(0,80)}:{value:b}}let t=/(?:开挖深度|搭设高度|支撑高度|吊装重量|起吊重量|搭设跨度|施工总荷载|集中线荷载|基坑深度)[^。;]{0,14}?(?:超过|达到|不小于|大于)\s*\d+(?:\.\d+)?\s*(?:mm|cm|m|米|t|吨|kg|kN)[^。;]{0,24}?的[^。;]{0,20}工程/u,u=RegExp(`${d.yJ}\\s*[::]?`,"u"),v=new Map;function w(a){let b=String(a||"").trim();if(!b)return{value:"",shape:"text"};let c=u.exec(b),d=c?b.slice(c.index+c[0].length):b,e=[{shape:"date",re:/\d{4}\s*年\s*\d{1,2}\s*月\s*\d{1,2}\s*日/u},{shape:"money",re:/\d+(?:\.\d+)?\s*(?:万元|亿元|元)/u},{shape:"standard",re:/(?:GB|JGJ|CJJ|DB|CECS|ISO|IEC)\s*\/?\s*T?\s*[\d.]+/iu},{shape:"spec",re:/(?:C\d{2,3}|HRB\d{3,4}|HPB\d{3}|DN\s*\d+|Φ\s*\d+|φ\s*\d+|\d+(?:\.\d+)?\s*(?:mm|cm|kV|MPa|kPa|kW|W|A|V))/u},{shape:"measure",re:/\d+(?:\.\d+)?\s*(?:m2|m3|m²|m³|㎡|m|km|kg|t|吨|个|座|套|台|根|块|樘|扇|片|组|件|孔|盏|项|处|层|日历天|天|%)/u}].filter(a=>a.re.test(d));if(0===e.length)return{value:b.slice(0,80),shape:"text"};let f=e[0];return{value:function(a,b){let c=String(a||"").trim(),d={date:/\d{4}\s*年\s*\d{1,2}\s*月\s*\d{1,2}\s*日/gu,money:/\d+(?:\.\d+)?\s*(?:万元|亿元|元)/gu,standard:/(?:GB|JGJ|CJJ|DB|CECS|ISO|IEC)\s*\/?\s*T?\s*[\d.]+(?:-\d{2,4})?/giu,spec:/(?:C\d{2,3}|HRB\d{3,4}|HPB\d{3}|DN\s*\d+|Φ\s*\d+|φ\s*\d+|\d+(?:\.\d+)?\s*(?:mm|cm|kV|MPa|kPa|kW|W|A|V))/gu,measure:/\d+(?:\.\d+)?\s*(?:m2|m3|m²|m³|㎡|m|km|kg|t|吨|个|座|套|台|根|块|樘|扇|片|组|件|孔|盏|项|处|层|日历天|天|%)/gu};if("text"===b)return c.slice(0,80);let e=(d[b]||d.measure).source,f=[...c.matchAll(function(a){let b=v.get(a);if(b)return b.lastIndex=0,b;let c=RegExp(a,"gu");return v.set(a,c),c}(e))].map(a=>a[0].trim());if(0===f.length)return c.slice(0,80);let g=u.exec(c);if(g){let a=c.slice(g.index+g[0].length),b=RegExp(e,"u").exec(a);if(b)return b[0].trim()}return f[f.length-1]}(b,f.shape),shape:f.shape}}function x(a){let b=String(a||"").trim(),c=/[\u4e00-\u9fa5]([A-Za-z][A-Za-z0-9]{5,})/u.exec(b),d=c?b.slice(0,(c.index??0)+1):b;return d=d.replace(/([\u4e00-\u9fa5])\d{3,}$/u,"$1"),/省|市|区|县|路|街|交口|镇|乡/u.test(d)&&(d=d.replace(/([\u4e00-\u9fa5])[\d\s]{3,}(?=[\u4e00-\u9fa5]|$)/gu,"$1")),d}function y(a,b){let c=String(b||"").trim(),d=String(a||"").trim(),e=(c&&c===d?c:`${c}${d}`).replace(/\s+/gu,"");return e?/开工日期|开工时间|startDate/i.test(e)?"开工日期":/竣工日期|完工日期|endDate/i.test(e)?"竣工日期":/质量标准|质量目标|quality/i.test(e)?"质量标准":/建设规模|建筑面积|规模|scale/i.test(e)?"建设规模":/建设地点|工程地点|location/i.test(e)?"建设地点":/招标人|建设单位|owner/i.test(e)?"招标人":/暂列金额|暂列金/u.test(e)?"暂列金额":/估算|限价|控制价|投资|金额|amount/i.test(e)?"合同金额":/项目名称|工程名称|projectName/i.test(e)?"项目名称":/项目编号|工程编号|projectCode/i.test(e)?"项目编号":/工期|日历天|duration|schedule/i.test(e)&&!/节点|阶段|考核|开工|竣工/i.test(e)?"计划工期":e.slice(0,40):""}function z(a){let b=String(a||"").trim();b=b.replace(/(\d{4})\s*年\s*(\d{1,2})\s*月\s*(\d{1,2})\s*日/gu,(a,b,c,d)=>`${b}年${Number(c)}月${Number(d)}日`);let c=/^([\d,]+(?:\.\d+)?)\s*(亿元|万元|元)$/u.exec(b);if(c){let a=Number(c[1].replace(/,/gu,""))*("亿元"===c[2]?1e8:"万元"===c[2]?1e4:1);Number.isFinite(a)&&(b=`${a.toFixed(2)}元`)}return b}function A(a){let b=String(a||"").replace(/^\/+/u,""),c=b.indexOf("/");return c>0?b.slice(0,c):b}let B=/(?:计划|方案|措施|制度|职责|体系|程序|规划|组织|安排|要求|标准|办法|流程|台账|记录)$/u,C=/^[A-Za-z]{1,6}\s?[-/]?\s?\d{1,6}(?:\.\d+)?$/u,D=/(?:规格|型号|等级|管径|直径|厚度|强度等级|牌号|标号|尺寸)$/u,E=["参数","要求","标准","数据","指标","信息"],F=/(?:工期|节点|日期|期限|周期|时长|时间|时刻|进度计划)$/u,G=/\d{4}\s*年\s*\d{1,2}\s*月|\d+\s*个?\s*(?:日历天|天|个月|月|周|年|小时|工作日)/u,H=/(?:工期|节点|阶段|开工|竣工|完工|完成|封顶|验收|日历天|工作日|月份|年度|季度)/u;function I(a){let b=a.overrides||[],c=[],e=new Map;a.facts.forEach((b,d)=>{let f=String(b.value??"").trim();if(!f)return;let g=y(String(b.key||""),b.label);if(!g)return;let j=String(b.sourceFile||b.source||""),k=s(f),l=String(b.sourceFile||b.source||""),m=a.subjectOf?a.subjectOf({key:b.key,label:b.label,sourceFile:l}):"",n=/澄清|变更|补疑|补遗|修改为|调整为|更正/u.test(k.value)&&!/^(?:见|详见|参见)/u.test(k.value),o=(a,b)=>{let c=e.get(a)||[];c.push({subject:m,attribute:a,value:b,source:l,priority:h(l),order:1e3*i(l)+d,clarified:n}),e.set(a,c)},p=function(a,b,c){let d=String(c||""),e=[],f=y(a,b),g=d.split(/[::]/u),h=/(?:变更|澄清|修改|调整|更正|修正|如下|其中|例如|即|注|说明)$|为$/u;for(let a=0;a+1<g.length;a+=1){let b=/([\u4e00-\u9fa5]{2,10})$/u.exec(g[a]||"")?.[1];if(!b||h.test(b))continue;let c=(g[a+1]||"").trim();if(t.test(c))continue;let d=c.slice(0,40);if(!/\d/u.test(d))continue;let i=y(b,b);i&&i!==f&&e.push({attribute:i,value:d})}return e}(String(b.key||""),b.label,k.value);for(let a of p){let b=w(s(a.value).value).value;r(b)||o(a.attribute,b)}let q=r(k.value);if(q)return void c.push({attribute:g,value:k.value.slice(0,60),source:j,reason:q});let u=x(w(k.value).value);if(p.some(a=>a.value.includes(u)||u.includes(a.value.replace(/[((].*$/u,"").trim())))return;if(r(u)){let a=x(k.value).slice(0,80);if(!/省|市|区|县|路|街|交口/u.test(a)||r(a))return;o(g,a);return}let v=function(a,b){let c=String(a||"").trim(),d=String(b||"").trim();if(!c||!d)return;if(B.test(c)&&C.test(d))return`值-标签形态不相容:文本型属性「${c}」取了裸型号值「${d}」`;if(F.test(c)&&!G.test(d)&&!H.test(d))return`值-标签形态不相容:时间型属性「${c}」取了无日期/时长的值「${d.slice(0,40)}」`;let e=E.reduce((a,b)=>a+(c.split(b).length-1),0);return c.length>=8&&e>=2?`值-标签形态不相容:属性名「${c}」为多标签拼接,不作为口径属性`:D.test(c)&&d.length>30&&/[,。;,;]/u.test(d)?`值-标签形态不相容:规格型属性「${c}」取了长句值`:void 0}(g,u);if(v)return void c.push({attribute:g,value:u.slice(0,60),source:j,reason:v});o(g,u)});let f=new Set((a.labeledValues||[]).map(a=>y(a.attribute,a.attribute)).filter(Boolean));for(let b of a.labeledValues||[]){let a=y(b.attribute,b.attribute);if(!a)continue;let c=s(b.value);if(r(c.value,{allowProse:!0,includePoolNoise:!1}))continue;let d=e.get(a)||[];d.push({subject:"",attribute:a,value:w(c.value).value,source:b.source,priority:b.supersedesPriorMaterials?99:h(b.source),order:1e3*i(b.source)+500,clarified:b.clarified??!0}),e.set(a,d)}for(let[a,b]of e){if(b.length<2||b.some(a=>!a.source.includes("/")))continue;let d=new Map;for(let a of b){let b=A(a.source);d.set(b,(d.get(b)||0)+1)}if(d.size<=1)continue;let f=[...d.entries()].sort((a,b)=>b[1]-a[1]||a[0].localeCompare(b[0],"zh-Hans-CN"))[0][0];for(let d of b)A(d.source)!==f&&c.push({attribute:a,value:d.value.slice(0,60),source:d.source,reason:`跨资料包(本项目资料包:${f})`});e.set(a,b.filter(a=>A(a.source)===f))}let j=[];for(let[a,c]of e){let e=function(a,b,c=""){if(0===a.length)return;let e=new Set,f=[];for(let d of b){if("override"!==d.kind||!a.some(a=>a.value.includes(d.superseded))||(e.add(d.superseded),a.some(a=>a.value===d.effective)||f.some(a=>a.value===d.effective)))continue;let b=d.evidence[0]?.source||"";f.push({subject:a[0].subject,attribute:a[0].attribute,value:d.effective,source:b,priority:h(b,c),order:1e3*i(b)+900,clarified:!0})}let j=[...a.filter(a=>![...e].some(b=>a.value.includes(b))),...f];if(0===j.length&&(j=[...a]),1===j.length)return{winner:j[0],rule:"R1",superseded:[...e]};let k=/(?:路|街|道|巷|号|交口|北侧|南侧|东侧|西侧|经开区|开发区|镇|村)/u,l=j.filter(a=>k.test(a.value)&&/省|市|区|县/u.test(a.value));if(l.length>0&&l.length<j.length&&(j=l),1===j.length)return{winner:j[0],rule:"R1.5",superseded:[...e]};let m=new Set(f),n=j.filter(a=>!m.has(a)&&(!!a.clarified||g.test(a.source)&&u.test(a.value)));if(n.length>0&&n.length<j.filter(a=>!m.has(a)).length&&(j=[...n,...j.filter(a=>m.has(a))]),1===j.length)return{winner:j[0],rule:"R2.5",superseded:[...e]};let o=Math.max(...j.map(a=>a.priority)),p=j.filter(a=>a.priority===o);if(1===p.length)return{winner:p[0],rule:"R2",superseded:[...e]};let q=Math.max(...p.map(a=>i(a.source)));if(q>0){let a=p.filter(a=>i(a.source)===q);if(1===a.length)return{winner:a[0],rule:"R3",superseded:[...e]};p=a}let r=a=>{let b=/(\d{1,2}(?:\.\d{1,2}){1,3})/u.exec(a.source+a.value);return b?Number(b[1].split(".").reduce((a,b)=>a+Number(b),0)):0};if(1===new Set(p.map(a=>a.source)).size){let a=Math.max(...p.map(r));if(a>0){let b=p.filter(b=>r(b)===a);if(1===b.length)return{winner:b[0],rule:"R4",superseded:[...e]};p=b}}let s=/(?:省|市|区|县|镇|路|街|道|巷|号|交口|北侧|南侧|东侧|西侧|经开区|开发区)/u,t=p.filter(a=>s.test(a.value));if(t.length>=1&&t.length<p.length)return{winner:t.reduce((a,b)=>b.value.length>a.value.length?b:a,t[0]),rule:"R5",superseded:[...e]};let v=(0,d.dm)(p[0].value);if("measure"===v||"spec"===v){let a=p.filter(a=>70>=h(a.source,c));if(1===a.length)return{winner:a[0],rule:"R5",superseded:[...e]};a.length>1&&(p=a)}if("money"===v){let a=p.filter(a=>h(a.source,c)>=90);if(1===a.length)return{winner:a[0],rule:"R5",superseded:[...e]};a.length>1&&(p=a)}let w=new Map;for(let a of p){let b=z(a.value);w.set(b,(w.get(b)||0)+1)}let x=Math.max(...w.values()),y=p.filter(a=>w.get(z(a.value))===x);return 1===y.length?{winner:y[0],rule:"R6",superseded:[...e]}:{winner:function(a,b){return[...a].sort((a,c)=>a.clarified!==c.clarified?a.clarified?-1:1:i(a.source)!==i(c.source)?i(c.source)-i(a.source):a.priority!==c.priority?c.priority-a.priority:/standard/u.test(b)?a.value.localeCompare(c.value,"zh-Hans-CN"):a.value.length!==c.value.length?c.value.length-a.value.length:a.value.localeCompare(c.value,"zh-Hans-CN"))[0]}(p=y,v),rule:"R7",superseded:[...e]}}(c,b,a);if(!e)continue;let k=(0,d.dm)(e.winner.value),l=f.has(a)&&["measure","money","date","standard"].includes(k)?c.map(a=>a.value).filter(a=>a!==e.winner.value):[],m=function(a,b){let c=new Map;for(let d of b)"override"===d.kind&&a.some(a=>a.value.includes(d.superseded))&&c.set(d.superseded,d.effective);return c}(c,b),n=e.superseded.filter(b=>f.has(a)||m.get(b)===e.winner.value),o=f.has(a)?b.filter(a=>"override"===a.kind&&a.superseded!==e.winner.value&&z(a.effective)===z(e.winner.value)&&(0,d.dm)(a.superseded)===k).map(a=>a.superseded):[];j.push({subject:e.winner.subject,attribute:a,value:e.winner.value,rule:e.rule,evidence:[{source:e.winner.source,snippet:e.winner.value.slice(0,120)}],superseded:[...new Set([...n.filter(a=>a!==e.winner.value),...o,...l])],caliber:f.has(a)&&!p.test(a),candidates:c})}return j.sort((a,b)=>a.attribute.localeCompare(b.attribute,"zh-Hans-CN")),{resolved:j,noiseRejected:c}}function J(a){let b=a.resolved.filter(a=>a.superseded.length>0),c=a.resolved.filter(a=>a.caliber&&0===a.superseded.length),d=[];return b.length>0&&d.push(["【现行口径(真值层裁决,硬约束)】下列属性已按资料优先级与变更链裁决出**唯一现行值**;全文(正文、表格、信息表、进度计划、节点)必须一致使用,被取代值仅在引用变更过程时可出现(如「招标文件原为 X,经答疑澄清变更为 Y」),不得单独陈述现状:",...b.map(a=>`- ${a.attribute}:现行为「${a.value}」;被取代(不得作为现行口径):${a.superseded.join("、")}`)].join("\n")),c.length>0&&d.push(["【项目级口径(必须在正文出现)】下列口径是本项目的唯一现行值,必须在正文相应位置(工程概况/编制说明/工期与进度等)**逐字写出**(数值、单位、日期形态均不得改写或省略):",...c.map(a=>`- ${a.attribute}:${a.value}`)].join("\n")),d.join("\n\n")}let K=new Set(["measure","money","date","standard","spec"]);function L(a,b){let c=[],e=a,f=()=>e.replace(/\s+/gu,"");for(let a of b){if(!a.caliber)continue;let b=String(a.attribute||"").trim(),g=String(a.value||"").trim();if(!b||!g||!K.has((0,d.dm)(g))||f().includes(g.replace(/\s+/gu,"")))continue;let h=`${b}为${g}。`,i=e.indexOf(b),j=-1;if(i>=0){let a=e.lastIndexOf("\n",i)+1,b=e.indexOf("\n",i);e.slice(a,b<0?e.length:b).trimStart().startsWith("|")||(j=i)}if(j>=0){let a=j+b.length;for(;a<e.length&&!/[。;;\n]/u.test(e[a]);)a+=1;if(a>=e.length||e.slice(j,a).includes(g))continue;e="\n"===e[a]?`${e.slice(0,a)}
337
337
  ${h}
338
338
  ${e.slice(a+1)}`:`${e.slice(0,a+1)}${h}${e.slice(a+1)}`,c.push({attribute:b,value:g});continue}let k=/^#{2,3}\s*[^\n]*?(?:概况|概述|编制说明)[^\n]*$/mu.exec(e);if(!k)continue;let l=k.index+k[0].length,m=/^#{2,3}\s/mu.exec(e.slice(l)),n=m?l+m.index:e.length,o=e.lastIndexOf("\n",n-1)+1;e.slice(l,n).includes(g)||(e=`${e.slice(0,o)}${h}
339
339
  ${e.slice(o)}`,c.push({attribute:b,value:g}))}return{markdown:e,inserted:c}}function M(a){let b=[],c=new Map;for(let d of a.resolved){let a=String(d.attribute||"").trim(),e=String(d.value||"").trim();if(!a){b.push("条目缺属性名");continue}if(!e){b.push(`「${a}」生效值为空(空值不得进账本)`);continue}let f=c.get(a);void 0!==f?b.push(`「${a}」产出多条生效值(${f} / ${e})——裁决链应保证唯一值`):c.set(a,e);let g=e.replace(/\s+/gu,"");d.superseded.some(a=>String(a).replace(/\s+/gu,"")===g)&&b.push(`「${a}」生效值「${e}」同时出现在被取代值列表——现行与作废不得同值`),d.caliber&&0===d.evidence.length&&b.push(`项目级口径「${a}」缺证据来源(不可溯源的口径不得进账本)`)}return b}function N(a){return a.resolved.map(a=>{let b=`${a.attribute} = ${a.value}(裁决 ${a.rule};依据 ${a.evidence[0]?.source||"—"})`;return a.superseded.length>0?`${b};被取代:${a.superseded.join("、")}`:b})}},84450:(a,b,c)=>{c.d(b,{C:()=>k,Gz:()=>j,L9:()=>n,Tn:()=>m,gq:()=>i,xs:()=>l});var d=c(19898),e=c(70933),f=c(91977),g=c(22157),h=c(51144);function i(a){let b=Math.max(0,Math.ceil(a.totalChunks||0)),c=Math.max(0,Math.ceil(a.loadedChunks||0)),d=Math.max(0,b-c),e=b>0?c/b:1,f=[...b>=1e3&&e<.35?["切片未完全预加载"]:[],...!1===a.vectorReady?["向量索引未就绪"]:[]];return{totalChunks:b,loadedChunks:c,omittedChunks:d,loadedRatio:e,highRisk:f.length>0,riskReason:f.join("、")||void 0}}function j(a){return a??i({totalChunks:0,loadedChunks:0,vectorReady:void 0})}function k(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}async function l(a){(0,g.Te)(a.signal);let b=[];if(0===a.scopedFilePaths.length)return b;let c=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.chapter.title),f=(c?1.6:1)*(/[、,,与和及]/.test(a.chapter.title)?1.4:1),i=Math.ceil((a.highRisk?18:10)*f),j=Math.ceil((a.highRisk?24:14)*(c?1.4:1)),k=Math.ceil((a.highRisk?72:42)*f),l=Math.ceil((a.highRisk?72e3:42e3)*f),m=[...new Set([...a.requiredNeeds||[],...a.extraClues||[]])].slice(0,12),n=(function(a,b=[],c=[]){let d=a.sections||[],e=[...a.requiredFacts,...b,...c],f=(0,h.C)(d,a=>(0,h.O)(a),{maxItems:16,maxChars:1200},"retrieval-sections").selected,g=(0,h.C)(e,a=>(0,h.O)(a),{maxItems:16,maxChars:1200},"retrieval-facts").selected,i=/[、,,与和及]/.test(a.title),j=/资源|人|材|机|材料|设备|清单|工程量|BOQ|报价/u.test(a.title),k=/进度|工期|节点/u.test(a.title)?["合同工期","计划工期","日历天","开工","竣工","关键线路","进度计划","施工进度"]:/质量|验收/u.test(a.title)?["质量标准","验收规范","检验批","复验","合格","质量保证","隐蔽验收"]:/安全|危大|风险/u.test(a.title)?["安全措施","风险源","危大工程","应急","检查整改","安全防护","应急预案","基坑支护","基坑开挖","基坑底标高","坡率","支护形式","降水","开挖深度","高支模","专项方案"]:j?["工程量清单","项目特征","材料设备","规格型号","数量单位","劳动力","机械设备","进场计划","资源保障","主要材料","施工机具","材料供应","设备配置"]:/施工|方案|方法|技术|工艺/u.test(a.title)?["施工方法","工艺流程","技术标准","构造做法","控制要点","施工准备"]:["工程范围","施工方法","控制要点","验收要求"],l=i?[...k,...a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4)]:k,m=[...new Set([a.title,...f,...g,...l].flatMap(a=>a.split(/[\s、,,。;;::()()《》【】\-/]+/u)).map(a=>a.trim()).filter(a=>a.length>=2))],n=(0,h.C)(m,a=>(0,h.O)(a),{maxItems:36,maxChars:1200},"retrieval-tokens").selected,o=i?a.title.split(/[、,,与和及]+/u).map(a=>a.trim()).filter(a=>a.length>=4).map(a=>`${a} ${f.slice(0,6).join(" ")} ${g.slice(0,4).join(" ")}`.trim()):[];return[...new Set([`${a.title} ${f.join(" ")}`.trim(),...g.map(b=>`${a.title} ${b}`.trim()),...f.map(b=>`${a.title} ${b} ${g.slice(0,6).join(" ")}`.trim()),`${a.title} ${l.join(" ")}`.trim(),...o,n.join(" ")].filter(Boolean))]})(a.chapter,a.requiredNeeds,a.extraClues).slice(0,i),o=[...m.map(b=>`${a.chapter.title} ${b} ${(a.chapter.sections||[]).join(" ")}`.trim()).filter(a=>!n.includes(a)).map(a=>({text:a,boost:2,source:"required-fact-evidence"})),...n.map(a=>({text:a,boost:2.4,source:"deep-retrieval"}))];return b.push(...(await (0,g.l$)(o,async b=>{var c;(0,g.Te)(a.signal);let e=await a.manager.search(a.projectRoot,b.text,{scope:"project",filters:{filePaths:a.scopedFilePaths,materialRoots:a.scopedMaterialRoots??(0,d.materialRootsOfFiles)(a.scopedFilePaths)},limit:j,weights:{keyword:.62,vector:.32,rewrite:.9,hybridBonus:.28},generationMode:!0});return(c={chapter:a.chapter,results:e.results,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,e.QR)(b.filter(a=>"required-fact-evidence"===a.source),{maxItems:Math.max(6,3*m.length),maxChars:18e3,preservePinned:!0}),...(0,e.QR)(b.filter(a=>"required-fact-evidence"!==a.source),{maxItems:k,maxChars:l,preservePinned:!0})]}function m(a){let b=a.chapter.sections?.length||0,c=(a.chapter.sections||[]).filter(b=>a.evidence.some(a=>(0,f.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,f.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}}function n(a){return a.filter(a=>a.risk.highRisk&&(0===a.requiredFactTotal?a.evidenceCount<8:a.requiredFactCovered<a.requiredFactTotal)).map(a=>({level:"warning",message:`系统知识库召回覆盖需复核:${a.chapterTitle}`,suggestion:`知识库总切片 ${a.risk.totalChunks},当前预加载 ${a.risk.loadedChunks}${a.risk.riskReason?`(${a.risk.riskReason})`:""},已启用深召回;事实覆盖 ${a.requiredFactCovered}/${a.requiredFactTotal},小节覆盖 ${a.sectionCovered}/${a.sectionTotal}。`}))}},85016:(a,b,c)=>{c.d(b,{D$:()=>g,NR:()=>l,WT:()=>k,fc:()=>m});var d=c(37047),e=c(22157);let f=[{anchor:"按工作包逐项说明施工内容",required:/工作包|逐项说明/u},{anchor:"本项目已确认资料",required:/已确认|确认资料|本项目资料/u},{anchor:"已确认的项目资料显示",required:/已确认|项目资料/u},{anchor:"根据已确认资料",required:/已确认/u},{anchor:"生成后事实反查未通过",required:/事实反查|反查/u},{anchor:"资料事实主表",required:/事实主表/u},{anchor:"事实卡",required:/事实卡/u},{anchor:"后台数据库记录",required:/后台数据库|后台记录/u},{anchor:"证据摘要中未包含",required:/证据摘要/u},{anchor:"本专业工程主要清单项落位如下",required:/清单项落位|落位如下/u},{anchor:"针对招标文件及补疑文件的技术要求进行专项落位",required:/专项落位/u},{anchor:"全文数据口径必须唯一",required:/数据口径|峰值口径|控制口径|口径必须唯一/u}],g=/工作包|事实卡|事实主表|后台数据库|落位|峰值口径|控制口径|数据口径/gu,h=/工作包|事实卡|事实主表|后台数据库|落位|峰值口径|控制口径|数据口径/u,i=/^\d+(?:\.\d+)*\s+\S+/u;function j(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 k(a){let b=[],c=[...new Set(a.match(g)||[])];c.length>0&&b.push({level:"error",severity:"blocker",category:"format",owner:"system",repairability:"llm_repairable",message:`正式正文仍包含后台内部术语“${c.join("”“")}”,需要按上下文语义改写为正式术语`,suggestion:"请结合语境改写:“拆除工程工作包”→“拆除工程”,“按工作包逐项说明”→“按专业工程逐项说明”;禁止出现生成系统后台概念。",provenance:{detectorId:"internal-terminology-anchor",fingerprint:(0,e.c6)(a)}});let h=a.split(/\r?\n/u).map(a=>a.trim()).filter(a=>!/^#{1,6}\s/u.test(a)&&!/^\s*\|/u.test(a)&&!(i.test(a)&&a.length<=40&&!/[。!?!?;;,,::]/.test(a))).flatMap(a=>a.split(/(?<=[。!?!?;;])/u).map(a=>a.trim())).filter(a=>a.length>=8&&a.length<=80).slice(0,200);if(0===h.length)return b;let k=(0,d.VN)(),[l,m]=await Promise.all([k.embedDocuments(h),k.embedDocuments(f.map(a=>a.anchor))]),n=[];for(let a=0;a<h.length;a+=1){let b=l[a];if(!b||0===b.length)continue;let c=h[a];if(f.some(a=>a.required.test(c))&&(Math.max(...m.map(a=>j(b,a)))>=.62&&n.push(c.slice(0,24)),n.length>=6))break}return n.length>0&&b.push({level:"error",severity:"blocker",category:"format",owner:"system",repairability:"llm_repairable",message:`正式正文疑似包含后台内部话术(语义锚点命中 ${n.length} 处):${n.map(a=>`“${a}…”`).join("、")}`,suggestion:"将内部话术(已确认资料/事实卡/工作包等生成系统概念)改写为面向评标人的正式表述,仅陈述项目事实与施工内容。",provenance:{detectorId:"internal-terminology-anchor",fingerprint:(0,e.c6)(a)}}),b}async function l(a){let b=a.split(/\r?\n/u),c=a=>{let b=a.trim();return!!(/^#{1,6}\s/u.test(b)||/^\s*\|/u.test(b))||i.test(b)&&b.length<=40&&!/[。!?!?;;,,::]/.test(b)},e=[];b.forEach((a,b)=>{if(c(a))return;let d=a.split(/(?<=[。!?!?;;])/u).map(a=>a.trim()).filter(a=>h.test(a)||a.length>=8&&a.length<=80&&f.some(b=>b.required.test(a)));d.length>0&&e.push({index:b,sentences:d})});let g=e.flatMap(a=>a.sentences);if(0===g.length)return a;let k=g.filter(a=>h.test(a)),l=g.filter(a=>!h.test(a)).slice(0,200),m=new Set(k);if(l.length>0){let a=(0,d.VN)(),[b,c]=await Promise.all([a.embedDocuments(l),a.embedDocuments(f.map(a=>a.anchor))]);l.forEach((a,d)=>{let e=b[d];e&&0!==e.length&&Math.max(...c.map(a=>j(e,a)))>=.62&&m.add(a)})}return 0===m.size?a:b.map(a=>{if(c(a))return a;let b=a;for(let a of m)b.includes(a)&&(b=b.split(a).join(""));return b}).join("\n")}function m(a){let b=0;return{markdown:a.split(/\r?\n/u).map(a=>{if(!a.trim()||!h.test(a)&&!a.includes("全文统一口径"))return a;let c=a.replace(/(职责|责任|分工|任务|措施|要求|管理|控制|工作|专项|标准|管控|验收|培训|教育|巡检|检查)落位/gu,"$1落实").replace(/(作业面|平面|现场|位置|点位|布局|空间|场地|工序|区域|临时设施|堆场|通道|道路|设备|设施|材料|构件|管线|照明|灯具|站房|楼层|部位)落位/gu,"$1布置").replace(/落位/gu,"落实").replace(/(\d+\s*人)峰值口径/gu,"$1上限").replace(/峰值口径/gu,"上限").replace(/控制口径/gu,"控制基准").replace(/数据口径/gu,"统计口径").replace(/全文统一口径/gu,"全篇取值一致");return c===a?a:(b+=1,c)}).join("\n"),fixedCount:b}}},85441:(a,b,c)=>{c.d(b,{F:()=>u,P:()=>s});var d=c(76760),e=c(44533),f=c(92808);let g=["project_overview","requirement_document","structured_data","scope_description"],h=["project_overview","requirement_document","addendum","structured_data","budget_cost","design_specification","resource_recommendation","schedule_quality_safety","scope_description","technical_specification","risk_constraints"];function i(a){let b=[];for(let c of a)for(let a of c.relativePath.split(/[\\/]/gu))a&&b.push(a);return b}function j(a){return/--|延期到|资料|附件|扫描|目录|汇总|打包|备份|\d{1,2}\.\d{1,2}/u.test(a)}function k(a){return m(a).replace(/^\d+(?:\.\d+)?[-_\s]*/u,"").replace(/^(?:延期到\d+(?:\.\d+)?[-_—–\s]*)+/u,"").trim()}function l(a){let b=new Set,c=[];for(let d of a)!d||b.has(d)||(b.add(d),c.push(d));return c}function m(a){return a.replace(/\.(?:pdf|docx?|xlsx?|xls|dwg)$/iu,"").trim()}function n(a){let b=new Set,c=[];for(let d of i(a)){let a=k(d);!(!/项目|任务|文档|合同|计划|方案|工程/iu.test(a)||a.length<6||b.has(a))&&(!j(a)||/\.\w+$/u.test(d))&&(b.add(a),c.push(a))}return c}function o(a,b){return 0===a.length?b:a.map(a=>m(a.fileName)).join("、")}function p(a,b,c){b.lastIndex=0;let d=new Set,e=[];for(let f of a.matchAll(b)){let a=(f[c]||"").trim();!a||d.has(a)||(d.add(a),e.push(a))}return b.lastIndex=0,e}function q(a){return a.replace(/\\/gu,"/").replace(/^\/+|\/+$/gu,"")}function r(a){let b=q(a).split("/").filter(Boolean);return b.length>1?b[0]:void 0}function s(a,b){let c=(0,e.Yy)(a),m=function(a,b){let c=a.filter(a=>"error"!==a.status),d=new Set((b?.boundFilePaths||[]).map(q)),e=c.filter(a=>d.has(q(a.relativePath)));if(e.length>0){let a=[...new Set(e.map(a=>r(a.relativePath)).filter(Boolean))],b=1===a.length?a[0]:void 0;return{files:e,reason:b?`模板绑定文件定位到资料组:${b}`:"使用模板显式绑定文件作为资料范围",ambiguous:!1}}let f=(b?.requirement||"").trim();if(f){let a=new Map;for(let b of c){let c=r(b.relativePath);if(!c)continue;let d=function(a,b){let c=0;for(let d of a.split(/(?:\s|_|-|—|(|)|\(|\)|【|】|\[|\]|、|,|,)+/u)){let a=d.trim();a.length>=2&&b.includes(a)&&(c+=1)}return c}(c,f);d>0&&a.set(c,(a.get(c)||0)+d)}let b=[...a.entries()].sort((a,b)=>b[1]-a[1])[0];if(b)return{files:c.filter(a=>r(a.relativePath)===b[0]),reason:`需求描述定位到资料组:${b[0]}`,ambiguous:!1}}let g=[...new Set(c.map(a=>r(a.relativePath)).filter(Boolean))];return 1===g.length?{files:c.filter(a=>r(a.relativePath)===g[0]),reason:`知识库单一资料组:${g[0]}`,ambiguous:!1}:{files:c,reason:g.length>1?`未指定资料组,检测到 ${g.length} 个资料组,已阻断生成避免跨项目污染`:"未检测到资料组,使用全部资料",ambiguous:g.length>1}}(c,b),s=m.files,t=function(){let a={};for(let b of h)a[b]=[];return a}(),u=new Map((b?.boundFileRoles||[]).map(a=>[q(a.filePath),a.roles]));for(let a of s){let b=q(a.relativePath),c=[...u.entries()].filter(([a])=>b.endsWith(a)||a.endsWith(b)).flatMap(([,a])=>a);for(let b of[...new Set([...function(a){let b=new Set((0,f.t0)(a,f.hW));return b.add("project_overview"),[...b]}(a.relativePath),...c])])t[b].push({filePath:a.relativePath,fileName:d.basename(a.relativePath),role:b,chunkCount:a.chunkCount})}let v=function(a){let b,c;for(let d of i(a)){let a=k(d);if(/项目|工程/iu.test(a)&&!(a.length<6)){if(/\.\w+$/u.test(d)){b||=a;continue}if(j(a)){c||=a.split(/--/u).filter(a=>/项目|工程/u.test(a)).sort((a,b)=>a.length-b.length)[0]||a;continue}return a}}return b||c||"当前知识库项目"}(s),w=function(a){for(let b of a){let a=b.relativePath.match(/\b\d{4}[A-Z]{2,}\d{4,}\b/u)?.[0];if(a)return a}}(s),x=function(a,b){let c=n(a),d=n(b),e=l(a.map(a=>a.relativePath).join("\n").match(/\b\d{4}[A-Z]{2,}\d{4,}\b/gu)||[]),f=l(a.map(a=>r(a.relativePath)).filter(Boolean)),g=[c.length>0,e.length>0,1===f.length];return{fingerprint:{projectNames:c,documentNos:e,fileGroups:f,confidence:g.filter(Boolean).length/g.length},contaminationCandidates:d.filter(a=>!c.includes(a))}}(s,c),y=function(a){let b=function(a){let b="";for(let c of a)b+=`${c.relativePath}