@customize-agent/server 4.0.25 → 4.0.26

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 CHANGED
@@ -1 +1 @@
1
- 7zCRLzy9D4qDY-po_aPfX
1
+ Yb0BLdPOQ4eb6l81wnrct
@@ -5,8 +5,8 @@
5
5
  "devFiles": [],
6
6
  "ampDevFiles": [],
7
7
  "lowPriorityFiles": [
8
- "static/7zCRLzy9D4qDY-po_aPfX/_buildManifest.js",
9
- "static/7zCRLzy9D4qDY-po_aPfX/_ssgManifest.js"
8
+ "static/Yb0BLdPOQ4eb6l81wnrct/_buildManifest.js",
9
+ "static/Yb0BLdPOQ4eb6l81wnrct/_ssgManifest.js"
10
10
  ],
11
11
  "rootMainFiles": [],
12
12
  "rootMainFilesTree": {},
@@ -3,9 +3,9 @@
3
3
  "routes": {},
4
4
  "dynamicRoutes": {},
5
5
  "preview": {
6
- "previewModeId": "a4ee1b2829f4bb9068c58d984973ee8e",
7
- "previewModeSigningKey": "cd2488d794441052929cf60c1b895b22c690dba44edd6ce987ca352ebb80f466",
8
- "previewModeEncryptionKey": "b5ce615e2e5b330e13522106ae677d109d9c9162d48d3ba6bb278630563f3373"
6
+ "previewModeId": "3de6727981719a792844688a2b0b2baf",
7
+ "previewModeSigningKey": "9da713e206fb2bcd8c54cdea8f0cac643b3d6933fc887b4a958a868a09d35539",
8
+ "previewModeEncryptionKey": "ef45000c9237673301c97999fd5ee21cfaf08c398be62e0fe51791da34aacbe9"
9
9
  },
10
10
  "notFoundRoutes": []
11
11
  }
@@ -1,17 +1,16 @@
1
1
  "use strict";exports.id=3445,exports.ids=[3445],exports.modules={2323:(a,b,c)=>{c.d(b,{I:()=>f});var d=c(96770);let e=null;function f(){return e||(e=new d.ConfigStore),e}},23328:(a,b,c)=>{c.d(b,{Qh:()=>l,VS:()=>p,Yy:()=>o,aY:()=>n});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021);let j=null;function k(){return g.join(h.homedir(),".customize-agent")}function l(){return j||(j=new d.MultiProjectManager(k())),j}function m(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))&&(b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function n(){let a=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(a&&i.existsSync(a)&&!m(a))return g.resolve(a);let b=function(){let a=g.join(k(),"projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!m(a))}finally{b.close()}}();return b.length>0?b[0]:process.env.INIT_CWD&&!m(process.env.INIT_CWD)?process.env.INIT_CWD:g.resolve(process.cwd(),"../..")}function o(a,b={}){let c=new Map;for(let b of function(a){let b=g.join(h.homedir(),".customize-agent","projects",(0,d.computeProjectId)(g.resolve(a)),"kb.db");if(!i.existsSync(b))return[];let c=new d.IndexStateStore(b);try{return c.listRecords().map(a=>({...a,matchedBy:"metadata"}))}finally{c.close()}}(a))c.set(b.relativePath,b);for(let b of function(a){let b=g.join(a,"knowledgeBase");if(!i.existsSync(b))return[];let c=[],d=a=>{for(let e of i.readdirSync(a,{withFileTypes:!0})){let f=g.join(a,e.name);if(e.isDirectory()){d(f);continue}if(e.name.endsWith(".source.txt"))continue;let h=i.statSync(f),j=g.relative(b,f).split(g.sep).join("/");c.push({relativePath:j,category:j.includes("表格数据/")?"spreadsheet":j.includes("图片素材/")?"image":j.includes("图纸文件/")?"cad":j.includes("文档资料/")?"document":"other",format:g.extname(j).slice(1).toLowerCase()||"text",contentHash:"",fileSize:h.size,mtime:h.mtimeMs,chunkCount:0,collectionName:"",indexedAt:0,lastVerifiedAt:0,status:"disk",matchedBy:"disk"})}};return d(b),c}(a)){let a=c.get(b.relativePath);c.set(b.relativePath,a?{...a,fileSize:b.fileSize,mtime:b.mtime,matchedBy:"metadata"}:b)}return Array.from(c.values()).filter(a=>!b.category||a.category===b.category).sort((a,b)=>b.mtime-a.mtime||a.relativePath.localeCompare(b.relativePath,"zh-CN"))}async function p(a,b={}){let c=(b.query||"").trim(),d=Math.max(1,Math.min(500,b.limit??50)),e=new Map,f=o(a,{category:b.category});for(let a of f)(!c||`${a.relativePath}
2
2
  ${a.category}
3
3
  ${a.format}
4
- ${a.status}`.toLowerCase().includes(c.toLowerCase()))&&e.set(a.relativePath,{...a,matchedBy:c?"path":a.matchedBy});if(c&&!1!==b.includeContent)try{for(let b of(await l().search(a,c,{limit:Math.max(20,d)})).results){let a=b.filePath,c=e.get(a)||f.find(b=>b.relativePath===a);e.set(a,{...c||{relativePath:a,category:"content",format:"knowledge",fileSize:0,mtime:0,chunkCount:0,indexedAt:0,lastVerifiedAt:0,status:"active"},matchedBy:"content",score:b.score})}}catch{}let g=Array.from(e.values()).sort((a,b)=>{let c=a=>"content"===a.matchedBy?3:"path"===a.matchedBy?2:+("metadata"===a.matchedBy);return c(b)-c(a)||(b.score??0)-(a.score??0)||b.mtime-a.mtime||a.relativePath.localeCompare(b.relativePath,"zh-CN")});return{files:g.slice(0,d),total:g.length}}},57367:(a,b,c)=>{c.d(b,{Co:()=>z,EK:()=>B,ER:()=>C,_q:()=>w,py:()=>A,uD:()=>x,ug:()=>y});var d=c(73024),e=c(48161),f=c(76760);let g=[{id:"required_fact",name:"必需事实",description:"检查指定事实字段是否存在。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"fact",operator:"exists"}},{id:"required_chapter",name:"必需章节",description:"检查指定章节是否存在。",builtIn:!0,defaultLevel:"error",evaluator:{subject:"chapter",operator:"exists"}},{id:"required_file_role",name:"必需文件角色",description:"检查项目角色配置是否绑定指定文件角色。",builtIn:!0,defaultLevel:"error",evaluator:{subject:"file_role",operator:"exists"}},{id:"required_prompt_role",name:"必需提示词角色",description:"检查项目角色配置是否绑定指定提示词角色。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"prompt_role",operator:"exists"}},{id:"source_required",name:"事实必须有来源",description:"检查结构化事实是否都有资料来源。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"source",operator:"all_have_source"}},{id:"forbidden_text",name:"禁止出现文本",description:"检查全文是否出现禁用文本。",builtIn:!0,defaultLevel:"error",evaluator:{subject:"document",operator:"not_contains"}},{id:"min_chapter_length",name:"章节最低字数",description:"检查指定章节是否达到最低字数。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"chapter",operator:"min_length"}},{id:"table_required",name:"必须有表格",description:"检查文档是否包含结构化表格。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"table",operator:"min_count",min:1}}],h=new Map(g.map(a=>[a.id,a])),i=["document","chapter","fact","file_role","prompt_role","table","image","source"],j=["exists","contains","not_contains","regex_match","regex_not_match","min_count","min_length","all_have_source","image_caption_required","table_explanation_required"];function k(){let a=f.join(e.homedir(),".customize-agent");return d.mkdirSync(a,{recursive:!0}),a}function l(){return f.join(k(),"document-specs.json")}function m(){return f.join(k(),"document-gate-types.json")}function n(a){return(a||`spec-${Date.now()}`).replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80)}function o(a,b=""){return String(a||b).trim().slice(0,500)}function p(a,b){let c=a||b||{subject:"document",operator:"contains"},d=i.includes(c.subject)?c.subject:"document",e=j.includes(c.operator)?c.operator:"contains",f=Number(c.min);return{subject:d,operator:e,target:o(c.target),value:o(c.value),min:Number.isFinite(f)&&f>0?f:void 0}}function q(a){let b=n(a.id||a.name||`gate-type-${Date.now()}`);if(h.has(b))throw Error("不能覆盖系统内置门禁类型");return{id:b,name:o(a.name,"自定义门禁类型"),description:o(a.description),builtIn:!1,defaultLevel:"warning"===a.defaultLevel||"info"===a.defaultLevel?a.defaultLevel:"error",evaluator:p(a.evaluator)}}function r(a){return{id:n(a.id),name:a.name||"未命名规范包",description:a.description||"",factFields:Array.isArray(a.factFields)?a.factFields.filter(a=>a.name).map(a=>({id:n(a.id),name:a.name,type:"auto",required:!!a.required,sourceRoleIds:Array.isArray(a.sourceRoleIds)?a.sourceRoleIds.filter(Boolean):[],extractionHint:a.extractionHint||"",validationHint:a.validationHint||""})):[],chapterMode:"fixed"===a.chapterMode?"fixed":"dynamic",chapterRules:Array.isArray(a.chapterRules)?a.chapterRules.filter(a=>a.title).map((a,b)=>({id:n(a.id),title:a.title,required:!!a.required,order:Number.isFinite(a.order)?a.order:b,minWords:Number.isFinite(a.minWords)?a.minWords:0,requiredFactIds:Array.isArray(a.requiredFactIds)?a.requiredFactIds.filter(Boolean):[],requiredFileRoleIds:Array.isArray(a.requiredFileRoleIds)?a.requiredFileRoleIds.filter(Boolean):[],requiredPromptRoleIds:Array.isArray(a.requiredPromptRoleIds)?a.requiredPromptRoleIds.filter(Boolean):[],generationHint:a.generationHint||""})):[],dynamicChapterRule:{source:["file_outline","file_role","fact_group","table_rows"].includes(a.dynamicChapterRule?.source)?a.dynamicChapterRule.source:"ai_plan",sourceRoleIds:Array.isArray(a.dynamicChapterRule?.sourceRoleIds)?a.dynamicChapterRule.sourceRoleIds.filter(Boolean):[],minChapters:Number.isFinite(a.dynamicChapterRule?.minChapters)?a.dynamicChapterRule.minChapters:void 0,maxChapters:Number.isFinite(a.dynamicChapterRule?.maxChapters)?a.dynamicChapterRule.maxChapters:void 0,titleStrategy:["source_title","field_value","template"].includes(a.dynamicChapterRule?.titleStrategy||"")?a.dynamicChapterRule?.titleStrategy:"ai_summary",titleTemplate:a.dynamicChapterRule?.titleTemplate||"",minWordsPerChapter:Number.isFinite(a.dynamicChapterRule?.minWordsPerChapter)?a.dynamicChapterRule.minWordsPerChapter:void 0,requiredFactIds:Array.isArray(a.dynamicChapterRule?.requiredFactIds)?a.dynamicChapterRule.requiredFactIds.filter(Boolean):[],requiredFileRoleIds:Array.isArray(a.dynamicChapterRule?.requiredFileRoleIds)?a.dynamicChapterRule.requiredFileRoleIds.filter(Boolean):[],requiredPromptRoleIds:Array.isArray(a.dynamicChapterRule?.requiredPromptRoleIds)?a.dynamicChapterRule.requiredPromptRoleIds.filter(Boolean):[],generationHint:a.dynamicChapterRule?.generationHint||""},gateRules:Array.isArray(a.gateRules)?a.gateRules.filter(a=>a.name).map(a=>{var b;let c=n(a.type||a.name||"custom_gate");return{id:n(a.id),name:a.name,type:c,level:"warning"===a.level||"info"===a.level?a.level:"error",target:a.target||"",value:a.value||"",evaluator:p((b={...a,type:c}).evaluator,h.get(b.type)?.evaluator)}}):[],wordTemplatePath:a.wordTemplatePath||"",builtIn:!!a.builtIn}}function s(){try{let a=l();if(!d.existsSync(a))return[];return JSON.parse(d.readFileSync(a,"utf-8")).map(r)}catch{return[]}}function t(a){d.writeFileSync(l(),JSON.stringify(a.map(r),null,2),"utf-8")}function u(){try{let a=m();if(!d.existsSync(a))return[];return JSON.parse(d.readFileSync(a,"utf-8")).map(q)}catch{return[]}}function v(a){d.writeFileSync(m(),JSON.stringify(a.map(q),null,2),"utf-8")}function w(){return[...new Map([...g,...u()].map(a=>[a.id,a])).values()]}function x(a){let b=q(a),c=u().filter(a=>a.id!==b.id);return c.push(b),v(c),b}function y(a){if(h.has(a))throw Error("系统内置门禁类型不可删除");v(u().filter(b=>b.id!==a))}function z(){return[...new Map(s().map(a=>[a.id,a])).values()]}function A(a){if(a)return s().find(b=>b.id===a)}function B(a){let b=r(a),c=s().filter(a=>a.id!==b.id);return c.push(b),t(c),b}function C(a){t(s().filter(b=>b.id!==a))}},73445:(a,b,c)=>{c.d(b,{Bh:()=>x,OX:()=>aj,R1:()=>ak,bV:()=>A,h0:()=>z,jG:()=>v,xm:()=>y});var d=c(73024),e=c(76760),f=c(15751),g=c(48161),h=c(95393),i=c(96770),j=c(23328),k=c(99842),l=c(2323),m=c(89952),n=c(57367);let o=[];function p(){let a=e.join(g.homedir(),".customize-agent");return d.mkdirSync(a,{recursive:!0}),a}function q(){return e.join(p(),"document-templates.json")}function r(a){return{...a,id:a.id.replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80)||`template-${Date.now()}`,name:a.name||"未命名模板",description:a.description||"",category:a.category||"自定义",outputTitle:a.outputTitle||a.name||"业务文档",projectRoleConfigId:a.projectRoleConfigId||void 0,documentSpecId:a.documentSpecId||void 0,chapters:Array.isArray(a.chapters)&&a.chapters.length>0?a.chapters.map((a,b)=>({id:(a.id||`chapter-${b+1}`).replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80),title:a.title||`第 ${b+1} 章`,purpose:a.purpose||"",queries:Array.isArray(a.queries)?a.queries.filter(Boolean):[],requiredFacts:Array.isArray(a.requiredFacts)?a.requiredFacts.filter(Boolean):[],pinnedEvidenceFilePaths:Array.isArray(a.pinnedEvidenceFilePaths)?a.pinnedEvidenceFilePaths.filter(Boolean):[]})):[{id:"document",title:a.outputTitle||a.name||"业务文档",purpose:a.description||"",queries:[],requiredFacts:[]}],promptIds:Array.isArray(a.promptIds)?a.promptIds.filter(Boolean):[],boundFilePaths:Array.isArray(a.boundFilePaths)?a.boundFilePaths.filter(Boolean):[],promptBindings:Array.isArray(a.promptBindings)?a.promptBindings.filter(a=>a.promptId&&a.roleId):Array.isArray(a.promptIds)?a.promptIds.filter(Boolean).map(a=>({promptId:a,roleId:"chapter_generation"})):[],fileBindings:Array.isArray(a.fileBindings)?a.fileBindings.filter(a=>a.filePath&&a.roleId):Array.isArray(a.boundFilePaths)?a.boundFilePaths.filter(Boolean).map(a=>({filePath:a,roleId:"project_fact"})):[],builtIn:!1}}function s(){try{let a=q();if(!d.existsSync(a))return[];return JSON.parse(d.readFileSync(a,"utf-8")).map(r)}catch{return[]}}function t(a){d.writeFileSync(q(),JSON.stringify(a.map(r),null,2),"utf-8")}function u(a=[]){let b;if(0===a.length)return[];let c=[];try{let a=JSON.parse(d.readFileSync(e.join(p(),"prompts.json"),"utf-8"));b=Array.isArray(a.customPrompts)?a.customPrompts:[]}catch{b=[]}for(let f of a){let a=f.promptId;if(a.startsWith("custom:")){let d=b.find(b=>b.id===a);d&&c.push({id:a,roleId:f.roleId,name:d.name,content:d.content});continue}if(a.startsWith("file:")){let b=a.slice(5);d.existsSync(b)&&c.push({id:a,roleId:f.roleId,name:e.basename(e.dirname(b))||b,content:d.readFileSync(b,"utf-8")})}}return c}function v(){return[...o,...s()]}function w(a){return v().find(b=>b.id===a)}function x(a){let b=r(a);if(o.some(a=>a.id===b.id))throw Error("Built-in template cannot be overwritten");let c=s().filter(a=>a.id!==b.id);return c.push(b),t(c),b}async function y(a,b=(0,j.aY)()){let c=w(a),d=[];if(!c)return{issues:[{level:"error",message:"文档模板不存在或已删除"}],fileDiagnostics:[],promptDiagnostics:[],spec:void 0,config:void 0};let f=(0,m.XB)("prompt"),g=(0,m.XB)("file"),h=c.projectRoleConfigId?(0,m.Mu)(c.projectRoleConfigId):void 0;c.projectRoleConfigId||d.push({level:"error",message:"模板未绑定项目角色配置"}),c.projectRoleConfigId&&!h&&d.push({level:"error",message:"项目角色配置不存在或已删除"});let i=X(c),k=Y(c);0===i.length&&d.push({level:"warning",message:"模板未绑定提示词角色,生成会缺少说明提示词约束"}),0===k.length&&d.push({level:"error",message:"模板未绑定知识库文件角色"});let l=c.documentSpecId?(0,n.py)(c.documentSpecId):void 0;if(c.documentSpecId&&!l&&d.push({level:"error",message:"文档规范包不存在或已删除"}),l?.chapterMode==="fixed"){let a=new Set(c.chapters.map(a=>a.id)),b=new Set(c.chapters.map(a=>a.title));for(let c of l.chapterRules.filter(a=>a.required))a.has(c.id)||b.has(c.title)||d.push({level:"error",message:`模板章节不满足规范包要求:${c.title}`})}l?.chapterMode==="dynamic"&&l.dynamicChapterRule.maxChapters&&l.dynamicChapterRule.minChapters&&l.dynamicChapterRule.maxChapters<l.dynamicChapterRule.minChapters&&d.push({level:"error",message:"动态章节规则的最多章节不能小于最少章节"});let o=e.resolve(b),p=await (0,j.Qh)().getProject(o);c.builtIn&&await p.incrementalIndex();let q=new Map((0,j.Yy)(o).map(a=>[a.relativePath,a])),r=k.map(a=>{let b=g.find(b=>b.id===a.roleId),c=q.get(a.filePath);return b||d.push({level:"error",message:`文件角色不存在:${a.roleId}`}),c||d.push({level:"error",message:`知识库文件不存在:${a.filePath}`}),c&&("disk"===c.status||0===c.indexedAt)&&d.push({level:"warning",message:`知识库文件存在但尚未完成索引:${a.filePath}`}),c?.status==="error"&&d.push({level:"warning",message:`知识库文件索引失败:${a.filePath}${c.errorMessage?`,${c.errorMessage}`:""}`}),c&&0===c.chunkCount&&d.push({level:"warning",message:`知识库文件暂无可检索内容切片:${a.filePath}`}),{...a,roleName:b?.name,exists:!!c,indexed:!!(c&&c.indexedAt>0&&"disk"!==c.status),chunkCount:c?.chunkCount??0,vectorReady:!!(c&&c.chunkCount>0)}}),s=u(i),t=i.map(a=>{let b=f.find(b=>b.id===a.roleId),c=s.find(b=>b.id===a.promptId);return b||d.push({level:"error",message:`提示词角色不存在:${a.roleId}`}),c||d.push({level:"error",message:`提示词不存在:${a.promptId}`}),c&&!c.content.trim()&&d.push({level:"warning",message:`提示词为空:${c.name}`}),{...a,roleName:b?.name,promptTitle:c?.name,exists:!!c,contentLength:c?.content.length??0}});return{templateId:a,projectRoleConfigId:c.projectRoleConfigId,documentSpecId:c.documentSpecId,fileDiagnostics:r,promptDiagnostics:t,spec:l?{id:l.id,name:l.name,factFields:l.factFields.length,gateRules:l.gateRules.length}:void 0,issues:d}}function z(a){if(o.some(b=>b.id===a))throw Error("Built-in template cannot be deleted");t(s().filter(b=>b.id!==a))}function A(a){let b=w(a);if(!b)throw Error("Document template not found");let c=r({...b,id:`${b.id}-copy-${Date.now()}`,name:`${b.name} Copy`,builtIn:!1}),d=s();return d.push(c),t(d),c}function B(a,b){let c=new Set;return a.map(a=>({...a,content:function(a,b){let c=e.extname(a).toLowerCase();return[".pdf",".doc",".docx",".xls",".xlsx",".png",".jpg",".jpeg",".webp"].includes(c)?`资料文件:${e.basename(a)},文件类型:${c}。该文件作为来源附件参与生成,正文只引用其文件名、类型和角色,不直接混入二进制内容。`:[...b].filter(a=>{let b=a.charCodeAt(0);return 9===b||10===b||13===b||b>=32}).join("").slice(0,4e3)}(a.filePath,a.content)})).sort((a,b)=>b.score-a.score).filter(a=>{let b=`${a.filePath}:${a.content.slice(0,100)}`;return!c.has(b)&&(c.add(b),!0)}).slice(0,b)}function C(a,b,c,f,g){let h=e.isAbsolute(a)?a:d.existsSync(e.join(g,"knowledgeBase",a))?e.join(g,"knowledgeBase",a):e.join(g,a);if(!d.existsSync(h)||d.statSync(h).isDirectory())return[];let i=e.extname(h).toLowerCase();return(([".pdf",".doc",".docx",".xls",".xlsx",".png",".jpg",".jpeg",".webp"].includes(i)?`资料文件:${e.basename(a)},文件类型:${i}。`:d.readFileSync(h,"utf-8")).match(/[\s\S]{1,1800}/gu)||[]).slice(0,12).map((d,e)=>({chapterId:f,filePath:a,score:1,content:d,roleId:b,processingType:c,sectionTitle:`文件片段 ${e+1}`,source:"bound-file-direct"}))}function D(a){return`- ${a.filePath}(score=${a.score.toFixed(3)}):${a.content.replace(/\s+/gu," ").slice(0,260)}`}function E(a,b){let c=b.slice(0,16),d=new Map;for(let c of b){let b=function(a,b){let c=e.extname(a).toLowerCase();return"drawing"===b||/地图|图纸|map/iu.test(a)?"map":[".png",".jpg",".jpeg",".webp"].includes(c)?"image":"table"===b?"table":[".xls",".xlsx",".csv"].includes(c)?"spreadsheet":[".pdf",".doc",".docx"].includes(c)?"document":c&&![".md",".txt"].includes(c)?"attachment":"text"}(c.filePath,c.processingType),f=d.get(c.filePath)||{filePath:c.filePath,kind:b,roleId:c.roleId,processingType:c.processingType,score:c.score,semanticTitle:function(a,b){let c=e.basename(a).replace(/\.[^.]+$/u,"");return"map"===b?c.replace(/^地图图纸-/u,"").replace(/-完整地图图纸$/u,"完整地图图纸"):"image"===b?c.replace(/-/gu," "):"spreadsheet"===b?`${c}(结构化表格)`:"document"===b?`${c}(文档附件)`:c}(c.filePath,b),contentUse:"map"===b?"作为地图/图纸证据,用于说明空间关系、区域划分、点位、路线或专业布置。":"image"===b?"作为图片证据,用于视觉说明、参考图或章节配图。":"spreadsheet"===b||"table"===b?"作为表格/数据证据,用于字段对比、清单、数量和结构化结论。":"document"===b?"作为 PDF/Word 文档证据,用于提取规范、事实、说明、约束和附件来源。":"attachment"===b?"作为附件证据,用于提供补充来源、文件级约束或可追溯引用。":"作为文本证据,用于事实抽取、章节论据和来源引用。",relatedFacts:[],relatedChapters:[],snippets:[]};f.score=Math.max(f.score,c.score),f.relatedFacts=[...new Set([...f.relatedFacts,...function(a,b){let c=`${a.filePath}
5
- ${a.content}`;return[...new Set([...b?.requiredFacts||[],"表格数据","规范要求","项目事实","附件资料","图纸资料","图片资料"].filter(b=>H(a,b)||c.includes(b)))]}(c,a)])],f.relatedChapters=[...new Set([...f.relatedChapters,a.title])];let g=c.content.replace(/\s+/gu," ").slice(0,320);g&&f.snippets.length<3&&!f.snippets.includes(g)&&f.snippets.push(g),d.set(c.filePath,f)}let f=[...d.values()].sort((a,b)=>b.score-a.score),g={map:[],image:[],table:[],document:[],spreadsheet:[],text:[],attachment:[]};for(let a of f)g[a.kind].push(a);let h=[`本章证据包:文本片段 ${c.length} 条、资源文件 ${f.length} 个。`,`资源类型分布:文本 ${g.text.length}、文档 ${g.document.length}、表格 ${g.spreadsheet.length+g.table.length}、图片 ${g.image.length}、地图图纸 ${g.map.length}、其他附件 ${g.attachment.length}。`,f.length?`关键资源:${f.slice(0,10).map(a=>`${a.semanticTitle}(${a.kind}:${a.filePath})`).join("")}`:""].filter(Boolean).join("\n");return{chapterId:a.id,textEvidence:c,resources:f,byKind:g,summary:h}}function F(a){let b=a.resources.slice(0,20).map(a=>[`- 文件:${a.filePath}`,` 资源类型:${a.kind}`,` 语义标题:${a.semanticTitle}`,a.roleId?` 文件角色:${a.roleId}`:"",a.processingType?` 处理类型:${a.processingType}`:"",` 正文用途:${a.contentUse}`,a.relatedFacts.length?` 关联事实:${a.relatedFacts.join("、")}`:"",a.snippets.length?` 证据片段:${a.snippets.join(" / ")}`:""].filter(Boolean).join("\n")).join("\n"),c=a.textEvidence.map(a=>`文件:${a.filePath}
6
- 角色:${a.roleId||"未标注"}
4
+ ${a.status}`.toLowerCase().includes(c.toLowerCase()))&&e.set(a.relativePath,{...a,matchedBy:c?"path":a.matchedBy});if(c&&!1!==b.includeContent)try{for(let b of(await l().search(a,c,{limit:Math.max(20,d)})).results){let a=b.filePath,c=e.get(a)||f.find(b=>b.relativePath===a);e.set(a,{...c||{relativePath:a,category:"content",format:"knowledge",fileSize:0,mtime:0,chunkCount:0,indexedAt:0,lastVerifiedAt:0,status:"active"},matchedBy:"content",score:b.score})}}catch{}let g=Array.from(e.values()).sort((a,b)=>{let c=a=>"content"===a.matchedBy?3:"path"===a.matchedBy?2:+("metadata"===a.matchedBy);return c(b)-c(a)||(b.score??0)-(a.score??0)||b.mtime-a.mtime||a.relativePath.localeCompare(b.relativePath,"zh-CN")});return{files:g.slice(0,d),total:g.length}}},57367:(a,b,c)=>{c.d(b,{Co:()=>z,EK:()=>B,ER:()=>C,_q:()=>w,py:()=>A,uD:()=>x,ug:()=>y});var d=c(73024),e=c(48161),f=c(76760);let g=[{id:"required_fact",name:"必需事实",description:"检查指定事实字段是否存在。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"fact",operator:"exists"}},{id:"required_chapter",name:"必需章节",description:"检查指定章节是否存在。",builtIn:!0,defaultLevel:"error",evaluator:{subject:"chapter",operator:"exists"}},{id:"required_file_role",name:"必需文件角色",description:"检查项目角色配置是否绑定指定文件角色。",builtIn:!0,defaultLevel:"error",evaluator:{subject:"file_role",operator:"exists"}},{id:"required_prompt_role",name:"必需提示词角色",description:"检查项目角色配置是否绑定指定提示词角色。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"prompt_role",operator:"exists"}},{id:"source_required",name:"事实必须有来源",description:"检查结构化事实是否都有资料来源。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"source",operator:"all_have_source"}},{id:"forbidden_text",name:"禁止出现文本",description:"检查全文是否出现禁用文本。",builtIn:!0,defaultLevel:"error",evaluator:{subject:"document",operator:"not_contains"}},{id:"min_chapter_length",name:"章节最低字数",description:"检查指定章节是否达到最低字数。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"chapter",operator:"min_length"}},{id:"table_required",name:"必须有表格",description:"检查文档是否包含结构化表格。",builtIn:!0,defaultLevel:"warning",evaluator:{subject:"table",operator:"min_count",min:1}}],h=new Map(g.map(a=>[a.id,a])),i=["document","chapter","fact","file_role","prompt_role","table","image","source"],j=["exists","contains","not_contains","regex_match","regex_not_match","min_count","min_length","all_have_source","image_caption_required","table_explanation_required"];function k(){let a=f.join(e.homedir(),".customize-agent");return d.mkdirSync(a,{recursive:!0}),a}function l(){return f.join(k(),"document-specs.json")}function m(){return f.join(k(),"document-gate-types.json")}function n(a){return(a||`spec-${Date.now()}`).replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80)}function o(a,b=""){return String(a||b).trim().slice(0,500)}function p(a,b){let c=a||b||{subject:"document",operator:"contains"},d=i.includes(c.subject)?c.subject:"document",e=j.includes(c.operator)?c.operator:"contains",f=Number(c.min);return{subject:d,operator:e,target:o(c.target),value:o(c.value),min:Number.isFinite(f)&&f>0?f:void 0}}function q(a){let b=n(a.id||a.name||`gate-type-${Date.now()}`);if(h.has(b))throw Error("不能覆盖系统内置门禁类型");return{id:b,name:o(a.name,"自定义门禁类型"),description:o(a.description),builtIn:!1,defaultLevel:"warning"===a.defaultLevel||"info"===a.defaultLevel?a.defaultLevel:"error",evaluator:p(a.evaluator)}}function r(a){return{id:n(a.id),name:a.name||"未命名规范包",description:a.description||"",factFields:Array.isArray(a.factFields)?a.factFields.filter(a=>a.name).map(a=>({id:n(a.id),name:a.name,type:"auto",required:!!a.required,sourceRoleIds:Array.isArray(a.sourceRoleIds)?a.sourceRoleIds.filter(Boolean):[],extractionHint:a.extractionHint||"",validationHint:a.validationHint||""})):[],chapterMode:"fixed"===a.chapterMode?"fixed":"dynamic",chapterRules:Array.isArray(a.chapterRules)?a.chapterRules.filter(a=>a.title).map((a,b)=>({id:n(a.id),title:a.title,required:!!a.required,order:Number.isFinite(a.order)?a.order:b,minWords:Number.isFinite(a.minWords)?a.minWords:0,requiredFactIds:Array.isArray(a.requiredFactIds)?a.requiredFactIds.filter(Boolean):[],requiredFileRoleIds:Array.isArray(a.requiredFileRoleIds)?a.requiredFileRoleIds.filter(Boolean):[],requiredPromptRoleIds:Array.isArray(a.requiredPromptRoleIds)?a.requiredPromptRoleIds.filter(Boolean):[],generationHint:a.generationHint||""})):[],dynamicChapterRule:{source:["file_outline","file_role","fact_group","table_rows"].includes(a.dynamicChapterRule?.source)?a.dynamicChapterRule.source:"ai_plan",sourceRoleIds:Array.isArray(a.dynamicChapterRule?.sourceRoleIds)?a.dynamicChapterRule.sourceRoleIds.filter(Boolean):[],minChapters:Number.isFinite(a.dynamicChapterRule?.minChapters)?a.dynamicChapterRule.minChapters:void 0,maxChapters:Number.isFinite(a.dynamicChapterRule?.maxChapters)?a.dynamicChapterRule.maxChapters:void 0,titleStrategy:["source_title","field_value","template"].includes(a.dynamicChapterRule?.titleStrategy||"")?a.dynamicChapterRule?.titleStrategy:"ai_summary",titleTemplate:a.dynamicChapterRule?.titleTemplate||"",minWordsPerChapter:Number.isFinite(a.dynamicChapterRule?.minWordsPerChapter)?a.dynamicChapterRule.minWordsPerChapter:void 0,requiredFactIds:Array.isArray(a.dynamicChapterRule?.requiredFactIds)?a.dynamicChapterRule.requiredFactIds.filter(Boolean):[],requiredFileRoleIds:Array.isArray(a.dynamicChapterRule?.requiredFileRoleIds)?a.dynamicChapterRule.requiredFileRoleIds.filter(Boolean):[],requiredPromptRoleIds:Array.isArray(a.dynamicChapterRule?.requiredPromptRoleIds)?a.dynamicChapterRule.requiredPromptRoleIds.filter(Boolean):[],generationHint:a.dynamicChapterRule?.generationHint||""},gateRules:Array.isArray(a.gateRules)?a.gateRules.filter(a=>a.name).map(a=>{var b;let c=n(a.type||a.name||"custom_gate");return{id:n(a.id),name:a.name,type:c,level:"warning"===a.level||"info"===a.level?a.level:"error",target:a.target||"",value:a.value||"",evaluator:p((b={...a,type:c}).evaluator,h.get(b.type)?.evaluator)}}):[],wordTemplatePath:a.wordTemplatePath||"",builtIn:!!a.builtIn}}function s(){try{let a=l();if(!d.existsSync(a))return[];return JSON.parse(d.readFileSync(a,"utf-8")).map(r)}catch{return[]}}function t(a){d.writeFileSync(l(),JSON.stringify(a.map(r),null,2),"utf-8")}function u(){try{let a=m();if(!d.existsSync(a))return[];return JSON.parse(d.readFileSync(a,"utf-8")).map(q)}catch{return[]}}function v(a){d.writeFileSync(m(),JSON.stringify(a.map(q),null,2),"utf-8")}function w(){return[...new Map([...g,...u()].map(a=>[a.id,a])).values()]}function x(a){let b=q(a),c=u().filter(a=>a.id!==b.id);return c.push(b),v(c),b}function y(a){if(h.has(a))throw Error("系统内置门禁类型不可删除");v(u().filter(b=>b.id!==a))}function z(){return[...new Map(s().map(a=>[a.id,a])).values()]}function A(a){if(a)return s().find(b=>b.id===a)}function B(a){let b=r(a),c=s().filter(a=>a.id!==b.id);return c.push(b),t(c),b}function C(a){t(s().filter(b=>b.id!==a))}},73445:(a,b,c)=>{c.d(b,{Bh:()=>x,OX:()=>ao,R1:()=>ap,bV:()=>A,h0:()=>z,jG:()=>v,xm:()=>y});var d=c(73024),e=c(76760),f=c(15751),g=c(48161),h=c(95393),i=c(96770),j=c(23328),k=c(99842),l=c(2323),m=c(89952),n=c(57367);let o=[];function p(){let a=e.join(g.homedir(),".customize-agent");return d.mkdirSync(a,{recursive:!0}),a}function q(){return e.join(p(),"document-templates.json")}function r(a){return{...a,id:a.id.replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80)||`template-${Date.now()}`,name:a.name||"未命名模板",description:a.description||"",category:a.category||"自定义",outputTitle:a.outputTitle||a.name||"业务文档",projectRoleConfigId:a.projectRoleConfigId||void 0,documentSpecId:a.documentSpecId||void 0,chapters:Array.isArray(a.chapters)&&a.chapters.length>0?a.chapters.map((a,b)=>({id:(a.id||`chapter-${b+1}`).replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80),title:a.title||`第 ${b+1} 章`,purpose:a.purpose||"",queries:Array.isArray(a.queries)?a.queries.filter(Boolean):[],requiredFacts:Array.isArray(a.requiredFacts)?a.requiredFacts.filter(Boolean):[],pinnedEvidenceFilePaths:Array.isArray(a.pinnedEvidenceFilePaths)?a.pinnedEvidenceFilePaths.filter(Boolean):[]})):[{id:"document",title:a.outputTitle||a.name||"业务文档",purpose:a.description||"",queries:[],requiredFacts:[]}],promptIds:Array.isArray(a.promptIds)?a.promptIds.filter(Boolean):[],boundFilePaths:Array.isArray(a.boundFilePaths)?a.boundFilePaths.filter(Boolean):[],promptBindings:Array.isArray(a.promptBindings)?a.promptBindings.filter(a=>a.promptId&&a.roleId):Array.isArray(a.promptIds)?a.promptIds.filter(Boolean).map(a=>({promptId:a,roleId:"chapter_generation"})):[],fileBindings:Array.isArray(a.fileBindings)?a.fileBindings.filter(a=>a.filePath&&a.roleId):Array.isArray(a.boundFilePaths)?a.boundFilePaths.filter(Boolean).map(a=>({filePath:a,roleId:"project_fact"})):[],builtIn:!1}}function s(){try{let a=q();if(!d.existsSync(a))return[];return JSON.parse(d.readFileSync(a,"utf-8")).map(r)}catch{return[]}}function t(a){d.writeFileSync(q(),JSON.stringify(a.map(r),null,2),"utf-8")}function u(a=[]){let b;if(0===a.length)return[];let c=[];try{let a=JSON.parse(d.readFileSync(e.join(p(),"prompts.json"),"utf-8"));b=Array.isArray(a.customPrompts)?a.customPrompts:[]}catch{b=[]}for(let f of a){let a=f.promptId;if(a.startsWith("custom:")){let d=b.find(b=>b.id===a);d&&c.push({id:a,roleId:f.roleId,name:d.name,content:d.content});continue}if(a.startsWith("file:")){let b=a.slice(5);d.existsSync(b)&&c.push({id:a,roleId:f.roleId,name:e.basename(e.dirname(b))||b,content:d.readFileSync(b,"utf-8")})}}return c}function v(){return[...o,...s()]}function w(a){return v().find(b=>b.id===a)}function x(a){let b=r(a);if(o.some(a=>a.id===b.id))throw Error("Built-in template cannot be overwritten");let c=s().filter(a=>a.id!==b.id);return c.push(b),t(c),b}async function y(a,b=(0,j.aY)()){let c=w(a),d=[];if(!c)return{issues:[{level:"error",message:"文档模板不存在或已删除"}],fileDiagnostics:[],promptDiagnostics:[],spec:void 0,config:void 0};let f=(0,m.XB)("prompt"),g=(0,m.XB)("file"),h=c.projectRoleConfigId?(0,m.Mu)(c.projectRoleConfigId):void 0;c.projectRoleConfigId||d.push({level:"error",message:"模板未绑定项目角色配置"}),c.projectRoleConfigId&&!h&&d.push({level:"error",message:"项目角色配置不存在或已删除"});let i=aa(c),k=ab(c);0===i.length&&d.push({level:"warning",message:"模板未绑定提示词角色,生成会缺少说明提示词约束"}),0===k.length&&d.push({level:"error",message:"模板未绑定知识库文件角色"});let l=c.documentSpecId?(0,n.py)(c.documentSpecId):void 0;if(c.documentSpecId&&!l&&d.push({level:"error",message:"文档规范包不存在或已删除"}),l?.chapterMode==="fixed"){let a=new Set(c.chapters.map(a=>a.id)),b=new Set(c.chapters.map(a=>a.title));for(let c of l.chapterRules.filter(a=>a.required))a.has(c.id)||b.has(c.title)||d.push({level:"error",message:`模板章节不满足规范包要求:${c.title}`})}l?.chapterMode==="dynamic"&&l.dynamicChapterRule.maxChapters&&l.dynamicChapterRule.minChapters&&l.dynamicChapterRule.maxChapters<l.dynamicChapterRule.minChapters&&d.push({level:"error",message:"动态章节规则的最多章节不能小于最少章节"});let o=e.resolve(b),p=await (0,j.Qh)().getProject(o);c.builtIn&&await p.incrementalIndex();let q=new Map((0,j.Yy)(o).map(a=>[a.relativePath,a])),r=k.map(a=>{let b=g.find(b=>b.id===a.roleId),c=q.get(a.filePath);return b||d.push({level:"error",message:`文件角色不存在:${a.roleId}`}),c||d.push({level:"error",message:`知识库文件不存在:${a.filePath}`}),c&&("disk"===c.status||0===c.indexedAt)&&d.push({level:"warning",message:`知识库文件存在但尚未完成索引:${a.filePath}`}),c?.status==="error"&&d.push({level:"warning",message:`知识库文件索引失败:${a.filePath}${c.errorMessage?`,${c.errorMessage}`:""}`}),c&&0===c.chunkCount&&d.push({level:"warning",message:`知识库文件暂无可检索内容切片:${a.filePath}`}),{...a,roleName:b?.name,exists:!!c,indexed:!!(c&&c.indexedAt>0&&"disk"!==c.status),chunkCount:c?.chunkCount??0,vectorReady:!!(c&&c.chunkCount>0)}}),s=u(i),t=i.map(a=>{let b=f.find(b=>b.id===a.roleId),c=s.find(b=>b.id===a.promptId);return b||d.push({level:"error",message:`提示词角色不存在:${a.roleId}`}),c||d.push({level:"error",message:`提示词不存在:${a.promptId}`}),c&&!c.content.trim()&&d.push({level:"warning",message:`提示词为空:${c.name}`}),{...a,roleName:b?.name,promptTitle:c?.name,exists:!!c,contentLength:c?.content.length??0}});return{templateId:a,projectRoleConfigId:c.projectRoleConfigId,documentSpecId:c.documentSpecId,fileDiagnostics:r,promptDiagnostics:t,spec:l?{id:l.id,name:l.name,factFields:l.factFields.length,gateRules:l.gateRules.length}:void 0,issues:d}}function z(a){if(o.some(b=>b.id===a))throw Error("Built-in template cannot be deleted");t(s().filter(b=>b.id!==a))}function A(a){let b=w(a);if(!b)throw Error("Document template not found");let c=r({...b,id:`${b.id}-copy-${Date.now()}`,name:`${b.name} Copy`,builtIn:!1}),d=s();return d.push(c),t(d),c}let B=/\b(?:TDbPipe|TDbPipeValve|TDbPipeFitting|TDbWellh|AcDb\w+|Dwg\w+|Polyline|Hatch|Layer|BlockReference)\b/giu,C=/[\w\u4e00-\u9fa5()()\-—_+\s]+\.(?:pdf|dwg|docx?|xlsx?|xls|csv|png|jpe?g|webp)\b/giu;function D(a,b=0){let c="drawing"===a.processingType||a.roleId?.includes("drawing")?"图纸资料":"table"===a.processingType||a.roleId?.includes("bill")?"清单资料":"rule"===a.processingType||a.roleId?.includes("tender")?"招标资料":"项目资料";return`${c}片段${b+1}${a.sectionTitle?`(${a.sectionTitle.replace(C,"").slice(0,40)})`:""}`}function E(a){return[...a].filter(a=>{let b=a.charCodeAt(0);return 9===b||10===b||13===b||b>=32}).join("").replace(B,"").replace(C,"").replace(/\b(?:Model|Layout\d*|Entity|Handle|ObjectId|ByLayer|Continuous)\b/giu,"").replace(/[\t ]{2,}/gu," ").replace(/\n{3,}/gu,"\n\n").trim()}function F(a,b){let c=new Set;return a.map(a=>({...a,content:function(a,b){let c=e.extname(a).toLowerCase(),d=E(b);return d.length>20?d.slice(0,4e3):[".pdf",".doc",".docx",".xls",".xlsx",".png",".jpg",".jpeg",".webp",".dwg"].includes(c)?`该资料为${c.replace(".","").toUpperCase()}格式附件,仅作为内部事实提取依据;正式正文不得引用文件名。`:d.slice(0,4e3)}(a.filePath,a.content)})).sort((a,b)=>b.score-a.score).filter(a=>{let b=`${a.filePath}:${a.content.slice(0,100)}`;return!c.has(b)&&(c.add(b),!0)}).slice(0,b)}function G(a,b,c,f,g){let h=e.isAbsolute(a)?a:d.existsSync(e.join(g,"knowledgeBase",a))?e.join(g,"knowledgeBase",a):e.join(g,a);if(!d.existsSync(h)||d.statSync(h).isDirectory())return[];let i=e.extname(h).toLowerCase();return(([".pdf",".doc",".docx",".xls",".xlsx",".png",".jpg",".jpeg",".webp"].includes(i)?`资料文件:${e.basename(a)},文件类型:${i}。`:d.readFileSync(h,"utf-8")).match(/[\s\S]{1,1800}/gu)||[]).slice(0,12).map((d,e)=>({chapterId:f,filePath:a,score:1,content:d,roleId:b,processingType:c,sectionTitle:`文件片段 ${e+1}`,source:"bound-file-direct"}))}function H(a,b=0){return`- ${D(a,b)}:${E(a.content).replace(/\s+/gu," ").slice(0,260)}`}function I(a,b){let c=b.slice(0,16),d=new Map;for(let c of b){let b=function(a,b){let c=e.extname(a).toLowerCase();return"drawing"===b||/地图|图纸|map/iu.test(a)?"map":[".png",".jpg",".jpeg",".webp"].includes(c)?"image":"table"===b?"table":[".xls",".xlsx",".csv"].includes(c)?"spreadsheet":[".pdf",".doc",".docx"].includes(c)?"document":c&&![".md",".txt"].includes(c)?"attachment":"text"}(c.filePath,c.processingType),f=d.get(c.filePath)||{filePath:c.filePath,kind:b,roleId:c.roleId,processingType:c.processingType,score:c.score,semanticTitle:function(a,b){let c=e.basename(a).replace(/\.[^.]+$/u,"");return"map"===b?c.replace(/^地图图纸-/u,"").replace(/-完整地图图纸$/u,"完整地图图纸"):"image"===b?c.replace(/-/gu," "):"spreadsheet"===b?`${c}(结构化表格)`:"document"===b?`${c}(文档附件)`:c}(c.filePath,b),contentUse:"map"===b?"作为地图/图纸证据,用于说明空间关系、区域划分、点位、路线或专业布置。":"image"===b?"作为图片证据,用于视觉说明、参考图或章节配图。":"spreadsheet"===b||"table"===b?"作为表格/数据证据,用于字段对比、清单、数量和结构化结论。":"document"===b?"作为 PDF/Word 文档证据,用于提取规范、事实、说明、约束和附件来源。":"attachment"===b?"作为附件证据,用于提供补充来源、文件级约束或可追溯引用。":"作为文本证据,用于事实抽取、章节论据和来源引用。",relatedFacts:[],relatedChapters:[],snippets:[]};f.score=Math.max(f.score,c.score),f.relatedFacts=[...new Set([...f.relatedFacts,...function(a,b){let c=`${a.filePath}
5
+ ${a.content}`;return[...new Set([...b?.requiredFacts||[],"表格数据","规范要求","项目事实","附件资料","图纸资料","图片资料"].filter(b=>L(a,b)||c.includes(b)))]}(c,a)])],f.relatedChapters=[...new Set([...f.relatedChapters,a.title])];let g=c.content.replace(/\s+/gu," ").slice(0,320);g&&f.snippets.length<3&&!f.snippets.includes(g)&&f.snippets.push(g),d.set(c.filePath,f)}let f=[...d.values()].sort((a,b)=>b.score-a.score),g={map:[],image:[],table:[],document:[],spreadsheet:[],text:[],attachment:[]};for(let a of f)g[a.kind].push(a);let h=[`内部资料包:文本片段 ${c.length} 条、结构化资料 ${f.length} 个。`,`资料类型分布:文本 ${g.text.length}、文档 ${g.document.length}、表格/清单 ${g.spreadsheet.length+g.table.length}、图片 ${g.image.length}、图纸 ${g.map.length}、其他 ${g.attachment.length}。`,"正文必须只写资料中的工程事实、参数、数量、做法和控制措施,不得出现文件名、来源清单或后台证据描述。"].filter(Boolean).join("\n");return{chapterId:a.id,textEvidence:c,resources:f,byKind:g,summary:h}}function J(a){let b=a.resources.slice(0,20).map((a,b)=>[`- 资料:${D(a,b)}`,` 资料类型:${a.kind}`,` 正文用途:${a.contentUse}`,a.relatedFacts.length?` 可用事实方向:${a.relatedFacts.join("、")}`:"",a.snippets.length?` 可用内容:${a.snippets.map(E).filter(Boolean).join(" / ")}`:""].filter(Boolean).join("\n")).join("\n"),c=a.textEvidence.map((a,b)=>`${D(a,b)}
7
6
  类型:${a.processingType||"reference"}
8
- 章节/片段:${a.sectionTitle||"未标注"}
9
- 内容:${a.content.replace(/\s+/gu," ").slice(0,900)}`).join("\n\n---\n\n");return[a.summary,b?`结构化资源证据:
10
- ${b}`:"",c?`文本/附件片段证据:
11
- ${c}`:""].filter(Boolean).join("\n\n")}function G(a,b,c=[]){if(!b)return a.chapters;if("fixed"===b.chapterMode)return b.chapterRules.length>0?[...b.chapterRules].sort((a,b)=>a.order-b.order).map(a=>({id:a.id,title:a.title,purpose:a.generationHint||a.title,requiredFacts:a.requiredFactIds||[],queries:[a.title,a.generationHint||"",...a.requiredFactIds||[]].filter(Boolean),pinnedEvidenceFilePaths:[]})):a.chapters;let d=b.dynamicChapterRule,f=Math.max(1,Math.min(20,d.minChapters||3)),g=Math.max(f,Math.min(30,d.maxChapters||Math.max(f,8))),h=new Set([...d.sourceRoleIds||[],...d.requiredFileRoleIds||[]]),i=c.filter(a=>0===h.size||a.roleId&&h.has(a.roleId)).filter((a,b,c)=>c.findIndex(b=>`${b.filePath}:${b.sectionTitle||""}`==`${a.filePath}:${a.sectionTitle||""}`)===b).slice(0,g).map((a,b)=>{let c=function(a,b,c){let d=(a.sectionTitle||e.basename(a.filePath).replace(/\.[^.]+$/u,"")||`资料片段 ${b+1}`).replace(/\s+/gu," ").slice(0,60);return c?c.replaceAll("{{index}}",String(b+1)).replaceAll("{{sourceTitle}}",d):d}(a,b,d.titleTemplate);return{id:`dynamic-${b+1}`,title:c,purpose:d.generationHint||`根据 ${a.filePath} 动态生成章节`,requiredFacts:d.requiredFactIds||[],queries:[c,a.filePath,a.sectionTitle||"",d.generationHint||""].filter(Boolean),pinnedEvidenceFilePaths:[a.filePath]}});if(i.length>=f)return i;let j=a.chapters.length>0?a.chapters.map(a=>a.title):["背景与目标","资料分析","结论与建议"];for(;i.length<f;){let a=i.length,b=j[a]||`动态章节 ${a+1}`;i.push({id:`dynamic-${a+1}`,title:b,purpose:d.generationHint||b,requiredFacts:d.requiredFactIds||[],queries:[b,d.generationHint||"",(d.sourceRoleIds||[]).filter(Boolean).join(" ")].filter(Boolean),pinnedEvidenceFilePaths:[]})}return i}function H(a,b){let c=`${a.filePath}
12
- ${a.content}`;return(function(a){let b=a.replace(/要求|计划|目标|标准|内容|信息|事实|依据|参数|范围|要点/gu,"");return[a,b].filter(Boolean)})(b).some(a=>c.includes(a))}function I(a,b){let c=G(a,b,[]).flatMap(a=>a.requiredFacts).map(a=>({id:a,name:a,required:!0,sourceRoleIds:[],extractionHint:""})),d=b?.factFields.map(a=>({id:a.id,name:a.name,required:a.required,sourceRoleIds:a.sourceRoleIds||[],extractionHint:a.extractionHint||""}))||[],e=new Map;for(let a of[...c,...d])e.set(a.id,{...e.get(a.id)||a,...a,required:a.required||e.get(a.id)?.required||!1});return[...e.values()]}function J(a,b){return(!b.sourceRoleIds?.length||!!(a.roleId&&b.sourceRoleIds.includes(a.roleId)))&&H(a,b.name)}function K(a){return a.toLowerCase()}function L(a,b){return(a||b).replace(/[^a-zA-Z0-9\u4e00-\u9fa5_-]/gu,"-").slice(0,80)||b}function M(a){return"string"==typeof a?a:null==a?"":Array.isArray(a)?a.map(a=>M(a)).filter(Boolean).join(";"):"object"==typeof a?Object.entries(a).map(([a,b])=>`${a}:${M(b)}`).filter(Boolean).join(";"):String(a)}async function N(a,b){let c=b.slice(0,36).map(a=>`文件:${a.filePath}
7
+ 章节/片段:${a.sectionTitle?.replace(C,"")||"资料片段"}
8
+ 内容:${E(a.content).replace(/\s+/gu," ").slice(0,900)}`).join("\n\n---\n\n");return[a.summary,b?`结构化资料:
9
+ ${b}`:"",c?`文本/附件片段:
10
+ ${c}`:""].filter(Boolean).join("\n\n")}function K(a,b,c=[]){if(!b)return a.chapters;if("fixed"===b.chapterMode)return b.chapterRules.length>0?[...b.chapterRules].sort((a,b)=>a.order-b.order).map(a=>({id:a.id,title:a.title,purpose:a.generationHint||a.title,requiredFacts:a.requiredFactIds||[],queries:[a.title,a.generationHint||"",...a.requiredFactIds||[]].filter(Boolean),pinnedEvidenceFilePaths:[]})):a.chapters;let d=b.dynamicChapterRule,f=Math.max(1,Math.min(20,d.minChapters||3)),g=Math.max(f,Math.min(30,d.maxChapters||Math.max(f,8))),h=new Set([...d.sourceRoleIds||[],...d.requiredFileRoleIds||[]]),i=c.filter(a=>0===h.size||a.roleId&&h.has(a.roleId)).filter((a,b,c)=>c.findIndex(b=>`${b.filePath}:${b.sectionTitle||""}`==`${a.filePath}:${a.sectionTitle||""}`)===b).slice(0,g).map((a,b)=>{let c=function(a,b,c){let d=(a.sectionTitle||e.basename(a.filePath).replace(/\.[^.]+$/u,"")||`资料片段 ${b+1}`).replace(/\s+/gu," ").slice(0,60);return c?c.replaceAll("{{index}}",String(b+1)).replaceAll("{{sourceTitle}}",d):d}(a,b,d.titleTemplate);return{id:`dynamic-${b+1}`,title:c,purpose:d.generationHint||`根据 ${a.filePath} 动态生成章节`,requiredFacts:d.requiredFactIds||[],queries:[c,a.filePath,a.sectionTitle||"",d.generationHint||""].filter(Boolean),pinnedEvidenceFilePaths:[a.filePath]}});if(i.length>=f)return i;let j=a.chapters.length>0?a.chapters.map(a=>a.title):["背景与目标","资料分析","结论与建议"];for(;i.length<f;){let a=i.length,b=j[a]||`动态章节 ${a+1}`;i.push({id:`dynamic-${a+1}`,title:b,purpose:d.generationHint||b,requiredFacts:d.requiredFactIds||[],queries:[b,d.generationHint||"",(d.sourceRoleIds||[]).filter(Boolean).join(" ")].filter(Boolean),pinnedEvidenceFilePaths:[]})}return i}function L(a,b){let c=`${a.filePath}
11
+ ${a.content}`;return(function(a){let b=a.replace(/要求|计划|目标|标准|内容|信息|事实|依据|参数|范围|要点/gu,"");return[a,b].filter(Boolean)})(b).some(a=>c.includes(a))}function M(a,b){let c=K(a,b,[]).flatMap(a=>a.requiredFacts).map(a=>({id:a,name:a,required:!0,sourceRoleIds:[],extractionHint:""})),d=b?.factFields.map(a=>({id:a.id,name:a.name,required:a.required,sourceRoleIds:a.sourceRoleIds||[],extractionHint:a.extractionHint||""}))||[],e=new Map;for(let a of[...c,...d])e.set(a.id,{...e.get(a.id)||a,...a,required:a.required||e.get(a.id)?.required||!1});return[...e.values()]}function N(a,b){return(!b.sourceRoleIds?.length||!!(a.roleId&&b.sourceRoleIds.includes(a.roleId)))&&L(a,b.name)}function O(a){return a.toLowerCase()}function P(a,b){return(a||b).replace(/[^a-zA-Z0-9\u4e00-\u9fa5_-]/gu,"-").slice(0,80)||b}function Q(a){return"string"==typeof a?a:null==a?"":Array.isArray(a)?a.map(a=>Q(a)).filter(Boolean).join(";"):"object"==typeof a?Object.entries(a).map(([a,b])=>`${a}:${Q(b)}`).filter(Boolean).join(";"):String(a)}async function R(a,b){let c=b.slice(0,36).map(a=>`文件:${a.filePath}
13
12
  片段:${a.sectionTitle||""}
14
- 内容:${a.content.slice(0,1200)}`).join("\n\n---\n\n"),d=a.promptTexts.join("\n\n")||"请读取绑定文件角色,抽取可用于文档生成的结构化信息。",e=c.trim()?await aa(d,`你正在执行一个“文件角色 \xd7 提示词角色”的读取节点。
13
+ 内容:${a.content.slice(0,1200)}`).join("\n\n---\n\n"),d=a.promptTexts.join("\n\n")||"请读取绑定文件角色,抽取可用于文档生成的结构化信息。",e=c.trim()?await af(d,`你正在执行一个“文件角色 \xd7 提示词角色”的读取节点。
15
14
  节点类型:${a.outputType}
16
15
  文件角色:${a.fileRoleName}(${a.fileRoleId})
17
16
  要求:严格按该节点绑定的提示词读取该文件角色的内容,不要读取其他角色。
@@ -19,32 +18,33 @@ ${a.content}`;return(function(a){let b=a.replace(/要求|计划|目标|标准|
19
18
  请返回 JSON,字段包括 chapters、facts、outputRequirements、forbidImageInsertion、warnings。chapters 中每项包含 title、sourceRequirement、requiredContents、writingRules、evidenceNeeds、minWords、requirements;requirements 中每项包含 title、requirementText、requiredContents、writingRules、evidenceNeeds、preferredSourceRoleIds;facts 中每项包含 key、value、sourceFile、relatedChapterHints。
20
19
 
21
20
  绑定文件片段:
22
- ${c}`):void 0,f=(e?.chapters||[]).filter(a=>a.title).map((a,b)=>({id:L(a.title,`chapter-${b+1}`),title:a.title,order:b,sourceRequirement:a.sourceRequirement||a.title,requiredContents:Array.isArray(a.requiredContents)?a.requiredContents.filter(Boolean):[],writingRules:Array.isArray(a.writingRules)?a.writingRules.filter(Boolean):[],evidenceNeeds:Array.isArray(a.evidenceNeeds)?a.evidenceNeeds.filter(Boolean):[],minWords:Math.max(800,Math.min(3500,Number(a.minWords)||1200)),requirements:Array.isArray(a.requirements)?a.requirements.map((c,d)=>({id:L(`${a.title}-${c.title||d+1}`,`req-${b+1}-${d+1}`),title:c.title||`要求 ${d+1}`,requirementText:c.requirementText||c.title||"",requiredContents:Array.isArray(c.requiredContents)?c.requiredContents.filter(Boolean):[],writingRules:Array.isArray(c.writingRules)?c.writingRules.filter(Boolean):[],evidenceNeeds:Array.isArray(c.evidenceNeeds)?c.evidenceNeeds.filter(Boolean):[],preferredSourceRoleIds:Array.isArray(c.preferredSourceRoleIds)?c.preferredSourceRoleIds.filter(Boolean):[]})):[]})),g=(e?.facts||[]).filter(a=>a.key&&a.value).map(c=>({key:c.key,value:M(c.value),sourceFile:c.sourceFile||b.find(a=>a.filePath)?.filePath||"",roleId:a.fileRoleId,processingType:a.processingType,relatedChapterHints:Array.isArray(c.relatedChapterHints)?c.relatedChapterHints.filter(Boolean):[]}));return{node:a,evidence:b,chapters:f.length>0?f:function(a,b){if("template_requirements"!==a.outputType)return[];let c=[],d=new Set;for(let a of b){for(let b of a.content.split(/\r?\n/u).map(a=>a.trim()).filter(Boolean)){if(!/^(?:第[一二三四五六七八九十百千万\d]+[章节]|[一二三四五六七八九十]+、|\d+(?:\.\d+)*[、..])/.test(b))continue;let e=b.replace(/^\d+(?:\.\d+)*[、..]\s*/u,"").slice(0,80);if(!(e.length<4||d.has(e))&&(d.add(e),c.push({id:L(e,`chapter-${c.length+1}`),title:e,order:c.length,sourceRequirement:a.content.replace(/\s+/gu," ").slice(0,500),requiredContents:[],writingRules:[],evidenceNeeds:[],minWords:1200,requirements:[]}),c.length>=18))break}if(c.length>=18)break}return c}(a,b),facts:g.length>0?g:b.slice(0,20).map((b,c)=>({key:`${a.fileRoleName}事实${c+1}`,value:b.content.replace(/\s+/gu," ").slice(0,360),sourceFile:b.filePath,roleId:a.fileRoleId,processingType:a.processingType,relatedChapterHints:b.sectionTitle?[b.sectionTitle]:[]})).filter(a=>a.value.length>20),outputRequirements:Array.isArray(e?.outputRequirements)?e.outputRequirements.filter(Boolean):[],warnings:Array.isArray(e?.warnings)?e.warnings.filter(Boolean):[],forbidImageInsertion:e?.forbidImageInsertion??"drawing_facts"===a.outputType}}function O(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}
23
- ${M(a.value)}
24
- ${a.relatedChapterHints.join("\n")}`;return 0===d.length||d.some(c=>b.includes(c)||c.includes(a.key))}).slice(0,80)}function P(a,b){return a.some(a=>a.forbidImageInsertion||"drawing_facts"===a.node.outputType)}function Q(a,b){return b?a.replace(/^!\[[^\]]*(?:图纸|drawing|cad|地图|平面|剖面|立面)[^\]]*\]\([^)]*\)\s*$/gimu,"").replace(/\n{3,}/gu,"\n\n"):a}let R=/^##\s*(?:编制依据与证据来源|资料来源清单|缺失项与需确认事项|校验结果|严格校验清单|项目基础信息与响应原则|工程概况与图纸依据)[\s\S]*?(?=^##\s|$(?![\s\S]))/gmu,S=/.*(?:本章补充|动态章节|知识库证据|文件角色|提示词角色|文档规范包|规范包|事实字段|资料未提供|未检索到|待确认事项|证据来源|来源清单).*(?:\n|$)/gu,T=/^\s*(?:[│┃┆┊┌┐└┘├┤┬┴┼─━╭╮╰╯]|[↓↑→←⇒⇨➡])+\s*$/gmu;function U(a){return a.replace(R,"").replace(S,"").replace(T,"").replace(/第\s*\d+\s*页\s*\/\s*共\s*\d+\s*页/gu,"").replace(/\n{3,}/gu,"\n\n").trim()}let V="你正在生成正式施工组织设计正文,不是分析报告、证据报告或系统调试报告。\n禁止出现“知识库、证据、来源清单、检索、文件角色、提示词角色、规范包、事实字段、动态章节、缺失项、校验结果、资料未提供、未检索到、本章补充”等系统工作流话术。\n所有招标文件、清单、图纸信息必须内化为正式投标文件表达,不单列资料来源、证据来源或校验清单。\n组织机构、职责分工、关键线路、流程、资源配置、风险控制必须优先使用 Markdown 表格,不得使用由 │、─、↓、→ 等字符组成的文本图或箭头流程链。\n语言应正式、专业、克制,可直接用于投标技术标正文。";async function W(a){if(0===a.issues.length)return{markdown:a.markdown,stage:void 0};let b=await _(["你是招标文件质量补写和纠偏专家。必须严格按照示范文本节点产出的章节计划补齐内容,使用清单、图纸文本事实和项目资料事实,禁止编造。",a.forbidDrawingImages?"图纸资料只作为文本事实来源,禁止插入图纸图片或 Markdown 图片语法。":"","保持 Markdown 标题层级、目录和已有来源信息;直接返回修复后的完整 Markdown。",a.promptTexts].filter(Boolean).join("\n\n"),[`模板:${a.template.name}`,a.requirement?`用户要求:${a.requirement}`:"",`需要修复的问题:
21
+ ${c}`):void 0,f=(e?.chapters||[]).filter(a=>a.title).map((a,b)=>({id:P(a.title,`chapter-${b+1}`),title:a.title,order:b,sourceRequirement:a.sourceRequirement||a.title,requiredContents:Array.isArray(a.requiredContents)?a.requiredContents.filter(Boolean):[],writingRules:Array.isArray(a.writingRules)?a.writingRules.filter(Boolean):[],evidenceNeeds:Array.isArray(a.evidenceNeeds)?a.evidenceNeeds.filter(Boolean):[],minWords:Math.max(800,Math.min(3500,Number(a.minWords)||1200)),requirements:Array.isArray(a.requirements)?a.requirements.map((c,d)=>({id:P(`${a.title}-${c.title||d+1}`,`req-${b+1}-${d+1}`),title:c.title||`要求 ${d+1}`,requirementText:c.requirementText||c.title||"",requiredContents:Array.isArray(c.requiredContents)?c.requiredContents.filter(Boolean):[],writingRules:Array.isArray(c.writingRules)?c.writingRules.filter(Boolean):[],evidenceNeeds:Array.isArray(c.evidenceNeeds)?c.evidenceNeeds.filter(Boolean):[],preferredSourceRoleIds:Array.isArray(c.preferredSourceRoleIds)?c.preferredSourceRoleIds.filter(Boolean):[]})):[]})),g=(e?.facts||[]).filter(a=>a.key&&a.value).map(c=>({key:c.key,value:E(Q(c.value)),sourceFile:c.sourceFile||b.find(a=>a.filePath)?.filePath||"",roleId:a.fileRoleId,processingType:a.processingType,relatedChapterHints:Array.isArray(c.relatedChapterHints)?c.relatedChapterHints.filter(Boolean):[]}));return{node:a,evidence:b,chapters:f.length>0?f:function(a,b){if("template_requirements"!==a.outputType)return[];let c=[],d=new Set;for(let a of b){for(let b of a.content.split(/\r?\n/u).map(a=>a.trim()).filter(Boolean)){if(!/^(?:第[一二三四五六七八九十百千万\d]+[章节]|[一二三四五六七八九十]+、|\d+(?:\.\d+)*[、..])/.test(b))continue;let e=b.replace(/^\d+(?:\.\d+)*[、..]\s*/u,"").slice(0,80);if(!(e.length<4||d.has(e))&&(d.add(e),c.push({id:P(e,`chapter-${c.length+1}`),title:e,order:c.length,sourceRequirement:a.content.replace(/\s+/gu," ").slice(0,500),requiredContents:[],writingRules:[],evidenceNeeds:[],minWords:1200,requirements:[]}),c.length>=18))break}if(c.length>=18)break}return c}(a,b),facts:g.length>0?g:b.slice(0,20).map((b,c)=>({key:`${a.fileRoleName}事实${c+1}`,value:b.content.replace(/\s+/gu," ").slice(0,360),sourceFile:b.filePath,roleId:a.fileRoleId,processingType:a.processingType,relatedChapterHints:b.sectionTitle?[b.sectionTitle]:[]})).filter(a=>a.value.length>20),outputRequirements:Array.isArray(e?.outputRequirements)?e.outputRequirements.filter(Boolean):[],warnings:Array.isArray(e?.warnings)?e.warnings.filter(Boolean):[],forbidImageInsertion:e?.forbidImageInsertion??"drawing_facts"===a.outputType}}function S(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}
22
+ ${Q(a.value)}
23
+ ${a.relatedChapterHints.join("\n")}`;return 0===d.length||d.some(c=>b.includes(c)||c.includes(a.key))}).slice(0,80)}function T(a,b){return a.some(a=>a.forbidImageInsertion||"drawing_facts"===a.node.outputType)}function U(a,b){return b?a.replace(/^!\[[^\]]*(?:图纸|drawing|cad|地图|平面|剖面|立面)[^\]]*\]\([^)]*\)\s*$/gimu,"").replace(/\n{3,}/gu,"\n\n"):a}let V=/^##\s*(?:编制依据与证据来源|资料来源清单|缺失项与需确认事项|校验结果|严格校验清单|项目基础信息与响应原则|工程概况与图纸依据|输入资料概览|清单关键信息提取总表|施工组织设计重难点清单|设备\/材料\/参数\/标准专项响应表|技术标章节编制建议表|图纸文件基础识别|图纸专业信息与图框信息提取|给排水及厨房设备相关图纸线索提取|施工组织设计可用信息转化要求)[\s\S]*?(?=^##\s|$(?![\s\S]))/gmu,W=/.*(?:本章小结|本章补充|动态章节|知识库证据|文件角色|提示词角色|文档规范包|规范包|事实字段|资料未提供|未检索到|待确认事项|证据来源|来源清单|输入资料概览|表\d+:|图纸文件基础识别|图纸专业信息与图框信息提取|给排水及厨房设备相关图纸线索提取|施工组织设计可用信息转化要求).*(?:\n|$)/gu,X=/^\s*(?:[│┃┆┊┌┐└┘├┤┬┴┼─━╭╮╰╯]|[↓↑→←⇒⇨➡])+\s*$/gmu;function Y(a){return a.replace(V,"").replace(W,"").replace(X,"").replace(C,"").replace(B,"").replace(/第\s*\d+\s*页\s*\/\s*共\s*\d+\s*页/gu,"").replace(/\n{3,}/gu,"\n\n").trim()}let Z="清单与图纸描述同一工程对象时,图纸文本标注、设计说明、系统图和节点详图中的规格、尺寸、材质、系统参数、位置和施工做法优先;清单主要用于工程量、单位、项目特征和计价范围补充。\n如清单参数与图纸参数不一致,必须以图纸可读文本事实为准;不得把清单中与图纸冲突的规格、材质、尺寸、系统参数写成最终事实。\n若只有清单有工程量、单位或项目特征而图纸未给出对应数据,可采用清单数据;若只有图纸有设计参数而清单未列明,采用图纸参数。\n对同一工程对象应合并表达为“图纸参数 + 清单工程量/单位/项目特征”的完整事实,禁止分别罗列为来源对照表。",$=["你正在生成正式施工组织设计正文,不是分析报告、证据报告或系统调试报告。\n禁止出现“知识库、证据、来源清单、检索、文件角色、提示词角色、规范包、事实字段、动态章节、缺失项、校验结果、资料未提供、未检索到、本章补充、本章小结”等系统或模板话术。\n禁止输出“表1:清单关键信息提取总表、表2:施工组织设计重难点清单、表3:设备/材料/参数/标准专项响应表、表4:技术标章节编制建议表、图纸文件基础识别、图纸专业信息与图框信息提取、给排水及厨房设备相关图纸线索提取、施工组织设计可用信息转化要求”等中间分析产物标题。\n所有招标文件、清单、图纸信息必须内化为正式投标文件表达,不单列资料来源、证据来源或校验清单,不引用 PDF、DWG、Excel 等文件名。\n清单与图纸必须作为一体化工程事实使用,正文应优先写入项目特征、工程量、单位、规格、尺寸、材质、功率、电压、系统参数、做法和验收标准等可读数据,不得写入 CAD 内部对象名或语义化占位词。",Z,"组织机构、职责分工、关键线路、流程、资源配置、风险控制必须优先使用 Markdown 表格,不得使用由 │、─、↓、→ 等字符组成的文本图或箭头流程链。\n语言应正式、专业、克制,可直接用于投标技术标正文。"].join("\n");async function _(a){if(0===a.issues.length)return{markdown:a.markdown,stage:void 0};let b=await ae(["你是招标文件质量补写和纠偏专家。必须严格按照示范文本节点产出的章节计划补齐内容,使用清单、图纸文本事实和项目资料事实,禁止编造;同一工程对象中清单与图纸参数不一致时,以图纸文本事实为准。",a.forbidDrawingImages?"图纸资料只作为文本事实来源,禁止插入图纸图片或 Markdown 图片语法。":"","保持 Markdown 标题层级、目录和已有来源信息;直接返回修复后的完整 Markdown。",a.promptTexts].filter(Boolean).join("\n\n"),[`模板:${a.template.name}`,a.requirement?`用户要求:${a.requirement}`:"",`需要修复的问题:
25
24
  ${a.issues.map(a=>`- ${a}`).join("\n")}`,`章节计划:
26
- ${a.plan.map(a=>`- ${a.title}:${a.requiredContents.join("、")};要求=${a.sourceRequirement.slice(0,200)}`).join("\n")}`,"角色节点产物摘要:",a.artifacts.map(a=>{let b=a.chapters.slice(0,18).map(a=>`- ${a.title}:${a.requiredContents.join("、")||a.sourceRequirement.slice(0,120)}`).join("\n"),c=a.facts.slice(0,30).map(a=>`- ${a.key}:${M(a.value).slice(0,220)}(来源:${a.sourceFile},角色:${a.roleId})`).join("\n");return[`## ${a.node.fileRoleName} / ${a.node.outputType}`,b?`章节/要求:
25
+ ${a.plan.map(a=>`- ${a.title}:${a.requiredContents.join("、")};要求=${a.sourceRequirement.slice(0,200)}`).join("\n")}`,"角色节点产物摘要:",a.artifacts.map(a=>{let b=a.chapters.slice(0,18).map(a=>`- ${a.title}:${a.requiredContents.join("、")||a.sourceRequirement.slice(0,120)}`).join("\n"),c=a.facts.slice(0,30).map(a=>`- ${a.key}:${Q(a.value).slice(0,220)}(来源:${a.sourceFile},角色:${a.roleId})`).join("\n");return[`## ${a.node.fileRoleName} / ${a.node.outputType}`,b?`章节/要求:
27
26
  ${b}`:"",c?`事实:
28
- ${c}`:"",a.outputRequirements.length?`输出要求:${a.outputRequirements.join(";")}`:""].filter(Boolean).join("\n")}).join("\n\n"),"待修复 Markdown:",a.markdown].filter(Boolean).join("\n\n"));return b&&!(b.length<.85*a.markdown.length)&&b.includes("#")?{markdown:Q(b,a.forbidDrawingImages),stage:{type:"llm_review",roleId:"quality-repair",status:"success",message:`已按角色节点和章节计划完成质量补写,修复 ${a.issues.length} 项`}}:{markdown:a.markdown,stage:{type:"llm_review",roleId:"quality-repair",status:"fallback",message:`质量补写未返回有效结果:${a.issues.slice(0,5).join(";")}`}}}function X(a){if(a.projectRoleConfigId){let b=(0,m.Mu)(a.projectRoleConfigId),c=(0,m.XB)("prompt");if(b)return[...b.promptRoles].sort((a,b)=>a.order-b.order).map(a=>c.find(b=>b.id===a.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 Y(a){if(a.projectRoleConfigId){let b=(0,m.Mu)(a.projectRoleConfigId),c=(0,m.XB)("file");if(b)return[...b.fileRoles].sort((a,b)=>a.order-b.order).map(a=>c.find(b=>b.id===a.roleId)).filter(a=>!!a).flatMap(a=>(a.resourceIds?.length?a.resourceIds:a.resourceId?[a.resourceId]:[]).map(b=>({filePath:b,roleId:a.id})))}return a.fileBindings?.length?a.fileBindings:(a.boundFilePaths??[]).map(a=>({filePath:a,roleId:"project_fact"}))}function Z(a,b){let c=(0,i.resolveProtocol)(a,b);return"anthropic"===c?"anthropic":"google"===c?"google":"ollama"===c?"ollama":"openrouter"===c?"openrouter":"openai"}function $(){let a=(0,l.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 _(a,b,c=!1){try{let d=$();if(!d)return;let{model:e,provider:f}=d,g=(0,h.createProvider)(Z(e.provider,f),{baseUrl:f.baseUrl,apiKey:f.apiKey,modelName:e.name,directEndpoint:f.directEndpoint});return(await g.chat([{role:"system",content:c?`${a}
29
- 只返回 JSON,不要返回 markdown。`:a},{role:"user",content:b}],{temperature:.3*!c})).content.trim()}catch{return}}async function aa(a,b){let c=await _(a,b,!0);if(c)try{let a=c.replace(/^```json\s*/u,"").replace(/^```\s*/u,"").replace(/```$/u,"").trim();return JSON.parse(a)}catch{return}}async function ab(a,b){let c=$();if(!c?.provider.capabilities?.fileUnderstanding&&!c?.provider.capabilities?.imageUnderstanding)return{notes:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"当前模型未开启文件理解/图片理解能力"}};let f=(0,h.createProvider)(Z(c.model.provider,c.provider),{baseUrl:c.provider.baseUrl,apiKey:c.provider.apiKey,modelName:c.model.name,directEndpoint:c.provider.directEndpoint});if(!f.understandFiles)return{notes:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"当前 Provider 未实现文件理解接口"}};let g=[...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===g.length)return{notes:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"没有可发送给多模态模型的参考文件"}};try{let a=(await f.understandFiles(g,"请阅读这些参考图片/文件,提炼可用于文档生成和审查的事实、视觉要点、地图信息和封面设计建议。请用中文要点输出。",{maxTokens:1200})).content.trim();return{notes:a?[a]:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:a?"success":"fallback",message:a?`已理解 ${g.length} 个多模态参考文件`:"多模态模型未返回有效文件理解结果"}}}catch{return{notes:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:"fallback",message:"文件理解调用失败,继续使用本地解析内容"}}}}async function ac(a,b,c,d){let e=[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"LLM JSON 抽取未启用或无可用模型"}],f=a.slice(0,24).map(a=>`文件:${a.filePath}
27
+ ${c}`:"",a.outputRequirements.length?`输出要求:${a.outputRequirements.join(";")}`:""].filter(Boolean).join("\n")}).join("\n\n"),"待修复 Markdown:",a.markdown].filter(Boolean).join("\n\n"));return b&&!(b.length<.85*a.markdown.length)&&b.includes("#")?{markdown:U(b,a.forbidDrawingImages),stage:{type:"llm_review",roleId:"quality-repair",status:"success",message:`已按角色节点和章节计划完成质量补写,修复 ${a.issues.length} 项`}}:{markdown:a.markdown,stage:{type:"llm_review",roleId:"quality-repair",status:"fallback",message:`质量补写未返回有效结果:${a.issues.slice(0,5).join(";")}`}}}function aa(a){if(a.projectRoleConfigId){let b=(0,m.Mu)(a.projectRoleConfigId),c=(0,m.XB)("prompt");if(b)return[...b.promptRoles].sort((a,b)=>a.order-b.order).map(a=>c.find(b=>b.id===a.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 ab(a){if(a.projectRoleConfigId){let b=(0,m.Mu)(a.projectRoleConfigId),c=(0,m.XB)("file");if(b)return[...b.fileRoles].sort((a,b)=>a.order-b.order).map(a=>c.find(b=>b.id===a.roleId)).filter(a=>!!a).flatMap(a=>(a.resourceIds?.length?a.resourceIds:a.resourceId?[a.resourceId]:[]).map(b=>({filePath:b,roleId:a.id})))}return a.fileBindings?.length?a.fileBindings:(a.boundFilePaths??[]).map(a=>({filePath:a,roleId:"project_fact"}))}function ac(a,b){let c=(0,i.resolveProtocol)(a,b);return"anthropic"===c?"anthropic":"google"===c?"google":"ollama"===c?"ollama":"openrouter"===c?"openrouter":"openai"}function ad(){let a=(0,l.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 ae(a,b,c=!1){try{let d=ad();if(!d)return;let{model:e,provider:f}=d,g=(0,h.createProvider)(ac(e.provider,f),{baseUrl:f.baseUrl,apiKey:f.apiKey,modelName:e.name,directEndpoint:f.directEndpoint});return(await g.chat([{role:"system",content:c?`${a}
28
+ 只返回 JSON,不要返回 markdown。`:a},{role:"user",content:b}],{temperature:.3*!c})).content.trim()}catch{return}}async function af(a,b){let c=await ae(a,b,!0);if(c)try{let a=c.replace(/^```json\s*/u,"").replace(/^```\s*/u,"").replace(/```$/u,"").trim();return JSON.parse(a)}catch{return}}async function ag(a,b){let c=ad();if(!c?.provider.capabilities?.fileUnderstanding&&!c?.provider.capabilities?.imageUnderstanding)return{notes:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"当前模型未开启文件理解/图片理解能力"}};let f=(0,h.createProvider)(ac(c.model.provider,c.provider),{baseUrl:c.provider.baseUrl,apiKey:c.provider.apiKey,modelName:c.model.name,directEndpoint:c.provider.directEndpoint});if(!f.understandFiles)return{notes:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"当前 Provider 未实现文件理解接口"}};let g=[...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===g.length)return{notes:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"没有可发送给多模态模型的参考文件"}};try{let a=(await f.understandFiles(g,"请阅读这些参考图片/文件,提炼可用于文档生成和审查的事实、视觉要点、地图信息和封面设计建议。请用中文要点输出。",{maxTokens:1200})).content.trim();return{notes:a?[a]:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:a?"success":"fallback",message:a?`已理解 ${g.length} 个多模态参考文件`:"多模态模型未返回有效文件理解结果"}}}catch{return{notes:[],stage:{type:"file_understanding",roleId:"multimodal-files",status:"fallback",message:"文件理解调用失败,继续使用本地解析内容"}}}}async function ah(a,b,c,d){let e=[{type:"fact_extraction",roleId:"llm-json",status:"skipped",message:"LLM JSON 抽取未启用或无可用模型"}],f=a.slice(0,24).map(a=>`文件:${a.filePath}
30
29
  角色:${a.roleId||""}
31
30
  处理:${a.processingType||""}
32
- 内容:${a.content.slice(0,1200)}`).join("\n\n---\n\n");if(!f.trim())return{facts:[],stages:e};let g=I(c,d),h=g.map(a=>`- id=${a.id} name=${a.name} type=auto required=${a.required} sourceRoleIds=${a.sourceRoleIds.join(",")||"不限"} hint=${a.extractionHint||"无"}`).join("\n"),i=await aa(b||"你是文档事实抽取器。",`请严格按下面的动态事实 schema 从资料中抽取事实。只抽取资料明确支持的内容;如果字段限定 sourceRoleIds,必须优先来自对应文件角色。返回 {"facts":[{"fieldId":"...","fieldName":"...","key":"...","value":"...","sourceFile":"...","roleId":"...","processingType":"project_fact","confidence":0.8}]}。
31
+ 内容:${a.content.slice(0,1200)}`).join("\n\n---\n\n");if(!f.trim())return{facts:[],stages:e};let g=M(c,d),h=g.map(a=>`- id=${a.id} name=${a.name} type=auto required=${a.required} sourceRoleIds=${a.sourceRoleIds.join(",")||"不限"} hint=${a.extractionHint||"无"}`).join("\n"),i=await af(b||"你是文档事实抽取器。",`请严格按下面的动态事实 schema 从资料中抽取事实。只抽取资料明确支持的内容;如果字段限定 sourceRoleIds,必须优先来自对应文件角色。${Z}
32
+ 返回 {"facts":[{"fieldId":"...","fieldName":"...","key":"...","value":"...","sourceFile":"...","roleId":"...","processingType":"project_fact","confidence":0.8}]}。
33
33
 
34
34
  动态事实 schema:
35
35
  ${h}
36
36
 
37
37
  资料:
38
- ${f}`);return i?.facts?.length?{facts:i.facts.filter(a=>a.key&&a.value).map(a=>{let b=g.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:M(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 抽取 ${i.facts.length} 条事实`}]}:{facts:[],stages:e}}function ad(a){return/出现禁用文本|资料未提供|导出|临时|无效|占位/iu.test(a.message)}function ae(a,b){return`${a.name}:${b}`}async function af(a,b,c,d,e,f,g,h="",i={}){let j=F(E(b,c));if(!j.trim()&&!h.trim())return;let k=["你是专业项目文档生成专家,必须严格使用已提供的内部资料生成正式文档章节。",V,"准确性优先级:章节计划/示范文本节点产物 > 规范包事实字段 > 角色节点结构化事实 > 知识库证据 > 项目上下文/历史记忆。内部优先级只用于判断事实,不得写入正文。","项目上下文/历史记忆只能作为用户偏好、历史纠偏和连续性参考;不得覆盖、替代或改写知识库证据中的事实。",i.forbidDrawingImages?"图纸资料只作为文本、标注、规格、位置、材料、数量等事实依据;禁止插入图纸图片或 Markdown 图片语法。":"","不要编造资料;可以基于证据做合理归纳;输出 Markdown;不要输出代码块。",e].filter(Boolean).join("\n\n"),l=[`文档模板:${a.name}`,`章节标题:${b.title}`,`章节目的:${b.purpose}`,g?`用户要求:${g}`:"",f?`项目上下文/历史记忆(仅作偏好、历史纠偏和连续性参考;如与知识库证据冲突,以知识库证据为准):
39
- ${f}`:"",h||"",d.length?`需要特别补足的事实:${d.join("、")}`:"","请生成一个专业、充实、可直接导出的正式施工组织设计章节,要求:","- 保留章节二级标题,并按章节计划逐项响应;","- 必须使用示范文本节点提取的章节要求和输出规范;","- 必须结合清单、图纸文本事实、项目事实、技术规范等内部资料;","- 图纸默认只作为文本事实来源,不要插入图纸图片;","- 将项目概况、施工范围、图纸和清单要点自然融入施工措施,不单列证据或来源章节;","- 组织架构、关键线路、施工流程、职责分工、资源配置、重难点分析必须优先表格化表达;",`- 内容不少于 ${i.minWords||1e3} 字,避免空泛口号。`,"",j?"知识库证据:":"",j].filter(Boolean).join("\n"),m=await _(k,l);if(m&&!(m.length<120))return U(Q(m.startsWith("## ")?m:`## ${b.title}
38
+ ${f}`);return i?.facts?.length?{facts:i.facts.filter(a=>a.key&&a.value).map(a=>{let b=g.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:Q(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 抽取 ${i.facts.length} 条事实`}]}:{facts:[],stages:e}}function ai(a){return/出现禁用文本|资料未提供|导出|临时|无效|占位/iu.test(a.message)}function aj(a,b){return`${a.name}:${b}`}async function ak(a,b,c,d,e,f,g,h="",i={}){let j=J(I(b,c));if(!j.trim()&&!h.trim())return;let k=["你是专业项目文档生成专家,必须严格使用已提供的内部资料生成正式文档章节。",$,"准确性优先级:章节计划/示范文本节点产物 > 规范包事实字段 > 角色节点结构化事实 > 知识库证据 > 项目上下文/历史记忆。内部优先级只用于判断事实,不得写入正文。","项目上下文/历史记忆只能作为用户偏好、历史纠偏和连续性参考;不得覆盖、替代或改写知识库证据中的事实。",i.forbidDrawingImages?"图纸资料只作为文本、标注、规格、位置、材料、数量等事实依据;禁止插入图纸图片或 Markdown 图片语法。":"","不要编造资料;可以基于证据做合理归纳;输出 Markdown;不要输出代码块。",e].filter(Boolean).join("\n\n"),l=[`文档模板:${a.name}`,`章节标题:${b.title}`,`章节目的:${b.purpose}`,g?`用户要求:${g}`:"",f?`项目上下文/历史记忆(仅作偏好、历史纠偏和连续性参考;如与知识库证据冲突,以知识库证据为准):
39
+ ${f}`:"",h||"",d.length?`需要特别补足的事实:${d.join("、")}`:"","请生成一个专业、充实、可直接导出的正式施工组织设计章节,要求:","- 保留章节二级标题,并按章节计划逐项响应;","- 必须使用示范文本节点提取的章节要求和输出规范;","- 必须结合清单、图纸文本事实、项目事实、技术规范等内部资料;","- 清单与图纸按同一工程对象综合使用,优先写入准确的工程量、单位、项目特征、规格尺寸、材质、功率、电压、系统参数、施工做法和验收标准;","- 同一工程对象中清单与图纸参数不一致时,以图纸文本标注、设计说明、系统图和节点详图为准;清单用于补充工程量、单位、项目特征和计价范围;","- 图纸默认只作为文本事实来源,不要插入图纸图片,不引用 PDF/DWG 文件名,不写 CAD 内部对象名;","- 将项目概况、施工范围、图纸和清单要点自然融入施工措施,不单列证据或来源章节;","- 小节层级保持适度,禁止设置“本章小结”,禁止输出表1至表4等分析表标题;","- 组织架构、关键线路、施工流程、职责分工、资源配置、重难点分析必须优先表格化表达;",`- 内容不少于 ${i.minWords||1e3} 字,避免空泛口号。`,"",j?"内部资料:":"",j].filter(Boolean).join("\n"),m=await ae(k,l);if(m&&!(m.length<120))return Y(U(m.startsWith("## ")?m:`## ${b.title}
40
40
 
41
- ${m}`,!!i.forbidDrawingImages))}async function ag(a){let b=F(E({id:"review",title:"全文审查",purpose:"审查全文证据和资源关系",queries:[],requiredFacts:[]},a.evidence)),c=a.spec?[`规范包:${a.spec.name}`,`事实字段:${a.spec.factFields.map(a=>`${a.name}${a.required?"(必需)":""}`).join("、")}`,"dynamic"===a.spec.chapterMode?`章节规则:动态章节|来源=${a.spec.dynamicChapterRule.source}|标题=${a.spec.dynamicChapterRule.titleStrategy||"ai_summary"}|${a.spec.dynamicChapterRule.generationHint||"由资料自动规划"}`:`章节规则:${a.spec.chapterRules.map(a=>`${a.title}${a.minWords?`≥${a.minWords}字`:""}`).join("、")}`,`门禁规则:${a.spec.gateRules.map(a=>`${a.name}:${a.type}`).join("、")}`].join("\n"):"未绑定文档规范包。",d=await _(["你是文档质量审查与优化专家。你要基于内部资料对初稿进行二次审查和优化,使其成为正式施工组织设计正文。",V,"准确性优先级:文档规范包/模板要求 > 已绑定或人工确认的知识库证据 > 自动检索知识库证据 > 项目上下文/历史记忆。内部优先级只用于判断事实,不得写入正文。","项目上下文/历史记忆只能用于风格偏好、历史纠偏和连续性检查;如果与知识库证据冲突,必须以知识库证据为准。","必须保持 Markdown 输出;保留已有正式标题层级和表格;不得保留或新增证据来源、资料来源、缺失项、校验结果等后台信息。","图纸资料默认只作为文本事实依据,除非用户明确要求插图,否则不要插入图纸图片或 Markdown 图片语法。","重点检查:正式章节完整性、清单和图纸事实内化使用、表格呈现、表达专业性、导出友好性。",a.promptTexts].filter(Boolean).join("\n\n"),[`模板:${a.template.name}`,a.requirement?`用户要求:${a.requirement}`:"",a.projectContext?`项目上下文/历史记忆(仅作偏好、历史纠偏和连续性参考;如与知识库证据冲突,以知识库证据为准):
42
- ${a.projectContext}`:"",c,"","知识库证据摘要:",b,"","待审查初稿:",a.markdown,"","请直接返回优化后的完整正式 Markdown,不要附加解释。"].filter(Boolean).join("\n"));return d&&!(d.length<.7*a.markdown.length)&&d.includes("#")?{markdown:U(d),stage:{type:"llm_review",roleId:"llm-review",status:"success",message:"已完成 LLM 二次审查与优化"}}:{markdown:a.markdown,stage:{type:"llm_review",roleId:"llm-review",status:"skipped",message:"无可用模型或审查结果不可用,保留生成初稿"}}}function ah(a){let b=a.chapters.map(a=>U(a.content)).filter(Boolean).join("\n\n");return U(['<div class="document-cover">',`# ${a.title}`,"","</div>","",'<div class="page-break"></div>',"","## 目录","",...a.chapters.map((a,b)=>`${b+1}. ${a.title}`),"",'<div class="page-break"></div>',"",b].join("\n"))}function ai(a){if(a?.aborted)throw Error("用户中止")}async function aj(a){ai(a.signal);let b=w(a.templateId);if(!b)throw Error("Document template not found");let c=e.resolve(a.projectRoot||(0,j.aY)());if(!c)throw Error("No knowledge base project found");let g=(0,j.Qh)(),h=Math.max(5,Math.min(30,a.maxEvidencePerChapter??12)),i=X(b),l=Y(b),o=(0,n.py)(b.documentSpecId),p=u(i).map(a=>`## [${a.roleId}] ${a.name}
43
- ${a.content}`).join("\n\n"),q=a=>[a,e.isAbsolute(a)?e.relative(c,a):e.join(c,a)],r=new Set(l.flatMap(a=>q(a.filePath))),s=(0,m.XB)("file"),t=new Map(l.flatMap(a=>q(a.filePath).map(b=>[b,a.roleId]))),v=new Map(l.flatMap(a=>q(a.filePath).map(b=>[b,s.find(b=>b.id===a.roleId)?.processingType||"reference"]))),x=await g.getProject(c);await x.incrementalIndex(),ai(a.signal);let y=[],z=[],A=[],D=[],E=[],F=function(a,b){let c=(0,m.XB)("file"),d=(0,m.XB)("prompt"),e=u(b),f=Y(a),g=new Map;for(let a of f)g.set(a.roleId,[...g.get(a.roleId)||[],a.filePath]);let h=c.filter(a=>g.has(a.id)),i=d.filter(a=>e.some(b=>b.roleId===a.id));return h.map((a,b)=>{let c=i.map(b=>{let c=e.filter(a=>a.roleId===b.id).map(a=>a.content);return{promptRole:b,texts:c,score:function(a,b,c){let d=K(`${a} ${c.join(" ")}`),e=0;for(let a of(/fact|抽取|读取|提取|理解|reference/u.test(d)&&(e+=5),/chapter_generation|章节生成|正文生成/u.test(d)&&(e+=1),[b.id,b.name,b.processingType||""].filter(Boolean)))d.includes(K(a))&&(e+=4);return/示范文本|招标文件|章节|目录|输出要求/u.test(`${b.name} ${c.join(" ")}`)&&/示范文本|章节|目录|输出要求|编制要求/u.test(d)&&(e+=6),/清单|工程量/u.test(`${b.name} ${c.join(" ")}`)&&/清单|工程量|项目特征/u.test(d)&&(e+=6),/图纸|drawing|cad/u.test(`${b.name} ${c.join(" ")}`)&&/图纸|drawing|cad|文本|标注/u.test(d)&&(e+=6),e}(b.id,a,c)}}).sort((a,b)=>b.score-a.score),d=c.filter(a=>a.score>=5).slice(0,2),f=c[b]||c[0],h=d.length>0?d:f?[f]:[],j=h.map(a=>a.promptRole.id),k=h.flatMap(a=>a.texts);return{id:`node-${a.id}`,fileRoleId:a.id,fileRoleName:a.name,filePaths:g.get(a.id)||[],processingType:a.processingType,promptRoleIds:j,promptTexts:k,outputType:function(a,b=[]){let c=K(`${a.id} ${a.name} ${a.processingType||""} ${b.join(" ")}`);return/示范文本|招标文件|章节|目录|输出要求|编制要求|template|tender/u.test(c)?"template_requirements":/清单|工程量|bill|boq|quantity/u.test(c)?"bill_facts":/图纸|drawing|cad|设计图|图纸解析/u.test(c)?"drawing_facts":/规范|标准|spec|technical/u.test(c)?"technical_facts":/项目|工程概况|事实|fact/u.test(c)?"project_facts":"reference_facts"}(a,k)}})}(b,i),R=[];for(let b of F){ai(a.signal);let d=function(a,b,c){let d=[];for(let e of b.filePaths){let f=a.getFileDetail(e);if(f){d.push(...f.chunks.slice(0,120).map(a=>({chapterId:b.id,filePath:f.file.relativePath,score:1,content:a.content,roleId:b.fileRoleId,processingType:b.processingType,sectionTitle:a.sectionTitle,source:"role-node"})));continue}d.push(...C(e,b.fileRoleId,b.processingType,b.id,c))}return B(d,120)}(x,b,c);z.push(...d);let e=await N(b,d);R.push(e),E.push({type:"file_understanding",roleId:b.fileRoleId,promptId:b.promptRoleIds[0],status:d.length>0?"success":"fallback",message:`${b.fileRoleName} 节点已按绑定提示词读取,产出章节 ${e.chapters.length} 个、事实 ${e.facts.length} 条`}),a.onProgress?.([...E])}let S=function(a){let b=a.filter(a=>"template_requirements"===a.node.outputType).flatMap(a=>a.chapters),c=new Map;for(let a of b.sort((a,b)=>a.order-b.order))c.has(a.title)||c.set(a.title,a);return[...c.values()]}(R),T=[b.name,b.outputTitle,a.requirement,o?.dynamicChapterRule?.generationHint,...o?.dynamicChapterRule?.sourceRoleIds||[]].filter(Boolean).join(" "),V=o?.chapterMode==="dynamic"&&0===S.length?(await g.search(c,T||b.name,{scope:"project",limit:20,weights:{keyword:.45,vector:.35,rewrite:.65,hybridBonus:.1}})).results.map(a=>({chapterId:"dynamic-planning",filePath:a.filePath,score:a.score,content:a.content,roleId:t.get(a.filePath),processingType:v.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})):[],Z=o?.chapterMode==="dynamic"&&S.length>0?S.map((a,b)=>({id:L(a.id,`dynamic-${b+1}`),title:a.title,purpose:[a.sourceRequirement,...a.writingRules].filter(Boolean).join("\n").slice(0,1200),requiredFacts:[...new Set([...a.requiredContents,...a.evidenceNeeds])],queries:[...new Set([a.title,...a.requiredContents,...a.evidenceNeeds,...a.requirements.flatMap(a=>[a.title,a.requirementText,...a.evidenceNeeds])].filter(Boolean))],pinnedEvidenceFilePaths:[]})):G(b,o,V),$=[b.name,b.outputTitle,a.requirement,...Z.flatMap(a=>[a.title,a.purpose])].filter(Boolean).join(" "),_=(0,k.Hh)($,8,c),aa=_.length>0?_.map((a,b)=>`${b+1}. [${a.type}/${a.importance}] ${a.content}${a.source?`(来源:${a.source})`:""}`).join("\n"):"",aj={type:"context_recall",roleId:"project-memory",status:_.length>0?"success":"skipped",message:_.length>0?`已注入 ${_.length} 条短期/长期上下文`:"未召回可用项目上下文"};for(let d of(E.push({type:"role_binding",roleId:b.projectRoleConfigId||"none",status:"success",message:`已绑定 ${l.length} 个文件角色、${i.length} 个提示词角色`}),E.push(aj),a.onProgress?.([...E]),Z)){ai(a.signal);try{let e=[],f=function(a,b){return b.find(b=>b.id===a.id||b.title===a.title)}(d,S),j=f?[f.title,...f.requiredContents,...f.evidenceNeeds,...f.requirements.flatMap(a=>[a.title,a.requirementText,...a.requiredContents,...a.evidenceNeeds])].filter(Boolean):[];for(let a of[...new Set([...d.queries.length>0?d.queries:[b.name,b.outputTitle,d.title],...j])]){let b=await g.search(c,a,{scope:"project",limit:Math.max(h,r.size>0?30:h),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});e.push(...b.results.filter(a=>0===r.size||r.has(a.filePath)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:t.get(a.filePath),processingType:v.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let k=new Set(d.pinnedEvidenceFilePaths||[]),l=O(R,d,f);for(let a of(e.push(...l.flatMap(({artifact:a})=>a.evidence.slice(0,8).map(a=>({...a,chapterId:d.id,source:"role-node"})))),new Set([...k]))){let b=k.has(a),f=x.getFileDetail(a);if(!f){e.push(...C(a,t.get(a),v.get(a),d.id,c).map(a=>({...a,source:b?"pinned-evidence":a.source})));continue}e.push(...f.chunks.slice(0,Math.max(h,20)).map(a=>({chapterId:d.id,filePath:f.file.relativePath,score:1,content:a.content,roleId:t.get(f.file.relativePath),processingType:v.get(f.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let m=B(e,h);z.push(...m);let n=d.requiredFacts.filter(a=>!m.some(b=>H(b,a)));for(let a of(0===m.length&&A.push(`${d.title}:未检索到明确资料依据`),n))A.push(`${d.title}:${a} 未检索到明确依据`);E.some(a=>"knowledge_retrieval"===a.type)||(E.push({type:"knowledge_retrieval",roleId:"knowledge-base",status:z.length>0?"success":"fallback",message:`已检索/绑定 ${z.length} 条证据`}),a.onProgress?.([...E])),ai(a.signal);let o=P(R,b),q=function(a,b,c){let d=O(a,b,c),e=c?[`章节来源要求:${c.sourceRequirement}`,c.requiredContents.length?`必须包含:${c.requiredContents.join("、")}`:"",c.writingRules.length?`写作规范:${c.writingRules.join("、")}`:"",c.evidenceNeeds.length?`需要证据:${c.evidenceNeeds.join("、")}`:"",c.requirements.length?`要求项:
44
- ${c.requirements.map(a=>`- ${a.title}:${a.requirementText||a.requiredContents.join("、")}`).join("\n")}`:""].filter(Boolean).join("\n"):"",f=new Map;for(let{artifact:a,fact:b}of d){let c=`${a.node.fileRoleName}(${a.node.outputType})`;f.set(c,[...f.get(c)||[],`- ${b.key}:${M(b.value)}(来源:${b.sourceFile})`])}let g=[...f.entries()].map(([a,b])=>`### ${a}
45
- ${b.slice(0,18).join("\n")}`).join("\n\n");return[e?`【本章章节计划】
41
+ ${m}`,!!i.forbidDrawingImages))}async function al(a){let b=J(I({id:"review",title:"全文审查",purpose:"审查全文证据和资源关系",queries:[],requiredFacts:[]},a.evidence)),c=a.spec?[`规范包:${a.spec.name}`,`事实字段:${a.spec.factFields.map(a=>`${a.name}${a.required?"(必需)":""}`).join("、")}`,"dynamic"===a.spec.chapterMode?`章节规则:动态章节|来源=${a.spec.dynamicChapterRule.source}|标题=${a.spec.dynamicChapterRule.titleStrategy||"ai_summary"}|${a.spec.dynamicChapterRule.generationHint||"由资料自动规划"}`:`章节规则:${a.spec.chapterRules.map(a=>`${a.title}${a.minWords?`≥${a.minWords}字`:""}`).join("、")}`,`门禁规则:${a.spec.gateRules.map(a=>`${a.name}:${a.type}`).join("、")}`].join("\n"):"未绑定文档规范包。",d=await ae(["你是文档质量审查与优化专家。你要基于内部资料对初稿进行二次审查和优化,使其成为正式施工组织设计正文。",$,"准确性优先级:文档规范包/模板要求 > 已绑定或人工确认的知识库证据 > 自动检索知识库证据 > 项目上下文/历史记忆。内部优先级只用于判断事实,不得写入正文。","项目上下文/历史记忆只能用于风格偏好、历史纠偏和连续性检查;如果与知识库证据冲突,必须以知识库证据为准。","必须保持 Markdown 输出;保留已有正式标题层级和表格;不得保留或新增证据来源、资料来源、缺失项、校验结果等后台信息。","图纸资料默认只作为文本事实依据,除非用户明确要求插图,否则不要插入图纸图片或 Markdown 图片语法;不得引用 PDF/DWG/Excel 文件名。","重点检查:正式章节完整性、清单和图纸事实内化使用、参数数字准确性、清单与图纸冲突时是否按图纸为准、CAD 内部对象名清理、表格呈现、表达专业性、导出友好性。","删除“本章小结”和表1至表4、图纸文件基础识别、图纸专业信息与图框信息提取、给排水及厨房设备相关图纸线索提取、施工组织设计可用信息转化要求等中间产物标题。",a.promptTexts].filter(Boolean).join("\n\n"),[`模板:${a.template.name}`,a.requirement?`用户要求:${a.requirement}`:"",a.projectContext?`项目上下文/历史记忆(仅作偏好、历史纠偏和连续性参考;如与知识库证据冲突,以知识库证据为准):
42
+ ${a.projectContext}`:"",c,"","知识库证据摘要:",b,"","待审查初稿:",a.markdown,"","请直接返回优化后的完整正式 Markdown,不要附加解释。"].filter(Boolean).join("\n"));return d&&!(d.length<.7*a.markdown.length)&&d.includes("#")?{markdown:Y(d),stage:{type:"llm_review",roleId:"llm-review",status:"success",message:"已完成 LLM 二次审查与优化"}}:{markdown:a.markdown,stage:{type:"llm_review",roleId:"llm-review",status:"skipped",message:"无可用模型或审查结果不可用,保留生成初稿"}}}function am(a){let b=a.chapters.map(a=>Y(a.content)).filter(Boolean).join("\n\n");return Y(['<div class="document-cover">',`# ${a.title}`,"","</div>","",'<div class="page-break"></div>',"","## 目录","",...a.chapters.map((a,b)=>`${b+1}. ${a.title}`),"",'<div class="page-break"></div>',"",b].join("\n"))}function an(a){if(a?.aborted)throw Error("用户中止")}async function ao(a){an(a.signal);let b=w(a.templateId);if(!b)throw Error("Document template not found");let c=e.resolve(a.projectRoot||(0,j.aY)());if(!c)throw Error("No knowledge base project found");let g=(0,j.Qh)(),h=Math.max(5,Math.min(30,a.maxEvidencePerChapter??12)),i=aa(b),l=ab(b),o=(0,n.py)(b.documentSpecId),p=u(i).map(a=>`## [${a.roleId}] ${a.name}
43
+ ${a.content}`).join("\n\n"),q=a=>[a,e.isAbsolute(a)?e.relative(c,a):e.join(c,a)],r=new Set(l.flatMap(a=>q(a.filePath))),s=(0,m.XB)("file"),t=new Map(l.flatMap(a=>q(a.filePath).map(b=>[b,a.roleId]))),v=new Map(l.flatMap(a=>q(a.filePath).map(b=>[b,s.find(b=>b.id===a.roleId)?.processingType||"reference"]))),x=await g.getProject(c);await x.incrementalIndex(),an(a.signal);let y=[],z=[],A=[],D=[],H=[],I=function(a,b){let c=(0,m.XB)("file"),d=(0,m.XB)("prompt"),e=u(b),f=ab(a),g=new Map;for(let a of f)g.set(a.roleId,[...g.get(a.roleId)||[],a.filePath]);let h=c.filter(a=>g.has(a.id)),i=d.filter(a=>e.some(b=>b.roleId===a.id));return h.map((a,b)=>{let c=i.map(b=>{let c=e.filter(a=>a.roleId===b.id).map(a=>a.content);return{promptRole:b,texts:c,score:function(a,b,c){let d=O(`${a} ${c.join(" ")}`),e=0;for(let a of(/fact|抽取|读取|提取|理解|reference/u.test(d)&&(e+=5),/chapter_generation|章节生成|正文生成/u.test(d)&&(e+=1),[b.id,b.name,b.processingType||""].filter(Boolean)))d.includes(O(a))&&(e+=4);return/示范文本|招标文件|章节|目录|输出要求/u.test(`${b.name} ${c.join(" ")}`)&&/示范文本|章节|目录|输出要求|编制要求/u.test(d)&&(e+=6),/清单|工程量/u.test(`${b.name} ${c.join(" ")}`)&&/清单|工程量|项目特征/u.test(d)&&(e+=6),/图纸|drawing|cad/u.test(`${b.name} ${c.join(" ")}`)&&/图纸|drawing|cad|文本|标注/u.test(d)&&(e+=6),e}(b.id,a,c)}}).sort((a,b)=>b.score-a.score),d=c.filter(a=>a.score>=5).slice(0,2),f=c[b]||c[0],h=d.length>0?d:f?[f]:[],j=h.map(a=>a.promptRole.id),k=h.flatMap(a=>a.texts);return{id:`node-${a.id}`,fileRoleId:a.id,fileRoleName:a.name,filePaths:g.get(a.id)||[],processingType:a.processingType,promptRoleIds:j,promptTexts:k,outputType:function(a,b=[]){let c=O(`${a.id} ${a.name} ${a.processingType||""} ${b.join(" ")}`);return/示范文本|招标文件|章节|目录|输出要求|编制要求|template|tender/u.test(c)?"template_requirements":/清单|工程量|bill|boq|quantity/u.test(c)?"bill_facts":/图纸|drawing|cad|设计图|图纸解析/u.test(c)?"drawing_facts":/规范|标准|spec|technical/u.test(c)?"technical_facts":/项目|工程概况|事实|fact/u.test(c)?"project_facts":"reference_facts"}(a,k)}})}(b,i),J=[];for(let b of I){an(a.signal);let d=function(a,b,c){let d=[];for(let e of b.filePaths){let f=a.getFileDetail(e);if(f){d.push(...f.chunks.slice(0,120).map(a=>({chapterId:b.id,filePath:f.file.relativePath,score:1,content:a.content,roleId:b.fileRoleId,processingType:b.processingType,sectionTitle:a.sectionTitle,source:"role-node"})));continue}d.push(...G(e,b.fileRoleId,b.processingType,b.id,c))}return F(d,120)}(x,b,c);z.push(...d);let e=await R(b,d);J.push(e),H.push({type:"file_understanding",roleId:b.fileRoleId,promptId:b.promptRoleIds[0],status:d.length>0?"success":"fallback",message:`${b.fileRoleName} 节点已按绑定提示词读取,产出章节 ${e.chapters.length} 个、事实 ${e.facts.length} 条`}),a.onProgress?.([...H])}let V=function(a){let b=a.filter(a=>"template_requirements"===a.node.outputType).flatMap(a=>a.chapters),c=new Map;for(let a of b.sort((a,b)=>a.order-b.order))c.has(a.title)||c.set(a.title,a);return[...c.values()]}(J),W=[b.name,b.outputTitle,a.requirement,o?.dynamicChapterRule?.generationHint,...o?.dynamicChapterRule?.sourceRoleIds||[]].filter(Boolean).join(" "),X=o?.chapterMode==="dynamic"&&0===V.length?(await g.search(c,W||b.name,{scope:"project",limit:20,weights:{keyword:.45,vector:.35,rewrite:.65,hybridBonus:.1}})).results.map(a=>({chapterId:"dynamic-planning",filePath:a.filePath,score:a.score,content:a.content,roleId:t.get(a.filePath),processingType:v.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})):[],Z=o?.chapterMode==="dynamic"&&V.length>0?V.map((a,b)=>({id:P(a.id,`dynamic-${b+1}`),title:a.title,purpose:[a.sourceRequirement,...a.writingRules].filter(Boolean).join("\n").slice(0,1200),requiredFacts:[...new Set([...a.requiredContents,...a.evidenceNeeds])],queries:[...new Set([a.title,...a.requiredContents,...a.evidenceNeeds,...a.requirements.flatMap(a=>[a.title,a.requirementText,...a.evidenceNeeds])].filter(Boolean))],pinnedEvidenceFilePaths:[]})):K(b,o,X),$=[b.name,b.outputTitle,a.requirement,...Z.flatMap(a=>[a.title,a.purpose])].filter(Boolean).join(" "),ac=(0,k.Hh)($,8,c),ad=ac.length>0?ac.map((a,b)=>`${b+1}. [${a.type}/${a.importance}] ${a.content}${a.source?`(来源:${a.source})`:""}`).join("\n"):"",ae={type:"context_recall",roleId:"project-memory",status:ac.length>0?"success":"skipped",message:ac.length>0?`已注入 ${ac.length} 条短期/长期上下文`:"未召回可用项目上下文"};for(let d of(H.push({type:"role_binding",roleId:b.projectRoleConfigId||"none",status:"success",message:`已绑定 ${l.length} 个文件角色、${i.length} 个提示词角色`}),H.push(ae),a.onProgress?.([...H]),Z)){an(a.signal);try{let e=[],f=function(a,b){return b.find(b=>b.id===a.id||b.title===a.title)}(d,V),j=f?[f.title,...f.requiredContents,...f.evidenceNeeds,...f.requirements.flatMap(a=>[a.title,a.requirementText,...a.requiredContents,...a.evidenceNeeds])].filter(Boolean):[];for(let a of[...new Set([...d.queries.length>0?d.queries:[b.name,b.outputTitle,d.title],...j])]){let b=await g.search(c,a,{scope:"project",limit:Math.max(h,r.size>0?30:h),weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});e.push(...b.results.filter(a=>0===r.size||r.has(a.filePath)).map(a=>({chapterId:d.id,filePath:a.filePath,score:a.score,content:a.content,roleId:t.get(a.filePath),processingType:v.get(a.filePath),sectionTitle:a.sectionTitle,source:a.source})))}let k=new Set(d.pinnedEvidenceFilePaths||[]),l=S(J,d,f);for(let a of(e.push(...l.flatMap(({artifact:a})=>a.evidence.slice(0,8).map(a=>({...a,chapterId:d.id,source:"role-node"})))),new Set([...k]))){let b=k.has(a),f=x.getFileDetail(a);if(!f){e.push(...G(a,t.get(a),v.get(a),d.id,c).map(a=>({...a,source:b?"pinned-evidence":a.source})));continue}e.push(...f.chunks.slice(0,Math.max(h,20)).map(a=>({chapterId:d.id,filePath:f.file.relativePath,score:1,content:a.content,roleId:t.get(f.file.relativePath),processingType:v.get(f.file.relativePath),sectionTitle:a.sectionTitle,source:b?"pinned-evidence":"bound-file"})))}let m=F(e,h);z.push(...m);let n=d.requiredFacts.filter(a=>!m.some(b=>L(b,a)));for(let a of(0===m.length&&A.push(`${d.title}:未检索到明确资料依据`),n))A.push(`${d.title}:${a} 未检索到明确依据`);H.some(a=>"knowledge_retrieval"===a.type)||(H.push({type:"knowledge_retrieval",roleId:"knowledge-base",status:z.length>0?"success":"fallback",message:`已检索/绑定 ${z.length} 条证据`}),a.onProgress?.([...H])),an(a.signal);let o=T(J,b),q=function(a,b,c){let d=S(a,b,c),e=c?[`章节来源要求:${c.sourceRequirement}`,c.requiredContents.length?`必须包含:${c.requiredContents.join("、")}`:"",c.writingRules.length?`写作规范:${c.writingRules.join("、")}`:"",c.evidenceNeeds.length?`需要证据:${c.evidenceNeeds.join("、")}`:"",c.requirements.length?`要求项:
44
+ ${c.requirements.map(a=>`- ${a.title}:${a.requirementText||a.requiredContents.join("、")}`).join("\n")}`:""].filter(Boolean).join("\n"):"",f=new Map;for(let{artifact:a,fact:b}of d){let c=`${a.node.fileRoleName}(${a.node.outputType})`;f.set(c,[...f.get(c)||[],`- ${b.key}:${E(Q(b.value))}`])}let g=[...f.entries()].map(([a,b])=>`### ${a}
45
+ ${b.slice(0,18).map(a=>a.replace(C,"").replace(B,"")).join("\n")}`).join("\n\n");return[e?`【本章章节计划】
46
46
  ${e}`:"",g?`【角色节点结构化产物】
47
- ${g}`:""].filter(Boolean).join("\n\n")}(R,d,f),s=await Promise.race([af(b,d,m,n,p,aa,a.requirement,q,{forbidDrawingImages:o,minWords:f?.minWords||1200}),new Promise(a=>setTimeout(()=>a(null),6e4))]);ai(a.signal);let u=s||function(a,b,c,d){let e=c.slice(0,8).map((a,b)=>`| ${b+1} | ${a.content.replace(/\s+/gu," ").replace(/\|/gu," ").slice(0,160)} | ${a.processingType||"文本资料"} |`);return U([`## ${b.title}`,"",`本章围绕${b.purpose||b.title}展开,结合工程范围、专业施工条件和现场组织要求,形成可执行的施工组织安排。`,"",e.length?"| 序号 | 施工组织要点 | 适用类型 |":"",e.length?"|---:|---|---|":"",...e,"","施工过程中,项目部将按照招标文件要求和经审批的施工方案组织实施,强化技术交底、过程检查、工序验收和整改闭环,确保各专业施工内容衔接有序、质量安全受控。"].filter(Boolean).join("\n"))}(b.id,d,m,0);D.push({type:"chapter_generation",roleId:"chapter_generation",promptId:i.find(a=>"chapter_generation"===a.roleId)?.promptId,status:s?"success":"fallback",message:s?`${d.title} 已由大模型生成`:`${d.title} 使用本地专业兜底生成`}),y.push({id:d.id,title:d.title,content:u,evidence:m,missingFacts:n})}catch(b){if(a.signal?.aborted)throw b;console.error(`[gen] chapter ${d.title} failed:`,b),D.push({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${d.title} 生成失败`})}E.some(a=>"chapter_generation"===a.type&&a.message===D[D.length-1]?.message)||E.push(D[D.length-1]),a.onProgress?.([...E])}ai(a.signal);let ak={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{ak=await ab(c,z)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fileUnderstanding failed:",b)}for(let b of(ai(a.signal),ak.notes))z.push({chapterId:"multimodal-file-understanding",filePath:"多模态模型文件理解结果",score:1,content:b,roleId:"multimodal-files",processingType:"reference",source:"multimodal"});let al=function(a,b,c){let d={};for(let e of I(a,c)){let a=b.find(a=>J(a,e));a&&(d[e.name]=`${a.content.replace(/\s+/gu," ").slice(0,180)}(来源:${a.filePath},角色:${a.roleId||"未标注"})`)}return d}(b,z,o);for(let a of R)for(let b of a.facts)al[b.key]=`${M(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let am=function(a,b,c){let d=I(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(!J(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}(z,b,o),an={facts:[],stages:[]};try{an=await ac(z,p,b,o)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fact extraction failed:",b)}ai(a.signal);let ao=[...R.flatMap(a=>a.facts.map(a=>({key:a.key,value:M(a.value),sourceFile:a.sourceFile,roleId:a.roleId,confidence:.9}))),...am,...an.facts];for(let a of(E.some(a=>a.type===ak.stage.type)||E.push(ak.stage),an.stages))E.some(b=>b.type===a.type)||E.push(a);a.onProgress?.([...E]);let ap=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,j.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 k=g.content.split("\n").map(a=>a.trim()).filter(Boolean).filter(a=>a.includes("|")||a.includes(" ")||a.includes(","));if(k.length<2)continue;let l=k[0].includes("|")?"|":k[0].includes(" ")?" ":",",m=k.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}(z),aq=z.filter(a=>"pinned-evidence"===a.source).length,ar=z.filter(a=>"pinned-evidence"!==a.source&&"bound-file"!==a.source).length,as={type:"reference",roleId:"quality-enhancement",status:z.length>0?"success":"skipped",message:`增强贡献:知识库证据 ${z.length} 条,人工确认/固定证据 ${aq} 条,项目上下文 ${_.length} 条,自动检索证据 ${ar} 条`};for(let b of(E.push(as),a.onProgress?.([...E]),ao))al[b.key]=`${M(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let at=new Map;for(let a of z)at.set(a.filePath,(at.get(a.filePath)??0)+1);let au=[...at.entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),av=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));return{project:a,schedule:e(["工期","开工","竣工","节点"]),quality:e(["质量"]),safety:e(["安全"]),resources:e(["劳动力","材料","机械","设备"]),tables:b,drawings:f("drawing"),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=M(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)}}(ao,ap,A,o),aw=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&&0===Y(c).length&&e.push("模板未绑定任何知识库文件"),c&&0===X(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}}(y,ao,b),ax=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}(aw,av,y),ay=[{type:"role_binding",roleId:b.projectRoleConfigId||"none",status:l.length>0?"success":"fallback",message:`已绑定 ${l.length} 个文件角色、${i.length} 个提示词角色`},aj,{type:"knowledge_retrieval",roleId:"knowledge-base",status:z.length>0?"success":"fallback",message:`已检索/绑定 ${z.length} 条证据`},as,ak.stage,...an.stages,...D,{type:"validation",roleId:"document-workflow",status:aw.errors.length>0?"failed":"success",message:`错误 ${aw.errors.length},警告 ${aw.warnings.length}`},{type:"formatting",roleId:"document-workflow",status:"success",message:"已生成正式排版 Markdown"},{type:"export_ready",roleId:"document-workflow",status:aw.errors.length>0?"failed":"success",message:aw.errors.length>0?"导出门禁存在阻断项":"已准备好导出 Markdown/HTML/DOCX/PDF"}],az={templateId:b.id,templateName:b.name,title:b.outputTitle,requirement:a.requirement||"",facts:al,structuredFacts:ao,factsModel:av,chapters:y,sources:au,missingItems:[...new Set(A)],validation:aw,validationIssues:ax,executionStages:ay,exportGate:{passed:!0,blockingIssues:[],checklist:[]},assets:[],generatedAt:Date.now()},aA=ah(az);ai(a.signal);let aB=await ag({template:b,spec:o,markdown:aA,evidence:z,promptTexts:p,projectContext:aa,requirement:a.requirement});ai(a.signal);let aC=P(R,b),aD=Q(aB.markdown===aA?ah({...az,validationIssues:ax,exportGate:az.exportGate,executionStages:ay}):aB.markdown,aC),aE=function(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 a of b){let b=c.find(b=>b.title===a.title),d=b?.minWords||1e3;a.content.length<d&&f.push(`${a.title} 内容深度不足:${a.content.length}/${d}`)}return d.some(a=>"bill_facts"===a.node.outputType)&&!/清单|工程量|项目特征|数量|单位/u.test(a)&&f.push("未体现清单文件读取结果"),d.some(a=>"drawing_facts"===a.node.outputType)&&!/图纸|设计|标注|材料|规格|位置|系统|构件/u.test(a)&&f.push("未体现图纸文本事实"),e&&/!\[[^\]]*(?:图纸|drawing|cad|地图|平面|剖面|立面)[^\]]*\]\([^)]*\)/iu.test(a)&&f.push("正文包含不应插入的图纸图片"),[...new Set(f)].slice(0,40)}(aD,y,S,R,aC),aF=await W({markdown:aD,template:b,plan:S,artifacts:R,promptTexts:p,requirement:a.requirement,issues:aE,forbidDrawingImages:aC});ai(a.signal);let aG=aF.stage?[...ay,aB.stage,aF.stage]:[...ay,aB.stage],aH=function(a,b,c){let d=[{key:"no_errors",label:"无阻断级校验错误",passed:!a.some(a=>"error"===a.level&&ad(a))},{key:"project_facts",label:"项目基础事实齐全",passed:b.project.length>0},{key:"source_traceability",label:"事实具备来源追踪",passed:[...b.project,...b.schedule,...b.quality,...b.safety].every(a=>!!a.sourceFile)},{key:"chapter_evidence",label:"章节均具备证据",passed:c.every(a=>a.evidence.length>0)},{key:"no_missing_content",label:"无资料未提供章节",passed:c.every(a=>!a.content.includes("资料未提供"))}],e=a.filter(a=>"error"===a.level&&ad(a));return{passed:0===e.length&&d.every(a=>a.passed),blockingIssues:e,checklist:d}}(ax=function(a,b,c,d,e,f,g){if(!a)return b;let h=[...b],i=[...c.project,...c.schedule,...c.quality,...c.safety,...c.resources,...Object.values(c.schemaFacts).flat()],j=new Set([...i.map(a=>a.key),...i.map(a=>a.fieldName).filter(Boolean),...c.tables.flatMap(a=>[...a.headers,...a.rows.flat()])]),k=new Set(d.map(a=>a.title));for(let b of a.factFields.filter(a=>a.required)){let a=c.schemaFacts[b.id]||[],e=d.some(a=>!a.missingFacts.includes(b.name)&&a.evidence.some(a=>J(a,b))),f=!b.sourceRoleIds?.length||a.some(a=>b.sourceRoleIds?.includes(a.roleId))||d.some(a=>a.evidence.some(a=>J(a,b)));0!==a.length||j.has(b.name)||e||h.push({level:"warning",message:`必需事实缺失:${b.name}`,suggestion:b.extractionHint||"请补充资料或调整事实字段配置。"}),f||h.push({level:"warning",message:`必需事实来源角色不匹配:${b.name}`,suggestion:`请确认该事实来自角色:${b.sourceRoleIds?.join("、")}`})}if("fixed"===a.chapterMode)for(let b of a.chapterRules.filter(a=>a.required)){k.has(b.title)||h.push({level:"error",message:`必需章节缺失:${b.title}`,suggestion:"请在模板或规范包章节规则中补齐章节。"});let a=d.find(a=>a.title===b.title);a&&b.minWords&&a.content.length<b.minWords&&h.push({level:"warning",message:`章节内容低于最低字数:${b.title}`,suggestion:`建议不少于 ${b.minWords} 字。`})}else{let b=a.dynamicChapterRule;if(b.minChapters&&d.length<b.minChapters&&h.push({level:"warning",message:`动态章节数量低于最少章节:${d.length}/${b.minChapters}`,suggestion:"请补充资料或降低最少章节数。"}),b.maxChapters&&d.length>b.maxChapters&&h.push({level:"warning",message:`动态章节数量超过最多章节:${d.length}/${b.maxChapters}`,suggestion:"请收紧来源文件角色或降低召回范围。"}),b.minWordsPerChapter)for(let a of d)a.content.length<b.minWordsPerChapter&&h.push({level:"warning",message:`动态章节内容低于最低字数:${a.title}`,suggestion:`建议不少于 ${b.minWordsPerChapter} 字。`})}let l=e.split(/\n{2,}/u).filter(a=>/\|.+\|/u.test(a)&&/\n\s*\|?\s*:?-{3,}:?/u.test(a)),m=[...e.matchAll(/!\[([^\]]*)\]\(([^)]+)\)/gu)].map(a=>({alt:a[1]||"",url:a[2]||"",index:a.index??0}));for(let b of a.gateRules){let a=b.level,n=b.evaluator?b.evaluator:"required_fact"===b.type?{subject:"fact",operator:"exists",target:b.target}:"required_chapter"===b.type?{subject:"chapter",operator:"exists",target:b.target}:"required_file_role"===b.type?{subject:"file_role",operator:"exists",target:b.target}:"required_prompt_role"===b.type?{subject:"prompt_role",operator:"exists",target:b.target}:"source_required"===b.type?{subject:"source",operator:"all_have_source"}:"forbidden_text"===b.type?{subject:"document",operator:"not_contains",value:b.value}:"min_chapter_length"===b.type?{subject:"chapter",operator:"min_length",target:b.target,min:Number(b.value)||void 0}:"table_required"===b.type?{subject:"table",operator:"min_count",min:1}:{subject:"document",operator:"contains",value:b.value||b.target},o=n.target||b.target||"",p=n.value||b.value||o,q=n.min||Number(b.value)||1,r=d.find(a=>a.title===o),s="chapter"===n.subject&&r?r.content:e,t=p?function(a){try{return RegExp(a,"iu")}catch{return}}(p):void 0;"fact"===n.subject&&"exists"===n.operator&&o&&!j.has(o)&&h.push({level:a,message:ae(b,`缺少事实 ${o}`)}),"chapter"===n.subject&&"exists"===n.operator&&o&&!k.has(o)&&h.push({level:a,message:ae(b,`缺少章节 ${o}`)}),"file_role"===n.subject&&"exists"===n.operator&&o&&!f.some(a=>a.roleId===o)&&h.push({level:a,message:ae(b,`缺少文件角色 ${o}`)}),"prompt_role"===n.subject&&"exists"===n.operator&&o&&!g.some(a=>a.roleId===o)&&h.push({level:a,message:ae(b,`缺少提示词角色 ${o}`)}),"document"===n.subject&&"contains"===n.operator&&p&&!e.includes(p)&&h.push({level:a,message:ae(b,`全文必须包含 ${p}`)}),"document"===n.subject&&"not_contains"===n.operator&&p&&e.includes(p)&&h.push({level:a,message:ae(b,`出现禁用文本 ${p}`)}),"document"!==n.subject&&"chapter"!==n.subject||"regex_match"!==n.operator||!p||t&&t.test(s)||h.push({level:a,message:ae(b,`未匹配正则 ${p}`)}),("document"===n.subject||"chapter"===n.subject)&&"regex_not_match"===n.operator&&t?.test(s)&&h.push({level:a,message:ae(b,`匹配到禁止正则 ${p}`)}),"chapter"===n.subject&&"contains"===n.operator&&o&&p&&(!r||!r.content.includes(p))&&h.push({level:a,message:ae(b,`章节 ${o} 必须包含 ${p}`)}),"chapter"===n.subject&&"not_contains"===n.operator&&r?.content.includes(p)&&h.push({level:a,message:ae(b,`章节 ${o} 出现禁用文本 ${p}`)}),"chapter"===n.subject&&"min_length"===n.operator&&o&&(!r||r.content.length<q)&&h.push({level:a,message:ae(b,`章节 ${o} 低于 ${q} 字`)}),"table"===n.subject&&"min_count"===n.operator&&c.tables.length+l.length<q&&h.push({level:a,message:ae(b,`表格数量少于 ${q}`)}),"table"===n.subject&&"table_explanation_required"===n.operator&&l.some(a=>e.indexOf(a)>=0&&e.slice(e.indexOf(a)+a.length,e.indexOf(a)+a.length+120).trim().length<10)&&h.push({level:a,message:ae(b,"存在缺少说明文字的表格")}),"image"===n.subject&&"min_count"===n.operator&&m.length<q&&h.push({level:a,message:ae(b,`图片数量少于 ${q}`)}),"image"===n.subject&&"image_caption_required"===n.operator&&m.some(a=>!a.alt&&e.slice(a.index+a.url.length,a.index+a.url.length+120).trim().length<10)&&h.push({level:a,message:ae(b,"存在缺少说明文字的图片")}),"source"===n.subject&&"all_have_source"===n.operator&&i.some(a=>!a.sourceFile)&&h.push({level:a,message:ae(b,"存在无来源事实")}),"source"===n.subject&&"min_count"===n.operator&&new Set(i.map(a=>a.sourceFile).filter(Boolean)).size<q&&h.push({level:a,message:ae(b,`来源数量少于 ${q}`)})}return h}(o,[...ax,...aE.map(a=>({level:"warning",message:a}))],av,y,aF.markdown,l,i),av,y),aI={...az,validationIssues:ax,exportGate:aH,executionStages:aG},aJ=Q(aF.markdown,aC);return{...aI,markdown:aJ}}async function ak(a){let b=w(a.templateId);if(!b)throw Error("Document template not found");let c=b.chapters.find(b=>b.id===a.chapterId);if(!c)throw Error("Document chapter not found");let d=a.projectRoot||(0,j.aY)();if(!d)throw Error("No knowledge base project found");let e=(0,j.Qh)(),f=Math.max(5,Math.min(30,a.maxEvidencePerChapter??12)),g=[];for(let a of c.queries){let b=await e.search(d,a,{scope:"project",limit:f,weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});g.push(...b.results.map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,sectionTitle:a.sectionTitle,source:a.source})))}let h=B(g,f),i=a.currentMarkdown?a.currentMarkdown.slice(0,4e3):"",k=new Set(a.existingFacts??[]),l=c.requiredFacts.filter(a=>!k.has(a)&&!h.some(b=>H(b,a))),m=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",i?`> 当前文档上下文摘要:${i.replace(/\s+/gu," ").slice(0,800)}`:"",h.length>0?`本章根据知识库资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`:"建议补充更多资料后复核。","",h.length>0?"### 资料依据":"",...h.map(D),"",l.length>0?"### 待确认事项":"",...l.map(a=>`- ${a}:建议人工复核或补充更明确资料。`)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:m,evidence:h,missingFacts:l}}},89952:(a,b,c)=>{c.d(b,{DZ:()=>p,FV:()=>o,Mu:()=>q,NR:()=>r,XB:()=>m,dg:()=>n,dw:()=>s});var d=c(73024),e=c(48161),f=c(76760);function g(){let a=f.join(e.homedir(),".customize-agent");return d.mkdirSync(a,{recursive:!0}),f.join(a,"document-roles.json")}function h(a){return(a||`item-${Date.now()}`).replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80)}function i(a){var b,c;let d="prompt"===a.type?"prompt":"file";return{id:h(a.id),name:a.name||"未命名角色",description:a.description||"",type:d,resourceId:a.resourceId||a.resourceIds?.[0]||void 0,resourceIds:Array.isArray(a.resourceIds)&&a.resourceIds.length>0?a.resourceIds.filter(Boolean):a.resourceId?[a.resourceId]:[],executionType:"prompt"===d?"fact_extraction"===(b=a.executionType)||"chapter_generation"===b||"llm_review"===b||"validation"===b||"formatting"===b||"reference"===b?b:"reference":void 0,processingType:"file"===d?"rule"===(c=a.processingType)||"project_fact"===c||"table"===c||"drawing"===c||"specification"===c||"reference"===c?c:"reference":void 0}}function j(a){return{id:h(a.id),name:a.name||"未命名配置",description:a.description||"",builtIn:!!a.builtIn,fileRoles:Array.isArray(a.fileRoles)?a.fileRoles.filter(a=>a.roleId).map((a,b)=>({roleId:a.roleId,order:Number.isFinite(a.order)?a.order:b})):[],promptRoles:Array.isArray(a.promptRoles)?a.promptRoles.filter(a=>a.roleId).map((a,b)=>({roleId:a.roleId,order:Number.isFinite(a.order)?a.order:b})):[]}}function k(){try{let a=g();if(!d.existsSync(a))return{roles:[],configs:[]};let b=JSON.parse(d.readFileSync(a,"utf-8"));if(Array.isArray(b))return{roles:b.map(i),configs:[]};return{roles:Array.isArray(b.roles)?b.roles.map(i):[],configs:Array.isArray(b.configs)?b.configs.map(j):[]}}catch{return{roles:[],configs:[]}}}function l(a){d.writeFileSync(g(),JSON.stringify({roles:a.roles.map(i),configs:a.configs.map(j)},null,2),"utf-8")}function m(a){let b=k().roles;return a?b.filter(b=>b.type===a):b}function n(a){let b=i(a),c=k();return c.roles=c.roles.filter(a=>a.id!==b.id||a.type!==b.type),c.roles.push(b),l(c),b}function o(a,b){let c=k();c.roles=c.roles.filter(c=>c.id!==b||c.type!==a),c.configs=c.configs.map(a=>({...a,fileRoles:a.fileRoles.filter(a=>a.roleId!==b),promptRoles:a.promptRoles.filter(a=>a.roleId!==b)})),l(c)}function p(){return k().configs}function q(a){return k().configs.find(b=>b.id===a)}function r(a){let b={...j(a),builtIn:!1},c=k();return c.configs=c.configs.filter(a=>a.id!==b.id),c.configs.push(b),l(c),b}function s(a){let b=k();b.configs=b.configs.filter(b=>b.id!==a),l(b)}},99842:(a,b,c)=>{c.d(b,{E:()=>t,Hh:()=>n,PH:()=>u,dg:()=>l,h0:()=>p,i3:()=>o,jk:()=>q,p:()=>s,pJ:()=>m});var d=c(87550),e=c.n(d),f=c(33873),g=c(21820),h=c(29021);let i={project_fact:"项目知识",user_preference:"用户偏好",feedback:"历史纠偏",pattern:"解决方案"};function j(){let a=f.join(g.homedir(),".customize-agent","memory.db");return h.existsSync(a)?new(e())(a,{readonly:!0}):null}function k(a){let b=Number(a.access_count??0);return{id:String(a.id),title:String(a.content||"").slice(0,80),content:String(a.content||""),type:String(a.type||"project_fact"),importance:b>=5?"high":b>=2?"medium":"low",tags:[i[String(a.type)]||String(a.type)],source:String(a.context||"").slice(0,100),created_at:new Date(String(a.created_at)).getTime(),updated_at:new Date(String(a.updated_at)).getTime()}}function l(a){let b=j();if(!b)return[];try{let c="SELECT * FROM memories WHERE access_count >= 2",d=[];return a&&(c+=" AND (content LIKE ? OR context LIKE ?)",d.push(`%${a}%`,`%${a}%`)),c+=" ORDER BY access_count DESC, updated_at DESC LIMIT 200",b.prepare(c).all(...d).map(k)}finally{b.close()}}function m(a){let b=j();if(!b)return[];try{let c="SELECT * FROM memories WHERE access_count < 2",d=[];return a&&(c+=" AND (content LIKE ? OR context LIKE ?)",d.push(`%${a}%`,`%${a}%`)),c+=" ORDER BY updated_at DESC LIMIT 200",b.prepare(c).all(...d).map(k)}finally{b.close()}}function n(a,b=8,c){let d=j();if(!d)return[];try{let e=a.split(/[\s,,。;;::、/\\|]+/u).map(a=>a.trim()).filter(a=>a.length>=2).slice(0,8),g=c?`%Project: ${f.resolve(c)}%`:void 0;if(0===e.length)return(g?d.prepare("SELECT * FROM memories WHERE context LIKE ? ORDER BY access_count DESC, updated_at DESC LIMIT ?").all(g,b):d.prepare("SELECT * FROM memories ORDER BY access_count DESC, updated_at DESC LIMIT ?").all(b)).map(k);let h=e.map(()=>"(content LIKE ? OR context LIKE ?)").join(" OR "),i=e.flatMap(a=>[`%${a}%`,`%${a}%`]);return(g?d.prepare(`
47
+ ${g}`:""].filter(Boolean).join("\n\n")}(J,d,f),s=await Promise.race([ak(b,d,m,n,p,ad,a.requirement,q,{forbidDrawingImages:o,minWords:f?.minWords||1200}),new Promise(a=>setTimeout(()=>a(null),6e4))]);an(a.signal);let u=s||function(a,b,c,d){let e=c.slice(0,8).map((a,b)=>`| ${b+1} | ${a.content.replace(/\s+/gu," ").replace(/\|/gu," ").slice(0,160)} | ${a.processingType||"文本资料"} |`);return Y([`## ${b.title}`,"",`本章围绕${b.purpose||b.title}展开,结合工程范围、专业施工条件和现场组织要求,形成可执行的施工组织安排。`,"",e.length?"| 序号 | 施工组织要点 | 适用类型 |":"",e.length?"|---:|---|---|":"",...e,"","施工过程中,项目部将按照招标文件要求和经审批的施工方案组织实施,强化技术交底、过程检查、工序验收和整改闭环,确保各专业施工内容衔接有序、质量安全受控。"].filter(Boolean).join("\n"))}(b.id,d,m,0);D.push({type:"chapter_generation",roleId:"chapter_generation",promptId:i.find(a=>"chapter_generation"===a.roleId)?.promptId,status:s?"success":"fallback",message:s?`${d.title} 已由大模型生成`:`${d.title} 使用本地专业兜底生成`}),y.push({id:d.id,title:d.title,content:u,evidence:m,missingFacts:n})}catch(b){if(a.signal?.aborted)throw b;console.error(`[gen] chapter ${d.title} failed:`,b),D.push({type:"chapter_generation",roleId:"chapter_generation",status:"failed",message:`${d.title} 生成失败`})}H.some(a=>"chapter_generation"===a.type&&a.message===D[D.length-1]?.message)||H.push(D[D.length-1]),a.onProgress?.([...H])}an(a.signal);let af={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{af=await ag(c,z)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fileUnderstanding failed:",b)}for(let b of(an(a.signal),af.notes))z.push({chapterId:"multimodal-file-understanding",filePath:"多模态模型文件理解结果",score:1,content:b,roleId:"multimodal-files",processingType:"reference",source:"multimodal"});let ao=function(a,b,c){let d={};for(let e of M(a,c)){let a=b.find(a=>N(a,e));a&&(d[e.name]=`${a.content.replace(/\s+/gu," ").slice(0,180)}(来源:${a.filePath},角色:${a.roleId||"未标注"})`)}return d}(b,z,o);for(let a of J)for(let b of a.facts)ao[b.key]=`${Q(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let ap=function(a,b,c){let d=M(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(!N(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}(z,b,o),aq={facts:[],stages:[]};try{aq=await ah(z,p,b,o)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fact extraction failed:",b)}an(a.signal);let ar=[...J.flatMap(a=>a.facts.map(a=>({key:a.key,value:Q(a.value),sourceFile:a.sourceFile,roleId:a.roleId,confidence:.9}))),...ap,...aq.facts];for(let a of(H.some(a=>a.type===af.stage.type)||H.push(af.stage),aq.stages))H.some(b=>b.type===a.type)||H.push(a);a.onProgress?.([...H]);let as=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,j.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 k=g.content.split("\n").map(a=>a.trim()).filter(Boolean).filter(a=>a.includes("|")||a.includes(" ")||a.includes(","));if(k.length<2)continue;let l=k[0].includes("|")?"|":k[0].includes(" ")?" ":",",m=k.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}(z),at=z.filter(a=>"pinned-evidence"===a.source).length,au=z.filter(a=>"pinned-evidence"!==a.source&&"bound-file"!==a.source).length,av={type:"reference",roleId:"quality-enhancement",status:z.length>0?"success":"skipped",message:`增强贡献:知识库证据 ${z.length} 条,人工确认/固定证据 ${at} 条,项目上下文 ${ac.length} 条,自动检索证据 ${au} 条`};for(let b of(H.push(av),a.onProgress?.([...H]),ar))ao[b.key]=`${Q(b.value)}(来源:${b.sourceFile},角色:${b.roleId})`;let aw=new Map;for(let a of z)aw.set(a.filePath,(aw.get(a.filePath)??0)+1);let ax=[...aw.entries()].sort((a,b)=>b[1]-a[1]).map(([a,b])=>({filePath:a,count:b})),ay=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));return{project:a,schedule:e(["工期","开工","竣工","节点"]),quality:e(["质量"]),safety:e(["安全"]),resources:e(["劳动力","材料","机械","设备"]),tables:b,drawings:f("drawing"),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=Q(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)}}(ar,as,A,o),az=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&&0===ab(c).length&&e.push("模板未绑定任何知识库文件"),c&&0===aa(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}}(y,ar,b),aA=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}(az,ay,y),aB=[{type:"role_binding",roleId:b.projectRoleConfigId||"none",status:l.length>0?"success":"fallback",message:`已绑定 ${l.length} 个文件角色、${i.length} 个提示词角色`},ae,{type:"knowledge_retrieval",roleId:"knowledge-base",status:z.length>0?"success":"fallback",message:`已检索/绑定 ${z.length} 条证据`},av,af.stage,...aq.stages,...D,{type:"validation",roleId:"document-workflow",status:az.errors.length>0?"failed":"success",message:`错误 ${az.errors.length},警告 ${az.warnings.length}`},{type:"formatting",roleId:"document-workflow",status:"success",message:"已生成正式排版 Markdown"},{type:"export_ready",roleId:"document-workflow",status:az.errors.length>0?"failed":"success",message:az.errors.length>0?"导出门禁存在阻断项":"已准备好导出 Markdown/HTML/DOCX/PDF"}],aC={templateId:b.id,templateName:b.name,title:b.outputTitle,requirement:a.requirement||"",facts:ao,structuredFacts:ar,factsModel:ay,chapters:y,sources:ax,missingItems:[...new Set(A)],validation:az,validationIssues:aA,executionStages:aB,exportGate:{passed:!0,blockingIssues:[],checklist:[]},assets:[],generatedAt:Date.now()},aD=am(aC);an(a.signal);let aE=await al({template:b,spec:o,markdown:aD,evidence:z,promptTexts:p,projectContext:ad,requirement:a.requirement});an(a.signal);let aF=T(J,b),aG=U(aE.markdown===aD?am({...aC,validationIssues:aA,exportGate:aC.exportGate,executionStages:aB}):aE.markdown,aF),aH=function(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 a of b){let b=c.find(b=>b.title===a.title),d=b?.minWords||1e3;a.content.length<d&&f.push(`${a.title} 内容深度不足:${a.content.length}/${d}`)}return d.some(a=>"bill_facts"===a.node.outputType)&&!/清单|工程量|项目特征|数量|单位/u.test(a)&&f.push("未体现清单文件读取结果"),d.some(a=>"drawing_facts"===a.node.outputType)&&!/图纸|设计|标注|材料|规格|位置|系统|构件/u.test(a)&&f.push("未体现图纸文本事实"),e&&/!\[[^\]]*(?:图纸|drawing|cad|地图|平面|剖面|立面)[^\]]*\]\([^)]*\)/iu.test(a)&&f.push("正文包含不应插入的图纸图片"),[...new Set(f)].slice(0,40)}(aG,y,V,J,aF),aI=await _({markdown:aG,template:b,plan:V,artifacts:J,promptTexts:p,requirement:a.requirement,issues:aH,forbidDrawingImages:aF});an(a.signal);let aJ=aI.stage?[...aB,aE.stage,aI.stage]:[...aB,aE.stage],aK=function(a,b,c){let d=[{key:"no_errors",label:"无阻断级校验错误",passed:!a.some(a=>"error"===a.level&&ai(a))},{key:"project_facts",label:"项目基础事实齐全",passed:b.project.length>0},{key:"source_traceability",label:"事实具备来源追踪",passed:[...b.project,...b.schedule,...b.quality,...b.safety].every(a=>!!a.sourceFile)},{key:"chapter_evidence",label:"章节均具备证据",passed:c.every(a=>a.evidence.length>0)},{key:"no_missing_content",label:"无资料未提供章节",passed:c.every(a=>!a.content.includes("资料未提供"))}],e=a.filter(a=>"error"===a.level&&ai(a));return{passed:0===e.length&&d.every(a=>a.passed),blockingIssues:e,checklist:d}}(aA=function(a,b,c,d,e,f,g){if(!a)return b;let h=[...b],i=[...c.project,...c.schedule,...c.quality,...c.safety,...c.resources,...Object.values(c.schemaFacts).flat()],j=new Set([...i.map(a=>a.key),...i.map(a=>a.fieldName).filter(Boolean),...c.tables.flatMap(a=>[...a.headers,...a.rows.flat()])]),k=new Set(d.map(a=>a.title));for(let b of a.factFields.filter(a=>a.required)){let a=c.schemaFacts[b.id]||[],e=d.some(a=>!a.missingFacts.includes(b.name)&&a.evidence.some(a=>N(a,b))),f=!b.sourceRoleIds?.length||a.some(a=>b.sourceRoleIds?.includes(a.roleId))||d.some(a=>a.evidence.some(a=>N(a,b)));0!==a.length||j.has(b.name)||e||h.push({level:"warning",message:`必需事实缺失:${b.name}`,suggestion:b.extractionHint||"请补充资料或调整事实字段配置。"}),f||h.push({level:"warning",message:`必需事实来源角色不匹配:${b.name}`,suggestion:`请确认该事实来自角色:${b.sourceRoleIds?.join("、")}`})}if("fixed"===a.chapterMode)for(let b of a.chapterRules.filter(a=>a.required)){k.has(b.title)||h.push({level:"error",message:`必需章节缺失:${b.title}`,suggestion:"请在模板或规范包章节规则中补齐章节。"});let a=d.find(a=>a.title===b.title);a&&b.minWords&&a.content.length<b.minWords&&h.push({level:"warning",message:`章节内容低于最低字数:${b.title}`,suggestion:`建议不少于 ${b.minWords} 字。`})}else{let b=a.dynamicChapterRule;if(b.minChapters&&d.length<b.minChapters&&h.push({level:"warning",message:`动态章节数量低于最少章节:${d.length}/${b.minChapters}`,suggestion:"请补充资料或降低最少章节数。"}),b.maxChapters&&d.length>b.maxChapters&&h.push({level:"warning",message:`动态章节数量超过最多章节:${d.length}/${b.maxChapters}`,suggestion:"请收紧来源文件角色或降低召回范围。"}),b.minWordsPerChapter)for(let a of d)a.content.length<b.minWordsPerChapter&&h.push({level:"warning",message:`动态章节内容低于最低字数:${a.title}`,suggestion:`建议不少于 ${b.minWordsPerChapter} 字。`})}let l=e.split(/\n{2,}/u).filter(a=>/\|.+\|/u.test(a)&&/\n\s*\|?\s*:?-{3,}:?/u.test(a)),m=[...e.matchAll(/!\[([^\]]*)\]\(([^)]+)\)/gu)].map(a=>({alt:a[1]||"",url:a[2]||"",index:a.index??0}));for(let b of a.gateRules){let a=b.level,n=b.evaluator?b.evaluator:"required_fact"===b.type?{subject:"fact",operator:"exists",target:b.target}:"required_chapter"===b.type?{subject:"chapter",operator:"exists",target:b.target}:"required_file_role"===b.type?{subject:"file_role",operator:"exists",target:b.target}:"required_prompt_role"===b.type?{subject:"prompt_role",operator:"exists",target:b.target}:"source_required"===b.type?{subject:"source",operator:"all_have_source"}:"forbidden_text"===b.type?{subject:"document",operator:"not_contains",value:b.value}:"min_chapter_length"===b.type?{subject:"chapter",operator:"min_length",target:b.target,min:Number(b.value)||void 0}:"table_required"===b.type?{subject:"table",operator:"min_count",min:1}:{subject:"document",operator:"contains",value:b.value||b.target},o=n.target||b.target||"",p=n.value||b.value||o,q=n.min||Number(b.value)||1,r=d.find(a=>a.title===o),s="chapter"===n.subject&&r?r.content:e,t=p?function(a){try{return RegExp(a,"iu")}catch{return}}(p):void 0;"fact"===n.subject&&"exists"===n.operator&&o&&!j.has(o)&&h.push({level:a,message:aj(b,`缺少事实 ${o}`)}),"chapter"===n.subject&&"exists"===n.operator&&o&&!k.has(o)&&h.push({level:a,message:aj(b,`缺少章节 ${o}`)}),"file_role"===n.subject&&"exists"===n.operator&&o&&!f.some(a=>a.roleId===o)&&h.push({level:a,message:aj(b,`缺少文件角色 ${o}`)}),"prompt_role"===n.subject&&"exists"===n.operator&&o&&!g.some(a=>a.roleId===o)&&h.push({level:a,message:aj(b,`缺少提示词角色 ${o}`)}),"document"===n.subject&&"contains"===n.operator&&p&&!e.includes(p)&&h.push({level:a,message:aj(b,`全文必须包含 ${p}`)}),"document"===n.subject&&"not_contains"===n.operator&&p&&e.includes(p)&&h.push({level:a,message:aj(b,`出现禁用文本 ${p}`)}),"document"!==n.subject&&"chapter"!==n.subject||"regex_match"!==n.operator||!p||t&&t.test(s)||h.push({level:a,message:aj(b,`未匹配正则 ${p}`)}),("document"===n.subject||"chapter"===n.subject)&&"regex_not_match"===n.operator&&t?.test(s)&&h.push({level:a,message:aj(b,`匹配到禁止正则 ${p}`)}),"chapter"===n.subject&&"contains"===n.operator&&o&&p&&(!r||!r.content.includes(p))&&h.push({level:a,message:aj(b,`章节 ${o} 必须包含 ${p}`)}),"chapter"===n.subject&&"not_contains"===n.operator&&r?.content.includes(p)&&h.push({level:a,message:aj(b,`章节 ${o} 出现禁用文本 ${p}`)}),"chapter"===n.subject&&"min_length"===n.operator&&o&&(!r||r.content.length<q)&&h.push({level:a,message:aj(b,`章节 ${o} 低于 ${q} 字`)}),"table"===n.subject&&"min_count"===n.operator&&c.tables.length+l.length<q&&h.push({level:a,message:aj(b,`表格数量少于 ${q}`)}),"table"===n.subject&&"table_explanation_required"===n.operator&&l.some(a=>e.indexOf(a)>=0&&e.slice(e.indexOf(a)+a.length,e.indexOf(a)+a.length+120).trim().length<10)&&h.push({level:a,message:aj(b,"存在缺少说明文字的表格")}),"image"===n.subject&&"min_count"===n.operator&&m.length<q&&h.push({level:a,message:aj(b,`图片数量少于 ${q}`)}),"image"===n.subject&&"image_caption_required"===n.operator&&m.some(a=>!a.alt&&e.slice(a.index+a.url.length,a.index+a.url.length+120).trim().length<10)&&h.push({level:a,message:aj(b,"存在缺少说明文字的图片")}),"source"===n.subject&&"all_have_source"===n.operator&&i.some(a=>!a.sourceFile)&&h.push({level:a,message:aj(b,"存在无来源事实")}),"source"===n.subject&&"min_count"===n.operator&&new Set(i.map(a=>a.sourceFile).filter(Boolean)).size<q&&h.push({level:a,message:aj(b,`来源数量少于 ${q}`)})}return h}(o,[...aA,...aH.map(a=>({level:"warning",message:a}))],ay,y,aI.markdown,l,i),ay,y),aL={...aC,validationIssues:aA,exportGate:aK,executionStages:aJ},aM=U(aI.markdown,aF);return{...aL,markdown:aM}}async function ap(a){let b=w(a.templateId);if(!b)throw Error("Document template not found");let c=b.chapters.find(b=>b.id===a.chapterId);if(!c)throw Error("Document chapter not found");let d=a.projectRoot||(0,j.aY)();if(!d)throw Error("No knowledge base project found");let e=(0,j.Qh)(),f=Math.max(5,Math.min(30,a.maxEvidencePerChapter??12)),g=[];for(let a of c.queries){let b=await e.search(d,a,{scope:"project",limit:f,weights:{keyword:.4,vector:.45,rewrite:.75,hybridBonus:.15}});g.push(...b.results.map(a=>({chapterId:c.id,filePath:a.filePath,score:a.score,content:a.content,sectionTitle:a.sectionTitle,source:a.source})))}let h=F(g,f),i=a.currentMarkdown?a.currentMarkdown.slice(0,4e3):"",k=new Set(a.existingFacts??[]),l=c.requiredFacts.filter(a=>!k.has(a)&&!h.some(b=>L(b,a))),m=[`## ${c.title}`,"",a.requirement?`> 生成要求:${a.requirement}`:"",i?`> 当前文档上下文摘要:${i.replace(/\s+/gu," ").slice(0,800)}`:"",h.length>0?`本章根据知识库资料围绕“${c.purpose}”重新整理,并与当前文档上下文保持一致。`:"建议补充更多资料后复核。","",h.length>0?"### 资料依据":"",...h.map(H),"",l.length>0?"### 待确认事项":"",...l.map(a=>`- ${a}:建议人工复核或补充更明确资料。`)].filter(Boolean).join("\n");return{id:c.id,title:c.title,content:m,evidence:h,missingFacts:l}}},89952:(a,b,c)=>{c.d(b,{DZ:()=>p,FV:()=>o,Mu:()=>q,NR:()=>r,XB:()=>m,dg:()=>n,dw:()=>s});var d=c(73024),e=c(48161),f=c(76760);function g(){let a=f.join(e.homedir(),".customize-agent");return d.mkdirSync(a,{recursive:!0}),f.join(a,"document-roles.json")}function h(a){return(a||`item-${Date.now()}`).replace(/[^a-zA-Z0-9_-]/gu,"-").slice(0,80)}function i(a){var b,c;let d="prompt"===a.type?"prompt":"file";return{id:h(a.id),name:a.name||"未命名角色",description:a.description||"",type:d,resourceId:a.resourceId||a.resourceIds?.[0]||void 0,resourceIds:Array.isArray(a.resourceIds)&&a.resourceIds.length>0?a.resourceIds.filter(Boolean):a.resourceId?[a.resourceId]:[],executionType:"prompt"===d?"fact_extraction"===(b=a.executionType)||"chapter_generation"===b||"llm_review"===b||"validation"===b||"formatting"===b||"reference"===b?b:"reference":void 0,processingType:"file"===d?"rule"===(c=a.processingType)||"project_fact"===c||"table"===c||"drawing"===c||"specification"===c||"reference"===c?c:"reference":void 0}}function j(a){return{id:h(a.id),name:a.name||"未命名配置",description:a.description||"",builtIn:!!a.builtIn,fileRoles:Array.isArray(a.fileRoles)?a.fileRoles.filter(a=>a.roleId).map((a,b)=>({roleId:a.roleId,order:Number.isFinite(a.order)?a.order:b})):[],promptRoles:Array.isArray(a.promptRoles)?a.promptRoles.filter(a=>a.roleId).map((a,b)=>({roleId:a.roleId,order:Number.isFinite(a.order)?a.order:b})):[]}}function k(){try{let a=g();if(!d.existsSync(a))return{roles:[],configs:[]};let b=JSON.parse(d.readFileSync(a,"utf-8"));if(Array.isArray(b))return{roles:b.map(i),configs:[]};return{roles:Array.isArray(b.roles)?b.roles.map(i):[],configs:Array.isArray(b.configs)?b.configs.map(j):[]}}catch{return{roles:[],configs:[]}}}function l(a){d.writeFileSync(g(),JSON.stringify({roles:a.roles.map(i),configs:a.configs.map(j)},null,2),"utf-8")}function m(a){let b=k().roles;return a?b.filter(b=>b.type===a):b}function n(a){let b=i(a),c=k();return c.roles=c.roles.filter(a=>a.id!==b.id||a.type!==b.type),c.roles.push(b),l(c),b}function o(a,b){let c=k();c.roles=c.roles.filter(c=>c.id!==b||c.type!==a),c.configs=c.configs.map(a=>({...a,fileRoles:a.fileRoles.filter(a=>a.roleId!==b),promptRoles:a.promptRoles.filter(a=>a.roleId!==b)})),l(c)}function p(){return k().configs}function q(a){return k().configs.find(b=>b.id===a)}function r(a){let b={...j(a),builtIn:!1},c=k();return c.configs=c.configs.filter(a=>a.id!==b.id),c.configs.push(b),l(c),b}function s(a){let b=k();b.configs=b.configs.filter(b=>b.id!==a),l(b)}},99842:(a,b,c)=>{c.d(b,{E:()=>t,Hh:()=>n,PH:()=>u,dg:()=>l,h0:()=>p,i3:()=>o,jk:()=>q,p:()=>s,pJ:()=>m});var d=c(87550),e=c.n(d),f=c(33873),g=c(21820),h=c(29021);let i={project_fact:"项目知识",user_preference:"用户偏好",feedback:"历史纠偏",pattern:"解决方案"};function j(){let a=f.join(g.homedir(),".customize-agent","memory.db");return h.existsSync(a)?new(e())(a,{readonly:!0}):null}function k(a){let b=Number(a.access_count??0);return{id:String(a.id),title:String(a.content||"").slice(0,80),content:String(a.content||""),type:String(a.type||"project_fact"),importance:b>=5?"high":b>=2?"medium":"low",tags:[i[String(a.type)]||String(a.type)],source:String(a.context||"").slice(0,100),created_at:new Date(String(a.created_at)).getTime(),updated_at:new Date(String(a.updated_at)).getTime()}}function l(a){let b=j();if(!b)return[];try{let c="SELECT * FROM memories WHERE access_count >= 2",d=[];return a&&(c+=" AND (content LIKE ? OR context LIKE ?)",d.push(`%${a}%`,`%${a}%`)),c+=" ORDER BY access_count DESC, updated_at DESC LIMIT 200",b.prepare(c).all(...d).map(k)}finally{b.close()}}function m(a){let b=j();if(!b)return[];try{let c="SELECT * FROM memories WHERE access_count < 2",d=[];return a&&(c+=" AND (content LIKE ? OR context LIKE ?)",d.push(`%${a}%`,`%${a}%`)),c+=" ORDER BY updated_at DESC LIMIT 200",b.prepare(c).all(...d).map(k)}finally{b.close()}}function n(a,b=8,c){let d=j();if(!d)return[];try{let e=a.split(/[\s,,。;;::、/\\|]+/u).map(a=>a.trim()).filter(a=>a.length>=2).slice(0,8),g=c?`%Project: ${f.resolve(c)}%`:void 0;if(0===e.length)return(g?d.prepare("SELECT * FROM memories WHERE context LIKE ? ORDER BY access_count DESC, updated_at DESC LIMIT ?").all(g,b):d.prepare("SELECT * FROM memories ORDER BY access_count DESC, updated_at DESC LIMIT ?").all(b)).map(k);let h=e.map(()=>"(content LIKE ? OR context LIKE ?)").join(" OR "),i=e.flatMap(a=>[`%${a}%`,`%${a}%`]);return(g?d.prepare(`
48
48
  SELECT * FROM memories
49
49
  WHERE context LIKE ? AND (${h})
50
50
  ORDER BY access_count DESC, updated_at DESC
@@ -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-15f2d98b25c5d3ce.js" defer=""></script><script src="/_next/static/chunks/pages/_error-282257fbdcc167b4.js" defer=""></script><script src="/_next/static/7zCRLzy9D4qDY-po_aPfX/_buildManifest.js" defer=""></script><script src="/_next/static/7zCRLzy9D4qDY-po_aPfX/_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="/document-specs"><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-file-text"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"></path><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M10 9H8"></path><path d="M16 13H8"></path><path d="M16 17H8"></path></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,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;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":"7zCRLzy9D4qDY-po_aPfX","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-15f2d98b25c5d3ce.js" defer=""></script><script src="/_next/static/chunks/pages/_error-282257fbdcc167b4.js" defer=""></script><script src="/_next/static/Yb0BLdPOQ4eb6l81wnrct/_buildManifest.js" defer=""></script><script src="/_next/static/Yb0BLdPOQ4eb6l81wnrct/_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="/document-specs"><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-file-text"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"></path><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M10 9H8"></path><path d="M16 13H8"></path><path d="M16 17H8"></path></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,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;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":"Yb0BLdPOQ4eb6l81wnrct","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>