@customize-agent/server 4.0.59 → 4.0.60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +3 -3
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/6697.js +10 -10
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/api/assets/generated/preview.js +1 -1
- package/.next/server/pages/api/assets/generated.js +1 -1
- package/.next/server/pages/api/documents/export.js +1 -1
- package/.next/server/pages/api/documents/generate.js +1 -1
- package/.next/server/pages/api/documents/generated/[id].js +1 -1
- package/.next/server/pages/api/documents/generated.js +1 -1
- package/.next/server/pages/asset-library.html +1 -1
- package/.next/server/pages/context/long-term.html +1 -1
- package/.next/server/pages/context/short-term.html +1 -1
- package/.next/server/pages/document-roles.html +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/guide.html +1 -1
- package/.next/server/pages/index.html +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge/search.html +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/overview.html +1 -1
- package/.next/server/pages/prompt.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages-manifest.json +24 -24
- package/.next/static/{wqFguWd59uWhcZWSeWsai → GMk4Lx5iFiGoAK9ZtW0b0}/_buildManifest.js +1 -1
- package/.next/static/chunks/pages/documents-73cbf7cdbcc4e6f6.js +1 -0
- package/package.json +3 -3
- package/.next/static/chunks/pages/documents-5ce3bdfd70f29481.js +0 -1
- /package/.next/static/{wqFguWd59uWhcZWSeWsai → GMk4Lx5iFiGoAK9ZtW0b0}/_ssgManifest.js +0 -0
package/.next/BUILD_ID
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
GMk4Lx5iFiGoAK9ZtW0b0
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"ampDevFiles": [],
|
|
7
7
|
"lowPriorityFiles": [
|
|
8
|
-
"static/
|
|
9
|
-
"static/
|
|
8
|
+
"static/GMk4Lx5iFiGoAK9ZtW0b0/_buildManifest.js",
|
|
9
|
+
"static/GMk4Lx5iFiGoAK9ZtW0b0/_ssgManifest.js"
|
|
10
10
|
],
|
|
11
11
|
"rootMainFiles": [],
|
|
12
12
|
"rootMainFilesTree": {},
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
"static/chunks/506-93f730bc149d0dce.js",
|
|
102
102
|
"static/chunks/940-7cb66111eee2f9fb.js",
|
|
103
103
|
"static/chunks/499-d6bcc76195b28550.js",
|
|
104
|
-
"static/chunks/pages/documents-
|
|
104
|
+
"static/chunks/pages/documents-73cbf7cdbcc4e6f6.js"
|
|
105
105
|
],
|
|
106
106
|
"/guide": [
|
|
107
107
|
"static/chunks/webpack-77d10b4726f13aa5.js",
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"routes": {},
|
|
4
4
|
"dynamicRoutes": {},
|
|
5
5
|
"preview": {
|
|
6
|
-
"previewModeId": "
|
|
7
|
-
"previewModeSigningKey": "
|
|
8
|
-
"previewModeEncryptionKey": "
|
|
6
|
+
"previewModeId": "065f36c7cc5cd28673bad32560442ce5",
|
|
7
|
+
"previewModeSigningKey": "c0d5064808d0b17d86dce20eae0dc26bddc5877706bc5a3f6cca0d1ec4d198d2",
|
|
8
|
+
"previewModeEncryptionKey": "d45d0a0022e499c2159fccf0501509addc00285f880ee9f4bf214fe046b77ad3"
|
|
9
9
|
},
|
|
10
10
|
"notFoundRoutes": []
|
|
11
11
|
}
|
|
@@ -25,24 +25,24 @@ ${JSON.stringify(h).slice(0,12e3)}`);a&&!aZ(a)?h=a:g.push(`${b.fileRoleName} 结
|
|
|
25
25
|
|
|
26
26
|
${a.slice(-5e3)}`:a,c=b.replace(/\s+/gu," ");return{explicitStructure:/(?:目录|大纲|章节|结构|框架|按以下|如下结构|不要新增|不得新增|只写|仅写)/u.test(c),explicitSections:/(?:小节|二级标题|三级标题|一级标题|##|###|第[一二三四五六七八九十]+章|\d+[.、]\s*[^\s])/u.test(b),lengthLimit:/(?:\d+\s*(?:字|页|段)|控制在|不超过|不少于|篇幅|字数|页数)/u.test(c),wantsConcise:/(?:简洁|精简|简要|不要展开|无需展开|概述|摘要|少写|控制篇幅)/u.test(c),detailedInstructions:c.length>=900||/(?:必须包含|重点写|详细说明|逐项|分别说明|表格|清单|流程|步骤|标准|责任|频次|验收)/u.test(c),explicitFacts:/(?:\d+\s*(?:天|日|个月|万元|元|%|㎡|m2|米|m|人|台|套)|项目名称|工期|质量标准|地点|预算|编号)/u.test(c),styleConstraint:/(?:口吻|语气|风格|措辞|正式|承诺|汇报|方案|不要使用|禁止使用)/u.test(c)}}function a1(a){return a?({"knowledge-base":"知识库","document-readiness":"生成准备度检查","quality-repair":"质量补写","export-gate":"导出门禁","context-memory":"项目上下文","final-format":"正式排版","multimodal-files":"多模态文件理解","llm-json":"LLM 事实抽取","llm-review":"LLM 审查","document-workflow":"最终规范校验"})[a]:void 0}function a2(a,b={}){let c={executionVersion:2,title:{role_binding:"项目角色配置绑定",knowledge_retrieval:"知识库证据检索",context_recall:"项目上下文召回",file_understanding:"文件角色读取",fact_extraction:"事实抽取",chapter_generation:"章节正文生成",asset_generation:"生成资源处理",llm_review:"LLM 审查优化",validation:"内容优化与质量校验",formatting:"正式排版整理",export_ready:"导出就绪检查",reference:"资料增强"}[a.type],group:a.type,...a,...b};return{...c,roleName:c.roleName||a1(c.roleId),subtitle:c.subtitle||c.roleName||a1(c.roleId)}}function a3(a,b,c){let d=[b.title,...b.requiredFacts||[],...c?.requiredContents||[],...c?.evidenceNeeds||[],...c?.requirements.flatMap(a=>[a.title,...a.requiredContents,...a.evidenceNeeds])||[]].filter(Boolean);return a.flatMap(a=>a.facts.map(b=>({artifact:a,fact:b}))).filter(({fact:a})=>{let b=`${a.key}
|
|
27
27
|
${aW(a.value)}
|
|
28
|
-
${a.relatedChapterHints.join("\n")}`;return 0===d.length||d.some(c=>b.includes(c)||c.includes(a.key))}).slice(0,80)}function a4(a,b){return a.some(a=>a.forbidImageInsertion||"drawing_facts"===a.node.outputType)}function a5(a,b){return b?a.replace(/^!\[[^\]]*(?:图纸|drawing|cad|地图|平面|剖面|立面)[^\]]*\]\([^)]*\)\s*$/gimu,"").replace(/\n{3,}/gu,"\n\n"):a}let a6=/.*(?:知识库证据|文件角色|提示词角色|后台自动规范|规范包|事实字段|资料未提供|未检索到|待确认事项|证据来源|来源清单|校验结果).*(?:\n|$)/gu,a7=/^\s*(?:#{1,6}\s*)?(?:PDF\s*第\s*\d+\s*页|rule\b|文件[::]|片段[::]|来源[::]).*$/gimu,a8=/^\s*(?:[│┃┆┊┌┐└┘├┤┬┴┼─━╭╮╰╯]|[↓↑→←⇒⇨➡])+\s*$/gmu;function a9(a){return(function(a){let b=a.trim(),c=/^```(?:markdown|md)?\s*\n([\s\S]*?)\n```\s*$/iu.exec(b);return c?c[1].trim():a})(a).replace(/\b(m|㎡)\s*2\b/giu,"平方米").replace(/\bm\s*[²2]\b/giu,"平方米").replace(/\b(m|㎥)\s*3\b/giu,"立方米").replace(/\bm\s*[³3]\b/giu,"立方米").replace(/\bmm2\b/giu,"平方毫米").replace(/\bcm2\b/giu,"平方厘米").replace(/\bkm2\b/giu,"平方千米").replace(/\s*×\s*/gu,"\xd7").replace(/\s*≤\s*/gu,"≤").replace(/\s*≥\s*/gu,"≥").replace(/\s*±\s*/gu,"\xb1").replace(a6,"").replace(a7,"").replace(a8,"").replace(ao,"").replace(/^#\s+/gmu,"").replace(an,"").replace(/第\s*\d+\s*页\s*\/\s*共\s*\d+\s*页/gu,"").replace(/\|\s*(?:[/—-]|无|暂无|待定|待补充|N\/?A)\s*(?=\|)/giu,"| 结合项目资料及现场深化确认 ").replace(/见(?:招标文件|招标公告|图纸|设计文件|相关文件)/gu,"依据已提供招标资料和设计资料").replace(/按(?:图纸|设计要求|相关规范|有关规范|文件要求)/gu,"依据已提供设计资料和现行规范").replace(/满足(?:相关|有关)?要求/gu,"满足招标文件、设计文件及现行验收规范要求").replace(/\n{3,}/gu,"\n\n").trim()}let ba="你正在生成可直接交付的正式业务文档,不是分析报告、证据报告或系统调试报告。\n不得把“知识库、检索、文件角色、提示词角色、规范包、事实字段、项目基础事实候选、动态章节、缺失项、校验结果、资料未提供、未检索到”等后台流程话术写入正文。\n文档结构优先遵循用户需求、模板章节和绑定提示词;后台内容优化建议只用于提升事实覆盖和表达质量,不得新增、删除或重排章节。\n资料信息应内化为正式正文表达;除非用户要求来源追溯章节,否则不要单列系统证据清单。\n表格、标题和公式必须使用 Markdown/导出友好的写法,避免 ASCII 流程图和容易导致导出异常的符号组合。\n正式正文不得把原始公告、规则条款、说明性附件或系统过程内容误作为章节标题或目录项。\n如绑定资料中存在项目基础事实,应在相关章节自然吸收;如模板或用户要求表格化呈现,表格前只保留必要引导语,不得逐项重复叙述同一批字段。\n正文必须以当前模板、用户要求和绑定资料中的真实对象、范围、数量、时间、规格、标准、责任和约束为依据,不得自由发挥。\n同一规则、方案、流程或措施适用于多个对象、区域、主体、片区或分项时,必须逐项覆盖适用范围和对应依据,不得只写一个代表性对象后泛化到全部范围。\n不得使用“本节”“本章将”“以下从”“以下内容”等模板化前缀;标题后直接进入本章对象、关键事实、处理要求、控制措施和结果闭环。\n正文二级小节下如需设置三级小节,必须使用“#### 章号.节号.序号 标题”,例如“#### 2.2.1 关键事项”;不得用无编号独立加粗行表示三级小节;三级小节不纳入目录。\n资料不足或不同来源数值冲突时,应保持审慎并提示复核口径,不得编造精确数量。\n语言应正式、专业、克制,适合直接导出交付。";function bb(a,b,c,d,e){let f=[];for(let b of c)for(let c of(a.includes(b.title)||f.push(`章节计划建议未体现:${b.title}`),b.requiredContents.slice(0,12)))c&&!a.includes(c)&&f.push(`${b.title} 未覆盖必写内容:${c}`);for(let d of b){let b=c.find(a=>a.title===d.title),e=b?.minWords||1e3;for(let b of(d.content.length<e&&f.push(`${d.title} 内容深度不足:${d.content.length}/${e}`),(d.sections||[]).length<3&&f.push(`${d.title} 二级小节少于 3 个,必须由模型结合章节主题和项目资料补齐 3-6 个正式二级小节`),d.sections||[]))b&&!a.includes(b)&&f.push(`${d.title} 缺少目录小节:${b}`)}for(let b of d){let c=b.facts.slice(0,5).map(a=>aW(a.value).slice(0,24)).filter(a=>a.length>=6);c.length>0&&!c.some(b=>a.includes(b))&&f.push(`未体现 ${b.node.fileRoleName} 的关键读取结果`)}return e&&/!\[[^\]]*\]\([^)]*\)/iu.test(a)&&f.push("正文包含不应插入的图片"),/\b(?:m\s*[²2]|m\s*[³3]|mm2|cm2|km2)\b/iu.test(a)&&f.push("正文包含导出不友好的计量单位写法"),[...new Set(f)].slice(0,40)}function bc(a){return/阻断|错误|正文缺少|缺少配置小节|缺少必要的正式表格|事实一致性|其他项目|项目编号|项目名称|清单\/图纸精确参数使用不足|正文未体现工程量清单|正文未体现图纸|二级小节少于|三级小节|目录|量化|数值|单位|图片/u.test(a)}function bd(a){let b=[];for(let c of(RegExp(`^##\\s+${a.chapter.title.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}`,"mu").test(a.content)||b.push("正文缺少章节标题"),a.chapter.sections||[])){let d=c.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=a.content.match(RegExp(`^###\\s+${d}\\s*\\n([\\s\\S]*?)(?=^###\\s+|$)`,"mu"));e?180>bA(e[1])&&b.push(`配置小节正文过短:${c}`):b.push(`缺少配置小节:${c}`)}for(let c of(bA(a.content)<Math.floor(.65*a.targetWords)&&b.push("正文篇幅明显低于目标"),a6.lastIndex=0,(a6.test(a.content)||/知识库|检索|角色节点|事实字段|校验结果/u.test(a.content))&&b.push("正文包含后台流程话术"),/资料未提供|满足相关要求|结合实际情况|按(?:相关|有关|规范|规定|设计)要求/u.test(a.content)&&b.push("正文存在空泛占位表达"),a.missingFacts.slice(0,8)))c&&!a.content.includes(c)&&b.push(`requiredFacts 未明显覆盖:${c}`);return[...new Set(b)].slice(0,10)}async function be(a){let b=await bt(["你是章节局部修复专家。只修复给定章节中明确存在的问题,不得改写其他章节,不得压缩正文,不得改变用户/模板结构。",ba,a.forbidDrawingImages?"图片/图纸类资料只作为文本事实来源,禁止插入图片或 Markdown 图片语法。":"","必须保留本章节标题和已有小节;如确需补充,只能在相关小节内追加或替换有问题的局部段落。","不得返回整篇文档;只返回修复后的本章节 Markdown。",a.promptTexts].filter(Boolean).join("\n\n"),[`模板:${a.template.name}`,`章节:${a.chapter.title}`,a.requirement?`用户要求:${a.requirement}`:"",`需要局部修复的问题:
|
|
28
|
+
${a.relatedChapterHints.join("\n")}`;return 0===d.length||d.some(c=>b.includes(c)||c.includes(a.key))}).slice(0,80)}function a4(a,b){return a.some(a=>a.forbidImageInsertion||"drawing_facts"===a.node.outputType)}function a5(a,b){return b?a.replace(/^!\[[^\]]*(?:图纸|drawing|cad|地图|平面|剖面|立面)[^\]]*\]\([^)]*\)\s*$/gimu,"").replace(/\n{3,}/gu,"\n\n"):a}let a6=/.*(?:知识库证据|文件角色|提示词角色|后台自动规范|规范包|事实字段|资料未提供|未检索到|待确认事项|证据来源|来源清单|校验结果).*(?:\n|$)/gu,a7=/^\s*(?:#{1,6}\s*)?(?:PDF\s*第\s*\d+\s*页|rule\b|文件[::]|片段[::]|来源[::]).*$/gimu,a8=/^\s*(?:[│┃┆┊┌┐└┘├┤┬┴┼─━╭╮╰╯]|[↓↑→←⇒⇨➡])+\s*$/gmu;function a9(a){return(function(a){let b=a.trim(),c=/^```(?:markdown|md)?\s*\n([\s\S]*?)\n```\s*$/iu.exec(b);return c?c[1].trim():a})(a).replace(/\b(m|㎡)\s*2\b/giu,"平方米").replace(/\bm\s*[²2]\b/giu,"平方米").replace(/\b(m|㎥)\s*3\b/giu,"立方米").replace(/\bm\s*[³3]\b/giu,"立方米").replace(/\bmm2\b/giu,"平方毫米").replace(/\bcm2\b/giu,"平方厘米").replace(/\bkm2\b/giu,"平方千米").replace(/\s*×\s*/gu,"\xd7").replace(/\s*≤\s*/gu,"≤").replace(/\s*≥\s*/gu,"≥").replace(/\s*±\s*/gu,"\xb1").replace(a6,"").replace(a7,"").replace(a8,"").replace(ao,"").replace(/^#\s+/gmu,"").replace(an,"").replace(/第\s*\d+\s*页\s*\/\s*共\s*\d+\s*页/gu,"").replace(/\|\s*(?:[/—-]|无|暂无|待定|待补充|N\/?A)\s*(?=\|)/giu,"| 结合项目资料及现场深化确认 ").replace(/见(?:招标文件|招标公告|图纸|设计文件|相关文件)/gu,"依据已提供招标资料和设计资料").replace(/按(?:图纸|设计要求|相关规范|有关规范|文件要求)/gu,"依据已提供设计资料和现行规范").replace(/满足(?:相关|有关)?要求/gu,"满足招标文件、设计文件及现行验收规范要求").replace(/\n{3,}/gu,"\n\n").trim()}let ba="你正在生成可直接交付的正式业务文档,不是分析报告、证据报告或系统调试报告。\n不得把“知识库、检索、文件角色、提示词角色、规范包、事实字段、项目基础事实候选、动态章节、缺失项、校验结果、资料未提供、未检索到”等后台流程话术写入正文。\n文档结构优先遵循用户需求、模板章节和绑定提示词;后台内容优化建议只用于提升事实覆盖和表达质量,不得新增、删除或重排章节。\n资料信息应内化为正式正文表达;除非用户要求来源追溯章节,否则不要单列系统证据清单。\n表格、标题和公式必须使用 Markdown/导出友好的写法,避免 ASCII 流程图和容易导致导出异常的符号组合。\n正式正文不得把原始公告、规则条款、说明性附件或系统过程内容误作为章节标题或目录项。\n如绑定资料中存在项目基础事实,应在相关章节自然吸收;如模板或用户要求表格化呈现,表格前只保留必要引导语,不得逐项重复叙述同一批字段。\n正文必须以当前模板、用户要求和绑定资料中的真实对象、范围、数量、时间、规格、标准、责任和约束为依据,不得自由发挥。\n同一规则、方案、流程或措施适用于多个对象、区域、主体、片区或分项时,必须逐项覆盖适用范围和对应依据,不得只写一个代表性对象后泛化到全部范围。\n不得使用“本节”“本章将”“以下从”“以下内容”等模板化前缀;标题后直接进入本章对象、关键事实、处理要求、控制措施和结果闭环。\n正文二级小节下如需设置三级小节,必须使用“#### 章号.节号.序号 标题”,例如“#### 2.2.1 关键事项”;不得用无编号独立加粗行表示三级小节;三级小节不纳入目录。\n资料不足或不同来源数值冲突时,应保持审慎并提示复核口径,不得编造精确数量。\n语言应正式、专业、克制,适合直接导出交付。";function bb(a,b,c,d,e){let f=[];for(let b of c)for(let c of(a.includes(b.title)||f.push(`章节计划建议未体现:${b.title}`),b.requiredContents.slice(0,12)))c&&!a.includes(c)&&f.push(`${b.title} 未覆盖必写内容:${c}`);for(let d of b){let b=c.find(a=>a.title===d.title),e=b?.minWords||1e3;for(let b of(d.content.length<e&&f.push(`${d.title} 内容深度不足:${d.content.length}/${e}`),(d.sections||[]).length<3&&f.push(`${d.title} 二级小节少于 3 个,必须由模型结合章节主题和项目资料补齐 3-6 个正式二级小节`),d.sections||[]))b&&!a.includes(b)&&f.push(`${d.title} 缺少目录小节:${b}`)}for(let b of d){let c=b.facts.slice(0,5).map(a=>aW(a.value).slice(0,24)).filter(a=>a.length>=6);c.length>0&&!c.some(b=>a.includes(b))&&f.push(`未体现 ${b.node.fileRoleName} 的关键读取结果`)}return e&&/!\[[^\]]*\]\([^)]*\)/iu.test(a)&&f.push("正文包含不应插入的图片"),/\b(?:m\s*[²2]|m\s*[³3]|mm2|cm2|km2)\b/iu.test(a)&&f.push("正文包含导出不友好的计量单位写法"),[...new Set(f)].slice(0,40)}function bc(a){return/阻断|错误|正文缺少|缺少配置小节|缺少必要的正式表格|事实一致性|其他项目|项目编号|项目名称|清单\/图纸精确参数使用不足|正文未体现工程量清单|正文未体现图纸|二级小节少于|三级小节|目录|量化|数值|单位|图片/u.test(a)}function bd(a){let b=[];for(let c of(RegExp(`^##\\s+${a.chapter.title.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}`,"mu").test(a.content)||b.push("正文缺少章节标题"),a.chapter.sections||[])){let d=c.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=a.content.match(RegExp(`^###\\s+${d}\\s*\\n([\\s\\S]*?)(?=^###\\s+|$)`,"mu"));e?180>bA(e[1])&&b.push(`配置小节正文过短:${c}`):b.push(`缺少配置小节:${c}`)}for(let c of(bA(a.content)<Math.floor(.65*a.targetWords)&&b.push("正文篇幅明显低于目标"),a6.lastIndex=0,(a6.test(a.content)||/知识库|检索|角色节点|事实字段|校验结果/u.test(a.content))&&b.push("正文包含后台流程话术"),/资料未提供|满足相关要求|结合实际情况|按(?:相关|有关|规范|规定|设计)要求/u.test(a.content)&&b.push("正文存在空泛占位表达"),a.missingFacts.slice(0,8)))c&&!a.content.includes(c)&&b.push(`requiredFacts 未明显覆盖:${c}`);return[...new Set(b)].slice(0,10)}async function be(a){b8(a.signal);let b=await bt(["你是章节局部修复专家。只修复给定章节中明确存在的问题,不得改写其他章节,不得压缩正文,不得改变用户/模板结构。",ba,a.forbidDrawingImages?"图片/图纸类资料只作为文本事实来源,禁止插入图片或 Markdown 图片语法。":"","必须保留本章节标题和已有小节;如确需补充,只能在相关小节内追加或替换有问题的局部段落。","不得返回整篇文档;只返回修复后的本章节 Markdown。",a.promptTexts].filter(Boolean).join("\n\n"),[`模板:${a.template.name}`,`章节:${a.chapter.title}`,a.requirement?`用户要求:${a.requirement}`:"",`需要局部修复的问题:
|
|
29
29
|
${a.issues.map(a=>`- ${a}`).join("\n")}`,a.chapter.evidence.length?`本章证据摘要:
|
|
30
|
-
${av(au({id:a.chapter.id,title:a.chapter.title,purpose:a.chapter.title,queries:[],requiredFacts:[]},a.chapter.evidence))}`:"","当前章节 Markdown:",a.chapter.content].filter(Boolean).join("\n\n"),!1,{maxTokens:Math.min(12e3,Math.max(4e3,Math.ceil(1.4*bA(a.chapter.content)))),temperature:.2});return
|
|
30
|
+
${av(au({id:a.chapter.id,title:a.chapter.title,purpose:a.chapter.title,queries:[],requiredFacts:[]},a.chapter.evidence))}`:"","当前章节 Markdown:",a.chapter.content].filter(Boolean).join("\n\n"),!1,{maxTokens:Math.min(12e3,Math.max(4e3,Math.ceil(1.4*bA(a.chapter.content)))),temperature:.2,signal:a.signal});return(b8(a.signal),b&&!(b.length<.75*a.chapter.content.length)&&b.includes(a.chapter.title.replace(/^第[一二三四五六七八九十百千万]+章\s*/u,"").slice(0,6)))?a9(a5(b,a.forbidDrawingImages)):a.chapter.content}async function bf(a){let b=a.issues.filter(bc);if(0===b.length)return{markdown:a.markdown,chapters:a.chapters,stage:void 0};let c=0,d=[],e=0;for(let f of a.chapters){b8(a.signal);let g=function(a,b){let c=b.filter(bc),d=new Set(a.sections||[]),e=`${a.title}
|
|
31
31
|
${a.sections?.join("\n")||""}
|
|
32
|
-
${a.content.slice(0,4e3)}`;return c.filter(b=>b.includes(a.title)||[...d].some(a=>b.includes(a))||/图片|三级小节|目录|表格|量化|数值|单位|事实/u.test(b)&&/!\[|####|\*\*|\||按设计要求|按规范要求|m\s*[²2]|mm2|cm2|km2/u.test(e))}(f,b);if(0===g.length||e>=5){d.push(f);continue}e+=1;let h=await be({template:a.template,chapter:f,issues:g.slice(0,6),promptTexts:a.promptTexts,requirement:a.requirement,forbidDrawingImages:a.forbidDrawingImages});h!==f.content&&(c+=1),d.push({...f,content:h})}let f=c>0?`已精准修复 ${c} 个存在阻断/结构/事实问题的章节,未进行全文重写`:`已完成质量检查,未定位到可安全局部修复的阻断问题:${b.slice(0,5).join(";")}`;return{markdown:a.markdown,chapters:d,stage:{type:"llm_review",roleId:"quality-repair",status:"success",message:f}}}function bg(a){if(a.projectRoleConfigId)return a.projectRoleConfigId;let b=`${a.name} ${a.category} ${a.outputTitle} ${a.description}`;if(function(a){let b=(0,o.V)().reviewChapterTemplateMatchers;if(0===b.length)return!1;let c=`${a.name} ${a.category} ${a.outputTitle}`;return b.some(a=>RegExp(a,"iu").test(c))}(a)||/施工组织设计|施工方案|技术标.*施工|施工.*技术标/iu.test(b))return"construction-bid-sgzsj-professional"}function bh(a){let b=bg(a);return b?(0,n.Mu)(b):void 0}function bi(a){return/tender|response|requirements|招标|评审|实质/u.test(a)?["tender_document","technical_specification","schedule_quality_safety"]:/boq|清单|scope|工程量/u.test(a)?["bill_of_quantities","construction_scope","control_price"]:/drawing|drawings|图纸|design/u.test(a)?["drawings"]:/schedule|quality|safety|工期|质量|安全/u.test(a)?["schedule_quality_safety","technical_specification"]:/risk|constraints|现场|重点|难点/u.test(a)?["risk_constraints","addendum","tender_document"]:/material|equipment|brand|材料|设备|品牌/u.test(a)?["brand_recommendation","bill_of_quantities","technical_specification"]:/enterprise|reference|经验|体系/u.test(a)?["project_overview","technical_specification"]:["project_overview"]}function bj(a){let b=new Map;for(let c of a)b.set(c.filePath,[...new Set([...b.get(c.filePath)||[],...bi(c.roleId)])]);return[...b.entries()].map(([a,b])=>({filePath:a,roles:b}))}function bk(a,b){let c=bh(a);if(!c)return[];let d=[];for(let a of[...c.fileRoles].sort((a,b)=>a.order-b.order))for(let c of bi(a.roleId).flatMap(a=>b.materialInventory[a]||[]).slice(0,20))d.push({roleId:a.roleId,filePath:c.filePath});let e=new Set;return d.filter(a=>{let b=`${a.roleId}
|
|
32
|
+
${a.content.slice(0,4e3)}`;return c.filter(b=>b.includes(a.title)||[...d].some(a=>b.includes(a))||/图片|三级小节|目录|表格|量化|数值|单位|事实/u.test(b)&&/!\[|####|\*\*|\||按设计要求|按规范要求|m\s*[²2]|mm2|cm2|km2/u.test(e))}(f,b);if(0===g.length||e>=5){d.push(f);continue}e+=1;let h=await be({template:a.template,chapter:f,issues:g.slice(0,6),promptTexts:a.promptTexts,requirement:a.requirement,forbidDrawingImages:a.forbidDrawingImages,signal:a.signal});h!==f.content&&(c+=1),d.push({...f,content:h})}let f=c>0?`已精准修复 ${c} 个存在阻断/结构/事实问题的章节,未进行全文重写`:`已完成质量检查,未定位到可安全局部修复的阻断问题:${b.slice(0,5).join(";")}`;return{markdown:a.markdown,chapters:d,stage:{type:"llm_review",roleId:"quality-repair",status:"success",message:f}}}function bg(a){if(a.projectRoleConfigId)return a.projectRoleConfigId;let b=`${a.name} ${a.category} ${a.outputTitle} ${a.description}`;if(function(a){let b=(0,o.V)().reviewChapterTemplateMatchers;if(0===b.length)return!1;let c=`${a.name} ${a.category} ${a.outputTitle}`;return b.some(a=>RegExp(a,"iu").test(c))}(a)||/施工组织设计|施工方案|技术标.*施工|施工.*技术标/iu.test(b))return"construction-bid-sgzsj-professional"}function bh(a){let b=bg(a);return b?(0,n.Mu)(b):void 0}function bi(a){return/tender|response|requirements|招标|评审|实质/u.test(a)?["tender_document","technical_specification","schedule_quality_safety"]:/boq|清单|scope|工程量/u.test(a)?["bill_of_quantities","construction_scope","control_price"]:/drawing|drawings|图纸|design/u.test(a)?["drawings"]:/schedule|quality|safety|工期|质量|安全/u.test(a)?["schedule_quality_safety","technical_specification"]:/risk|constraints|现场|重点|难点/u.test(a)?["risk_constraints","addendum","tender_document"]:/material|equipment|brand|材料|设备|品牌/u.test(a)?["brand_recommendation","bill_of_quantities","technical_specification"]:/enterprise|reference|经验|体系/u.test(a)?["project_overview","technical_specification"]:["project_overview"]}function bj(a){let b=new Map;for(let c of a)b.set(c.filePath,[...new Set([...b.get(c.filePath)||[],...bi(c.roleId)])]);return[...b.entries()].map(([a,b])=>({filePath:a,roles:b}))}function bk(a,b){let c=bh(a);if(!c)return[];let d=[];for(let a of[...c.fileRoles].sort((a,b)=>a.order-b.order))for(let c of bi(a.roleId).flatMap(a=>b.materialInventory[a]||[]).slice(0,20))d.push({roleId:a.roleId,filePath:c.filePath});let e=new Set;return d.filter(a=>{let b=`${a.roleId}
|
|
33
33
|
${a.filePath}`;return!e.has(b)&&(e.add(b),!0)})}function bl(a){let b=bh(a);if(b){let a=(0,n.XB)("prompt");return[...b.promptRoles].sort((a,b)=>a.order-b.order).map(b=>a.find(a=>a.id===b.roleId)).filter(a=>!!a).flatMap(a=>(a.resourceIds?.length?a.resourceIds:a.resourceId?[a.resourceId]:[]).map(b=>({promptId:b,roleId:a.id})))}return a.promptBindings?.length?a.promptBindings:(a.promptIds??[]).map(a=>({promptId:a,roleId:"chapter_generation"}))}function bm(a){return a.fileBindings?.length?a.fileBindings:(a.boundFilePaths??[]).map(a=>({filePath:a,roleId:"project_fact"}))}function bn(a,b){let c=e.isAbsolute(b)?b:e.join(a,b),d=e.isAbsolute(b)?e.relative(a,b):b;return[b,c,d,e.join(a,d)]}function bo(a,b,c){return 0===c.size||bn(a,b).some(a=>c.has(a))}function bp(a,b){return new Set(b.flatMap(b=>bn(a,b.filePath)))}function bq(a,b){let c=new Map((0,n.XB)("prompt").map(a=>[a.id,a.executionType||"reference"]));return ag(a).filter(a=>b.includes(c.get(a.roleId)||"reference")).map(a=>`## [${a.roleId}] ${a.name}
|
|
34
34
|
${a.content}`).join("\n\n")}function br(a,b){let c=(0,j.resolveProtocol)(a,b);return"anthropic"===c?"anthropic":"google"===c?"google":"ollama"===c?"ollama":"openrouter"===c?"openrouter":"openai"}function bs(){let a=(0,m.I)().load(),b=a.models.reasoning.active||a.models.action.active||a.models.reader.active,c=[...a.models.reasoning.list,...a.models.action.list,...a.models.reader.list].find(a=>a.name===b);if(!c)return;let d=a.providers[c.provider];if(d)return{model:c,provider:d}}async function bt(a,b,c=!1,d={}){try{let e=bs();if(!e)return;let{model:f,provider:g}=e,h=aK({provider:f.provider,model:f.name,baseUrl:g.baseUrl,directEndpoint:g.directEndpoint,protocol:g.protocol,apiKeyHash:g.apiKey?aK(g.apiKey):""}),j=aJ.get(h);return j||(j=(0,i.createProvider)(br(f.provider,g),{baseUrl:g.baseUrl,apiKey:g.apiKey,modelName:f.name,directEndpoint:g.directEndpoint}),aJ.set(h,j)),(await j.chat([{role:"system",content:c?`${a}
|
|
35
|
-
只返回 JSON,不要返回 markdown。`:a},{role:"user",content:b}],{temperature:d.temperature??.3*!c,maxTokens:d.maxTokens,signal:d.signal})).content.trim()}catch{return}}async function bu(a,b,c){let d=new AbortController,e=!1,f=()=>d.abort();if(c?.aborted)throw Error("用户中止");c?.addEventListener("abort",f,{once:!0});let g=setTimeout(()=>{e=!0,d.abort()},b);try{let b=await a(d.signal);if(c?.aborted)throw Error("用户中止");if(d.signal.aborted&&e)return null;return b}catch(a){if(c?.aborted)throw Error("用户中止",{cause:a});if(d.signal.aborted&&e)return null;throw a}finally{clearTimeout(g),c?.removeEventListener("abort",f)}}async function bv(a,b){let
|
|
35
|
+
只返回 JSON,不要返回 markdown。`:a},{role:"user",content:b}],{temperature:d.temperature??.3*!c,maxTokens:d.maxTokens,signal:d.signal})).content.trim()}catch(a){if(d.signal?.aborted)throw Error("用户中止",{cause:a});return}}async function bu(a,b,c){let d=new AbortController,e=!1,f=()=>d.abort();if(c?.aborted)throw Error("用户中止");c?.addEventListener("abort",f,{once:!0});let g=setTimeout(()=>{e=!0,d.abort()},b);try{let b=await a(d.signal);if(c?.aborted)throw Error("用户中止");if(d.signal.aborted&&e)return null;return b}catch(a){if(c?.aborted)throw Error("用户中止",{cause:a});if(d.signal.aborted&&e)return null;throw a}finally{clearTimeout(g),c?.removeEventListener("abort",f)}}async function bv(a,b,c={}){let d=await bt(a,b,!0,{signal:c.signal});if(d)try{let a=d.replace(/^```json\s*/u,"").replace(/^```\s*/u,"").replace(/```$/u,"").trim();return JSON.parse(a)}catch{return}}async function bw(a,b,c){let f=bs();if(!f?.provider.capabilities?.fileUnderstanding&&!f?.provider.capabilities?.imageUnderstanding)return{notes:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"当前模型未开启文件理解/图片理解能力"}};b8(c);let g=(0,i.createProvider)(br(f.model.provider,f.provider),{baseUrl:f.provider.baseUrl,apiKey:f.provider.apiKey,modelName:f.model.name,directEndpoint:f.provider.directEndpoint});if(!g.understandFiles)return{notes:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"当前 Provider 未实现文件理解接口"}};let h=[...new Set(b.map(a=>a.filePath).filter(a=>/\.(png|jpe?g|webp|pdf|docx|xlsx)$/iu.test(a)))].slice(0,6).map(b=>{let c=e.join(a,"knowledgeBase",b);return d.existsSync(c)?{name:e.basename(b),mimeType:function(a){let b=e.extname(a).toLowerCase();return".png"===b?"image/png":".jpg"===b||".jpeg"===b?"image/jpeg":".webp"===b?"image/webp":".pdf"===b?"application/pdf":".docx"===b?"application/vnd.openxmlformats-officedocument.wordprocessingml.document":".xlsx"===b?"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":"application/octet-stream"}(b),data:d.readFileSync(c)}:void 0}).filter(Boolean);if(0===h.length)return{notes:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"没有可发送给多模态模型的参考文件"}};try{b8(c);let a=await g.understandFiles(h,"请阅读这些参考图片/文件,提炼可用于文档生成和审查的事实、视觉要点、地图信息和封面设计建议。请用中文要点输出。",{maxTokens:1200,signal:c});b8(c);let b=a.content.trim();return{notes:b?[b]:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:b?"success":"fallback",message:b?`已理解 ${h.length} 个多模态参考文件`:"多模态模型未返回有效文件理解结果"}}}catch{return{notes:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:"fallback",message:"文件理解调用失败,继续使用本地解析内容"}}}}async function bx(a,b,c,d,e){let f=[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"LLM JSON 抽取未启用或无可用模型"}],g=a.slice(0,24).map(a=>`文件:${a.filePath}
|
|
36
36
|
角色:${a.roleId||""}
|
|
37
37
|
处理:${a.processingType||""}
|
|
38
|
-
内容:${a.content.slice(0,1200)}`).join("\n\n---\n\n");if(!
|
|
38
|
+
内容:${a.content.slice(0,1200)}`).join("\n\n---\n\n");if(!g.trim())return{facts:[],stages:f};b8(e);let h=aF(c,d),i=h.map(a=>`- id=${a.id} name=${a.name} type=auto required=${a.required} sourceRoleIds=${a.sourceRoleIds.join(",")||"不限"} hint=${a.extractionHint||"无"}`).join("\n"),j=await bv(b||"你是文档事实抽取器。",`请严格按下面的动态事实 schema 从资料中抽取事实。只抽取资料明确支持的内容;如果字段限定 sourceRoleIds,必须优先来自对应文件角色;事实取舍和冲突处理遵循规范包字段说明、文件角色和提示词角色配置。
|
|
39
39
|
返回 {"facts":[{"fieldId":"...","fieldName":"...","key":"...","value":"...","sourceFile":"...","roleId":"...","processingType":"project_fact","confidence":0.8}]}。
|
|
40
40
|
|
|
41
41
|
动态事实 schema:
|
|
42
|
-
${
|
|
42
|
+
${i}
|
|
43
43
|
|
|
44
44
|
资料:
|
|
45
|
-
${
|
|
45
|
+
${g}`,{signal:e});return(b8(e),j?.facts?.length)?{facts:j.facts.filter(a=>a.key&&a.value).map(a=>{let b=h.find(b=>b.id===a.fieldId||b.name===a.fieldName||b.name===a.key);return{key:b?.name||a.key,fieldId:b?.id||a.fieldId,fieldName:b?.name||a.fieldName,value:aW(a.value),sourceFile:a.sourceFile||"",roleId:a.roleId||"llm",processingType:a.processingType,confidence:a.confidence??.8,sourceRef:{filePath:a.sourceFile||"",roleId:a.roleId||"llm",processingType:a.processingType}}}),stages:[{type:"fact_extraction",roleId:"llm-json",status:"success",message:`LLM 按动态 schema 抽取 ${j.facts.length} 条事实`}]}:{facts:[],stages:f}}function by(a){return/用户要求|出现禁用文本|资料未提供|导出|临时|无效|占位|生成未完成|低于目标页数|低于目标字数|文档预算未达成|正文篇幅低于目标|兜底|章节生成失败|大模型未能|重新生成|缺少配置小节|缺少必要的正式表格|正文缺少章节标题|其他项目|项目编号|项目名称|事实一致性冲突|工程专项资料角色缺失|章节缺少证据|文档质量基准评分未达标/iu.test(a.message)}function bz(a,b){return Math.ceil(bA(a)/bB(b))}function bA(a){return a.replace(/<[^>]+>/gu,"").replace(/\s+/gu,"").length}function bB(a){let b=Number(String(a&&"typography"in a&&a.typography?.bodySize||"").replace(/[^\d.]/gu,""))||14,c=Number(String(a&&"typography"in a&&a.typography?.lineHeight||"").replace(/[^\d.]/gu,""))||22;return b>=14&&c>=22?900:1050}function bC(a){let b=a.trim();if(/^\d+(?:\.\d+)?$/u.test(b))return Number(b);let c={零:0,一:1,二:2,两:2,三:3,四:4,五:5,六:6,七:7,八:8,九:9};if("十"===b)return 10;let d=/^([一二两三四五六七八九])?十([一二三四五六七八九])?$/u.exec(b);if(d)return(d[1]?c[d[1]]:1)*10+(d[2]?c[d[2]]:0)}function bD(a){let b=a.title+a.purpose;return/方法|施工|技术|质量|安全|进度|资源|保障|措施|部署|方案/u.test(b)?1.3:/概况|结语|附录/u.test(b)?.75:1}function bE(a){return a.split(/\n{2,}/u).filter(a=>/\|.+\|/u.test(a)&&/\n\s*\|?\s*:?-{3,}:?/u.test(a))}function bF(a,b){return`${a.name}:${b}`}function bG(a){let b=[...a.matchAll(/^##\s+第[一二三四五六七八九十百]+章\s+.+$/gmu)],c=[];for(let d=1;d<b.length;d+=1){let e=b[d].index||0,f=b[d+1]?.index??a.length,g=a.slice(e,f);/项目基本信息表|招标公告项目基本信息|^###\s*项目基本信息\s*$/mu.test(g)&&c.push({level:"warning",message:`第 ${d+1} 章可能重复出现项目基本信息`,suggestion:"如该信息与本章主题无关,建议合并到更合适的概况类章节,避免重复铺陈。"})}if(b.length>0){let d=b[0].index||0,e=b[1]?.index??a.length,f=a.slice(d,e),g=f.search(/项目基本信息表|招标公告项目基本信息|\|\s*(?:字段|项目|内容)\s*\|/u);if(g>0){let a=f.slice(0,g).replace(/^##\s+.+$/gmu,"").replace(/^###\s+.+$/gmu,""),b=["项目名称","项目编号","实施地点","建设地点","建设单位","招标人","实施范围","招标范围","工期周期","计划工期","质量标准"].filter(b=>RegExp(`${b}\\s*[::]`,"u").test(a));b.length>=3&&c.push({level:"warning",message:`项目基本信息表前重复叙述字段:${b.join("、")}`,suggestion:"项目基本信息已表格化时,表格前只保留一句引导语,不要重复逐项叙述项目名称、编号、地点、工期、质量等字段。"})}}return c}function bH(a){let b=[],c=["本节","本章将","以下从","以下内容","综上所述"].filter(b=>a.includes(b));return c.length>0&&b.push({level:"warning",message:`存在模板化前缀或套话:${c.join("、")}`,suggestion:"请删除“本节/本章将/以下从”等前缀,标题后直接进入施工对象、工艺动作、控制措施、检查验收和责任闭环。"}),b}function bI(a){return a.filter(a=>(a.sections||[]).length<3).map(a=>({level:"error",message:`${a.title} 二级小节少于 3 个`,suggestion:"请由模型结合章节主题、项目资料和专业写作需要补齐 3-6 个正式二级小节,不得使用代码默认小节。"}))}function bJ(a){let b=/^##\s+目录\s*$([\s\S]*?)(?=\n<div class="page-break"><\/div>|\n##\s+)/mu.exec(a);if(!b)return[{level:"error",message:"缺少目录页",suggestion:"请在封面后生成“## 目录”,并按一级章父级、二级小节子级组织。"}];let c=b[1].split(/\r?\n/u).filter(a=>a.trim()).filter(a=>/^\s*\d+\.\d+\s+\S/u.test(a));return c.length>0&&c.every(a=>!/^\s{2,}\d+\.\d+\s+\S/u.test(a))?[{level:"error",message:"目录二级小节未作为子级缩进",suggestion:"目录应为父子级导航:一级章单独成行,二级小节至少缩进两个空格列在所属章下方。"}]:[]}function bK(a,b){let c=[],d=a.replace(/\s+/gu,""),e=[...new Set(b.preciseFacts.filter(a=>/drawing|table|bill|boq|清单|工程量|图纸|draw/u.test(`${a.processingType||""} ${a.roleId} ${a.sourceFile}`)).flatMap(a=>`${a.key} ${a.value}`.match(/(?:DN\d+|φ\d+|Φ\d+|\d+(?:\.\d+)?\s*(?:mm|cm|m|㎡|m²|m3|MPa|kPa|℃|%|台|套|个|项|日历天|天)|\d+\s*[×xX]\s*\d+(?:\s*[×xX]\s*\d+)?\s*mm|GB\/?T?\s*\d+(?:[-—]\d+)?|JGJ\/?T?\s*\d+(?:[-—]\d+)?|CJJ\/?T?\s*\d+(?:[-—]\d+)?)/giu)||[]))].slice(0,160),f=e.filter(a=>d.includes(a.replace(/\s+/gu,"")));return e.length>=20&&f.length/e.length<.28&&c.push({level:"error",message:`清单/图纸精确参数使用不足:${f.length}/${e.length}`,suggestion:"请把清单和图纸中的规格、管径、尺寸、厚度、强度、工程量、设备数量和规范编号写入对应分项章节,禁止泛化概括。"}),b.bills.length>0&&!/(清单|工程量|项目特征|分部分项|分项工程)/u.test(a)&&c.push({level:"error",message:"正文未体现工程量清单项目特征或分部分项信息",suggestion:"请从清单中提取分部分项、项目特征、单位、工程量和材料设备参数补入施工范围和施工方法。"}),b.drawings.length>0&&!/(图纸|设计说明|系统图|节点|平面|立面|管径|标高|尺寸|做法)/u.test(a)&&c.push({level:"error",message:"正文未体现图纸/设计说明参数",suggestion:"请从图纸和设计说明中提取系统、节点、构造做法、规格尺寸、管径标高和试验验收要求。"}),c}function bL(a){let b=[];for(let c of[/见(?:招标文件|招标公告|图纸|设计文件|相关文件)/u,/按(?:图纸|设计要求|相关规范|有关规范|文件要求)/u,/满足(?:相关|有关)?要求/u,/\|\s*(?:[/—-]|无|暂无|待定|待补充|N\/?A)\s*\|/iu])c.test(a)&&b.push({level:"warning",message:`存在占位式表达:${c.source}`,suggestion:"请改写为来自资料的准确事实;资料确实未提供时,改写为正式管理措施,不留空值或“见文件/按图纸”。"});return b}function bM(a,b){let c=`${b.name} ${b.category} ${b.outputTitle} ${b.description}`,d=(0,o.V)().autoSpecGates.filter(a=>a.templateMatchers.some(a=>{try{return RegExp(a,"iu").test(c)}catch{return c.includes(a)}}));if(0===d.length)return[];let e=[],f=bE(a).length;for(let b of d.flatMap(a=>a.requiredTexts))a.includes(b)||e.push({level:"error",message:`配置要求缺少必要内容:${b}`,suggestion:"请按当前模板匹配的专业规则补齐必要内容。"});for(let b of d.flatMap(a=>a.forbiddenTexts))a.includes(b)&&e.push({level:"error",message:`配置要求不得出现:${b}`,suggestion:"请根据当前模板匹配的专业规则清理正文污染内容。"});/^#\s+/mu.test(a)&&e.push({level:"error",message:"正式正文存在 Markdown 标题符号 #",suggestion:"导出正文应去除 Markdown 标题符号,保留正式标题文字。"});let g=Math.max(0,...d.map(a=>a.minTables||0));return g&&f<g&&e.push({level:"error",message:`配置要求正式表格不足:${f}/${g}`,suggestion:"请按当前模板匹配的专业规则补充必要表格。"}),e}async function bN(a,b,c,d,e,f,g,h="",i={}){let j=av(au(b,c));if(!j.trim()&&!h.trim())return;let k=a0([e,g||""].filter(Boolean).join("\n\n")),l=b.sections?.length?`本章必须完整包含以下二级小节,且每个小节都要有实质正文:
|
|
46
46
|
${b.sections.map(a=>`- ${a}`).join("\n")}`:k.explicitStructure||k.explicitSections||k.lengthLimit||k.wantsConcise?"本章未预设二级小节;请优先遵循用户提示词和模板结构组织内容,不得因系统增强自行扩展小节。":"本章未预设二级小节;必须根据章节主题、项目资料和专业写作需要生成 3-6 个正式二级小节,不得新增、删除或重排一级章节。",m=["你是专业项目文档生成专家,必须严格使用已提供的内部资料生成正式文档章节。",ba,"准确性优先级:用户需求/模板章节 > 绑定提示词与角色节点结构化事实 > 知识库证据 > 后台内容优化建议 > 项目上下文/历史记忆。内部优先级只用于判断事实,不得写入正文。","项目上下文/历史记忆只能作为用户偏好、历史纠偏和连续性参考;不得覆盖、替代或改写知识库证据中的事实。",i.forbidDrawingImages?"图片/图纸类资料只作为文本事实依据;禁止插入图片或 Markdown 图片语法。":"","不要编造资料;可以基于证据做合理归纳;输出 Markdown;不要输出代码块。",e].filter(Boolean).join("\n\n"),n=[`文档模板:${a.name}`,`章节标题:${b.title}`,`章节目的:${b.purpose}`,l,g?`用户要求:${g}`:"",f?`项目上下文/历史记忆(仅作偏好、历史纠偏和连续性参考;如与知识库证据冲突,以知识库证据为准):
|
|
47
47
|
${f}`:"",i.projectBasicFactContext||"",h||"",i.factCoverageContext||"",i.technicalFactContext||"",i.coverageMatrixContext||"",d.length?`需要特别补足的事实:${d.join("、")}`:"","请生成一个专业、充实、可直接导出的正式文档章节,要求:",`- 首轮生成必须尽量达到目标篇幅的 85%-95%;内容不少于 ${i.minWords||1e3} 字${i.targetWords?`,目标约 ${i.targetWords} 字`:""},不得依赖后续扩写补救。`,"- 保留章节标题;如模板配置了小节,必须按配置完整生成;如未配置小节且用户未限制结构,必须生成 3-6 个正式二级小节;每个二级小节必须有实质正文,不能只有标题或表格。",b.tableSections?.length?`- 本章以下小节适合使用正式表格辅助表达:${b.tableSections.join("、")};表格必须由正文归纳形成,禁止直接粘贴资料摘录。`:"","- 表格只用于模板、用户要求或资料内容适合结构化表达的位置;表格前必须说明数据来源和适用范围,表格后必须说明控制措施、结论或执行要求,不能整节只有表格。","- 不得使用“本节”“本章将”“以下从”“以下内容”等模板化前缀;标题后直接进入本章对象、关键事实、处理要求、控制措施和结果闭环。","- 每个核心小节必须形成“对象/范围 → 依据/关键事实 → 执行或说明动作 → 控制要求 → 结果/责任闭环”的完整表达链条;具体术语以模板、用户要求和资料内容为准。","- 二级小节下如需设置三级小节,必须使用“#### 章号.节号.序号 标题”,例如“#### 2.2.1 关键事项”;三级小节不纳入目录;不得使用无编号独立加粗行表示三级小节。","- 必须使用模板节点提取的章节要求和输出规范;","- 必须结合项目事实、表格数据、标准要求、约束条件等内部资料;","- 对同一对象的事实应综合表达,优先写入准确的数量、单位、规格、参数、做法和标准;","- 日期、数量、数值、规格、周期、资源、范围、对象等量化内容必须来自资料或明确推导;无依据时不得编造具体值。","- 如果同一规则、方案、流程或措施适用于多个对象、区域、主体、片区或分项,必须逐项覆盖适用范围和对应依据,不得只写其中一个。","- 对模板和资料中已经明确给出的关键事实、数量、时间、规格、标准、范围、对象、责任或约束,必须写入对应小节,不能只写原则性要求。","- 严禁使用空泛占位表达替代资料事实;确实缺少资料时,只能写成待复核事项、约束条件或控制措施,不得编造具体数值。","- 正文不得出现“知识库”“证据”“检索”“角色节点”“事实字段”“校验结果”等后台系统话术。","- 存在事实冲突时,优先遵循用户要求、模板结构、绑定文件证据和提示词角色;后台内容优化建议仅作质量参考;","- 默认不要引用原始文件名,不写解析器内部对象名;","- 将资料要点自然融入正文,不单列系统证据或来源章节;","- 小节层级保持适度,不要输出中间分析产物标题;","- 组织关系、流程、职责、资源配置、风险控制等适合表格表达的内容可使用 Markdown 表格;",i.targetWords&&i.targetWords>=3500?"- 用户已提出较高篇幅目标,本章必须围绕每个二级小节充分展开对象范围、资料依据、关键事实、执行要求、风险约束、检查确认和责任闭环;不得用摘要式段落替代正文。":"","",j?"内部资料:":"",j].filter(Boolean).join("\n"),o=await bt(m,n,!1,{maxTokens:i.maxTokens,signal:i.signal});if(o&&!(o.length<120))return a9(a5(o.startsWith("## ")?o:`## ${b.title}
|
|
48
48
|
|
|
@@ -58,12 +58,12 @@ ${c}`:"","当前章节 Markdown:",a.currentContent.slice(-24e3)].filter(Boolea
|
|
|
58
58
|
|
|
59
59
|
${d}`,a.forbidDrawingImages));return!function(a,b,c,d){let e=bA(a),f=bA(b),g=ax(c).slice(0,6),h=Math.min(300,Math.max(80,Math.floor(.2*Math.max(0,d-e))));return!(f<e+h&&f<Math.floor(.92*d))&&!(f<.98*e)&&(!g||!!b.includes(g))}(a.currentContent,e,a.chapter.title,a.targetChars)?a.currentContent:e}async function bV(a){let b=bO(a.chapter,a.targetWords);if(b.length<2||a.targetWords<3e3)return a.content;let c=a.content,d=b.map(a=>{let b=a.title.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),d=c.match(RegExp(`^###\\s+${b}\\s*\\n([\\s\\S]*?)(?=^###\\s+|$)`,"mu")),e=bA(d?.[1]||"");return{...a,currentWords:e}}).filter(a=>a.currentWords<Math.floor(.55*a.targetWords)).slice(0,4),e=Array(b.length),f=Math.max(1,Math.min(4,Number(process.env.DOCUMENT_SECTION_SUPPLEMENT_CONCURRENCY??process.env.DOCUMENT_SECTION_CONCURRENCY??4)));for(let c=0;c<d.length;c+=f){let g=d.slice(c,c+f),h=await Promise.all(g.map(b=>bP({...a,sectionTitle:b.title,targetWords:Math.max(700,b.targetWords-b.currentWords)})));g.forEach((a,c)=>{e[b.findIndex(b=>b.title===a.title)]=h[c]})}return e.forEach((a,d)=>{a&&(c=function(a,b,c){let d=b.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),e=RegExp(`(^###\\s+${d}\\s*\\n)([\\s\\S]*?)(?=^###\\s+|$)`,"mu");return e.test(a)?a.replace(e,c.trim()+"\n\n"):`${a.trim()}
|
|
60
60
|
|
|
61
|
-
${c.trim()}`}(c,b[d].title,a))}),a9(a5(c,a.forbidDrawingImages))}async function bW(a){let b=a.content,c=bT(a.targetChars-bA(b)),d=0;for(;d<c&&bA(b)<Math.floor(.92*a.targetChars);d+=1){b8(a.signal);let c=b,d=await bu(c=>bU({template:a.template,chapter:a.chapter,currentContent:b,evidence:a.evidence,promptTexts:a.promptTexts,requirement:a.requirement,roleContext:a.roleContext,targetChars:a.targetChars,forbidDrawingImages:a.forbidDrawingImages,maxTokens:a.maxTokens,signal:c}),bS(a.targetChars),a.signal);if(!d||d===c)break;b=d}return{content:b,rounds:d}}function bX(a,b){let c=bA(b),d=Math.ceil(c/a.charsPerPage);return{currentChars:c,estimatedPages:d}}async function bY(a){if(!a.budget.minChars)return a.chapters;let b=a.chapters,c=bA(b.map(a=>a.content).join("\n\n")),d=Math.min(2,bT(a.budget.minChars-c));for(let e=0;e<d&&c<a.budget.minChars;e+=1){b8(a.signal);let d=c,e=b.map(b=>{let c=a.budget.chapterTargets.get(b.id)||0,d=bA(b.content);return{chapter:b,target:c,current:d,deficit:c-d}}).filter(a=>a.deficit>500).sort((a,b)=>b.deficit-a.deficit);if(0===e.length)break;for(let d of e){let e=await bW({template:a.template,chapter:{id:d.chapter.id,title:d.chapter.title,purpose:d.chapter.title,queries:[],requiredFacts:[],sections:d.chapter.sections},content:d.chapter.content,evidence:d.chapter.evidence,promptTexts:a.promptTexts,requirement:a.requirement,roleContext:"",targetChars:d.target,forbidDrawingImages:a.forbidDrawingImages,maxTokens:bR(d.current,d.target),signal:a.signal});if((c=bA((b=b.map(a=>a.id===d.chapter.id?{...a,content:e.content}:a)).map(a=>a.content).join("\n\n")))>=a.budget.minChars)break}if(c<=d+200)break}return b}async function bZ(a){let b=av(au({id:"review",title:"全文审查",purpose:"审查全文证据和资源关系",queries:[],requiredFacts:[]},a.evidence)),c=a.spec?`优化建议包:${a.spec.name}
|
|
61
|
+
${c.trim()}`}(c,b[d].title,a))}),a9(a5(c,a.forbidDrawingImages))}async function bW(a){let b=a.content,c=bT(a.targetChars-bA(b)),d=0;for(;d<c&&bA(b)<Math.floor(.92*a.targetChars);d+=1){b8(a.signal);let c=b,d=await bu(c=>bU({template:a.template,chapter:a.chapter,currentContent:b,evidence:a.evidence,promptTexts:a.promptTexts,requirement:a.requirement,roleContext:a.roleContext,targetChars:a.targetChars,forbidDrawingImages:a.forbidDrawingImages,maxTokens:a.maxTokens,signal:c}),bS(a.targetChars),a.signal);if(!d||d===c)break;b=d}return{content:b,rounds:d}}function bX(a,b){let c=bA(b),d=Math.ceil(c/a.charsPerPage);return{currentChars:c,estimatedPages:d}}async function bY(a){if(!a.budget.minChars)return a.chapters;let b=a.chapters,c=bA(b.map(a=>a.content).join("\n\n")),d=Math.min(2,bT(a.budget.minChars-c));for(let e=0;e<d&&c<a.budget.minChars;e+=1){b8(a.signal);let d=c,e=b.map(b=>{let c=a.budget.chapterTargets.get(b.id)||0,d=bA(b.content);return{chapter:b,target:c,current:d,deficit:c-d}}).filter(a=>a.deficit>500).sort((a,b)=>b.deficit-a.deficit);if(0===e.length)break;for(let d of e){let e=await bW({template:a.template,chapter:{id:d.chapter.id,title:d.chapter.title,purpose:d.chapter.title,queries:[],requiredFacts:[],sections:d.chapter.sections},content:d.chapter.content,evidence:d.chapter.evidence,promptTexts:a.promptTexts,requirement:a.requirement,roleContext:"",targetChars:d.target,forbidDrawingImages:a.forbidDrawingImages,maxTokens:bR(d.current,d.target),signal:a.signal});if((c=bA((b=b.map(a=>a.id===d.chapter.id?{...a,content:e.content}:a)).map(a=>a.content).join("\n\n")))>=a.budget.minChars)break}if(c<=d+200)break}return b}async function bZ(a){b8(a.signal);let b=av(au({id:"review",title:"全文审查",purpose:"审查全文证据和资源关系",queries:[],requiredFacts:[]},a.evidence)),c=a.spec?`优化建议包:${a.spec.name}
|
|
62
62
|
建议关注事实:${a.spec.factFields.map(a=>a.name).join("、")}
|
|
63
63
|
章节内容建议:${a.spec.chapterRules.map(a=>`${a.title}${a.minWords?`约${a.minWords}字`:""}`).join("、")||"以当前模板章节为准"}
|
|
64
64
|
质量提醒:${a.spec.gateRules.map(a=>`${a.name}:${a.type}`).join("、")}
|
|
65
65
|
约束:以上只用于质量检查,不得新增、删除、重排或重写用户/模板章节。`:"后台优化建议未生成。",d=await bt(["你是文档质量审查专家。只检查问题,不重写正文,不输出完整文档。","准确性优先级:用户需求/模板结构 > 已绑定或人工确认的知识库证据 > 自动检索知识库证据 > 后台内容优化建议 > 项目上下文/历史记忆。内部优先级只用于判断事实,不得写入正文。","重点检查:章节完整性、资料事实内化使用、参数数字准确性、冲突事实、解析器内部对象名、表格呈现、表达专业性、导出友好性、系统提示泄露。","只返回简短审查结论和问题清单;不得返回优化后的完整 Markdown。",a.promptTexts].filter(Boolean).join("\n\n"),[`模板:${a.template.name}`,a.requirement?`用户要求:${a.requirement}`:"",a.projectContext?`项目上下文/历史记忆:
|
|
66
|
-
${a.projectContext}`:"",c,"知识库证据摘要:",b,"待审查初稿:",a.markdown.slice(0,24e3),"请只返回审查问题清单,不要返回全文。"].filter(Boolean).join("\n"),!1,{maxTokens:2e3,temperature:0});return{markdown:a.markdown,stage:{type:"llm_review",roleId:"llm-review",status:d?"success":"skipped",message:d?`已完成非重写式质量审查:${d.slice(0,180)}`:"无可用模型或审查结果不可用,保留生成初稿"}}}function b$(a){return[...new Set([...a.matchAll(/^###\s+(.+)$/gmu)].map(a=>ax(a[1]||"")).filter(a=>a.length>=2&&a.length<=80))].slice(0,12)}function b_(a){let b=/^\*\*([^*]+?)\*\*\s*[::]?\s*$/u.exec(a.trim());if(!b)return"";let c=ax(b[1]||"");return c.length<2||c.length>40||/[。;;.!!??]$/u.test(c)||/^(注|说明|备注|提示|要求)[::]/u.test(c)?"":c}function b0(a){let b=a.split(/\r?\n/u),c="",d=0;return b.map(a=>{let b=/^###\s+(\d+\.\d+)\s+.+$/u.exec(a.trim());if(b)return c=b[1],d=0,a;if(/^##\s+/u.test(a.trim()))return c="",d=0,a;if(!c)return a;let e=/^####\s+(.+)$/u.exec(a.trim());if(e){let b=(e[1]||"").trim();if(/^\d+\.\d+\.\d+\s+\S/u.test(b))return a;let f=ax(b);return d+=1,`#### ${c}.${d} ${f}`}let f=b_(a);return f?(d+=1,`#### ${c}.${d} ${f}`):a}).join("\n").replace(/\n{3,}/gu,"\n\n").trim()}function b1(a){let b=[],c="";for(let d of a.split(/\r?\n/u)){let a=d.trim(),e=/^###\s+(\d+\.\d+)\s+.+$/u.exec(a);if(e){c=e[1];continue}if(/^##\s+/u.test(a)&&(c=""),!c)continue;let f=/^####\s+(.+)$/u.exec(a);if(f){let a=(f[1]||"").trim();RegExp(`^${b5(c)}\\.\\d+\\s+\\S`,"u").test(a)||b.push({level:"warning",message:`三级小节缺少 ${c}.x 编号:${ax(a)}`,suggestion:"三级小节必须使用“#### 章号.节号.序号 标题”,且不纳入目录。"})}let g=b_(a);g&&b.push({level:"warning",message:`独立加粗行疑似未编号三级小节:${g}`,suggestion:"请改为“#### 章号.节号.序号 标题”,不要用无编号加粗行表示三级小节。"})}return b.slice(0,20)}function b2(a){return["## 目录","",...a.flatMap((a,b)=>{let c=a.sections||[];return[aA(b,a.title),"",...c.flatMap((a,c)=>[` ${/^\s*\d+(?:\.\d+)+\s+/.test(a)?a:`${b+1}.${c+1} ${a}`}`,""])]})].join("\n")}function b3(a){let b=!1;return a.replace(/^##\s+目录\s*$[\s\S]*?(?=\n<div class="page-break"><\/div>|\n##\s+)/gmu,a=>b?"":(b=!0,a)).replace(/\n{3,}/gu,"\n\n").trim()}function b4(a,b){let c=b3(a);b.forEach((a,b)=>{let d=ax(a.title),e=RegExp(`^##\\s+(?:第[一二三四五六七八九十百千万\\d]+章\\s*)?${b5(d)}\\s*$`,"mu");c=e.test(c)?c.replace(e,`## ${aA(b,a.title)}`):c});let d=c.split(/\r?\n/u),e=-1,f=0;return d.map(a=>{let b=a.trim();if(/^##\s+第[一二三四五六七八九十百千万\d]+章\s+/u.test(b))return e+=1,f=0,a;let c=/^##\s+(\d+)\.(\d+)\s+(.+)$/u.exec(b);if(e>=0&&c)return f=Number(c[2])||f+1,`### ${e+1}.${f} ${ax(c[3]||"")}`;let d=/^###\s+(?:(\d+)\.(\d+)\s+)?(.+)$/u.exec(b);return e>=0&&d?(f+=1,`### ${e+1}.${f} ${ax(d[3]||"")}`):a}).join("\n")}function b5(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function b6(a,b){let c=[];for(let d of b.chapters){let b=function(a,b){let c=ax(b),d=RegExp(`(^##\\s+(?:第[一二三四五六七八九十百千万\\d]+章\\s*)?${b5(c)}\\s*$)([\\s\\S]*?)(?=\\n##\\s+|(?![\\s\\S]))`,"mu").exec(a);if(d&&void 0!==d.index)return{start:d.index,end:d.index+d[0].length,heading:d[1]||`## ${b}`,body:d[2]||""}}(a,d.title);if(!b){c.push({level:"error",message:`${d.title} 正文缺少章节标题`,suggestion:"请重新生成,确保模板章节完整输出。"});continue}let e=b.heading+b.body,f=(d.sections||[]).filter(a=>!(function(a){let b=a.replace(/^\s*\d+(?:\.\d+)+\s+/u,"").trim();return RegExp(`^###\\s+(?:${b5(a)}|(?:\\d+(?:\\.\\d+)+\\s+)?${b5(b)})\\s*$`,"mu")})(a).test(e));f.length>0&&c.push({level:"error",message:`${d.title} 正文缺少配置小节:${f.join("、")}`,suggestion:"请重新生成或检查审查阶段是否删除了二级小节。"}),d.tableSections?.length&&!/\|[^\n]+\|\s*\n\s*\|\s*:?-{3,}:?\s*\|/u.test(e)&&c.push({level:"error",message:`${d.title} 缺少必要的正式表格`,suggestion:"请按模板 tableSections/tableRequirements 在对应小节补充正式 Markdown 表格。"})}return c}function b7(a){let b=a.chapters.map((a,b)=>(function(a,b){let c=`## ${aA(b,a.title)}`,d=a9(a.content);return/^##\s+.+$/mu.test(d)?d.replace(/^##\s+.+$/mu,c):`${c}
|
|
66
|
+
${a.projectContext}`:"",c,"知识库证据摘要:",b,"待审查初稿:",a.markdown.slice(0,24e3),"请只返回审查问题清单,不要返回全文。"].filter(Boolean).join("\n"),!1,{maxTokens:2e3,temperature:0,signal:a.signal});return b8(a.signal),{markdown:a.markdown,stage:{type:"llm_review",roleId:"llm-review",status:d?"success":"skipped",message:d?`已完成非重写式质量审查:${d.slice(0,180)}`:"无可用模型或审查结果不可用,保留生成初稿"}}}function b$(a){return[...new Set([...a.matchAll(/^###\s+(.+)$/gmu)].map(a=>ax(a[1]||"")).filter(a=>a.length>=2&&a.length<=80))].slice(0,12)}function b_(a){let b=/^\*\*([^*]+?)\*\*\s*[::]?\s*$/u.exec(a.trim());if(!b)return"";let c=ax(b[1]||"");return c.length<2||c.length>40||/[。;;.!!??]$/u.test(c)||/^(注|说明|备注|提示|要求)[::]/u.test(c)?"":c}function b0(a){let b=a.split(/\r?\n/u),c="",d=0;return b.map(a=>{let b=/^###\s+(\d+\.\d+)\s+.+$/u.exec(a.trim());if(b)return c=b[1],d=0,a;if(/^##\s+/u.test(a.trim()))return c="",d=0,a;if(!c)return a;let e=/^####\s+(.+)$/u.exec(a.trim());if(e){let b=(e[1]||"").trim();if(/^\d+\.\d+\.\d+\s+\S/u.test(b))return a;let f=ax(b);return d+=1,`#### ${c}.${d} ${f}`}let f=b_(a);return f?(d+=1,`#### ${c}.${d} ${f}`):a}).join("\n").replace(/\n{3,}/gu,"\n\n").trim()}function b1(a){let b=[],c="";for(let d of a.split(/\r?\n/u)){let a=d.trim(),e=/^###\s+(\d+\.\d+)\s+.+$/u.exec(a);if(e){c=e[1];continue}if(/^##\s+/u.test(a)&&(c=""),!c)continue;let f=/^####\s+(.+)$/u.exec(a);if(f){let a=(f[1]||"").trim();RegExp(`^${b5(c)}\\.\\d+\\s+\\S`,"u").test(a)||b.push({level:"warning",message:`三级小节缺少 ${c}.x 编号:${ax(a)}`,suggestion:"三级小节必须使用“#### 章号.节号.序号 标题”,且不纳入目录。"})}let g=b_(a);g&&b.push({level:"warning",message:`独立加粗行疑似未编号三级小节:${g}`,suggestion:"请改为“#### 章号.节号.序号 标题”,不要用无编号加粗行表示三级小节。"})}return b.slice(0,20)}function b2(a){return["## 目录","",...a.flatMap((a,b)=>{let c=a.sections||[];return[aA(b,a.title),"",...c.flatMap((a,c)=>[` ${/^\s*\d+(?:\.\d+)+\s+/.test(a)?a:`${b+1}.${c+1} ${a}`}`,""])]})].join("\n")}function b3(a){let b=!1;return a.replace(/^##\s+目录\s*$[\s\S]*?(?=\n<div class="page-break"><\/div>|\n##\s+)/gmu,a=>b?"":(b=!0,a)).replace(/\n{3,}/gu,"\n\n").trim()}function b4(a,b){let c=b3(a);b.forEach((a,b)=>{let d=ax(a.title),e=RegExp(`^##\\s+(?:第[一二三四五六七八九十百千万\\d]+章\\s*)?${b5(d)}\\s*$`,"mu");c=e.test(c)?c.replace(e,`## ${aA(b,a.title)}`):c});let d=c.split(/\r?\n/u),e=-1,f=0;return d.map(a=>{let b=a.trim();if(/^##\s+第[一二三四五六七八九十百千万\d]+章\s+/u.test(b))return e+=1,f=0,a;let c=/^##\s+(\d+)\.(\d+)\s+(.+)$/u.exec(b);if(e>=0&&c)return f=Number(c[2])||f+1,`### ${e+1}.${f} ${ax(c[3]||"")}`;let d=/^###\s+(?:(\d+)\.(\d+)\s+)?(.+)$/u.exec(b);return e>=0&&d?(f+=1,`### ${e+1}.${f} ${ax(d[3]||"")}`):a}).join("\n")}function b5(a){return a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function b6(a,b){let c=[];for(let d of b.chapters){let b=function(a,b){let c=ax(b),d=RegExp(`(^##\\s+(?:第[一二三四五六七八九十百千万\\d]+章\\s*)?${b5(c)}\\s*$)([\\s\\S]*?)(?=\\n##\\s+|(?![\\s\\S]))`,"mu").exec(a);if(d&&void 0!==d.index)return{start:d.index,end:d.index+d[0].length,heading:d[1]||`## ${b}`,body:d[2]||""}}(a,d.title);if(!b){c.push({level:"error",message:`${d.title} 正文缺少章节标题`,suggestion:"请重新生成,确保模板章节完整输出。"});continue}let e=b.heading+b.body,f=(d.sections||[]).filter(a=>!(function(a){let b=a.replace(/^\s*\d+(?:\.\d+)+\s+/u,"").trim();return RegExp(`^###\\s+(?:${b5(a)}|(?:\\d+(?:\\.\\d+)+\\s+)?${b5(b)})\\s*$`,"mu")})(a).test(e));f.length>0&&c.push({level:"error",message:`${d.title} 正文缺少配置小节:${f.join("、")}`,suggestion:"请重新生成或检查审查阶段是否删除了二级小节。"}),d.tableSections?.length&&!/\|[^\n]+\|\s*\n\s*\|\s*:?-{3,}:?\s*\|/u.test(e)&&c.push({level:"error",message:`${d.title} 缺少必要的正式表格`,suggestion:"请按模板 tableSections/tableRequirements 在对应小节补充正式 Markdown 表格。"})}return c}function b7(a){let b=a.chapters.map((a,b)=>(function(a,b){let c=`## ${aA(b,a.title)}`,d=a9(a.content);return/^##\s+.+$/mu.test(d)?d.replace(/^##\s+.+$/mu,c):`${c}
|
|
67
67
|
|
|
68
68
|
${d}`})(a,b)).filter(Boolean).join("\n\n"),c=b2(a.chapters);return a9(['<div class="document-cover">',`# ${a.title}`,'\n</div>\n\n<div class="page-break"></div>\n',c,'\n<div class="page-break"></div>\n',b].join("\n"))}function b8(a){if(a?.aborted)throw Error("用户中止")}function b9(a,b){let c=a.findIndex(a=>a.type===b.type&&a.roleId===b.roleId&&a.promptId===b.promptId);return c>=0?(a[c]={...b,order:a[c]?.order??b.order},c):(a.push(b),a.length-1)}function ca(a,b){return`${a},耗时 ${Math.round((Date.now()-b)/1e3)} 秒`}async function cb(a){var b,c;b8(a.signal);let g=ai(a.templateId);if(!g)throw Error("Document template not found");let i=e.resolve(a.projectRoot||(0,k.aY)());if(!i)throw Error("No knowledge base project found");let j=g,m=(0,k.Qh)(),y=Math.max(5,Math.min(30,a.maxEvidencePerChapter??12)),z=bg(j)||"none",A=(0,n.Mu)(z)?.name||z,B=[a2({type:"role_binding",roleId:z,status:"running",message:`生成任务已创建,正在读取模板与角色配置:${j.name}`},{subtitle:A,roleName:A,order:0})];a.onProgress?.([...B]);let C=bl(j),D=bm(j);b9(B,a2({type:"validation",roleId:"document-preparation",status:"running",message:"正在分析模板规范、用户要求与项目资料摘要"},{subtitle:"生成准备",order:B.length})),a.onProgress?.([...B]);let E=function(a,b=""){let c=function(a,b=""){return h.createHash("sha1").update(JSON.stringify({id:a.id,name:a.name,description:a.description,outputTitle:a.outputTitle,chapters:a.chapters,promptBindings:a.promptBindings,fileBindings:a.fileBindings,projectRoleConfigId:a.projectRoleConfigId,requirement:b})).digest("hex").slice(0,12)}(a,b),d=function(a,b){for(let c of b)if(c.patterns.some(b=>b.test(a)))return c.output[0]}(`${a.name} ${a.category} ${a.outputTitle} ${a.description}`,p)||a.category||"业务文档",e=function(a,b){let c=[a.name,a.category,a.outputTitle,a.description,...a.chapters.flatMap(a=>[a.title,a.purpose,...a.sections||[],...a.requiredFacts||[],...a.queries||[]])].filter(Boolean).join("\n"),d=new Set([...a.chapters.flatMap(a=>a.requiredFacts||[]),"项目名称","项目资料范围"]);for(let a of t(c,q))d.add(a);let e=x(a,b);if("施工组织设计"===b||e.length>0){for(let a of t("招标 施工 工程 清单 图纸 质量 工期 安全 文明 材料 重点 难点",q))d.add(a);for(let a of e.flatMap(a=>a.requiredFacts))d.add(a)}return[...d].filter(Boolean)}(a,d),f=function(a=""){let b=new Set;for(let c of[/(?:必须|需要|要求|增加|包含|包括|补充|设置|新增).{0,12}?(?:章节|章|节|小节)[::为是]?\s*([^。;;\n]{2,80})/giu,/(?:章节|目录).{0,8}?(?:包括|包含|为|是)[::]?\s*([^。;;\n]{2,120})/giu])for(let d of a.matchAll(c))for(let a of d[1].split(/[、,,/]/u).map(a=>a.trim()).filter(Boolean))!/不要|禁止|不得|不能/iu.test(a)&&a.length<=40&&b.add(a.replace(/[。;;::]+$/u,""));return[...b]}(b),g=function(a=""){let b=new Set;for(let c of w(a).filter(a=>/必须|需要|要求|一定要|务必|包含|包括|输出|写明/iu.test(a)&&!/章节|章|节|小节/iu.test(a))){for(let a of v(c))b.add(a);let a=c.match(/(?:必须|需要|要求|一定要|务必|包含|包括|输出|写明)\s*([^。;;\n]{2,60})/iu);a&&b.add(a[1].trim())}return[...b].filter(a=>a&&!/不要|禁止|不得|不能/u.test(a)).slice(0,30)}(b),i=function(a=""){let b=new Set;for(let c of w(a).filter(a=>/不要|禁止|不得|不能|不允许|严禁/iu.test(a))){for(let a of v(c))b.add(a);let a=c.match(/(?:不要|禁止|不得|不能|不允许|严禁)(?:出现|输出|写|包含)?\s*([^。;;\n]{2,40})/iu);a&&b.add(a[1].replace(/^(这些|以下|内容|词语|文字)[::]?/u,"").trim())}return[...b].filter(a=>a&&!/章节|页|表格/u.test(a)).slice(0,30)}(b),j=function(a=""){let b=a.match(/(?:大概|约|左右|不少于|至少|控制在|不超过|最多)?\s*(\d{1,3})\s*(?:页|page)/iu);if(!b)return;let c=Number(b[1]);if(Number.isFinite(c)&&!(c<=0))return/不少于|至少/iu.test(a)?{min:c}:/不超过|最多|以内|控制在/iu.test(a)?{max:c}:{target:c,min:Math.max(1,Math.floor(.85*c)),max:Math.ceil(1.15*c)}}(b),k=x(a,d),l=Math.max(0,...k.map(a=>a.minTables||0)),m=Math.max(function(a=""){let b=a.match(/(?:至少|不少于)?\s*(\d{1,2})\s*(?:个|张)?\s*表格/iu);return b?Number(b[1]):/表格化|用表格|表格形式|表格表达/iu.test(a)?1:void 0}(b)||0,l)||void 0,n=a.chapters.map((a,b)=>{let c=[a.title,a.purpose,...a.sections||[],...a.requiredFacts||[],...a.queries||[]].join("\n"),d=new Set(a.requiredFacts||[]);for(let a of e)(c.includes(a)||RegExp(a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&"),"iu").test(c))&&d.add(a);for(let a of t(c,r))d.add(a);return{id:a.id,title:a.title,required:!0,order:b,minWords:900,requiredFactIds:[...d].filter(a=>e.includes(a)).map(u),requiredFileRoleIds:[],requiredPromptRoleIds:[],generationHint:[a.purpose,a.sections?.length?`必须包含小节:${a.sections.join("、")}`:"",d.size?`重点覆盖事实:${[...d].join("、")}`:""].filter(Boolean).join("\n")}}),o=f.filter(a=>!n.some(b=>b.title.includes(a)||a.includes(b.title))).map((a,b)=>({id:`user-chapter-${u(a)}`,title:a,required:!0,order:n.length+b,minWords:600,requiredFactIds:[],requiredFileRoleIds:[],requiredPromptRoleIds:[],generationHint:`用户明确要求包含该章节:${a}`})),s=[{id:"auto-source-required",name:"事实必须有来源",type:"source_required",level:"warning",evaluator:{subject:"source",operator:"all_have_source"}},{id:"auto-min-source",name:"至少使用项目资料来源",type:"source_required",level:"warning",evaluator:{subject:"source",operator:"min_count",min:2}},{id:"auto-no-debug-text",name:"不得输出后台流程话术",type:"forbidden_text",level:"error",value:"知识库证据",evaluator:{subject:"document",operator:"not_contains",value:"知识库证据"}},...k.flatMap(a=>a.requiredTexts.map(a=>({id:`configured-required-${u(a)}`,name:`配置建议包含:${a}`,type:"configured_required_text",level:"warning",value:a,evaluator:{subject:"document",operator:"contains",value:a}}))),...k.flatMap(a=>a.forbiddenTexts.map(a=>({id:`configured-forbidden-${u(a)}`,name:`配置建议避免:${a}`,type:"configured_forbidden_text",level:"warning",value:a,evaluator:{subject:"document",operator:"not_contains",value:a}}))),...l?[{id:"configured-min-table-count",name:`配置建议正式表格不少于 ${l} 个`,type:"configured_table_density",level:"warning",evaluator:{subject:"table",operator:"min_count",min:l}}]:[],...f.map(a=>({id:`user-required-chapter-${u(a)}`,name:`用户提到章节:${a}`,type:"user_required_chapter",level:"warning",target:a,evaluator:{subject:"chapter",operator:"exists",target:a}})),...g.map(a=>({id:`user-required-text-${u(a)}`,name:`用户提到应包含:${a}`,type:"user_required_text",level:"warning",value:a,evaluator:{subject:"document",operator:"contains",value:a}})),...i.map(a=>({id:`user-forbidden-text-${u(a)}`,name:`用户要求不得包含:${a}`,type:"user_forbidden_text",level:"error",value:a,evaluator:{subject:"document",operator:"not_contains",value:a}})),...m?[{id:"user-min-table-count",name:`用户提到表格数量不少于 ${m}`,type:"user_format_table",level:"warning",evaluator:{subject:"table",operator:"min_count",min:m}}]:[],...j?.min?[{id:"user-min-page-count",name:`用户提到页数不少于 ${j.min}`,type:"user_page_target",level:"warning",evaluator:{subject:"page",operator:"min_count",min:j.min}}]:[],...j?.max?[{id:"user-max-page-count",name:`用户要求页数不超过 ${j.max}`,type:"user_page_target",level:"warning",evaluator:{subject:"page",operator:"max_count",min:j.max}}]:[]],y=[...n,...o];return{sourceHash:c,managedBy:"system",spec:{id:`auto-${a.id}-${c}`.replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80),name:`后台优化建议 - ${a.name}`,description:`${d}后台优化建议,由模板、提示词、角色绑定和用户临时要求静默生成,仅用于提升内容完整性,不接管章节结构。`,factFields:e.map(a=>({id:u(a),name:a,type:"auto",required:k.some(b=>b.requiredFacts.includes(a))||!/材料|品牌|重点|难点|约束/iu.test(a),extractionHint:`从项目资料摘要、角色绑定证据和知识库证据中抽取“${a}”。`,validationHint:`生成内容涉及“${a}”时必须与项目资料一致,不得引入其他项目事实。`})),chapterMode:"fixed",chapterRules:y,dynamicChapterRule:{source:"ai_plan",minChapters:0,maxChapters:0,titleStrategy:"template",minWordsPerChapter:0,generationHint:`不自动规划或补充章节;仅按${d}正式文件要求提供内容完整性建议。`},gateRules:s,builtIn:!0}}}(j,a.requirement||""),ab=E.spec,ac=F(i,{requirement:a.requirement,boundFilePaths:D.map(a=>a.filePath),boundFileRoles:bj(D)}),ad=D.length>0?D:bk(j,ac),ae=ad.length>0?ad:D,af=function(a,b){let c=function(a){let b=[a.name,a.category,a.description,a.outputTitle].join("\n"),c=new Set(["project_overview","construction_scope"]);return/投标|招标|施工|工程|建设|改造/iu.test(b)&&["tender_document","bill_of_quantities","schedule_quality_safety"].forEach(a=>c.add(a)),/图纸|施工|工程|建设|改造/iu.test(b)&&c.add("drawings"),c}(a);return(function(a){let b=new Set(t([a.name,a.description,a.outputTitle,...a.chapters.flatMap(a=>[a.title,a.purpose,...a.requiredFacts||[],...a.queries||[]])].join("\n"),s));return b.add("project_overview"),b.add("construction_scope"),[...b]})(a).map(a=>{let d=b.materialInventory[a]||[],e=c.has(a),f=d.length>0,g=f&&d.length<(e?2:1);return{role:a,required:e,satisfied:f,weak:g,evidenceCount:d.length,filePaths:d.slice(0,20).map(a=>a.filePath),reason:f?`已匹配 ${d.length} 个资料文件`:e?"必需资料角色缺失":"可选资料角色缺失"}})}(j,ac),ah=function(a){var b;let c=a.resolvedRoles.filter(a=>a.required&&!a.satisfied).map(a=>a.role),d=a.resolvedRoles.filter(a=>a.weak).map(a=>a.role),e=[],f=[];0===a.template.chapters.length&&f.push("模板未配置章节,建议通过模板章节或显式 OUTLINE 提供文档结构"),a.template.chapters.some(a=>!a.purpose&&(!a.queries||0===a.queries.length)&&(!a.requiredFacts||0===a.requiredFacts.length))&&f.push("部分模板章节缺少 purpose、queries 或 requiredFacts,生成质量可能不稳定"),a.summary.source.ambiguous&&e.push(a.summary.source.selectionReason),a.summary.fingerprint.confidence<.34&&f.push("项目指纹置信度较低,建议绑定明确的项目资料文件"),a.summary.coverage.materialCompletenessRate<.5&&e.push("项目资料覆盖率过低,无法支撑正式文件生成"),c.length>0&&f.push(`模板必需资料角色未完全满足:${c.join("、")}`),d.length>0&&f.push(`部分资料角色证据较弱:${d.join("、")}`);let g=[a.spec.factFields.length>0,a.spec.chapterRules.length>0,a.spec.gateRules.length>0];return{ready:0===e.length,materialCoverageRate:a.summary.coverage.materialCompletenessRate,roleSatisfactionRate:(b=a.resolvedRoles).length?b.filter(a=>a.satisfied).length/b.length:1,specCompletenessRate:g.filter(Boolean).length/g.length,missingRoles:c,weakRoles:d,blockingIssues:e,warnings:f}}({template:j,spec:ab,summary:ac,resolvedRoles:af});if(!ah.ready)throw Error(`生成准备度不足:${ah.blockingIssues.join(";")}`);let aj=[["## 后台项目资料摘要",ac.extractedSections.projectOverview,`项目指纹:项目名候选 ${ac.fingerprint.projectNames.join("、")||"无"};编号 ${ac.fingerprint.tenderNos.join("、")||"无"};资料组 ${ac.fingerprint.fileGroups.join("、")||"无"};置信度 ${Math.round(100*ac.fingerprint.confidence)}%。`,`内容级事实候选:建设/招标单位 ${ac.facts.ownerNames?.join("、")||"无"};地点 ${ac.facts.locationNames?.join("、")||"无"};工期 ${ac.facts.scheduleValues?.join("、")||"无"};质量 ${ac.facts.qualityTargets?.join("、")||"无"}。`,ac.extractedSections.scopeSummary,ac.extractedSections.boqSummary,ac.extractedSections.drawingSummary,ac.extractedSections.scheduleQualitySafetySummary,ac.extractedSections.constraintsAndRisks,`资料满足率:${Math.round(100*ac.coverage.materialCompletenessRate)}%`].join("\n"),(b=E.sourceHash,`## 后台内容优化建议
|
|
69
69
|
建议包:${ab.name}
|
|
@@ -80,7 +80,7 @@ ${g}`:""].filter(Boolean).join("\n\n")}(ba,c,f),A=b_.filter(a=>bo(i,a.sourceFile
|
|
|
80
80
|
${d.map(a=>`- ${a}`).join("\n")}`:"",e.length?`角色节点已抽取事实:
|
|
81
81
|
${e.join("\n")}`:"",f.length?`结构化/量化事实:
|
|
82
82
|
${f.join("\n")}`:"",g.length?`项目基础事实:
|
|
83
|
-
${g.join("\n")}`:"",a.missingFacts.length?`当前检索未充分命中的事实:${a.missingFacts.join("、")}。如资料未明确提供,不得编造具体数值,应写成需要复核的条件、假设或处理措施。`:"",`本章可用资料来源约 ${h} 个文件,正文必须把可用事实内化到对应小节,不得单列后台资料清单。`].filter(Boolean).join("\n")}({chapter:c,plan:f,spec:ab,roleFacts:n,technicalFactAssignment:s,projectBasicFacts:A,evidence:p,missingFacts:v}),F=ab?.chapterRules.find(a=>a.id===c.id||a.title===c.title),G=cb.chapterTargets.get(c.id)||1200,V=Math.max(f?.minWords||0,F?.minWords||0,ab?.dynamicChapterRule.minWordsPerChapter||0,Math.floor(.82*G),1200),X=bR(V,G),aa=await bu(b=>bQ({template:j,chapter:c,evidence:p,missingFacts:v,promptTexts:ak,projectContext:bU,requirement:a.requirement,roleContext:z,targetWords:G,forbidDrawingImages:x,factCoverageContext:E,signal:b}),bS(G),a.signal);if(aa||(aa=await bu(b=>bN(j,c,p,v,ak,bU,a.requirement,z,{forbidDrawingImages:x,minWords:V,targetWords:G,maxTokens:X,technicalFactContext:t,coverageMatrixContext:u,projectBasicFactContext:D,factCoverageContext:E,signal:b}),bS(G),a.signal)),b8(a.signal),!aa){let b=p.slice(0,80),d=z.slice(0,12e3);aa=await bu(e=>bN(j,c,b,v,ak,bU,a.requirement,d,{forbidDrawingImages:x,minWords:Math.max(900,Math.floor(.75*V)),targetWords:G,maxTokens:X,technicalFactContext:t.slice(0,12e3),coverageMatrixContext:u.slice(0,8e3),projectBasicFactContext:D.slice(0,8e3),factCoverageContext:E.slice(0,1e4),signal:e}),bS(G),a.signal)}if(b8(a.signal),!aa)throw Error(`${c.title} 大模型未返回有效章节正文`);aa=await bV({template:j,chapter:c,content:aa,evidence:p,missingFacts:v,promptTexts:ak,projectContext:bU,requirement:a.requirement,roleContext:z,targetWords:G,forbidDrawingImages:x,factCoverageContext:E,signal:a.signal});let ac=bd({chapter:c,content:aa,missingFacts:v,targetWords:G});ac.length>0&&(aa=await be({template:j,chapter:{id:c.id,title:c.title,content:aa,evidence:p,missingFacts:v,sections:c.sections||[]},issues:ac.slice(0,5),promptTexts:ak,requirement:a.requirement,forbidDrawingImages:x}),b8(a.signal));let ad=await bW({template:j,chapter:c,content:aa,evidence:p,promptTexts:ak,requirement:a.requirement,roleContext:z,targetChars:Math.floor(.95*G),forbidDrawingImages:x,maxTokens:X,signal:a.signal}),ae=ad.content,af=bA(ae),ag=c.sections?.length?c.sections:b$(ae);a$.push(a2({type:"chapter_generation",roleId:"chapter_generation",promptId:C.find(a=>"chapter_generation"===a.roleId)?.promptId,status:"success",message:ca(`${ax(c.title)} 已由大模型生成${ad.rounds>0?`并扩写 ${ad.rounds} 轮`:""}:当前 ${af} 字 / 目标 ${Math.floor(.95*G)} 字`,b)},{subtitle:ax(c.title),order:e})),aN.push({id:c.id,title:c.title,content:ae,evidence:p,missingFacts:v,sections:ag})}catch(b){if(a.signal?.aborted)throw b;console.error(`[gen] chapter ${c.title} failed:`,b),aZ.push(`${c.title}:${b instanceof Error?b.message:"生成失败"}`),a$.push(a2({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${ax(c.title)} 生成失败`},{subtitle:ax(c.title),order:e}))}B.some(a=>"chapter_generation"===a.type&&a.message===a$[a$.length-1]?.message)||B.push(a$[a$.length-1]),a.onProgress?.([...B])}))}if(aN.sort((a,b)=>bO.findIndex(b=>b.id===a.id)-bO.findIndex(a=>a.id===b.id)),aP.sort((a,b)=>bO.findIndex(b=>b.id===a.chapterId)-bO.findIndex(a=>a.id===b.chapterId)),0===aN.length)throw Error(`章节生成未完成:${aZ.slice(0,6).join(";")||"没有生成任何有效章节"}`);b8(a.signal);let cf={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{cf=await bw(i,aX)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fileUnderstanding failed:",b)}for(let b of(b8(a.signal),cf.notes))aX.push({chapterId:"multimodal-file-understanding",filePath:"多模态模型文件理解结果",score:1,content:b,roleId:"multimodal-files",processingType:"reference",source:"multimodal"});let cg=function(a,b,c){let d={};for(let e of aF(a,c)){let a=b.find(a=>aG(a,e));a&&(d[e.name]=`${a.content.replace(/\s+/gu," ").slice(0,180)}(来源:${a.filePath},角色:${a.roleId||"未标注"})`)}return d}(j,aX,ab);for(let a of ba)for(let b of a.facts)cg[b.key]=`${aW(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let ch=function(a,b,c){let d=aF(b,c).map(a=>({field:a,pattern:function(a){let b=a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");return RegExp(`${b}[::\\s]+([^\\n,。;;]+)`,"u")}(a.name)})),e=[];for(let b of a)for(let{field:a,pattern:c}of d){if(!aG(b,a))continue;let d=b.content.match(c)||[void 0,b.content.replace(/\s+/gu," ").slice(0,220)],f=d?.[1]?.trim();f&&!e.some(b=>b.fieldId===a.id&&b.value===f)&&e.push({key:a.name,fieldId:a.id,fieldName:a.name,value:f.slice(0,300),sourceFile:b.filePath,roleId:b.roleId||"unknown",processingType:b.processingType,confidence:b.score,sourceRef:{filePath:b.filePath,roleId:b.roleId||"unknown",processingType:b.processingType,sectionTitle:b.sectionTitle}})}return e}(aX,j,ab),ci=ba.flatMap(a=>a.facts.map(a=>({key:a.key,value:aW(a.value),sourceFile:a.sourceFile,roleId:a.roleId,confidence:.9}))),cj=b_.map(a=>({key:a.key,value:a.value,sourceFile:a.sourceFile,roleId:"project_basic_fact",confidence:.85})),ck={facts:[],stages:[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"已有本地/角色事实覆盖主要必需字段,跳过 LLM 全量事实抽取"}]};if(function(a,b,c){let d=aF(b,c).filter(a=>a.required).slice(0,30);return 0===d.length?a.filter(a=>a.confidence>=.75&&aW(a.value).trim().length>=2).length<12:d.filter(b=>a.some(a=>(function(a,b){let c=aW(a.value).trim();if(!c||c.length<2||c.length>220&&a.confidence<.8)return!1;let d=`${a.fieldId||""} ${a.fieldName||""} ${a.key}`.toLowerCase();return!!(d.includes(b.id.toLowerCase())||d.includes(b.name.toLowerCase()))&&("project_basic_fact"===a.roleId||a.roleId?.startsWith("role-")||a.sourceRef?.filePath?a.confidence>=.55:a.confidence>=.75)})(a,b))).length/d.length<.9}([...cj,...ci,...ch],j,ab))try{ck=await bx(aX,am,j,ab)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fact extraction failed:",b)}b8(a.signal);let cl=[...cj,...ci,...ch,...ck.facts];for(let a of(b9(B,cf.stage),ck.stages))b9(B,a);a.onProgress?.([...B]);let cm=function(a){let b=[],c=new Set;for(let g of a.filter(a=>"table"===a.processingType)){if(c.has(g.filePath))continue;c.add(g.filePath);let a=(0,k.aY)(),h=e.isAbsolute(g.filePath)?g.filePath:d.existsSync(e.join(a,"knowledgeBase",g.filePath))?e.join(a,"knowledgeBase",g.filePath):e.join(a,g.filePath),i=e.extname(g.filePath).toLowerCase();if(d.existsSync(h)&&[".xlsx",".xls",".csv"].includes(i))try{let a=f.readFile(h,{cellDates:!0,sheetStubs:!1});for(let c of a.SheetNames){let d=a.Sheets[c],e=f.utils.sheet_to_json(d,{header:1,raw:!1,defval:""}).map(a=>a.map(a=>String(a).trim())).filter(a=>a.some(Boolean));if(e.length<2)continue;let h=e.findIndex(a=>a.filter(Boolean).length>=2);if(h<0)continue;let i=e[h].filter(Boolean),j=e.slice(h+1).map(a=>a.slice(0,i.length)).filter(a=>a.some(Boolean));0!==j.length&&b.push({tableType:g.roleId||"table",sheet:c,headers:i,rows:j.slice(0,200),sourceFile:g.filePath,sourceRange:d["!ref"]})}continue}catch{}let j=g.content.split("\n").map(a=>a.trim()).filter(Boolean).filter(a=>a.includes("|")||a.includes(" ")||a.includes(","));if(j.length<2)continue;let l=j[0].includes("|")?"|":j[0].includes(" ")?" ":",",m=j.map(a=>a.split(l).map(a=>a.trim()).filter(Boolean)).filter(a=>a.length>1);m.length<2||b.push({tableType:g.roleId||"table",headers:m[0],rows:m.slice(1,80),sourceFile:g.filePath,sourceRange:g.sectionTitle})}return b}(aX),cn=aX.filter(a=>"pinned-evidence"===a.source).length,co=aX.filter(a=>"pinned-evidence"!==a.source&&"bound-file"!==a.source).length,cp=a2({type:"reference",roleId:"quality-enhancement",status:aX.length>0?"success":"skipped",message:`增强贡献:知识库证据 ${aX.length} 条,人工确认/固定证据 ${cn} 条,项目上下文 ${bT.length} 条,自动检索证据 ${co} 条`},{subtitle:"证据与上下文增强"});for(let b of(B.push(cp),a.onProgress?.([...B]),cl))cg[b.key]=`${aW(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let cq=new Map;for(let a of aX)cq.set(a.filePath,(cq.get(a.filePath)??0)+1);let cr=[...cq.entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),cs=function(a,b=[],c=[],d){let e=b=>a.filter(a=>b.some(b=>a.key.includes(b))),f=b=>a.filter(a=>a.processingType===b||a.roleId.includes(b)),g=a.filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|MPa|kPa|℃|%|GB|JGJ|CJJ|台|套|个|项|㎡/iu.test(`${a.key} ${a.value}`)),h=a.filter(a=>"table"===a.processingType||/bill|boq|清单|工程量/u.test(`${a.roleId} ${a.sourceFile}`));return{project:a,schedule:e(["工期","开工","竣工","节点"]),quality:e(["质量"]),safety:e(["安全"]),resources:e(["劳动力","材料","机械","设备"]),tables:b,drawings:f("drawing"),bills:h,preciseFacts:g,rules:f("rule"),specifications:f("specification"),schemaFacts:function(a,b){let c={};for(let d of b?.factFields||[])c[d.id]=a.filter(a=>a.fieldId===d.id||a.key===d.name||a.fieldName===d.name);return c}(a,d),missing:[...new Set(c)],conflicts:function(a,b){let c=b?.factFields.map(a=>a.name)||[...new Set(a.map(a=>a.key))],d=[];for(let b of c){let c=a.filter(a=>a.key===b||a.fieldName===b),e=new Map;for(let a of c){let b=aW(a.value).replace(/\s+/gu,"").replace(/[,。,.;;::]/gu,"").toLowerCase();b&&e.set(b,[...e.get(b)||[],a])}if(e.size>1){let a=[...e.values()].map(a=>`${a[0].value}(${a.map(a=>a.sourceFile).join("、")})`).join(" vs ");d.push(`事实冲突:${b} 存在多个来源值:${a}`)}}return d}(a,d)}}(cl,cm,aY,ab),ct=aN.map(a=>{let b=ab.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=[...new Set([...a.missingFacts||[],...b?.requiredFactIds||[]].filter(Boolean))],d=c.filter(b=>!a.missingFacts.includes(b)),e=c.filter(b=>a.missingFacts.includes(b)),f=+(a.evidence.length>0),g=c.length?d.length/c.length:1;return{chapterId:a.id,title:a.title,requiredFacts:c,coveredFacts:d,missingFacts:e,evidenceCount:a.evidence.length,readinessRate:Math.min(1,.7*g+.3*f)}}),cu=function(a,b=[],c){let d=[],e=[];for(let b of a)0===b.evidence.length&&d.push(`${b.title} 未检索到资料证据`),b.content.length<80&&d.push(`${b.title} 内容较短,建议人工补充或重新生成`);c&&a.length<c.chapters.length&&e.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===bl(c).length&&e.push("模板未绑定任何提示词");let f=new Set(b.map(a=>a.roleId));for(let a of["project_fact","rule"])c?.fileBindings?.some(b=>b.roleId===a)&&!f.has(a)&&d.push(`${a} 角色未抽取到结构化事实`);return{passed:0===e.length,warnings:d,errors:e}}(aN,cl,j);cu.warnings.push(...ah.warnings),cu.errors.push(...ah.blockingIssues);let cv=function(a,b,c){let d=[...a.errors.map(a=>({level:"error",message:a,suggestion:"请补充配置或资料后重新生成。"})),...a.warnings.map(a=>({level:"warning",message:a,suggestion:"建议人工确认或补充对应资料。"}))];return c.some(a=>a.content.includes("资料未提供"))&&d.push({level:"warning",message:"存在资料未提供章节",suggestion:"请检查项目角色配置中的文件绑定和顺序。"}),b.conflicts.length>0&&d.push(...b.conflicts.map(a=>({level:"error",message:a}))),d}(cu,cs,aN);cv.push(...function(a){let b=[];for(let c of a)0===c.evidenceCount?b.push({level:"error",message:`章节缺少证据:${c.title}`,suggestion:"请补充对应项目资料或调整模板章节检索词。"}):c.readinessRate<.5&&b.push({level:"warning",message:`章节事实覆盖率较低:${c.title} ${Math.round(100*c.readinessRate)}%`,suggestion:"建议补充章节 requiredFacts 或项目资料证据。"});return b}(ct));let cw=a4(ba,j),cx=await bY({template:j,chapters:aN,budget:cb,promptTexts:ak,requirement:a.requirement,forbidDrawingImages:cw,signal:a.signal});aN.splice(0,aN.length,...cx);let cy=bX(cb,aN.map(a=>a.content).join("\n\n")),cz=[cb.targetChars?`目标 ${cb.targetChars} 字`:void 0,cb.targetPages?`目标 ${cb.targetPages} 页`:void 0].filter(Boolean).join(" / ")||"默认章节深度",cA=a2({type:"validation",roleId:"document-budget",status:cb.minChars&&cy.currentChars<cb.minChars?"fallback":"success",message:`文档预算:当前 ${cy.currentChars} 字,预计 ${cy.estimatedPages} 页;${cz}`},{subtitle:"文档预算"});B.push(cA),a.onProgress?.([...B]);let cB=a$.filter(a=>"chapter_generation"===a.type&&"fallback"===a.status).length,cC=a$.filter(a=>"chapter_generation"===a.type&&"failed"===a.status).length;cB>0&&cv.push({level:"error",message:`章节生成存在兜底:${cB} 章`,suggestion:"请检查模型调用、提示词长度或证据负载后重新生成。"}),cC>0&&cv.push({level:"warning",message:`部分章节生成失败:${cC} 章`,suggestion:aZ.slice(0,6).join(";")||"请检查模型调用或资料配置后重新生成失败章节。"});let cD=cv.filter(a=>"error"===a.level&&by(a)).length,cE=[...B];b9(cE,a2({type:"validation",roleId:"document-workflow",status:cD>0?"failed":"success",message:`阻断 ${cD},错误 ${cu.errors.length},警告 ${cu.warnings.length}`},{subtitle:"最终规范校验"})),b9(cE,a2({type:"formatting",roleId:"document-workflow",status:"success",message:"已生成正式排版 Markdown"})),b9(cE,a2({type:"export_ready",roleId:"document-workflow",status:cD>0?"fallback":"success",message:cD>0?"导出存在风险项,仍可导出,请人工复核":"已准备好导出 Markdown/HTML/DOCX/PDF"}));let cF={templateId:j.id,templateName:j.name,title:j.outputTitle,requirement:a.requirement||"",exportSettings:j.exportSettings,generationSettings:j.generationSettings,facts:cg,structuredFacts:cl,factsModel:cs,chapters:aN,sources:cr,missingItems:[...new Set(aY)],validation:cu,validationIssues:cv,executionStages:cE,exportGate:{passed:!0,blockingIssues:[],checklist:[]},assets:[],generatedAt:Date.now()},cG=b7(cF);b8(a.signal);let cH=aN.filter(a=>0===a.evidence.length||a.missingFacts.length>0||bA(a.content)<Math.floor(.7*(cb.chapterTargets.get(a.id)||1200))||bd({chapter:bO.find(b=>b.id===a.id)||{id:a.id,title:a.title,purpose:"",queries:[],requiredFacts:[],sections:a.sections},content:a.content,missingFacts:a.missingFacts,targetWords:cb.chapterTargets.get(a.id)||1200}).length>0),cI=cD>0||cv.some(a=>/事实一致性|项目污染|章节生成存在兜底|章节生成失败|阻断/u.test(a.message))||cH.length>Math.max(3,Math.floor(.35*aN.length))?await bZ({template:j,spec:ab,markdown:cG,evidence:aX,promptTexts:ap||ak,projectContext:bU,requirement:a.requirement}):{markdown:cG,stage:{type:"llm_review",roleId:"llm-review",status:cH.length>0?"skipped":"success",message:cH.length>0?`本地风险扫描发现 ${cH.length} 个低/中风险章节,已在章节阶段完成局部自检修复,跳过全文审查`:"本地风险扫描未发现需要 LLM 深度审查的章节,跳过全文审查"}};b8(a.signal);let cJ=b0(a5(cI.markdown===cG?b7({...cF,validationIssues:cv,exportGate:cF.exportGate,executionStages:cE}):cI.markdown,cw)),cK=b6(cJ,j).map(a=>a.message),cL=bL(cJ).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cM=bM(cJ,j).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cN=bK(cJ,cs).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cO=aa({assignments:aP,markdown:cJ}).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cP=bJ(cJ).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cQ=bG(cJ).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cR=bH(cJ).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cS=bI(aN).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cT=b1(cJ).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cU=[...bb(cJ,aN,bv,ba,cw),...cK,...cL,...cM,...cN,...cO,...cP,...cQ,...cR,...cS,...cT],cV=await bf({markdown:cJ,template:j,chapters:aN,promptTexts:ak,requirement:a.requirement,issues:cU,forbidDrawingImages:cw});b8(a.signal);let cW=cV.stage?[...cE,cI.stage,cV.stage]:[...cE,cI.stage],cX=cV.chapters,cY=bX(cb,cX.map(a=>a.content).join("\n\n"));cb.minChars&&cY.currentChars<Math.floor(.9*cb.minChars)&&(cX=await bY({template:j,chapters:cX,budget:cb,promptTexts:ak,requirement:a.requirement,forbidDrawingImages:cw,signal:a.signal}));let cZ=b7({...cF,chapters:cX,validationIssues:cv,exportGate:cF.exportGate,executionStages:cE}),c$=function(a,b){let c=b4(b3(a),b);return b.map((a,b)=>{let d=c.search(RegExp(`^##\\s+${b5(aA(b,a.title))}\\s*$`,"mu"));if(d<0)return a.sections||[];let e=c.slice(d),f=e.slice(1).search(/^##\s+/mu),g=b$(f>=0?e.slice(0,f+1):e);return g.length>0?g:a.sections||[]})}(cZ,cX),c_=cX.map((a,b)=>({...a,sections:c$[b]||a.sections||[]})),c0=b0(a9(function(a,b){let c=b4(a,b),d=b2(b);if(/^##\s+目录\s*$/mu.test(c))return c.replace(/^##\s+目录\s*$[\s\S]*?(?=\n<div class="page-break"><\/div>|\n##\s+)/mu,d.trim());let e='<div class="page-break"></div>',f=c.indexOf(e);if(f>=0){let a=f+e.length;return`${c.slice(0,a)}
|
|
83
|
+
${g.join("\n")}`:"",a.missingFacts.length?`当前检索未充分命中的事实:${a.missingFacts.join("、")}。如资料未明确提供,不得编造具体数值,应写成需要复核的条件、假设或处理措施。`:"",`本章可用资料来源约 ${h} 个文件,正文必须把可用事实内化到对应小节,不得单列后台资料清单。`].filter(Boolean).join("\n")}({chapter:c,plan:f,spec:ab,roleFacts:n,technicalFactAssignment:s,projectBasicFacts:A,evidence:p,missingFacts:v}),F=ab?.chapterRules.find(a=>a.id===c.id||a.title===c.title),G=cb.chapterTargets.get(c.id)||1200,V=Math.max(f?.minWords||0,F?.minWords||0,ab?.dynamicChapterRule.minWordsPerChapter||0,Math.floor(.82*G),1200),X=bR(V,G),aa=await bu(b=>bQ({template:j,chapter:c,evidence:p,missingFacts:v,promptTexts:ak,projectContext:bU,requirement:a.requirement,roleContext:z,targetWords:G,forbidDrawingImages:x,factCoverageContext:E,signal:b}),bS(G),a.signal);if(aa||(aa=await bu(b=>bN(j,c,p,v,ak,bU,a.requirement,z,{forbidDrawingImages:x,minWords:V,targetWords:G,maxTokens:X,technicalFactContext:t,coverageMatrixContext:u,projectBasicFactContext:D,factCoverageContext:E,signal:b}),bS(G),a.signal)),b8(a.signal),!aa){let b=p.slice(0,80),d=z.slice(0,12e3);aa=await bu(e=>bN(j,c,b,v,ak,bU,a.requirement,d,{forbidDrawingImages:x,minWords:Math.max(900,Math.floor(.75*V)),targetWords:G,maxTokens:X,technicalFactContext:t.slice(0,12e3),coverageMatrixContext:u.slice(0,8e3),projectBasicFactContext:D.slice(0,8e3),factCoverageContext:E.slice(0,1e4),signal:e}),bS(G),a.signal)}if(b8(a.signal),!aa)throw Error(`${c.title} 大模型未返回有效章节正文`);aa=await bV({template:j,chapter:c,content:aa,evidence:p,missingFacts:v,promptTexts:ak,projectContext:bU,requirement:a.requirement,roleContext:z,targetWords:G,forbidDrawingImages:x,factCoverageContext:E,signal:a.signal});let ac=bd({chapter:c,content:aa,missingFacts:v,targetWords:G});ac.length>0&&(aa=await be({template:j,chapter:{id:c.id,title:c.title,content:aa,evidence:p,missingFacts:v,sections:c.sections||[]},issues:ac.slice(0,5),promptTexts:ak,requirement:a.requirement,forbidDrawingImages:x,signal:a.signal}),b8(a.signal));let ad=await bW({template:j,chapter:c,content:aa,evidence:p,promptTexts:ak,requirement:a.requirement,roleContext:z,targetChars:Math.floor(.95*G),forbidDrawingImages:x,maxTokens:X,signal:a.signal}),ae=ad.content,af=bA(ae),ag=c.sections?.length?c.sections:b$(ae);a$.push(a2({type:"chapter_generation",roleId:"chapter_generation",promptId:C.find(a=>"chapter_generation"===a.roleId)?.promptId,status:"success",message:ca(`${ax(c.title)} 已由大模型生成${ad.rounds>0?`并扩写 ${ad.rounds} 轮`:""}:当前 ${af} 字 / 目标 ${Math.floor(.95*G)} 字`,b)},{subtitle:ax(c.title),order:e})),aN.push({id:c.id,title:c.title,content:ae,evidence:p,missingFacts:v,sections:ag})}catch(b){if(a.signal?.aborted)throw b;console.error(`[gen] chapter ${c.title} failed:`,b),aZ.push(`${c.title}:${b instanceof Error?b.message:"生成失败"}`),a$.push(a2({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${ax(c.title)} 生成失败`},{subtitle:ax(c.title),order:e}))}B.some(a=>"chapter_generation"===a.type&&a.message===a$[a$.length-1]?.message)||B.push(a$[a$.length-1]),a.onProgress?.([...B])}))}if(aN.sort((a,b)=>bO.findIndex(b=>b.id===a.id)-bO.findIndex(a=>a.id===b.id)),aP.sort((a,b)=>bO.findIndex(b=>b.id===a.chapterId)-bO.findIndex(a=>a.id===b.chapterId)),0===aN.length)throw Error(`章节生成未完成:${aZ.slice(0,6).join(";")||"没有生成任何有效章节"}`);b8(a.signal);let cf={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{cf=await bw(i,aX,a.signal)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fileUnderstanding failed:",b)}for(let b of(b8(a.signal),cf.notes))aX.push({chapterId:"multimodal-file-understanding",filePath:"多模态模型文件理解结果",score:1,content:b,roleId:"multimodal-files",processingType:"reference",source:"multimodal"});let cg=function(a,b,c){let d={};for(let e of aF(a,c)){let a=b.find(a=>aG(a,e));a&&(d[e.name]=`${a.content.replace(/\s+/gu," ").slice(0,180)}(来源:${a.filePath},角色:${a.roleId||"未标注"})`)}return d}(j,aX,ab);for(let a of ba)for(let b of a.facts)cg[b.key]=`${aW(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let ch=function(a,b,c){let d=aF(b,c).map(a=>({field:a,pattern:function(a){let b=a.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");return RegExp(`${b}[::\\s]+([^\\n,。;;]+)`,"u")}(a.name)})),e=[];for(let b of a)for(let{field:a,pattern:c}of d){if(!aG(b,a))continue;let d=b.content.match(c)||[void 0,b.content.replace(/\s+/gu," ").slice(0,220)],f=d?.[1]?.trim();f&&!e.some(b=>b.fieldId===a.id&&b.value===f)&&e.push({key:a.name,fieldId:a.id,fieldName:a.name,value:f.slice(0,300),sourceFile:b.filePath,roleId:b.roleId||"unknown",processingType:b.processingType,confidence:b.score,sourceRef:{filePath:b.filePath,roleId:b.roleId||"unknown",processingType:b.processingType,sectionTitle:b.sectionTitle}})}return e}(aX,j,ab),ci=ba.flatMap(a=>a.facts.map(a=>({key:a.key,value:aW(a.value),sourceFile:a.sourceFile,roleId:a.roleId,confidence:.9}))),cj=b_.map(a=>({key:a.key,value:a.value,sourceFile:a.sourceFile,roleId:"project_basic_fact",confidence:.85})),ck={facts:[],stages:[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"已有本地/角色事实覆盖主要必需字段,跳过 LLM 全量事实抽取"}]};if(function(a,b,c){let d=aF(b,c).filter(a=>a.required).slice(0,30);return 0===d.length?a.filter(a=>a.confidence>=.75&&aW(a.value).trim().length>=2).length<12:d.filter(b=>a.some(a=>(function(a,b){let c=aW(a.value).trim();if(!c||c.length<2||c.length>220&&a.confidence<.8)return!1;let d=`${a.fieldId||""} ${a.fieldName||""} ${a.key}`.toLowerCase();return!!(d.includes(b.id.toLowerCase())||d.includes(b.name.toLowerCase()))&&("project_basic_fact"===a.roleId||a.roleId?.startsWith("role-")||a.sourceRef?.filePath?a.confidence>=.55:a.confidence>=.75)})(a,b))).length/d.length<.9}([...cj,...ci,...ch],j,ab))try{ck=await bx(aX,am,j,ab,a.signal)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fact extraction failed:",b)}b8(a.signal);let cl=[...cj,...ci,...ch,...ck.facts];for(let a of(b9(B,cf.stage),ck.stages))b9(B,a);a.onProgress?.([...B]);let cm=function(a){let b=[],c=new Set;for(let g of a.filter(a=>"table"===a.processingType)){if(c.has(g.filePath))continue;c.add(g.filePath);let a=(0,k.aY)(),h=e.isAbsolute(g.filePath)?g.filePath:d.existsSync(e.join(a,"knowledgeBase",g.filePath))?e.join(a,"knowledgeBase",g.filePath):e.join(a,g.filePath),i=e.extname(g.filePath).toLowerCase();if(d.existsSync(h)&&[".xlsx",".xls",".csv"].includes(i))try{let a=f.readFile(h,{cellDates:!0,sheetStubs:!1});for(let c of a.SheetNames){let d=a.Sheets[c],e=f.utils.sheet_to_json(d,{header:1,raw:!1,defval:""}).map(a=>a.map(a=>String(a).trim())).filter(a=>a.some(Boolean));if(e.length<2)continue;let h=e.findIndex(a=>a.filter(Boolean).length>=2);if(h<0)continue;let i=e[h].filter(Boolean),j=e.slice(h+1).map(a=>a.slice(0,i.length)).filter(a=>a.some(Boolean));0!==j.length&&b.push({tableType:g.roleId||"table",sheet:c,headers:i,rows:j.slice(0,200),sourceFile:g.filePath,sourceRange:d["!ref"]})}continue}catch{}let j=g.content.split("\n").map(a=>a.trim()).filter(Boolean).filter(a=>a.includes("|")||a.includes(" ")||a.includes(","));if(j.length<2)continue;let l=j[0].includes("|")?"|":j[0].includes(" ")?" ":",",m=j.map(a=>a.split(l).map(a=>a.trim()).filter(Boolean)).filter(a=>a.length>1);m.length<2||b.push({tableType:g.roleId||"table",headers:m[0],rows:m.slice(1,80),sourceFile:g.filePath,sourceRange:g.sectionTitle})}return b}(aX),cn=aX.filter(a=>"pinned-evidence"===a.source).length,co=aX.filter(a=>"pinned-evidence"!==a.source&&"bound-file"!==a.source).length,cp=a2({type:"reference",roleId:"quality-enhancement",status:aX.length>0?"success":"skipped",message:`增强贡献:知识库证据 ${aX.length} 条,人工确认/固定证据 ${cn} 条,项目上下文 ${bT.length} 条,自动检索证据 ${co} 条`},{subtitle:"证据与上下文增强"});for(let b of(B.push(cp),a.onProgress?.([...B]),cl))cg[b.key]=`${aW(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let cq=new Map;for(let a of aX)cq.set(a.filePath,(cq.get(a.filePath)??0)+1);let cr=[...cq.entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),cs=function(a,b=[],c=[],d){let e=b=>a.filter(a=>b.some(b=>a.key.includes(b))),f=b=>a.filter(a=>a.processingType===b||a.roleId.includes(b)),g=a.filter(a=>/\d|DN|φ|Φ|mm|cm|m²|m3|MPa|kPa|℃|%|GB|JGJ|CJJ|台|套|个|项|㎡/iu.test(`${a.key} ${a.value}`)),h=a.filter(a=>"table"===a.processingType||/bill|boq|清单|工程量/u.test(`${a.roleId} ${a.sourceFile}`));return{project:a,schedule:e(["工期","开工","竣工","节点"]),quality:e(["质量"]),safety:e(["安全"]),resources:e(["劳动力","材料","机械","设备"]),tables:b,drawings:f("drawing"),bills:h,preciseFacts:g,rules:f("rule"),specifications:f("specification"),schemaFacts:function(a,b){let c={};for(let d of b?.factFields||[])c[d.id]=a.filter(a=>a.fieldId===d.id||a.key===d.name||a.fieldName===d.name);return c}(a,d),missing:[...new Set(c)],conflicts:function(a,b){let c=b?.factFields.map(a=>a.name)||[...new Set(a.map(a=>a.key))],d=[];for(let b of c){let c=a.filter(a=>a.key===b||a.fieldName===b),e=new Map;for(let a of c){let b=aW(a.value).replace(/\s+/gu,"").replace(/[,。,.;;::]/gu,"").toLowerCase();b&&e.set(b,[...e.get(b)||[],a])}if(e.size>1){let a=[...e.values()].map(a=>`${a[0].value}(${a.map(a=>a.sourceFile).join("、")})`).join(" vs ");d.push(`事实冲突:${b} 存在多个来源值:${a}`)}}return d}(a,d)}}(cl,cm,aY,ab),ct=aN.map(a=>{let b=ab.chapterRules.find(b=>b.id===a.id||b.title===a.title),c=[...new Set([...a.missingFacts||[],...b?.requiredFactIds||[]].filter(Boolean))],d=c.filter(b=>!a.missingFacts.includes(b)),e=c.filter(b=>a.missingFacts.includes(b)),f=+(a.evidence.length>0),g=c.length?d.length/c.length:1;return{chapterId:a.id,title:a.title,requiredFacts:c,coveredFacts:d,missingFacts:e,evidenceCount:a.evidence.length,readinessRate:Math.min(1,.7*g+.3*f)}}),cu=function(a,b=[],c){let d=[],e=[];for(let b of a)0===b.evidence.length&&d.push(`${b.title} 未检索到资料证据`),b.content.length<80&&d.push(`${b.title} 内容较短,建议人工补充或重新生成`);c&&a.length<c.chapters.length&&e.push(`章节生成不完整:已生成 ${a.length}/${c.chapters.length} 章`),c&&0===bl(c).length&&e.push("模板未绑定任何提示词");let f=new Set(b.map(a=>a.roleId));for(let a of["project_fact","rule"])c?.fileBindings?.some(b=>b.roleId===a)&&!f.has(a)&&d.push(`${a} 角色未抽取到结构化事实`);return{passed:0===e.length,warnings:d,errors:e}}(aN,cl,j);cu.warnings.push(...ah.warnings),cu.errors.push(...ah.blockingIssues);let cv=function(a,b,c){let d=[...a.errors.map(a=>({level:"error",message:a,suggestion:"请补充配置或资料后重新生成。"})),...a.warnings.map(a=>({level:"warning",message:a,suggestion:"建议人工确认或补充对应资料。"}))];return c.some(a=>a.content.includes("资料未提供"))&&d.push({level:"warning",message:"存在资料未提供章节",suggestion:"请检查项目角色配置中的文件绑定和顺序。"}),b.conflicts.length>0&&d.push(...b.conflicts.map(a=>({level:"error",message:a}))),d}(cu,cs,aN);cv.push(...function(a){let b=[];for(let c of a)0===c.evidenceCount?b.push({level:"error",message:`章节缺少证据:${c.title}`,suggestion:"请补充对应项目资料或调整模板章节检索词。"}):c.readinessRate<.5&&b.push({level:"warning",message:`章节事实覆盖率较低:${c.title} ${Math.round(100*c.readinessRate)}%`,suggestion:"建议补充章节 requiredFacts 或项目资料证据。"});return b}(ct));let cw=a4(ba,j),cx=await bY({template:j,chapters:aN,budget:cb,promptTexts:ak,requirement:a.requirement,forbidDrawingImages:cw,signal:a.signal});aN.splice(0,aN.length,...cx);let cy=bX(cb,aN.map(a=>a.content).join("\n\n")),cz=[cb.targetChars?`目标 ${cb.targetChars} 字`:void 0,cb.targetPages?`目标 ${cb.targetPages} 页`:void 0].filter(Boolean).join(" / ")||"默认章节深度",cA=a2({type:"validation",roleId:"document-budget",status:cb.minChars&&cy.currentChars<cb.minChars?"fallback":"success",message:`文档预算:当前 ${cy.currentChars} 字,预计 ${cy.estimatedPages} 页;${cz}`},{subtitle:"文档预算"});B.push(cA),a.onProgress?.([...B]);let cB=a$.filter(a=>"chapter_generation"===a.type&&"fallback"===a.status).length,cC=a$.filter(a=>"chapter_generation"===a.type&&"failed"===a.status).length;cB>0&&cv.push({level:"error",message:`章节生成存在兜底:${cB} 章`,suggestion:"请检查模型调用、提示词长度或证据负载后重新生成。"}),cC>0&&cv.push({level:"warning",message:`部分章节生成失败:${cC} 章`,suggestion:aZ.slice(0,6).join(";")||"请检查模型调用或资料配置后重新生成失败章节。"});let cD=cv.filter(a=>"error"===a.level&&by(a)).length,cE=[...B];b9(cE,a2({type:"validation",roleId:"document-workflow",status:cD>0?"failed":"success",message:`阻断 ${cD},错误 ${cu.errors.length},警告 ${cu.warnings.length}`},{subtitle:"最终规范校验"})),b9(cE,a2({type:"formatting",roleId:"document-workflow",status:"success",message:"已生成正式排版 Markdown"})),b9(cE,a2({type:"export_ready",roleId:"document-workflow",status:cD>0?"fallback":"success",message:cD>0?"导出存在风险项,仍可导出,请人工复核":"已准备好导出 Markdown/HTML/DOCX/PDF"}));let cF={templateId:j.id,templateName:j.name,title:j.outputTitle,requirement:a.requirement||"",exportSettings:j.exportSettings,generationSettings:j.generationSettings,facts:cg,structuredFacts:cl,factsModel:cs,chapters:aN,sources:cr,missingItems:[...new Set(aY)],validation:cu,validationIssues:cv,executionStages:cE,exportGate:{passed:!0,blockingIssues:[],checklist:[]},assets:[],generatedAt:Date.now()},cG=b7(cF);b8(a.signal);let cH=aN.filter(a=>0===a.evidence.length||a.missingFacts.length>0||bA(a.content)<Math.floor(.7*(cb.chapterTargets.get(a.id)||1200))||bd({chapter:bO.find(b=>b.id===a.id)||{id:a.id,title:a.title,purpose:"",queries:[],requiredFacts:[],sections:a.sections},content:a.content,missingFacts:a.missingFacts,targetWords:cb.chapterTargets.get(a.id)||1200}).length>0),cI=cD>0||cv.some(a=>/事实一致性|项目污染|章节生成存在兜底|章节生成失败|阻断/u.test(a.message))||cH.length>Math.max(3,Math.floor(.35*aN.length))?await bZ({template:j,spec:ab,markdown:cG,evidence:aX,promptTexts:ap||ak,projectContext:bU,requirement:a.requirement,signal:a.signal}):{markdown:cG,stage:{type:"llm_review",roleId:"llm-review",status:cH.length>0?"skipped":"success",message:cH.length>0?`本地风险扫描发现 ${cH.length} 个低/中风险章节,已在章节阶段完成局部自检修复,跳过全文审查`:"本地风险扫描未发现需要 LLM 深度审查的章节,跳过全文审查"}};b8(a.signal);let cJ=b0(a5(cI.markdown===cG?b7({...cF,validationIssues:cv,exportGate:cF.exportGate,executionStages:cE}):cI.markdown,cw)),cK=b6(cJ,j).map(a=>a.message),cL=bL(cJ).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cM=bM(cJ,j).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cN=bK(cJ,cs).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cO=aa({assignments:aP,markdown:cJ}).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cP=bJ(cJ).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cQ=bG(cJ).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cR=bH(cJ).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cS=bI(aN).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cT=b1(cJ).map(a=>`${a.message}${a.suggestion?`:${a.suggestion}`:""}`),cU=[...bb(cJ,aN,bv,ba,cw),...cK,...cL,...cM,...cN,...cO,...cP,...cQ,...cR,...cS,...cT],cV=await bf({markdown:cJ,template:j,chapters:aN,promptTexts:ak,requirement:a.requirement,issues:cU,forbidDrawingImages:cw,signal:a.signal});b8(a.signal);let cW=cV.stage?[...cE,cI.stage,cV.stage]:[...cE,cI.stage],cX=cV.chapters,cY=bX(cb,cX.map(a=>a.content).join("\n\n"));cb.minChars&&cY.currentChars<Math.floor(.9*cb.minChars)&&(cX=await bY({template:j,chapters:cX,budget:cb,promptTexts:ak,requirement:a.requirement,forbidDrawingImages:cw,signal:a.signal}));let cZ=b7({...cF,chapters:cX,validationIssues:cv,exportGate:cF.exportGate,executionStages:cE}),c$=function(a,b){let c=b4(b3(a),b);return b.map((a,b)=>{let d=c.search(RegExp(`^##\\s+${b5(aA(b,a.title))}\\s*$`,"mu"));if(d<0)return a.sections||[];let e=c.slice(d),f=e.slice(1).search(/^##\s+/mu),g=b$(f>=0?e.slice(0,f+1):e);return g.length>0?g:a.sections||[]})}(cZ,cX),c_=cX.map((a,b)=>({...a,sections:c$[b]||a.sections||[]})),c0=b0(a9(function(a,b){let c=b4(a,b),d=b2(b);if(/^##\s+目录\s*$/mu.test(c))return c.replace(/^##\s+目录\s*$[\s\S]*?(?=\n<div class="page-break"><\/div>|\n##\s+)/mu,d.trim());let e='<div class="page-break"></div>',f=c.indexOf(e);if(f>=0){let a=f+e.length;return`${c.slice(0,a)}
|
|
84
84
|
|
|
85
85
|
${d}
|
|
86
86
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:[],rootMainFiles:[],rootMainFilesTree:{},pages:{"/":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/694-2d545cfbb9779f2c.js","static/chunks/795-d8fb7a0420512701.js","static/chunks/pages/index-a2a24e9602e7ea52.js"],"/_app":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/css/38dba0a7a42a8df3.css","static/chunks/pages/_app-62cd5d1172d08036.js"],"/_error":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/pages/_error-282257fbdcc167b4.js"],"/asset-library":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/102-881dcc464f983c89.js","static/chunks/317-18aac52df5551e76.js","static/chunks/pages/asset-library-8ba41e8bc4644f41.js"],"/context/long-term":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/576-6699fed6c88502fe.js","static/chunks/195-2c0168eacab722d2.js","static/chunks/985-4b4a3ed36ada16eb.js","static/chunks/375-4a1c73eb22d653d2.js","static/chunks/102-881dcc464f983c89.js","static/chunks/289-0031e62ca424247b.js","static/chunks/455-97ad88d6604f54b7.js","static/chunks/932-2f195f4200ce9378.js","static/chunks/pages/context/long-term-994425812e118c6c.js"],"/context/short-term":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/576-6699fed6c88502fe.js","static/chunks/195-2c0168eacab722d2.js","static/chunks/985-4b4a3ed36ada16eb.js","static/chunks/375-4a1c73eb22d653d2.js","static/chunks/102-881dcc464f983c89.js","static/chunks/289-0031e62ca424247b.js","static/chunks/455-97ad88d6604f54b7.js","static/chunks/932-2f195f4200ce9378.js","static/chunks/pages/context/short-term-fcae99e1744d998a.js"],"/document-roles":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/576-6699fed6c88502fe.js","static/chunks/195-2c0168eacab722d2.js","static/chunks/455-97ad88d6604f54b7.js","static/chunks/496-4fb9a063790e65ff.js","static/chunks/pages/document-roles-fd02980db151650c.js"],"/documents":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/576-6699fed6c88502fe.js","static/chunks/195-2c0168eacab722d2.js","static/chunks/375-4a1c73eb22d653d2.js","static/chunks/455-97ad88d6604f54b7.js","static/chunks/506-93f730bc149d0dce.js","static/chunks/940-7cb66111eee2f9fb.js","static/chunks/499-d6bcc76195b28550.js","static/chunks/pages/documents-
|
|
1
|
+
globalThis.__BUILD_MANIFEST={polyfillFiles:["static/chunks/polyfills-42372ed130431b0a.js"],devFiles:[],ampDevFiles:[],lowPriorityFiles:[],rootMainFiles:[],rootMainFilesTree:{},pages:{"/":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/694-2d545cfbb9779f2c.js","static/chunks/795-d8fb7a0420512701.js","static/chunks/pages/index-a2a24e9602e7ea52.js"],"/_app":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/css/38dba0a7a42a8df3.css","static/chunks/pages/_app-62cd5d1172d08036.js"],"/_error":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/pages/_error-282257fbdcc167b4.js"],"/asset-library":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/102-881dcc464f983c89.js","static/chunks/317-18aac52df5551e76.js","static/chunks/pages/asset-library-8ba41e8bc4644f41.js"],"/context/long-term":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/576-6699fed6c88502fe.js","static/chunks/195-2c0168eacab722d2.js","static/chunks/985-4b4a3ed36ada16eb.js","static/chunks/375-4a1c73eb22d653d2.js","static/chunks/102-881dcc464f983c89.js","static/chunks/289-0031e62ca424247b.js","static/chunks/455-97ad88d6604f54b7.js","static/chunks/932-2f195f4200ce9378.js","static/chunks/pages/context/long-term-994425812e118c6c.js"],"/context/short-term":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/576-6699fed6c88502fe.js","static/chunks/195-2c0168eacab722d2.js","static/chunks/985-4b4a3ed36ada16eb.js","static/chunks/375-4a1c73eb22d653d2.js","static/chunks/102-881dcc464f983c89.js","static/chunks/289-0031e62ca424247b.js","static/chunks/455-97ad88d6604f54b7.js","static/chunks/932-2f195f4200ce9378.js","static/chunks/pages/context/short-term-fcae99e1744d998a.js"],"/document-roles":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/576-6699fed6c88502fe.js","static/chunks/195-2c0168eacab722d2.js","static/chunks/455-97ad88d6604f54b7.js","static/chunks/496-4fb9a063790e65ff.js","static/chunks/pages/document-roles-fd02980db151650c.js"],"/documents":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/576-6699fed6c88502fe.js","static/chunks/195-2c0168eacab722d2.js","static/chunks/375-4a1c73eb22d653d2.js","static/chunks/455-97ad88d6604f54b7.js","static/chunks/506-93f730bc149d0dce.js","static/chunks/940-7cb66111eee2f9fb.js","static/chunks/499-d6bcc76195b28550.js","static/chunks/pages/documents-73cbf7cdbcc4e6f6.js"],"/guide":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/940-7cb66111eee2f9fb.js","static/chunks/20-86ac6910225cce4e.js","static/chunks/pages/guide-295174493709ecbb.js"],"/knowledge":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/pages/knowledge-905248d8dcb15453.js"],"/knowledge/file-detail":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/576-6699fed6c88502fe.js","static/chunks/985-4b4a3ed36ada16eb.js","static/chunks/375-4a1c73eb22d653d2.js","static/chunks/102-881dcc464f983c89.js","static/chunks/289-0031e62ca424247b.js","static/chunks/506-93f730bc149d0dce.js","static/chunks/861-91cbdd34b8e23151.js","static/css/09be1fdeab8595ab.css","static/chunks/pages/knowledge/file-detail-87669392540614e4.js"],"/knowledge/files":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/576-6699fed6c88502fe.js","static/chunks/985-4b4a3ed36ada16eb.js","static/chunks/375-4a1c73eb22d653d2.js","static/chunks/102-881dcc464f983c89.js","static/chunks/289-0031e62ca424247b.js","static/css/09be1fdeab8595ab.css","static/chunks/pages/knowledge/files-14ef1012fd201e47.js"],"/knowledge/manage":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/506-93f730bc149d0dce.js","static/chunks/788-7f7359a830e3f4fd.js","static/chunks/pages/knowledge/manage-ed99a6cb254ddbb7.js"],"/knowledge/search":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/576-6699fed6c88502fe.js","static/chunks/506-93f730bc149d0dce.js","static/chunks/938-45efd516bb130bd5.js","static/css/09be1fdeab8595ab.css","static/chunks/pages/knowledge/search-afb423fc22eb623b.js"],"/models":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/576-6699fed6c88502fe.js","static/chunks/195-2c0168eacab722d2.js","static/chunks/985-4b4a3ed36ada16eb.js","static/chunks/455-97ad88d6604f54b7.js","static/chunks/938-45efd516bb130bd5.js","static/chunks/647-d5e08fda405f7059.js","static/chunks/pages/models-d5e80645dc4a61b1.js"],"/overview":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/694-2d545cfbb9779f2c.js","static/chunks/795-d8fb7a0420512701.js","static/chunks/pages/overview-1260176045ed5f7a.js"],"/prompt":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/576-6699fed6c88502fe.js","static/chunks/195-2c0168eacab722d2.js","static/chunks/985-4b4a3ed36ada16eb.js","static/chunks/525-5d947137d894f5fe.js","static/chunks/pages/prompt-9b869fbe3463020d.js"],"/settings":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/787-c18af810af3433f6.js","static/chunks/pages/settings-fa9d6a56898ba678.js"],"/system/logs":["static/chunks/webpack-77d10b4726f13aa5.js","static/chunks/framework-161be364fd69a7ce.js","static/chunks/main-91fb767ebd74c9c1.js","static/chunks/433-233659be69169c19.js","static/chunks/576-6699fed6c88502fe.js","static/chunks/195-2c0168eacab722d2.js","static/chunks/985-4b4a3ed36ada16eb.js","static/chunks/375-4a1c73eb22d653d2.js","static/chunks/102-881dcc464f983c89.js","static/chunks/289-0031e62ca424247b.js","static/chunks/861-91cbdd34b8e23151.js","static/chunks/pages/system/logs-cbeeb77dc70086ae.js"]},ampFirstPages:[]},globalThis.__BUILD_MANIFEST.lowPriorityFiles=["/static/"+process.env.__NEXT_BUILD_ID+"/_buildManifest.js",,"/static/"+process.env.__NEXT_BUILD_ID+"/_ssgManifest.js"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" data-next-head=""/><title data-next-head="">404: This page could not be found</title><link rel="preload" href="/_next/static/css/38dba0a7a42a8df3.css" as="style"/><link rel="stylesheet" href="/_next/static/css/38dba0a7a42a8df3.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-77d10b4726f13aa5.js" defer=""></script><script src="/_next/static/chunks/framework-161be364fd69a7ce.js" defer=""></script><script src="/_next/static/chunks/main-91fb767ebd74c9c1.js" defer=""></script><script src="/_next/static/chunks/pages/_app-62cd5d1172d08036.js" defer=""></script><script src="/_next/static/chunks/pages/_error-282257fbdcc167b4.js" defer=""></script><script src="/_next/static/wqFguWd59uWhcZWSeWsai/_buildManifest.js" defer=""></script><script src="/_next/static/wqFguWd59uWhcZWSeWsai/_ssgManifest.js" defer=""></script></head><body><div id="__next"><script>((e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=["light","dark"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n==="system"?c():n;p(y)}catch(n){}})("class","theme","system",null,["light","dark"],null,true,true)</script><div class="css-1pi45l5 ant-app css-var-_R_16_"><aside class="sidebar"><a href="/overview"><div class="sidebarLogo"><div class="sidebarLogoTitle" style="font-size:20px;font-weight:800;letter-spacing:0.5px"><span class="logoGradient">Customize Agent</span></div></div></a><button class="sidebarCollapseBtn" aria-label="收起侧边栏"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-panel-left-close"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M9 3v18"></path><path d="m16 15-3-3 3-3"></path></svg></button><nav class="sidebarNav"><a href="/overview"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg><span>总览</span></div></a><div><div class="sidebarItem sidebarParent"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-database"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5V19A9 3 0 0 0 21 19V5"></path><path d="M3 12A9 3 0 0 0 21 12"></path></svg><span>知识库</span><span class="sidebarChevron"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right"><path d="m9 18 6-6-6-6"></path></svg></span></div></div><a href="/models"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cpu"><rect width="16" height="16" x="4" y="4" rx="2"></rect><rect width="6" height="6" x="9" y="9" rx="1"></rect><path d="M15 2v2"></path><path d="M15 20v2"></path><path d="M2 15h2"></path><path d="M2 9h2"></path><path d="M20 15h2"></path><path d="M20 9h2"></path><path d="M9 2v2"></path><path d="M9 20v2"></path></svg><span>模型配置</span></div></a><a href="/prompt"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg><span>提示词管理</span></div></a><a href="/document-roles"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span>角色配置</span></div></a><a href="/documents"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-files"><path d="M20 7h-3a2 2 0 0 1-2-2V2"></path><path d="M9 18a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h7l4 4v10a2 2 0 0 1-2 2Z"></path><path d="M3 7.6v12.8A1.6 1.6 0 0 0 4.6 22h9.8"></path></svg><span>工作流模版库</span></div></a><a href="/asset-library"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-folder-open"><path d="m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2"></path></svg><span>生成资源</span></div></a><div><div class="sidebarItem sidebarParent"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-brain"><path d="M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z"></path><path d="M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z"></path><path d="M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4"></path><path d="M17.599 6.5a3 3 0 0 0 .399-1.375"></path><path d="M6.003 5.125A3 3 0 0 0 6.401 6.5"></path><path d="M3.477 10.896a4 4 0 0 1 .585-.396"></path><path d="M19.938 10.5a4 4 0 0 1 .585.396"></path><path d="M6 18a4 4 0 0 1-1.967-.516"></path><path d="M19.967 17.484A4 4 0 0 1 18 18"></path></svg><span>上下文工程</span><span class="sidebarChevron"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right"><path d="m9 18 6-6-6-6"></path></svg></span></div></div><a href="/system/logs"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bug"><path d="m8 2 1.88 1.88"></path><path d="M14.12 3.88 16 2"></path><path d="M9 7.13v-1a3.003 3.003 0 1 1 6 0v1"></path><path d="M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6"></path><path d="M12 20v-9"></path><path d="M6.53 9C4.6 8.8 3 7.1 3 5"></path><path d="M6 13H2"></path><path d="M3 21c0-2.1 1.7-3.9 3.8-4"></path><path d="M20.97 5c0 2.1-1.6 3.8-3.5 4"></path><path d="M22 13h-4"></path><path d="M17.2 17c2.1.1 3.8 1.9 3.8 4"></path></svg><span>系统日志</span></div></a><a href="/guide"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path></svg><span>指引</span></div></a><a href="/settings"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span>设置</span></div></a></nav></aside><div class="mainContent"><header class="topbar"><div class="flex-1"></div><span class="ant-badge css-1pi45l5 css-var-_R_16_"><button type="button" class="ant-btn css-1pi45l5 css-var-_R_16_ ant-btn-default ant-btn-color-default ant-btn-variant-outlined topbarBtn"><span class="ant-btn-icon"><span role="img" aria-label="clock-circle" class="anticon anticon-clock-circle"><svg viewBox="64 64 896 896" focusable="false" data-icon="clock-circle" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"></path><path d="M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"></path></svg></span></span><span>后台任务</span></button></span><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg><span>深色</span></button><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-languages"><path d="m5 8 6 6"></path><path d="m4 14 6-6 2-3"></path><path d="M2 5h12"></path><path d="M7 2h1"></path><path d="m22 22-5-10-5 10"></path><path d="M14 18h6"></path></svg><span>English</span></button></header><main class="mainInner"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"wqFguWd59uWhcZWSeWsai","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" data-next-head=""/><title data-next-head="">404: This page could not be found</title><link rel="preload" href="/_next/static/css/38dba0a7a42a8df3.css" as="style"/><link rel="stylesheet" href="/_next/static/css/38dba0a7a42a8df3.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-77d10b4726f13aa5.js" defer=""></script><script src="/_next/static/chunks/framework-161be364fd69a7ce.js" defer=""></script><script src="/_next/static/chunks/main-91fb767ebd74c9c1.js" defer=""></script><script src="/_next/static/chunks/pages/_app-62cd5d1172d08036.js" defer=""></script><script src="/_next/static/chunks/pages/_error-282257fbdcc167b4.js" defer=""></script><script src="/_next/static/GMk4Lx5iFiGoAK9ZtW0b0/_buildManifest.js" defer=""></script><script src="/_next/static/GMk4Lx5iFiGoAK9ZtW0b0/_ssgManifest.js" defer=""></script></head><body><div id="__next"><script>((e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=["light","dark"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n==="system"?c():n;p(y)}catch(n){}})("class","theme","system",null,["light","dark"],null,true,true)</script><div class="css-1pi45l5 ant-app css-var-_R_16_"><aside class="sidebar"><a href="/overview"><div class="sidebarLogo"><div class="sidebarLogoTitle" style="font-size:20px;font-weight:800;letter-spacing:0.5px"><span class="logoGradient">Customize Agent</span></div></div></a><button class="sidebarCollapseBtn" aria-label="收起侧边栏"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-panel-left-close"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M9 3v18"></path><path d="m16 15-3-3 3-3"></path></svg></button><nav class="sidebarNav"><a href="/overview"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg><span>总览</span></div></a><div><div class="sidebarItem sidebarParent"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-database"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5V19A9 3 0 0 0 21 19V5"></path><path d="M3 12A9 3 0 0 0 21 12"></path></svg><span>知识库</span><span class="sidebarChevron"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right"><path d="m9 18 6-6-6-6"></path></svg></span></div></div><a href="/models"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cpu"><rect width="16" height="16" x="4" y="4" rx="2"></rect><rect width="6" height="6" x="9" y="9" rx="1"></rect><path d="M15 2v2"></path><path d="M15 20v2"></path><path d="M2 15h2"></path><path d="M2 9h2"></path><path d="M20 15h2"></path><path d="M20 9h2"></path><path d="M9 2v2"></path><path d="M9 20v2"></path></svg><span>模型配置</span></div></a><a href="/prompt"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg><span>提示词管理</span></div></a><a href="/document-roles"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span>角色配置</span></div></a><a href="/documents"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-files"><path d="M20 7h-3a2 2 0 0 1-2-2V2"></path><path d="M9 18a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h7l4 4v10a2 2 0 0 1-2 2Z"></path><path d="M3 7.6v12.8A1.6 1.6 0 0 0 4.6 22h9.8"></path></svg><span>工作流模版库</span></div></a><a href="/asset-library"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-folder-open"><path d="m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2"></path></svg><span>生成资源</span></div></a><div><div class="sidebarItem sidebarParent"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-brain"><path d="M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z"></path><path d="M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z"></path><path d="M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4"></path><path d="M17.599 6.5a3 3 0 0 0 .399-1.375"></path><path d="M6.003 5.125A3 3 0 0 0 6.401 6.5"></path><path d="M3.477 10.896a4 4 0 0 1 .585-.396"></path><path d="M19.938 10.5a4 4 0 0 1 .585.396"></path><path d="M6 18a4 4 0 0 1-1.967-.516"></path><path d="M19.967 17.484A4 4 0 0 1 18 18"></path></svg><span>上下文工程</span><span class="sidebarChevron"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right"><path d="m9 18 6-6-6-6"></path></svg></span></div></div><a href="/system/logs"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bug"><path d="m8 2 1.88 1.88"></path><path d="M14.12 3.88 16 2"></path><path d="M9 7.13v-1a3.003 3.003 0 1 1 6 0v1"></path><path d="M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6"></path><path d="M12 20v-9"></path><path d="M6.53 9C4.6 8.8 3 7.1 3 5"></path><path d="M6 13H2"></path><path d="M3 21c0-2.1 1.7-3.9 3.8-4"></path><path d="M20.97 5c0 2.1-1.6 3.8-3.5 4"></path><path d="M22 13h-4"></path><path d="M17.2 17c2.1.1 3.8 1.9 3.8 4"></path></svg><span>系统日志</span></div></a><a href="/guide"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path></svg><span>指引</span></div></a><a href="/settings"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span>设置</span></div></a></nav></aside><div class="mainContent"><header class="topbar"><div class="flex-1"></div><span class="ant-badge css-1pi45l5 css-var-_R_16_"><button type="button" class="ant-btn css-1pi45l5 css-var-_R_16_ ant-btn-default ant-btn-color-default ant-btn-variant-outlined topbarBtn"><span class="ant-btn-icon"><span role="img" aria-label="clock-circle" class="anticon anticon-clock-circle"><svg viewBox="64 64 896 896" focusable="false" data-icon="clock-circle" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372s166.6-372 372-372 372 166.6 372 372-166.6 372-372 372z"></path><path d="M686.7 638.6L544.1 535.5V288c0-4.4-3.6-8-8-8H488c-4.4 0-8 3.6-8 8v275.4c0 2.6 1.2 5 3.3 6.5l165.4 120.6c3.6 2.6 8.6 1.8 11.2-1.7l28.6-39c2.6-3.7 1.8-8.7-1.8-11.2z"></path></svg></span></span><span>后台任务</span></button></span><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg><span>深色</span></button><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-languages"><path d="m5 8 6 6"></path><path d="m4 14 6-6 2-3"></path><path d="M2 5h12"></path><path d="M7 2h1"></path><path d="m22 22-5-10-5 10"></path><path d="M14 18h6"></path></svg><span>English</span></button></header><main class="mainInner"><div style="font-family:system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"GMk4Lx5iFiGoAK9ZtW0b0","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|