@customize-agent/server 4.0.26 → 4.0.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +2 -2
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/3445.js +14 -14
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/asset-library.html +1 -1
- package/.next/server/pages/context/long-term.html +1 -1
- package/.next/server/pages/context/short-term.html +1 -1
- package/.next/server/pages/document-roles.html +1 -1
- package/.next/server/pages/document-specs.html +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/guide.html +1 -1
- package/.next/server/pages/index.html +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge/search.html +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/overview.html +1 -1
- package/.next/server/pages/prompt.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages-manifest.json +23 -23
- package/package.json +2 -2
- /package/.next/static/{Yb0BLdPOQ4eb6l81wnrct → 39oksf4Ljm8ZLtxOnTV7z}/_buildManifest.js +0 -0
- /package/.next/static/{Yb0BLdPOQ4eb6l81wnrct → 39oksf4Ljm8ZLtxOnTV7z}/_ssgManifest.js +0 -0
package/.next/BUILD_ID
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
39oksf4Ljm8ZLtxOnTV7z
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
"devFiles": [],
|
|
6
6
|
"ampDevFiles": [],
|
|
7
7
|
"lowPriorityFiles": [
|
|
8
|
-
"static/
|
|
9
|
-
"static/
|
|
8
|
+
"static/39oksf4Ljm8ZLtxOnTV7z/_buildManifest.js",
|
|
9
|
+
"static/39oksf4Ljm8ZLtxOnTV7z/_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": "
|
|
7
|
-
"previewModeSigningKey": "
|
|
8
|
-
"previewModeEncryptionKey": "
|
|
6
|
+
"previewModeId": "56668ef28d0f92aa5c25ece463f0ed0e",
|
|
7
|
+
"previewModeSigningKey": "9be50d8872f635585771a138e1a8b5ba05f2e2416f2eef6590423b7c0afeecda",
|
|
8
|
+
"previewModeEncryptionKey": "faf5398f0b7c6ae308372df39d13244e4bfaeee979656aeef813f75bf8a95de1"
|
|
9
9
|
},
|
|
10
10
|
"notFoundRoutes": []
|
|
11
11
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
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:()=>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}
|
|
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:()=>am,R1:()=>an,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=$(c),k=_(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
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)}
|
|
6
6
|
类型:${a.processingType||"reference"}
|
|
7
7
|
章节/片段:${a.sectionTitle?.replace(C,"")||"资料片段"}
|
|
@@ -10,41 +10,41 @@ ${b}`:"",c?`文本/附件片段:
|
|
|
10
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
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}
|
|
12
12
|
片段:${a.sectionTitle||""}
|
|
13
|
-
内容:${a.content.slice(0,1200)}`).join("\n\n---\n\n"),d=a.promptTexts.join("\n\n")||"请读取绑定文件角色,抽取可用于文档生成的结构化信息。",e=c.trim()?await
|
|
13
|
+
内容:${a.content.slice(0,1200)}`).join("\n\n---\n\n"),d=a.promptTexts.join("\n\n")||"请读取绑定文件角色,抽取可用于文档生成的结构化信息。",e=c.trim()?await ad(d,`你正在执行一个“文件角色 \xd7 提示词角色”的读取节点。
|
|
14
14
|
节点类型:${a.outputType}
|
|
15
15
|
文件角色:${a.fileRoleName}(${a.fileRoleId})
|
|
16
16
|
要求:严格按该节点绑定的提示词读取该文件角色的内容,不要读取其他角色。
|
|
17
17
|
|
|
18
|
-
请返回 JSON,字段包括 chapters、facts、outputRequirements、forbidImageInsertion、warnings。chapters
|
|
18
|
+
请返回 JSON,字段包括 chapters、facts、outputRequirements、forbidImageInsertion、warnings。chapters 只提取当前模板和规范包需要的正式章节;requirements 只保留可合并写入正文的核心要求,避免无依据地拆成过细子节点。facts 中计量单位保持原文含义,必要时使用导出友好的正式写法。
|
|
19
19
|
|
|
20
20
|
绑定文件片段:
|
|
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}
|
|
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)||/资料来源|证据来源|校验结果|缺失项|知识库/u.test(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
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
|
|
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=/.*(?:知识库证据|文件角色|提示词角色|文档规范包|规范包|事实字段|资料未提供|未检索到|待确认事项|证据来源|来源清单|校验结果).*(?:\n|$)/gu,W=/^\s*(?:[│┃┆┊┌┐└┘├┤┬┴┼─━╭╮╰╯]|[↓↑→←⇒⇨➡])+\s*$/gmu;function X(a){return a.replace(/\b(m|㎡)\s*2\b/giu,"平方米").replace(/\bm\s*[²2]\b/giu,"平方米").replace(/\b(m|㎥)\s*3\b/giu,"立方米").replace(/\bm\s*[³3]\b/giu,"立方米").replace(/\bmm2\b/giu,"平方毫米").replace(/\bcm2\b/giu,"平方厘米").replace(/\bkm2\b/giu,"平方千米").replace(/\s*×\s*/gu,"\xd7").replace(/\s*≤\s*/gu,"≤").replace(/\s*≥\s*/gu,"≥").replace(/\s*±\s*/gu,"\xb1").replace(V,"").replace(W,"").replace(C,"").replace(B,"").replace(/第\s*\d+\s*页\s*\/\s*共\s*\d+\s*页/gu,"").replace(/\n{3,}/gu,"\n\n").trim()}let Y="你正在生成可直接交付的正式业务文档,不是分析报告、证据报告或系统调试报告。\n不得把“知识库、检索、文件角色、提示词角色、规范包、事实字段、动态章节、缺失项、校验结果、资料未提供、未检索到”等后台流程话术写入正文。\n文档结构、禁用标题、必需章节、事实取舍和行业表达必须优先遵循用户绑定的提示词角色、项目角色配置和文档规范包;通用生成链路不得擅自发明业务规则。\n资料信息应内化为正式正文表达;除非规范包或用户要求来源追溯章节,否则不要单列系统证据清单。\n表格、标题和公式必须使用 Markdown/导出友好的写法,避免 ASCII 流程图和容易导致导出异常的符号组合。\n语言应正式、专业、克制,适合直接导出交付。";async function Z(a){if(0===a.issues.length)return{markdown:a.markdown,stage:void 0};let b=await ac(["你是文档质量补写和纠偏专家。必须严格按照模板、章节计划、规范包、提示词角色和已提供资料补齐内容,禁止编造。",a.forbidDrawingImages?"图片/图纸类资料只作为文本事实来源,禁止插入图片或 Markdown 图片语法。":"","保持 Markdown 标题层级;直接返回修复后的完整 Markdown。",a.promptTexts].filter(Boolean).join("\n\n"),[`模板:${a.template.name}`,a.requirement?`用户要求:${a.requirement}`:"",`需要修复的问题:
|
|
24
24
|
${a.issues.map(a=>`- ${a}`).join("\n")}`,`章节计划:
|
|
25
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?`章节/要求:
|
|
26
26
|
${b}`:"",c?`事实:
|
|
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
|
|
28
|
-
只返回 JSON,不要返回 markdown。`:a},{role:"user",content:b}],{temperature:.3*!c})).content.trim()}catch{return}}async function
|
|
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:X(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 $(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 _(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 aa(a,b){let c=(0,i.resolveProtocol)(a,b);return"anthropic"===c?"anthropic":"google"===c?"google":"ollama"===c?"ollama":"openrouter"===c?"openrouter":"openai"}function ab(){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 ac(a,b,c=!1){try{let d=ab();if(!d)return;let{model:e,provider:f}=d,g=(0,h.createProvider)(aa(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 ad(a,b){let c=await ac(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 ae(a,b){let c=ab();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)(aa(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 af(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}
|
|
29
29
|
角色:${a.roleId||""}
|
|
30
30
|
处理:${a.processingType||""}
|
|
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
|
|
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 ad(b||"你是文档事实抽取器。",`请严格按下面的动态事实 schema 从资料中抽取事实。只抽取资料明确支持的内容;如果字段限定 sourceRoleIds,必须优先来自对应文件角色;事实取舍和冲突处理遵循规范包字段说明、文件角色和提示词角色配置。
|
|
32
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: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
|
|
39
|
-
${f}`:"",h||"",d.length?`需要特别补足的事实:${d.join("、")}`:"","
|
|
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 ag(a){return/出现禁用文本|资料未提供|导出|临时|无效|占位/iu.test(a.message)}function ah(a,b){return`${a.name}:${b}`}async function ai(a,b,c,d,e,f,g,h="",i={}){let j=J(I(b,c));if(!j.trim()&&!h.trim())return;let k=["你是专业项目文档生成专家,必须严格使用已提供的内部资料生成正式文档章节。",Y,"准确性优先级:章节计划/示范文本节点产物 > 规范包事实字段 > 角色节点结构化事实 > 知识库证据 > 项目上下文/历史记忆。内部优先级只用于判断事实,不得写入正文。","项目上下文/历史记忆只能作为用户偏好、历史纠偏和连续性参考;不得覆盖、替代或改写知识库证据中的事实。",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("、")}`:"","请生成一个专业、充实、可直接导出的正式文档章节,要求:","- 保留章节二级标题,章节内部结构遵循模板、规范包和提示词角色,不要无依据地拆分过细小节;","- 必须使用模板节点提取的章节要求和输出规范;","- 必须结合项目事实、表格数据、技术规范等内部资料;","- 对同一对象的事实应综合表达,优先写入准确的数量、单位、规格、参数、做法和标准;","- 存在事实冲突时,按规范包、文件角色、提示词角色和用户要求指定的优先级处理;","- 默认不要引用原始文件名,不写解析器内部对象名;","- 将资料要点自然融入正文,不单列系统证据或来源章节;","- 小节层级保持适度,除非规范包或提示词要求,不要输出中间分析产物标题;","- 组织关系、流程、职责、资源配置、风险控制等适合表格表达的内容可使用 Markdown 表格;",`- 内容不少于 ${i.minWords||1e3} 字,避免空泛口号。`,"",j?"内部资料:":"",j].filter(Boolean).join("\n"),m=await ac(k,l);if(m&&!(m.length<120))return X(U(m.startsWith("## ")?m:`## ${b.title}
|
|
40
40
|
|
|
41
|
-
${m}`,!!i.forbidDrawingImages))}async function
|
|
42
|
-
${a.projectContext}`:"",c,"","知识库证据摘要:",b,"","待审查初稿:",a.markdown,"","请直接返回优化后的完整正式 Markdown,不要附加解释。"].filter(Boolean).join("\n"));return d&&!(d.length<.7*a.markdown.length)&&d.includes("#")?{markdown:
|
|
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(),
|
|
41
|
+
${m}`,!!i.forbidDrawingImages))}async function aj(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 ac(["你是文档质量审查与优化专家。你要基于模板、规范包、提示词角色和内部资料对初稿进行二次审查和优化,使其成为正式业务文档。",Y,"准确性优先级:文档规范包/模板要求 > 已绑定或人工确认的知识库证据 > 自动检索知识库证据 > 项目上下文/历史记忆。内部优先级只用于判断事实,不得写入正文。","项目上下文/历史记忆只能用于风格偏好、历史纠偏和连续性检查;如果与知识库证据冲突,必须以知识库证据为准。","必须保持 Markdown 输出;保留已有正式标题层级和表格;不得保留或新增证据来源、资料来源、缺失项、校验结果等后台信息。","图片/图纸类资料默认只作为文本事实依据,除非用户明确要求插图,否则不要插入图片或 Markdown 图片语法;不得引用 PDF/DWG/Excel 文件名。","重点检查:正式章节完整性、资料事实内化使用、参数数字准确性、冲突事实是否按配置优先级处理、解析器内部对象名清理、表格呈现、表达专业性、导出友好性。","除非规范包或提示词明确要求,删除中间分析产物标题和后台流程说明。",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:X(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 ak(a){let b=a.chapters.map(a=>X(a.content)).filter(Boolean).join("\n\n");return X(['<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 al(a){if(a?.aborted)throw Error("用户中止")}async function am(a){al(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=$(b),l=_(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(),al(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=_(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){al(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(" "),Y=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})):[],aa=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,Y),ab=[b.name,b.outputTitle,a.requirement,...aa.flatMap(a=>[a.title,a.purpose])].filter(Boolean).join(" "),ac=(0,k.Hh)(ab,8,c),ad=ac.length>0?ac.map((a,b)=>`${b+1}. [${a.type}/${a.importance}] ${a.content}${a.source?`(来源:${a.source})`:""}`).join("\n"):"",am={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(am),a.onProgress?.([...H]),aa)){al(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])),al(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
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
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")}(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(`
|
|
47
|
+
${g}`:""].filter(Boolean).join("\n\n")}(J,d,f),s=await Promise.race([ai(b,d,m,n,p,ad,a.requirement,q,{forbidDrawingImages:o,minWords:f?.minWords||1200}),new Promise(a=>setTimeout(()=>a(null),6e4))]);al(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 X([`## ${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])}al(a.signal);let an={stage:{type:"file_understanding",roleId:"multimodal-files",status:"skipped",message:"文件理解跳过"},notes:[]};try{an=await ae(c,z)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fileUnderstanding failed:",b)}for(let b of(al(a.signal),an.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 af(z,p,b,o)}catch(b){if(a.signal?.aborted)throw b;console.error("[gen] fact extraction failed:",b)}al(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===an.stage.type)||H.push(an.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===_(c).length&&e.push("模板未绑定任何知识库文件"),c&&0===$(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} 个提示词角色`},am,{type:"knowledge_retrieval",roleId:"knowledge-base",status:z.length>0?"success":"fallback",message:`已检索/绑定 ${z.length} 条证据`},av,an.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=ak(aC);al(a.signal);let aE=await aj({template:b,spec:o,markdown:aD,evidence:z,promptTexts:p,projectContext:ad,requirement:a.requirement});al(a.signal);let aF=T(J,b),aG=U(aE.markdown===aD?ak({...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}`)}for(let b of d){let c=b.facts.slice(0,5).map(a=>Q(a.value).slice(0,24)).filter(a=>a.length>=6);c.length>0&&!c.some(b=>a.includes(b))&&f.push(`未体现 ${b.node.fileRoleName} 的关键读取结果`)}return e&&/!\[[^\]]*\]\([^)]*\)/iu.test(a)&&f.push("正文包含不应插入的图片"),/\b(?:m\s*[²2]|m\s*[³3]|mm2|cm2|km2)\b/iu.test(a)&&f.push("正文包含导出不友好的计量单位写法"),[...new Set(f)].slice(0,40)}(aG,y,V,J,aF),aI=await Z({markdown:aG,template:b,plan:V,artifacts:J,promptTexts:p,requirement:a.requirement,issues:aH,forbidDrawingImages:aF});al(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&&ag(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&&ag(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:ah(b,`缺少事实 ${o}`)}),"chapter"===n.subject&&"exists"===n.operator&&o&&!k.has(o)&&h.push({level:a,message:ah(b,`缺少章节 ${o}`)}),"file_role"===n.subject&&"exists"===n.operator&&o&&!f.some(a=>a.roleId===o)&&h.push({level:a,message:ah(b,`缺少文件角色 ${o}`)}),"prompt_role"===n.subject&&"exists"===n.operator&&o&&!g.some(a=>a.roleId===o)&&h.push({level:a,message:ah(b,`缺少提示词角色 ${o}`)}),"document"===n.subject&&"contains"===n.operator&&p&&!e.includes(p)&&h.push({level:a,message:ah(b,`全文必须包含 ${p}`)}),"document"===n.subject&&"not_contains"===n.operator&&p&&e.includes(p)&&h.push({level:a,message:ah(b,`出现禁用文本 ${p}`)}),"document"!==n.subject&&"chapter"!==n.subject||"regex_match"!==n.operator||!p||t&&t.test(s)||h.push({level:a,message:ah(b,`未匹配正则 ${p}`)}),("document"===n.subject||"chapter"===n.subject)&&"regex_not_match"===n.operator&&t?.test(s)&&h.push({level:a,message:ah(b,`匹配到禁止正则 ${p}`)}),"chapter"===n.subject&&"contains"===n.operator&&o&&p&&(!r||!r.content.includes(p))&&h.push({level:a,message:ah(b,`章节 ${o} 必须包含 ${p}`)}),"chapter"===n.subject&&"not_contains"===n.operator&&r?.content.includes(p)&&h.push({level:a,message:ah(b,`章节 ${o} 出现禁用文本 ${p}`)}),"chapter"===n.subject&&"min_length"===n.operator&&o&&(!r||r.content.length<q)&&h.push({level:a,message:ah(b,`章节 ${o} 低于 ${q} 字`)}),"table"===n.subject&&"min_count"===n.operator&&c.tables.length+l.length<q&&h.push({level:a,message:ah(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:ah(b,"存在缺少说明文字的表格")}),"image"===n.subject&&"min_count"===n.operator&&m.length<q&&h.push({level:a,message:ah(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:ah(b,"存在缺少说明文字的图片")}),"source"===n.subject&&"all_have_source"===n.operator&&i.some(a=>!a.sourceFile)&&h.push({level:a,message:ah(b,"存在无来源事实")}),"source"===n.subject&&"min_count"===n.operator&&new Set(i.map(a=>a.sourceFile).filter(Boolean)).size<q&&h.push({level:a,message:ah(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 an(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/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,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"Yb0BLdPOQ4eb6l81wnrct","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/39oksf4Ljm8ZLtxOnTV7z/_buildManifest.js" defer=""></script><script src="/_next/static/39oksf4Ljm8ZLtxOnTV7z/_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,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">This page could not be found<!-- -->.</h2></div></div></div></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"39oksf4Ljm8ZLtxOnTV7z","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|