@customize-agent/server 4.0.48 → 4.0.50
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 +21 -21
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/1936.js +3 -3
- package/.next/server/chunks/6697.js +17 -17
- package/.next/server/chunks/8204.js +1 -1
- package/.next/server/chunks/9301.js +3 -3
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/_error.js +1 -1
- package/.next/server/pages/api/assets/generated/preview.js +1 -1
- package/.next/server/pages/api/assets/generated.js +1 -1
- package/.next/server/pages/api/documents/export.js +2 -2
- package/.next/server/pages/api/documents/generate.js +1 -1
- package/.next/server/pages/api/documents/generated/[id].js +1 -1
- package/.next/server/pages/api/documents/generated.js +1 -1
- package/.next/server/pages/api/kb/upload.js +1 -1
- package/.next/server/pages/asset-library.html +1 -1
- package/.next/server/pages/context/long-term.html +1 -1
- package/.next/server/pages/context/short-term.html +1 -1
- package/.next/server/pages/document-roles.html +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/guide.html +1 -1
- package/.next/server/pages/index.html +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge/search.html +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/overview.html +1 -1
- package/.next/server/pages/prompt.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages-manifest.json +26 -26
- package/.next/static/{djXZQoX_COYKiw94g6pwX → CJlmeaK1PDR-c4sfDG8EN}/_buildManifest.js +1 -1
- package/.next/static/chunks/{150-8039a46df62c9b21.js → 150-134099bf526e9292.js} +2 -2
- package/.next/static/chunks/412-b9c854c6a76db67d.js +1 -0
- package/.next/static/chunks/496-4fb9a063790e65ff.js +1 -0
- package/.next/static/chunks/694-2d545cfbb9779f2c.js +1 -0
- package/.next/static/chunks/788-7f7359a830e3f4fd.js +1 -0
- package/.next/static/chunks/795-d8fb7a0420512701.js +1 -0
- package/.next/static/chunks/pages/{_app-fb7ca29c210d0293.js → _app-62cd5d1172d08036.js} +1 -1
- package/.next/static/chunks/pages/document-roles-fd02980db151650c.js +1 -0
- package/.next/static/chunks/pages/documents-9967f1fdf3fb6d03.js +1 -0
- package/.next/static/chunks/pages/guide-cba4ca0b28bb9b64.js +1 -0
- package/.next/static/chunks/pages/knowledge/files-9d30d5f23d78f46b.js +1 -0
- package/package.json +3 -3
- package/.next/static/chunks/412-03a4cc00655c0ec0.js +0 -1
- package/.next/static/chunks/496-ceb2d8197d6335cf.js +0 -1
- package/.next/static/chunks/694-b6ab4967c35bbcee.js +0 -1
- package/.next/static/chunks/788-db05269178a28c20.js +0 -1
- package/.next/static/chunks/795-262a7ef599d655f4.js +0 -1
- package/.next/static/chunks/pages/document-roles-00219c0a0871daec.js +0 -1
- package/.next/static/chunks/pages/documents-1cf22adda76f8a10.js +0 -1
- package/.next/static/chunks/pages/guide-c85dee51bd3de3e3.js +0 -1
- package/.next/static/chunks/pages/knowledge/files-75a33100a1b3b5b5.js +0 -1
- /package/.next/static/{djXZQoX_COYKiw94g6pwX → CJlmeaK1PDR-c4sfDG8EN}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(()=>{var a={};a.id=1883,a.ids=[1883],a.modules={15751:a=>{a.exports=require("xlsx")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},67461:(a,b,c)=>{c.d(b,{BH:()=>y,Gl:()=>l,JU:()=>A,Jz:()=>D,M$:()=>s,QG:()=>x,SE:()=>p,YL:()=>E,a6:()=>v,r:()=>w,uc:()=>C,v7:()=>t,yE:()=>z});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(56697),i=c(99842),j=c(23328);let k=new Map;function l(a=(0,j.aY)()){let b=g.join(f.homedir(),".customize-agent","projects",function(a=(0,j.aY)()){return d.createHash("sha1").update(g.resolve(a)).digest("hex").slice(0,12)}(a),"generatedDocuments");return e.mkdirSync(g.join(b,"drafts"),{recursive:!0}),e.mkdirSync(g.join(b,"assets"),{recursive:!0}),b}function m(a=(0,j.aY)()){return g.join(l(a),"index.json")}function n(a=(0,j.aY)()){return g.join(l(a),"assets.json")}function o(a,b=(0,j.aY)()){return g.join(l(b),"drafts",`${a}.json`)}function p(a,b=(0,j.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(l(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join(b,"knowledgeBase",a.path):null}function q(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function r(a,b){e.mkdirSync(g.dirname(a),{recursive:!0}),e.writeFileSync(a,JSON.stringify(b,null,2))}function s(a=(0,j.aY)()){return q(m(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function t(a,b=(0,j.aY)()){return q(o(a,b),null)}function u(a,b=(0,j.aY)()){let c=Date.now(),d={...a,updatedAt:c};r(o(d.id,b),d);let e=s(b).filter(a=>a.id!==d.id);return e.unshift(d),r(m(b),e.map(a=>({...a,draft:void 0,executionStages:a.executionStages}))),d}function v(a,b,c=(0,j.aY)()){let d=t(a,c);return d?u({...d,...b,id:a},c):null}function w(a,b=(0,j.aY)()){let c=t(a,b);if(!c||"generating"!==c.status)return null;for(let[b,c]of k)if(c.documentId===a){c.controller.abort(),k.delete(b);break}return u({...c,status:"failed",error:"用户中止",updatedAt:Date.now()},b)}function x(a,b=(0,j.aY)()){try{e.rmSync(o(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}r(m(b),s(b).filter(b=>b.id!==a))}function y(a=(0,j.aY)()){return q(n(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function z(a,b=(0,j.aY)()){return y(b).find(b=>b.id===a)||null}function A(a,b=(0,j.aY)()){let c=z(a,b);if(!c)return!1;let d=p(c,b);if(d&&d.startsWith(l(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return r(n(b),y(b).filter(b=>b.id!==a)),!0}async function B(a,b=(0,j.aY)()){let c=g.join("生成文档",`${a.title.replace(/[\\/:*?"<>|]/gu,"_").slice(0,120)||"generated-document"}-${a.id}.md`).split(g.sep).join("/"),d=g.join(b,"knowledgeBase",c);e.mkdirSync(g.dirname(d),{recursive:!0}),e.writeFileSync(d,a.editedMarkdown||a.markdown,"utf8");let f=await (0,j.Qh)().getProject(b);return await f.reindexFile(c),c}async function C(a,b=(0,j.aY)()){let c=z(a,b);if(!c?.path)return null;let d=p(c,b);if(!d||!e.existsSync(d))throw Error("asset file not found");let f=g.join("生成资源",g.basename(c.path)).split(g.sep).join("/"),h=g.join(b,"knowledgeBase",f);e.mkdirSync(g.dirname(h),{recursive:!0}),d!==h&&e.copyFileSync(d,h);let i=await (0,j.Qh)().getProject(b);await i.reindexFile(f);let k=y(b).map(b=>b.id===a?{...b,path:f,source:"generated",indexed:!0,updatedAt:Date.now()}:b);return r(n(b),k),k.find(b=>b.id===a)||null}function D(a,b,c=(0,j.aY)()){let d=z(a,c);if(!d)return null;let f=p(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function E(a,b=(0,j.aY)()){let c=Date.now(),e=`doc-${c}-${d.randomBytes(4).toString("hex")}`,f=`task-${c}-${d.randomBytes(4).toString("hex")}`,l={id:e,taskId:f,templateId:a.templateId,title:"生成中",requirement:a.requirement||"",markdown:"",status:"generating",assets:[],createdAt:c,updatedAt:c};u(l,b);let m=new AbortController,o=(0,h.OX)({...a,projectRoot:b,signal:m.signal,onProgress:a=>{try{let c=t(e,b);c&&"generating"===c.status&&(u({...c,executionStages:a},b),console.log(`[gen] progress saved: ${a.length} stages, doc=${e}`))}catch(a){console.error("[gen] progress save error:",a)}}}).then(async a=>{let c=t(e,b);if(!c||"generating"!==c.status)return c??l;let d=a.validationIssues.filter(a=>"error"===a.level||"warning"===a.level).map(a=>a.suggestion?`${a.message}:${a.suggestion}`:a.message)
|
|
1
|
+
"use strict";(()=>{var a={};a.id=1883,a.ids=[1883],a.modules={15751:a=>{a.exports=require("xlsx")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},67461:(a,b,c)=>{c.d(b,{BH:()=>y,Gl:()=>l,JU:()=>A,Jz:()=>D,M$:()=>s,QG:()=>x,SE:()=>p,YL:()=>E,a6:()=>v,r:()=>w,uc:()=>C,v7:()=>t,yE:()=>z});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(56697),i=c(99842),j=c(23328);let k=new Map;function l(a=(0,j.aY)()){let b=g.join(f.homedir(),".customize-agent","projects",function(a=(0,j.aY)()){return d.createHash("sha1").update(g.resolve(a)).digest("hex").slice(0,12)}(a),"generatedDocuments");return e.mkdirSync(g.join(b,"drafts"),{recursive:!0}),e.mkdirSync(g.join(b,"assets"),{recursive:!0}),b}function m(a=(0,j.aY)()){return g.join(l(a),"index.json")}function n(a=(0,j.aY)()){return g.join(l(a),"assets.json")}function o(a,b=(0,j.aY)()){return g.join(l(b),"drafts",`${a}.json`)}function p(a,b=(0,j.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(l(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join(b,"knowledgeBase",a.path):null}function q(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function r(a,b){e.mkdirSync(g.dirname(a),{recursive:!0}),e.writeFileSync(a,JSON.stringify(b,null,2))}function s(a=(0,j.aY)()){return q(m(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function t(a,b=(0,j.aY)()){return q(o(a,b),null)}function u(a,b=(0,j.aY)()){let c=Date.now(),d={...a,updatedAt:c};r(o(d.id,b),d);let e=s(b).filter(a=>a.id!==d.id);return e.unshift(d),r(m(b),e.map(a=>({...a,draft:void 0,executionStages:a.executionStages}))),d}function v(a,b,c=(0,j.aY)()){let d=t(a,c);return d?u({...d,...b,id:a},c):null}function w(a,b=(0,j.aY)()){let c=t(a,b);if(!c||"generating"!==c.status)return null;for(let[b,c]of k)if(c.documentId===a){c.controller.abort(),k.delete(b);break}return u({...c,status:"failed",error:"用户中止",updatedAt:Date.now()},b)}function x(a,b=(0,j.aY)()){try{e.rmSync(o(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}r(m(b),s(b).filter(b=>b.id!==a))}function y(a=(0,j.aY)()){return q(n(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function z(a,b=(0,j.aY)()){return y(b).find(b=>b.id===a)||null}function A(a,b=(0,j.aY)()){let c=z(a,b);if(!c)return!1;let d=p(c,b);if(d&&d.startsWith(l(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return r(n(b),y(b).filter(b=>b.id!==a)),!0}async function B(a,b=(0,j.aY)()){let c=g.join("生成文档",`${a.title.replace(/[\\/:*?"<>|]/gu,"_").slice(0,120)||"generated-document"}-${a.id}.md`).split(g.sep).join("/"),d=g.join(b,"knowledgeBase",c);e.mkdirSync(g.dirname(d),{recursive:!0}),e.writeFileSync(d,a.editedMarkdown||a.markdown,"utf8");let f=await (0,j.Qh)().getProject(b);return await f.reindexFile(c),c}async function C(a,b=(0,j.aY)()){let c=z(a,b);if(!c?.path)return null;let d=p(c,b);if(!d||!e.existsSync(d))throw Error("asset file not found");let f=g.join("生成资源",g.basename(c.path)).split(g.sep).join("/"),h=g.join(b,"knowledgeBase",f);e.mkdirSync(g.dirname(h),{recursive:!0}),d!==h&&e.copyFileSync(d,h);let i=await (0,j.Qh)().getProject(b);await i.reindexFile(f);let k=y(b).map(b=>b.id===a?{...b,path:f,source:"generated",indexed:!0,updatedAt:Date.now()}:b);return r(n(b),k),k.find(b=>b.id===a)||null}function D(a,b,c=(0,j.aY)()){let d=z(a,c);if(!d)return null;let f=p(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function E(a,b=(0,j.aY)()){let c=Date.now(),e=`doc-${c}-${d.randomBytes(4).toString("hex")}`,f=`task-${c}-${d.randomBytes(4).toString("hex")}`,l={id:e,taskId:f,templateId:a.templateId,title:"生成中",requirement:a.requirement||"",markdown:"",status:"generating",assets:[],createdAt:c,updatedAt:c};u(l,b);let m=new AbortController,o=(0,h.OX)({...a,projectRoot:b,signal:m.signal,onProgress:a=>{try{let c=t(e,b);c&&"generating"===c.status&&(u({...c,executionStages:a},b),console.log(`[gen] progress saved: ${a.length} stages, doc=${e}`))}catch(a){console.error("[gen] progress save error:",a)}}}).then(async a=>{let c=t(e,b);if(!c||"generating"!==c.status)return c??l;let d=a.validationIssues.filter(a=>"error"===a.level||"warning"===a.level).map(a=>a.suggestion?`${a.message}:${a.suggestion}`:a.message);a.exportGate.passed||0!==d.length||d.push("导出门禁未通过:存在未完成的检查项");let f=u(function(a){let b=a=>({...a,content:a.content.slice(0,500)}),c=a.draft?{...a.draft,chapters:a.draft.chapters.map(a=>({...a,evidence:a.evidence.map(b)}))}:a.draft;return{...a,draft:c}}({...c,templateName:a.templateName,title:a.title,markdown:a.markdown,status:d.length>0?"warning":"completed",draft:a,executionStages:a.executionStages,assets:a.assets||[],completedAt:Date.now(),warningIssues:d}),b);!function(a,b=(0,j.aY)()){let c=a.draft?.sources.slice(0,8).map(a=>a.filePath).join("、")||"无明确来源",d=a.warningIssues?.slice(0,5).join(";")||"无阻断问题";(0,i.i3)("project_fact",`文档《${a.title}》已基于模板“${a.templateName||a.templateId}”生成。用户要求:${a.requirement||"未填写"}。主要资料来源:${c}。校验结果:${d}。`,`Project: ${g.resolve(b)} | Generated document: ${a.id}`)}(f,b);let h=function(a,b,c=(0,j.aY)()){let d=Date.now(),e=[...y(c)];for(let c of a){let a=e.findIndex(a=>a.id===c.id),f=c.path?.startsWith("generatedDocuments/assets/")||"generated"===c.status||"prompt_ready"===c.status?"generated":"knowledge_base",h={...c,name:g.basename(c.path||c.url||c.id),source:f,indexed:a>=0&&e[a].indexed,usedByDocumentIds:a>=0?[...new Set([...e[a].usedByDocumentIds,b])]:[b],createdAt:a>=0?e[a].createdAt:d,updatedAt:d};a>=0?e[a]={...e[a],...h}:e.push(h)}return r(n(c),e),e}(a.assets||[],e,b);for(let a of(await B(f,b).catch(a=>console.warn("[generated-documents] 自动入库生成文档失败",a)),h.filter(a=>a.usedByDocumentIds.includes(e)&&!a.indexed)))await C(a.id,b).catch(b=>console.warn("[generated-documents] 自动入库生成资源失败",a.id,b));return f}).catch(a=>{let c=t(e,b);return c&&"generating"===c.status?u({...c,status:"failed",error:a instanceof Error?a.message:String(a)},b):c??l}).finally(()=>{k.delete(f)});return k.set(f,{id:f,documentId:e,status:"generating",controller:m,promise:o}),{taskId:f,documentId:e,record:l}}},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},87550:a=>{a.exports=require("better-sqlite3")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")},99942:(a,b,c)=>{c.r(b),c.d(b,{config:()=>q,default:()=>p,handler:()=>s});var d={};c.r(d),c.d(d,{default:()=>m});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(73024),j=c(76760),k=c(67461),l=c(23328);function m(a,b){try{let c="string"==typeof a.query.id?a.query.id:"";if(!c)return b.status(400).json({error:"id required"});let d=(0,l.aY)(),e=(0,k.yE)(c,d);if(!e?.path)return b.status(404).json({error:"asset not found"});let f=(0,k.SE)(e,d);if(!f||!i.existsSync(f))return b.status(404).json({error:"file not found"});let g=i.readFileSync(f);if(!(g.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10]))||g.subarray(0,3).equals(Buffer.from([255,216,255]))||"RIFF"===g.subarray(0,4).toString("ascii")))return b.status(422).json({error:"asset file is not a valid image"});return b.setHeader("Content-Type",function(a){let b=j.extname(a).toLowerCase();return".jpg"===b||".jpeg"===b?"image/jpeg":".webp"===b?"image/webp":"image/png"}(f)),b.setHeader("Cache-Control","no-store"),b.status(200).send(g)}catch(a){console.error("[api] assets/generated/preview",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}}var n=c(68970),o=c(50296);let p=(0,h.M)(d,"default"),q=(0,h.M)(d,"config"),r=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/assets/generated/preview",pathname:"/api/assets/generated/preview",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function s(a,b,c){let d=await r.prepare(a,b,{srcPage:"/api/assets/generated/preview"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,n.getTracer)(),e=d.getActiveScopeSpan(),j=r.instrumentationOnRequestError.bind(r),k=async e=>r.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:r.isDev,page:"/api/assets/generated/preview",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==o.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(o.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:n.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(r.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}}};var b=require("../../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,6697],()=>b(b.s=99942));module.exports=c})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(()=>{var a={};a.id=6334,a.ids=[6334],a.modules={15751:a=>{a.exports=require("xlsx")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},29021:a=>{a.exports=require("fs")},31421:a=>{a.exports=require("node:child_process")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},55883:(a,b,c)=>{c.r(b),c.d(b,{config:()=>p,default:()=>o,handler:()=>r});var d={};c.r(d),c.d(d,{default:()=>l});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(31421),j=c(48161),k=c(67461);async function l(a,b){try{if("GET"===a.method)return b.status(200).json({assets:(0,k.BH)()});if("DELETE"===a.method){let c="string"==typeof a.query.id?a.query.id:a.body?.id;if(!c)return b.status(400).json({error:"id required"});return(0,k.JU)(c),b.status(200).json({ok:!0,assets:(0,k.BH)()})}if("POST"===a.method){let{id:c,action:d,target:e="file"}=a.body;if(!c||!d)return b.status(400).json({error:"id and action required"});if("index"===d){let a=await (0,k.uc)(c);if(!a)return b.status(404).json({error:"asset not found"});return b.status(200).json({asset:a,assets:(0,k.BH)()})}if("open"===d){let a=(0,k.Jz)(c,e);if(!a)return b.status(404).json({error:"asset file not found"});return(function(a){let b=(0,j.platform)();return"darwin"===b?(0,i.spawn)("open",[a],{detached:!0,stdio:"ignore"}):"win32"===b?(0,i.spawn)("cmd",["/c","start","",a],{detached:!0,stdio:"ignore",windowsHide:!0}):(0,i.spawn)("xdg-open",[a],{detached:!0,stdio:"ignore"})})(a).unref(),b.status(200).json({ok:!0})}}return b.status(405).json({error:"Method not allowed"})}catch(a){console.error("[api] assets/generated",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}}var m=c(68970),n=c(50296);let o=(0,h.M)(d,"default"),p=(0,h.M)(d,"config"),q=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/assets/generated",pathname:"/api/assets/generated",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function r(a,b,c){let d=await q.prepare(a,b,{srcPage:"/api/assets/generated"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,m.getTracer)(),e=d.getActiveScopeSpan(),j=q.instrumentationOnRequestError.bind(q),k=async e=>q.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:q.isDev,page:"/api/assets/generated",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==n.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(n.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:m.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(q.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},67461:(a,b,c)=>{c.d(b,{BH:()=>y,Gl:()=>l,JU:()=>A,Jz:()=>D,M$:()=>s,QG:()=>x,SE:()=>p,YL:()=>E,a6:()=>v,r:()=>w,uc:()=>C,v7:()=>t,yE:()=>z});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(56697),i=c(99842),j=c(23328);let k=new Map;function l(a=(0,j.aY)()){let b=g.join(f.homedir(),".customize-agent","projects",function(a=(0,j.aY)()){return d.createHash("sha1").update(g.resolve(a)).digest("hex").slice(0,12)}(a),"generatedDocuments");return e.mkdirSync(g.join(b,"drafts"),{recursive:!0}),e.mkdirSync(g.join(b,"assets"),{recursive:!0}),b}function m(a=(0,j.aY)()){return g.join(l(a),"index.json")}function n(a=(0,j.aY)()){return g.join(l(a),"assets.json")}function o(a,b=(0,j.aY)()){return g.join(l(b),"drafts",`${a}.json`)}function p(a,b=(0,j.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(l(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join(b,"knowledgeBase",a.path):null}function q(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function r(a,b){e.mkdirSync(g.dirname(a),{recursive:!0}),e.writeFileSync(a,JSON.stringify(b,null,2))}function s(a=(0,j.aY)()){return q(m(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function t(a,b=(0,j.aY)()){return q(o(a,b),null)}function u(a,b=(0,j.aY)()){let c=Date.now(),d={...a,updatedAt:c};r(o(d.id,b),d);let e=s(b).filter(a=>a.id!==d.id);return e.unshift(d),r(m(b),e.map(a=>({...a,draft:void 0,executionStages:a.executionStages}))),d}function v(a,b,c=(0,j.aY)()){let d=t(a,c);return d?u({...d,...b,id:a},c):null}function w(a,b=(0,j.aY)()){let c=t(a,b);if(!c||"generating"!==c.status)return null;for(let[b,c]of k)if(c.documentId===a){c.controller.abort(),k.delete(b);break}return u({...c,status:"failed",error:"用户中止",updatedAt:Date.now()},b)}function x(a,b=(0,j.aY)()){try{e.rmSync(o(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}r(m(b),s(b).filter(b=>b.id!==a))}function y(a=(0,j.aY)()){return q(n(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function z(a,b=(0,j.aY)()){return y(b).find(b=>b.id===a)||null}function A(a,b=(0,j.aY)()){let c=z(a,b);if(!c)return!1;let d=p(c,b);if(d&&d.startsWith(l(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return r(n(b),y(b).filter(b=>b.id!==a)),!0}async function B(a,b=(0,j.aY)()){let c=g.join("生成文档",`${a.title.replace(/[\\/:*?"<>|]/gu,"_").slice(0,120)||"generated-document"}-${a.id}.md`).split(g.sep).join("/"),d=g.join(b,"knowledgeBase",c);e.mkdirSync(g.dirname(d),{recursive:!0}),e.writeFileSync(d,a.editedMarkdown||a.markdown,"utf8");let f=await (0,j.Qh)().getProject(b);return await f.reindexFile(c),c}async function C(a,b=(0,j.aY)()){let c=z(a,b);if(!c?.path)return null;let d=p(c,b);if(!d||!e.existsSync(d))throw Error("asset file not found");let f=g.join("生成资源",g.basename(c.path)).split(g.sep).join("/"),h=g.join(b,"knowledgeBase",f);e.mkdirSync(g.dirname(h),{recursive:!0}),d!==h&&e.copyFileSync(d,h);let i=await (0,j.Qh)().getProject(b);await i.reindexFile(f);let k=y(b).map(b=>b.id===a?{...b,path:f,source:"generated",indexed:!0,updatedAt:Date.now()}:b);return r(n(b),k),k.find(b=>b.id===a)||null}function D(a,b,c=(0,j.aY)()){let d=z(a,c);if(!d)return null;let f=p(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function E(a,b=(0,j.aY)()){let c=Date.now(),e=`doc-${c}-${d.randomBytes(4).toString("hex")}`,f=`task-${c}-${d.randomBytes(4).toString("hex")}`,l={id:e,taskId:f,templateId:a.templateId,title:"生成中",requirement:a.requirement||"",markdown:"",status:"generating",assets:[],createdAt:c,updatedAt:c};u(l,b);let m=new AbortController,o=(0,h.OX)({...a,projectRoot:b,signal:m.signal,onProgress:a=>{try{let c=t(e,b);c&&"generating"===c.status&&(u({...c,executionStages:a},b),console.log(`[gen] progress saved: ${a.length} stages, doc=${e}`))}catch(a){console.error("[gen] progress save error:",a)}}}).then(async a=>{let c=t(e,b);if(!c||"generating"!==c.status)return c??l;let d=a.validationIssues.filter(a=>"error"===a.level||"warning"===a.level).map(a=>a.suggestion?`${a.message}:${a.suggestion}`:a.message)
|
|
1
|
+
"use strict";(()=>{var a={};a.id=6334,a.ids=[6334],a.modules={15751:a=>{a.exports=require("xlsx")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},29021:a=>{a.exports=require("fs")},31421:a=>{a.exports=require("node:child_process")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},55883:(a,b,c)=>{c.r(b),c.d(b,{config:()=>p,default:()=>o,handler:()=>r});var d={};c.r(d),c.d(d,{default:()=>l});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(31421),j=c(48161),k=c(67461);async function l(a,b){try{if("GET"===a.method)return b.status(200).json({assets:(0,k.BH)()});if("DELETE"===a.method){let c="string"==typeof a.query.id?a.query.id:a.body?.id;if(!c)return b.status(400).json({error:"id required"});return(0,k.JU)(c),b.status(200).json({ok:!0,assets:(0,k.BH)()})}if("POST"===a.method){let{id:c,action:d,target:e="file"}=a.body;if(!c||!d)return b.status(400).json({error:"id and action required"});if("index"===d){let a=await (0,k.uc)(c);if(!a)return b.status(404).json({error:"asset not found"});return b.status(200).json({asset:a,assets:(0,k.BH)()})}if("open"===d){let a=(0,k.Jz)(c,e);if(!a)return b.status(404).json({error:"asset file not found"});return(function(a){let b=(0,j.platform)();return"darwin"===b?(0,i.spawn)("open",[a],{detached:!0,stdio:"ignore"}):"win32"===b?(0,i.spawn)("cmd",["/c","start","",a],{detached:!0,stdio:"ignore",windowsHide:!0}):(0,i.spawn)("xdg-open",[a],{detached:!0,stdio:"ignore"})})(a).unref(),b.status(200).json({ok:!0})}}return b.status(405).json({error:"Method not allowed"})}catch(a){console.error("[api] assets/generated",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}}var m=c(68970),n=c(50296);let o=(0,h.M)(d,"default"),p=(0,h.M)(d,"config"),q=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/assets/generated",pathname:"/api/assets/generated",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function r(a,b,c){let d=await q.prepare(a,b,{srcPage:"/api/assets/generated"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,m.getTracer)(),e=d.getActiveScopeSpan(),j=q.instrumentationOnRequestError.bind(q),k=async e=>q.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:q.isDev,page:"/api/assets/generated",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==n.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(n.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:m.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(q.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},67461:(a,b,c)=>{c.d(b,{BH:()=>y,Gl:()=>l,JU:()=>A,Jz:()=>D,M$:()=>s,QG:()=>x,SE:()=>p,YL:()=>E,a6:()=>v,r:()=>w,uc:()=>C,v7:()=>t,yE:()=>z});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(56697),i=c(99842),j=c(23328);let k=new Map;function l(a=(0,j.aY)()){let b=g.join(f.homedir(),".customize-agent","projects",function(a=(0,j.aY)()){return d.createHash("sha1").update(g.resolve(a)).digest("hex").slice(0,12)}(a),"generatedDocuments");return e.mkdirSync(g.join(b,"drafts"),{recursive:!0}),e.mkdirSync(g.join(b,"assets"),{recursive:!0}),b}function m(a=(0,j.aY)()){return g.join(l(a),"index.json")}function n(a=(0,j.aY)()){return g.join(l(a),"assets.json")}function o(a,b=(0,j.aY)()){return g.join(l(b),"drafts",`${a}.json`)}function p(a,b=(0,j.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(l(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join(b,"knowledgeBase",a.path):null}function q(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function r(a,b){e.mkdirSync(g.dirname(a),{recursive:!0}),e.writeFileSync(a,JSON.stringify(b,null,2))}function s(a=(0,j.aY)()){return q(m(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function t(a,b=(0,j.aY)()){return q(o(a,b),null)}function u(a,b=(0,j.aY)()){let c=Date.now(),d={...a,updatedAt:c};r(o(d.id,b),d);let e=s(b).filter(a=>a.id!==d.id);return e.unshift(d),r(m(b),e.map(a=>({...a,draft:void 0,executionStages:a.executionStages}))),d}function v(a,b,c=(0,j.aY)()){let d=t(a,c);return d?u({...d,...b,id:a},c):null}function w(a,b=(0,j.aY)()){let c=t(a,b);if(!c||"generating"!==c.status)return null;for(let[b,c]of k)if(c.documentId===a){c.controller.abort(),k.delete(b);break}return u({...c,status:"failed",error:"用户中止",updatedAt:Date.now()},b)}function x(a,b=(0,j.aY)()){try{e.rmSync(o(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}r(m(b),s(b).filter(b=>b.id!==a))}function y(a=(0,j.aY)()){return q(n(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function z(a,b=(0,j.aY)()){return y(b).find(b=>b.id===a)||null}function A(a,b=(0,j.aY)()){let c=z(a,b);if(!c)return!1;let d=p(c,b);if(d&&d.startsWith(l(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return r(n(b),y(b).filter(b=>b.id!==a)),!0}async function B(a,b=(0,j.aY)()){let c=g.join("生成文档",`${a.title.replace(/[\\/:*?"<>|]/gu,"_").slice(0,120)||"generated-document"}-${a.id}.md`).split(g.sep).join("/"),d=g.join(b,"knowledgeBase",c);e.mkdirSync(g.dirname(d),{recursive:!0}),e.writeFileSync(d,a.editedMarkdown||a.markdown,"utf8");let f=await (0,j.Qh)().getProject(b);return await f.reindexFile(c),c}async function C(a,b=(0,j.aY)()){let c=z(a,b);if(!c?.path)return null;let d=p(c,b);if(!d||!e.existsSync(d))throw Error("asset file not found");let f=g.join("生成资源",g.basename(c.path)).split(g.sep).join("/"),h=g.join(b,"knowledgeBase",f);e.mkdirSync(g.dirname(h),{recursive:!0}),d!==h&&e.copyFileSync(d,h);let i=await (0,j.Qh)().getProject(b);await i.reindexFile(f);let k=y(b).map(b=>b.id===a?{...b,path:f,source:"generated",indexed:!0,updatedAt:Date.now()}:b);return r(n(b),k),k.find(b=>b.id===a)||null}function D(a,b,c=(0,j.aY)()){let d=z(a,c);if(!d)return null;let f=p(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function E(a,b=(0,j.aY)()){let c=Date.now(),e=`doc-${c}-${d.randomBytes(4).toString("hex")}`,f=`task-${c}-${d.randomBytes(4).toString("hex")}`,l={id:e,taskId:f,templateId:a.templateId,title:"生成中",requirement:a.requirement||"",markdown:"",status:"generating",assets:[],createdAt:c,updatedAt:c};u(l,b);let m=new AbortController,o=(0,h.OX)({...a,projectRoot:b,signal:m.signal,onProgress:a=>{try{let c=t(e,b);c&&"generating"===c.status&&(u({...c,executionStages:a},b),console.log(`[gen] progress saved: ${a.length} stages, doc=${e}`))}catch(a){console.error("[gen] progress save error:",a)}}}).then(async a=>{let c=t(e,b);if(!c||"generating"!==c.status)return c??l;let d=a.validationIssues.filter(a=>"error"===a.level||"warning"===a.level).map(a=>a.suggestion?`${a.message}:${a.suggestion}`:a.message);a.exportGate.passed||0!==d.length||d.push("导出门禁未通过:存在未完成的检查项");let f=u(function(a){let b=a=>({...a,content:a.content.slice(0,500)}),c=a.draft?{...a.draft,chapters:a.draft.chapters.map(a=>({...a,evidence:a.evidence.map(b)}))}:a.draft;return{...a,draft:c}}({...c,templateName:a.templateName,title:a.title,markdown:a.markdown,status:d.length>0?"warning":"completed",draft:a,executionStages:a.executionStages,assets:a.assets||[],completedAt:Date.now(),warningIssues:d}),b);!function(a,b=(0,j.aY)()){let c=a.draft?.sources.slice(0,8).map(a=>a.filePath).join("、")||"无明确来源",d=a.warningIssues?.slice(0,5).join(";")||"无阻断问题";(0,i.i3)("project_fact",`文档《${a.title}》已基于模板“${a.templateName||a.templateId}”生成。用户要求:${a.requirement||"未填写"}。主要资料来源:${c}。校验结果:${d}。`,`Project: ${g.resolve(b)} | Generated document: ${a.id}`)}(f,b);let h=function(a,b,c=(0,j.aY)()){let d=Date.now(),e=[...y(c)];for(let c of a){let a=e.findIndex(a=>a.id===c.id),f=c.path?.startsWith("generatedDocuments/assets/")||"generated"===c.status||"prompt_ready"===c.status?"generated":"knowledge_base",h={...c,name:g.basename(c.path||c.url||c.id),source:f,indexed:a>=0&&e[a].indexed,usedByDocumentIds:a>=0?[...new Set([...e[a].usedByDocumentIds,b])]:[b],createdAt:a>=0?e[a].createdAt:d,updatedAt:d};a>=0?e[a]={...e[a],...h}:e.push(h)}return r(n(c),e),e}(a.assets||[],e,b);for(let a of(await B(f,b).catch(a=>console.warn("[generated-documents] 自动入库生成文档失败",a)),h.filter(a=>a.usedByDocumentIds.includes(e)&&!a.indexed)))await C(a.id,b).catch(b=>console.warn("[generated-documents] 自动入库生成资源失败",a.id,b));return f}).catch(a=>{let c=t(e,b);return c&&"generating"===c.status?u({...c,status:"failed",error:a instanceof Error?a.message:String(a)},b):c??l}).finally(()=>{k.delete(f)});return k.set(f,{id:f,documentId:e,status:"generating",controller:m,promise:o}),{taskId:f,documentId:e,record:l}}},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},87550:a=>{a.exports=require("better-sqlite3")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,6697],()=>b(b.s=55883));module.exports=c})();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";(()=>{var a={};a.id=8644,a.ids=[8644],a.modules={15751:a=>{a.exports=require("xlsx")},17496:(a,b,c)=>{c.d(b,{j:()=>e});var d=c(49750);function e(a,b){return async function(c,e){try{await b(c,e)}catch(g){let f=(0,d.wF)({source:a,functionName:b.name||"anonymous",error:g,req:c});console.error(`[${a}]`,f.id,g),e.headersSent||e.status(500).json({error:g instanceof Error?g.message:"Internal server error",requestId:f.id})}}}(0,d.mG)()},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},29021:a=>{a.exports=require("fs")},31421:a=>{a.exports=require("node:child_process")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},49750:(a,b,c)=>{c.d(b,{hH:()=>p,mG:()=>r,cW:()=>o,wF:()=>n});var d=c(29021),e=c.n(d),f=c(21820),g=c.n(f),h=c(33873),i=c.n(h);let j=require("crypto");var k=c.n(j);let l=i().join(g().homedir(),".customize-agent","logs"),m=i().join(l,"errors.jsonl");function n(a){let{message:b,stack:c}=function(a){if(a instanceof Error)return{message:a.message,stack:a.stack};if("string"==typeof a)return{message:a};try{return{message:JSON.stringify(a)}}catch{return{message:String(a)}}}(a.error),d={id:`err_${Date.now()}_${k().randomBytes(4).toString("hex")}`,level:a.level||"error",source:a.source,functionName:a.functionName,message:b,stack:c,request:a.req?{method:a.req.method,url:a.req.url,query:a.req.query}:void 0,meta:a.meta,createdAt:Date.now()};try{e().mkdirSync(l,{recursive:!0}),function(){try{if(e().statSync(m).size<=2097152)return;e().renameSync(m,i().join(l,`errors-${Date.now()}.jsonl`))}catch{}}(),e().appendFileSync(m,`${JSON.stringify(d)}
|
|
2
|
-
`)}catch(a){console.error("[errorLogService] failed to write error log",a)}return d}function o(a=200){try{return e().readFileSync(m,"utf8").split("\n").filter(Boolean).slice(-a).reverse().map(a=>JSON.parse(a))}catch{return[]}}function p(){try{e().rmSync(m,{force:!0})}catch{}}let q=!1;function r(){q||(q=!0,process.on("uncaughtException",a=>{n({source:"process",functionName:"uncaughtException",error:a}),console.error("[process] uncaughtException",a)}),process.on("unhandledRejection",a=>{n({source:"process",functionName:"unhandledRejection",error:a}),console.error("[process] unhandledRejection",a)}))}},67461:(a,b,c)=>{c.d(b,{BH:()=>y,Gl:()=>l,JU:()=>A,Jz:()=>D,M$:()=>s,QG:()=>x,SE:()=>p,YL:()=>E,a6:()=>v,r:()=>w,uc:()=>C,v7:()=>t,yE:()=>z});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(56697),i=c(99842),j=c(23328);let k=new Map;function l(a=(0,j.aY)()){let b=g.join(f.homedir(),".customize-agent","projects",function(a=(0,j.aY)()){return d.createHash("sha1").update(g.resolve(a)).digest("hex").slice(0,12)}(a),"generatedDocuments");return e.mkdirSync(g.join(b,"drafts"),{recursive:!0}),e.mkdirSync(g.join(b,"assets"),{recursive:!0}),b}function m(a=(0,j.aY)()){return g.join(l(a),"index.json")}function n(a=(0,j.aY)()){return g.join(l(a),"assets.json")}function o(a,b=(0,j.aY)()){return g.join(l(b),"drafts",`${a}.json`)}function p(a,b=(0,j.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(l(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join(b,"knowledgeBase",a.path):null}function q(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function r(a,b){e.mkdirSync(g.dirname(a),{recursive:!0}),e.writeFileSync(a,JSON.stringify(b,null,2))}function s(a=(0,j.aY)()){return q(m(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function t(a,b=(0,j.aY)()){return q(o(a,b),null)}function u(a,b=(0,j.aY)()){let c=Date.now(),d={...a,updatedAt:c};r(o(d.id,b),d);let e=s(b).filter(a=>a.id!==d.id);return e.unshift(d),r(m(b),e.map(a=>({...a,draft:void 0,executionStages:a.executionStages}))),d}function v(a,b,c=(0,j.aY)()){let d=t(a,c);return d?u({...d,...b,id:a},c):null}function w(a,b=(0,j.aY)()){let c=t(a,b);if(!c||"generating"!==c.status)return null;for(let[b,c]of k)if(c.documentId===a){c.controller.abort(),k.delete(b);break}return u({...c,status:"failed",error:"用户中止",updatedAt:Date.now()},b)}function x(a,b=(0,j.aY)()){try{e.rmSync(o(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}r(m(b),s(b).filter(b=>b.id!==a))}function y(a=(0,j.aY)()){return q(n(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function z(a,b=(0,j.aY)()){return y(b).find(b=>b.id===a)||null}function A(a,b=(0,j.aY)()){let c=z(a,b);if(!c)return!1;let d=p(c,b);if(d&&d.startsWith(l(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return r(n(b),y(b).filter(b=>b.id!==a)),!0}async function B(a,b=(0,j.aY)()){let c=g.join("生成文档",`${a.title.replace(/[\\/:*?"<>|]/gu,"_").slice(0,120)||"generated-document"}-${a.id}.md`).split(g.sep).join("/"),d=g.join(b,"knowledgeBase",c);e.mkdirSync(g.dirname(d),{recursive:!0}),e.writeFileSync(d,a.editedMarkdown||a.markdown,"utf8");let f=await (0,j.Qh)().getProject(b);return await f.reindexFile(c),c}async function C(a,b=(0,j.aY)()){let c=z(a,b);if(!c?.path)return null;let d=p(c,b);if(!d||!e.existsSync(d))throw Error("asset file not found");let f=g.join("生成资源",g.basename(c.path)).split(g.sep).join("/"),h=g.join(b,"knowledgeBase",f);e.mkdirSync(g.dirname(h),{recursive:!0}),d!==h&&e.copyFileSync(d,h);let i=await (0,j.Qh)().getProject(b);await i.reindexFile(f);let k=y(b).map(b=>b.id===a?{...b,path:f,source:"generated",indexed:!0,updatedAt:Date.now()}:b);return r(n(b),k),k.find(b=>b.id===a)||null}function D(a,b,c=(0,j.aY)()){let d=z(a,c);if(!d)return null;let f=p(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function E(a,b=(0,j.aY)()){let c=Date.now(),e=`doc-${c}-${d.randomBytes(4).toString("hex")}`,f=`task-${c}-${d.randomBytes(4).toString("hex")}`,l={id:e,taskId:f,templateId:a.templateId,title:"生成中",requirement:a.requirement||"",markdown:"",status:"generating",assets:[],createdAt:c,updatedAt:c};u(l,b);let m=new AbortController,o=(0,h.OX)({...a,projectRoot:b,signal:m.signal,onProgress:a=>{try{let c=t(e,b);c&&"generating"===c.status&&(u({...c,executionStages:a},b),console.log(`[gen] progress saved: ${a.length} stages, doc=${e}`))}catch(a){console.error("[gen] progress save error:",a)}}}).then(async a=>{let c=t(e,b);if(!c||"generating"!==c.status)return c??l;let d=a.validationIssues.filter(a=>"error"===a.level||"warning"===a.level).map(a=>a.suggestion?`${a.message}:${a.suggestion}`:a.message),f=u(function(a){let b=a=>({...a,content:a.content.slice(0,500)}),c=a.draft?{...a.draft,chapters:a.draft.chapters.map(a=>({...a,evidence:a.evidence.map(b)}))}:a.draft;return{...a,draft:c}}({...c,templateName:a.templateName,title:a.title,markdown:a.markdown,status:d.length>0?"warning":"completed",draft:a,executionStages:a.executionStages,assets:a.assets||[],completedAt:Date.now(),warningIssues:d}),b);!function(a,b=(0,j.aY)()){let c=a.draft?.sources.slice(0,8).map(a=>a.filePath).join("、")||"无明确来源",d=a.warningIssues?.slice(0,5).join(";")||"无阻断问题";(0,i.i3)("project_fact",`文档《${a.title}》已基于模板“${a.templateName||a.templateId}”生成。用户要求:${a.requirement||"未填写"}。主要资料来源:${c}。校验结果:${d}。`,`Project: ${g.resolve(b)} | Generated document: ${a.id}`)}(f,b);let h=function(a,b,c=(0,j.aY)()){let d=Date.now(),e=[...y(c)];for(let c of a){let a=e.findIndex(a=>a.id===c.id),f=c.path?.startsWith("generatedDocuments/assets/")||"generated"===c.status||"prompt_ready"===c.status?"generated":"knowledge_base",h={...c,name:g.basename(c.path||c.url||c.id),source:f,indexed:a>=0&&e[a].indexed,usedByDocumentIds:a>=0?[...new Set([...e[a].usedByDocumentIds,b])]:[b],createdAt:a>=0?e[a].createdAt:d,updatedAt:d};a>=0?e[a]={...e[a],...h}:e.push(h)}return r(n(c),e),e}(a.assets||[],e,b);for(let a of(await B(f,b).catch(a=>console.warn("[generated-documents] 自动入库生成文档失败",a)),h.filter(a=>a.usedByDocumentIds.includes(e)&&!a.indexed)))await C(a.id,b).catch(b=>console.warn("[generated-documents] 自动入库生成资源失败",a.id,b));return f}).catch(a=>{let c=t(e,b);return c&&"generating"===c.status?u({...c,status:"failed",error:a instanceof Error?a.message:String(a)},b):c??l}).finally(()=>{k.delete(f)});return k.set(f,{id:f,documentId:e,status:"generating",controller:m,promise:o}),{taskId:f,documentId:e,record:l}}},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},83142:a=>{a.exports=import("marked")},83237:a=>{a.exports=import("playwright")},83258:(a,b,c)=>{c.r(b),c.d(b,{config:()=>Y,default:()=>X,handler:()=>$});var d={};c.r(d),c.d(d,{__documentExportTest__:()=>T,default:()=>U});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(31421),j=c(73024),k=c(48161),l=c(76760);let m=require("node:url"),n=require("node:util"),o=require("jszip");var p=c.n(o),q=c(67461),r=c(23328),s=c(49750),t=c(17496);function u(a){return a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,""")}let v=(0,n.promisify)(i.execFile),w={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif",".svg":"image/svg+xml"};function x(a){return w[l.extname(a).toLowerCase()]||""}function y(a,b){let c=l.relative(b,a);return!!c&&!c.startsWith("..")&&!l.isAbsolute(c)}function z(a,b=(0,r.aY)()){if(!a||/^(?:https?:|data:|file:|blob:|#)/iu.test(a))return null;let c=function(a){try{return decodeURIComponent(a.split(/[?#]/u)[0]||a)}catch{return""}}(a);if(!c||l.isAbsolute(c))return null;let d=l.resolve(b,"knowledgeBase"),e=l.resolve((0,q.Gl)(b),"assets");return[c.startsWith("generatedDocuments/assets/")?l.resolve(e,c.replace(/^generatedDocuments\/assets\//u,"")):"",l.resolve(d,c)].filter(Boolean).find(a=>{let b=l.resolve(a);return(y(b,d)||y(b,e))&&!!x(b)&&j.existsSync(b)&&j.statSync(b).isFile()})||null}function A(a,b=(0,r.aY)()){let c=new Map,d=0;return a.replace(/<img\b([^>]*?)\bsrc=["']([^"']+)["']([^>]*)>/giu,(a,e,f,g)=>{let h=z(f,b);if(!h)return a;let i=j.statSync(h);if(i.size>8388608||d+i.size>0x2000000)return a;let k=c.get(h);return k||(k=`data:${x(h)};base64,${j.readFileSync(h).toString("base64")}`,c.set(h,k),d+=i.size),`<img${e}src="${k}"${g}>`})}function B(a){return(function(a){let b=a.trim(),c=/^```(?:markdown|md)?\s*\n([\s\S]*?)\n```\s*$/iu.exec(b);return c?c[1].trim():a})(a).replace(/m\s*<sup>\s*2\s*<\/sup>/giu,"m\xb2").replace(/m\s*<sup>\s*3\s*<\/sup>/giu,"m\xb3").replace(/m\s*\^\s*2/giu,"m\xb2").replace(/m\s*\^\s*3/giu,"m\xb3").replace(/㎡/gu,"m\xb2").replace(/㎥/gu,"m\xb3").replace(/(?<=\d)m\s*2(?![\p{L}\p{N}_])/giu,"m\xb2").replace(/(?<=\d)m\s*3(?![\p{L}\p{N}_])/giu,"m\xb3").replace(/(?<![\p{L}\p{N}_])m\s*2(?![\p{L}\p{N}_])/giu,"m\xb2").replace(/(?<![\p{L}\p{N}_])m\s*3(?![\p{L}\p{N}_])/giu,"m\xb3")}function C(a){return B(a).replace(/!\[[^\]]*\]\([^)]*\)/gu,"").replace(/\[([^\]]+)\]\([^)]*\)/gu,"$1").replace(/[*_`]/gu,"").replace(/<br\s*\/?>/giu,"\n").replace(/<[^>]+>/gu,"").trim()}function D(a,b){let c=/([\d.]+)\s*(pt|px)?/iu.exec(a||"");if(!c)return b;let d=Number(c[1]);return Number.isFinite(d)?c[2]?.toLowerCase()==="px"?.75*d:d:b}function E(a,b){return`${D(a,b)}pt`}function F(a,b){let c=/([\d.]+)\s*(cm|mm|in|pt)?/iu.exec(a||"");if(!c)return Math.round(567*b);let d=Number(c[1]);if(!Number.isFinite(d))return Math.round(567*b);let e=(c[2]||"cm").toLowerCase();return"mm"===e?Math.round(56.7*d):"in"===e?Math.round(1440*d):"pt"===e?Math.round(20*d):Math.round(567*d)}function G(a){let b=L(a),c=D(b.bodySize,14),d=D(b.titleSize,16),e=D(b.lineHeight,22);return{...b,bodyPt:c,titlePt:d,linePt:e,bodyHalfPoints:Math.round(2*c),titleHalfPoints:Math.round(2*d),lineTwips:Math.round(20*e),fontEastAsia:"宋体",fontAscii:"SimSun",bodyCss:`${c}pt`,titleCss:`${d}pt`,lineCss:`${e}pt`}}function H(a,b={}){if(b.pageBreak)return'<w:p><w:r><w:br w:type="page"/></w:r></w:p>';let c=[b.indentLeft?`w:left="${b.indentLeft}"`:"",b.firstLine?`w:firstLine="${b.firstLine}"`:""].filter(Boolean).join(" "),d=[b.keepNext?"<w:keepNext/>":"",b.align?`<w:jc w:val="${b.align}"/>`:"",c?`<w:ind ${c}/>`:"",`<w:spacing w:line="${b.line??440}" w:lineRule="exact" w:before="${b.spacingBefore??0}" w:after="${b.spacingAfter??120}"/>`].filter(Boolean).join("");return`<w:p><w:pPr>${d}</w:pPr>${function(a,b={}){let c=b.fontEastAsia||"宋体",d=b.fontAscii||"SimSun",e=[`<w:rFonts w:ascii="${u(d)}" w:hAnsi="${u(d)}" w:eastAsia="${u(c)}" w:cs="${u(d)}"/>`,b.bold?"<w:b/>":"",b.size?`<w:sz w:val="${b.size}"/><w:szCs w:val="${b.size}"/>`:""].filter(Boolean).join("");return`<w:r><w:rPr>${e}</w:rPr><w:t xml:space="preserve">${u(a)}</w:t></w:r>`}(a,b)}</w:p>`}function I(a){let b=G(a);return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:docDefaults><w:rPrDefault><w:rPr><w:rFonts w:ascii="${u(b.fontAscii)}" w:hAnsi="${u(b.fontAscii)}" w:eastAsia="${u(b.fontEastAsia)}" w:cs="${u(b.fontAscii)}"/><w:sz w:val="${b.bodyHalfPoints}"/><w:szCs w:val="${b.bodyHalfPoints}"/></w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:line="${b.lineTwips}" w:lineRule="exact" w:after="120"/></w:pPr></w:pPrDefault></w:docDefaults><w:style w:type="paragraph" w:default="1" w:styleId="Normal"><w:name w:val="Normal"/><w:qFormat/><w:rPr><w:rFonts w:ascii="${u(b.fontAscii)}" w:hAnsi="${u(b.fontAscii)}" w:eastAsia="${u(b.fontEastAsia)}" w:cs="${u(b.fontAscii)}"/><w:sz w:val="${b.bodyHalfPoints}"/><w:szCs w:val="${b.bodyHalfPoints}"/></w:rPr><w:pPr><w:spacing w:line="${b.lineTwips}" w:lineRule="exact" w:after="120"/></w:pPr></w:style><w:style w:type="paragraph" w:styleId="Heading1"><w:name w:val="heading 1"/><w:basedOn w:val="Normal"/><w:qFormat/><w:rPr><w:b/><w:rFonts w:ascii="${u(b.fontAscii)}" w:hAnsi="${u(b.fontAscii)}" w:eastAsia="${u(b.fontEastAsia)}" w:cs="${u(b.fontAscii)}"/><w:sz w:val="${b.titleHalfPoints}"/><w:szCs w:val="${b.titleHalfPoints}"/></w:rPr><w:pPr><w:spacing w:line="${b.lineTwips}" w:lineRule="exact" w:after="160"/></w:pPr></w:style></w:styles>`}async function J(a,b,c,d){let e=function(a,b){let c=G(b),d=c.titleHalfPoints,e=c.bodyHalfPoints,f=B(a).replace(/<div class="page-break"><\/div>/gu,"\n[[PAGE_BREAK]]\n").split("\n"),g=[],h=!1,i=!1;for(let a=0;a<f.length;){let b=f[a].trim();if(!b){a+=1;continue}if(/<div\s+class=["']document-cover["']\s*>/iu.test(b)){i=!0,a+=1;continue}if(i&&/^<\/div>$/iu.test(b)){i=!1,a+=1;continue}if("[[PAGE_BREAK]]"===b){h=!1,i=!1,g.push(H("",{pageBreak:!0})),a+=1;continue}if(i){let e=C(b.replace(/^#\s+/u,""));e&&g.push(H(e,{bold:!0,size:Math.max(d+8,44),line:Math.round(1.15*c.lineTwips),fontEastAsia:c.fontEastAsia,fontAscii:c.fontAscii,align:"center",spacingBefore:360,spacingAfter:220})),a+=1;continue}let k=function(a,b){if(b+1>=a.length||!/^\s*\|?.+\|\s*$/u.test(a[b])||!/^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a[b+1]))return null;let c=[],d=b;for(;d<a.length&&/^\s*\|?.+\|\s*$/u.test(a[d]);)d!==b+1&&c.push(a[d].trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>C(a))),d+=1;return{rows:c,next:d}}(f,a);if(k){g.push(function(a,b){return`<w:tbl><w:tblPr><w:tblW w:w="5000" w:type="pct"/><w:tblLook w:firstRow="1" w:noHBand="0"/><w:tblBorders><w:top w:val="single" w:sz="6" w:color="666666"/><w:left w:val="single" w:sz="6" w:color="666666"/><w:bottom w:val="single" w:sz="6" w:color="666666"/><w:right w:val="single" w:sz="6" w:color="666666"/><w:insideH w:val="single" w:sz="4" w:color="666666"/><w:insideV w:val="single" w:sz="4" w:color="666666"/></w:tblBorders></w:tblPr>${a.map((a,c)=>`<w:tr>${a.map(a=>`<w:tc><w:tcPr><w:tcW w:w="0" w:type="auto"/><w:tcMar><w:top w:w="80" w:type="dxa"/><w:left w:w="100" w:type="dxa"/><w:bottom w:w="80" w:type="dxa"/><w:right w:w="100" w:type="dxa"/></w:tcMar>${0===c?'<w:shd w:fill="F3F4F6"/>':""}</w:tcPr>${H(a,{bold:0===c,size:b.bodyHalfPoints,line:b.lineTwips,fontEastAsia:b.fontEastAsia,fontAscii:b.fontAscii,spacingAfter:0,align:0===c?"center":void 0})}</w:tc>`).join("")}</w:tr>`).join("")}</w:tbl>`}(k.rows,c),H("",{spacingAfter:80,line:c.lineTwips})),a=k.next;continue}let l=/^(#{1,4})\s+(.+)$/u.exec(b);if(l){var j;let b=C(l[2]);h="目录"===b,g.push((j=l[1].length,2===j?H(b,{bold:!0,size:Math.max(c.titleHalfPoints+4,36),line:c.lineTwips,fontEastAsia:c.fontEastAsia,fontAscii:c.fontAscii,align:"center",spacingBefore:260,spacingAfter:180,keepNext:!0}):3===j?H(b,{bold:!0,size:Math.max(c.titleHalfPoints,32),line:c.lineTwips,fontEastAsia:c.fontEastAsia,fontAscii:c.fontAscii,spacingBefore:180,spacingAfter:100,keepNext:!0}):H(b,{bold:!0,size:Math.max(c.bodyHalfPoints,28),line:c.lineTwips,fontEastAsia:c.fontEastAsia,fontAscii:c.fontAscii,spacingBefore:120,spacingAfter:80,keepNext:!0}))),a+=1;continue}let m=C(b),n=/^\*\*[^*]+\*\*\s*[::]?\s*$/u.test(b)||/^([一二三四五六七八九十]+)/u.test(m)||/^[一二三四五六七八九十]+、/u.test(m);g.push(h?function(a,b){let c=/^\s*\d+\.\d+\s+\S/u.test(a);return H(C(a),{bold:!c,size:b.bodyHalfPoints,line:b.lineTwips,fontEastAsia:b.fontEastAsia,fontAscii:b.fontAscii,spacingAfter:c?30:80,indentLeft:420*!!c,align:"left"})}(b,c):H(m,{bold:n,size:e,line:c.lineTwips,fontEastAsia:c.fontEastAsia,fontAscii:c.fontAscii,firstLine:560*!n,spacingBefore:80*!!n})),a+=1}return g.join("")}(b,c);if(d&&j.existsSync(d)){let b=await p().loadAsync(j.readFileSync(d)),f=b.file("word/document.xml");if(f){let d=await f.async("string");b.file("word/document.xml",d.replace(/\{\{title\}\}/gu,u(a)).replace(/\{\{content\}\}/gu,e)),b.file("word/styles.xml",I(c));let g="word/_rels/document.xml.rels",h=b.file(g);if(h){let a=await h.async("string");a.includes("officeDocument/2006/relationships/styles")||b.file(g,a.replace("</Relationships>",'<Relationship Id="rStyle" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/></Relationships>'))}else b.folder("word")?.folder("_rels")?.file("document.xml.rels",'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rStyle" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/></Relationships>');let i=b.file("[Content_Types].xml");if(i){let a=await i.async("string");a.includes("/word/styles.xml")||b.file("[Content_Types].xml",a.replace("</Types>",'<Override PartName="/word/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"/></Types>'))}return b.generateAsync({type:"nodebuffer"})}}let f=c?.page||{},g=new(p());return g.file("[Content_Types].xml",'<?xml version="1.0" encoding="UTF-8"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/word/document.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/><Override PartName="/word/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"/></Types>'),g.folder("_rels")?.file(".rels",'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/></Relationships>'),g.folder("word")?.folder("_rels")?.file("document.xml.rels",'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rStyle" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/></Relationships>'),g.folder("word")?.file("styles.xml",I(c)),g.folder("word")?.file("document.xml",`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:body>${e}<w:sectPr><w:pgSz w:w="11906" w:h="16838"/><w:pgMar w:top="${F(f.marginTop,2.5)}" w:right="${F(f.marginRight,2)}" w:bottom="${F(f.marginBottom,2)}" w:left="${F(f.marginLeft,2)}"/></w:sectPr></w:body></w:document>`),g.generateAsync({type:"nodebuffer"})}function K(a,b){return a&&/^[\w\s\u4e00-\u9fa5,"'().-]+$/u.test(a)?a:b}function L(a){let b=a?.page||{},c=a?.typography||{},d=K(b.paper,"A4"),e=K(b.marginTop,"24mm"),f=K(b.marginRight,"18mm"),g=K(b.marginBottom,"22mm"),h=K(b.marginLeft,"18mm"),i=K(c.fontFamily,"SimSun, 宋体, serif"),j=E(c.lineHeight,22);return{paper:d,marginTop:e,marginRight:f,marginBottom:g,marginLeft:h,fontFamily:i,lineHeight:j,titleSize:E(c.titleSize,16),bodySize:E(c.bodySize,14)}}function M(a){return a.replace(/(<h2[^>]*>\s*目录\s*<\/h2>)([\s\S]*?)(<div class="page-break"><\/div>)/u,(a,b,c,d)=>{let e=c.replace(/<ol>\s*([\s\S]*?)\s*<\/ol>/u,(a,b)=>b).replace(/<li>\s*([^<]+?)\s*<\/li>/gu,"<p>$1</p>").replace(/<p>(?:\s| | )*(\d+\.\d+\s+[^<]+)<\/p>/giu,'<p class="toc-section">$1</p>').replace(/<p>(?!(?:\s| | )*<\/p>|(?:\s| | )*\d+\.\d+\s)([\s\S]*?)<\/p>/giu,'<p class="toc-chapter">$1</p>');return`<section class="document-toc">${b}${e}</section>${d}`})}function N(a){let b=a.message.trim();return!/^(事实冲突|必需章节缺失):/u.test(b)&&/出现禁用文本\s*(资料未提供|占位|TODO|TBD)|正文包含.*(资料未提供|占位)|图片、地图或附件引用路径明显无效|无效路径|表格语法错误|临时远程生成 URL|提示词全文|内部错误|生成未完成|低于目标页数|缺少配置小节|缺少必要的正式表格|正文缺少章节标题/iu.test(b)}function O(a){return{chars:a.trim().length,h2:(a.match(/^##\s+/gmu)||[]).length,h3:(a.match(/^###\s+/gmu)||[]).length,tables:(a.match(/\n\s*\|\s*:?-{3,}/gu)||[]).length}}function P(){let a=[process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH,process.env.CHROME_PATH].filter(Boolean),b=k.homedir();return[...new Set([...a,..."darwin"===process.platform?["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Chromium.app/Contents/MacOS/Chromium","/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge","/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",l.join(b,"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),l.join(b,"Applications/Chromium.app/Contents/MacOS/Chromium")]:"win32"===process.platform?[l.join(process.env.PROGRAMFILES||"C:\\Program Files","Google/Chrome/Application/chrome.exe"),l.join(process.env["PROGRAMFILES(X86)"]||"C:\\Program Files (x86)","Google/Chrome/Application/chrome.exe"),l.join(process.env.LOCALAPPDATA||"","Google/Chrome/Application/chrome.exe"),l.join(process.env.PROGRAMFILES||"C:\\Program Files","Microsoft/Edge/Application/msedge.exe")]:["/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/usr/bin/chromium","/usr/bin/chromium-browser","/snap/bin/chromium","/usr/bin/microsoft-edge"]].filter(a=>a&&j.existsSync(a)))]}async function Q(a,b,c){let d=j.mkdtempSync(l.join(k.tmpdir(),"customize-agent-pdf-")),e=l.join(d,"document.html"),f=l.join(d,"document.pdf"),g=l.join(d,"profile");j.writeFileSync(e,a,"utf-8");try{let a=L(c),d=(0,m.pathToFileURL)(e).href,h=["--disable-gpu","--no-sandbox","--disable-setuid-sandbox",`--user-data-dir=${g}`,`--print-to-pdf=${f}`,`--print-to-pdf-page-size=${a.paper}`,d],i=[];for(let a of["--headless=new","--headless"])try{if(await v(b,[a,...h],{timeout:3e4,maxBuffer:1048576}),j.existsSync(f)&&j.statSync(f).size>=1024)return j.readFileSync(f);i.push(`${a}: browser command did not produce a valid PDF`)}catch(b){i.push(`${a}: ${b instanceof Error?b.message:String(b)}`)}throw Error(i.join("\n"))}finally{j.rmSync(d,{recursive:!0,force:!0})}}async function R(a,b){let{chromium:d}=await Promise.resolve().then(c.bind(c,83237)),e=[{label:"playwright-bundled-chromium",options:{headless:!0,args:["--no-sandbox","--disable-setuid-sandbox"]}},{label:"system-chrome-channel",options:{channel:"chrome",headless:!0,args:["--no-sandbox","--disable-setuid-sandbox"]}},{label:"system-msedge-channel",options:{channel:"msedge",headless:!0,args:["--no-sandbox","--disable-setuid-sandbox"]}},...P().map(a=>({label:a,options:{executablePath:a,headless:!0,args:["--no-sandbox","--disable-setuid-sandbox"]}}))],f=[];for(let c of e)try{let e=await d.launch(c.options);try{let c=await e.newPage({locale:"zh-CN"});await c.setContent(a,{waitUntil:"load"}),await c.waitForFunction(()=>Array.from(document.images).every(a=>a.complete),void 0,{timeout:1e4}).catch(()=>void 0),await c.emulateMedia({media:"print"});let d=G(b),f=await c.pdf({format:d.paper,printBackground:!0,preferCSSPageSize:!0,margin:{top:d.marginTop,right:d.marginRight,bottom:d.marginBottom,left:d.marginLeft},displayHeaderFooter:!0,headerTemplate:"<div></div>",footerTemplate:`<div style="font-family:${d.fontFamily};font-size:10.5pt;line-height:12pt;width:100%;text-align:center;color:#666;">第 <span class="pageNumber"></span> 页 / 共 <span class="totalPages"></span> 页</div>`});return Buffer.from(f)}finally{await e.close()}}catch(a){f.push(`${c.label}: ${a instanceof Error?a.message:String(a)}`)}for(let c of P())try{return await Q(a,c,b)}catch(a){f.push(`browser-command ${c}: ${a instanceof Error?a.message:String(a)}`)}throw Error(f.join("\n"))}async function S(a,b){if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});let d=a.body,e=d.documentId?(0,q.v7)(d.documentId):null;if(d.documentId&&!e)return b.status(404).json({error:"Document not found"});let f=d.title||e?.title||"document",g=e?.editedMarkdown||e?.markdown||e?.draft?.markdown||"",h=B(d.useClientMarkdown&&"string"==typeof d.markdown?d.markdown:g||d.markdown||""),i=d.format;if(!i||!["markdown","html","pdf","docx"].includes(i))return b.status(400).json({error:"INVALID_EXPORT_FORMAT",message:"请选择有效的导出格式。"});let j=function(a,b){let c=O(a),d=b?O(b):void 0,e=[];return c.chars<200&&e.push("导出内容为空或过短"),d&&d.chars>1e3&&c.chars<.8*d.chars&&e.push("导出内容明显少于服务端生成记录"),d&&d.h3>0&&0===c.h3&&e.push("导出内容缺少服务端生成记录中的二级小节"),d&&d.tables>0&&0===c.tables&&e.push("导出内容缺少服务端生成记录中的表格"),e}(h,B(e?.draft?.markdown||e?.markdown||""));if(j.length)return b.status(422).json({error:"EXPORT_CONTENT_INVALID",issues:j});let k=e?.draft?.exportGate||d.exportGate,l=k?.blockingIssues?.filter(N)||[];if(d.enforceGate&&l.length)return b.status(422).json({error:"Export gate failed",issues:l});let m=f.replace(/[\\/:*?"<>|]/gu,"-").slice(0,80)||"document";if("markdown"===i)return b.setHeader("Content-Type","text/markdown; charset=utf-8"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${m}.md`)}`),b.status(200).send(h);if("docx"===i){let a=await J(f,h,e?.draft?.exportSettings,d.wordTemplatePath);return b.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${m}.docx`)}`),b.status(200).send(a)}let{marked:n}=await Promise.resolve().then(c.bind(c,83142)),o=(0,r.aY)(),p=e?.draft?.exportSettings,t=A(function(a,b,c){let d=G(c),e=M(b);return`<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><title>${u(a)}</title><style>
|
|
2
|
+
`)}catch(a){console.error("[errorLogService] failed to write error log",a)}return d}function o(a=200){try{return e().readFileSync(m,"utf8").split("\n").filter(Boolean).slice(-a).reverse().map(a=>JSON.parse(a))}catch{return[]}}function p(){try{e().rmSync(m,{force:!0})}catch{}}let q=!1;function r(){q||(q=!0,process.on("uncaughtException",a=>{n({source:"process",functionName:"uncaughtException",error:a}),console.error("[process] uncaughtException",a)}),process.on("unhandledRejection",a=>{n({source:"process",functionName:"unhandledRejection",error:a}),console.error("[process] unhandledRejection",a)}))}},67461:(a,b,c)=>{c.d(b,{BH:()=>y,Gl:()=>l,JU:()=>A,Jz:()=>D,M$:()=>s,QG:()=>x,SE:()=>p,YL:()=>E,a6:()=>v,r:()=>w,uc:()=>C,v7:()=>t,yE:()=>z});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(56697),i=c(99842),j=c(23328);let k=new Map;function l(a=(0,j.aY)()){let b=g.join(f.homedir(),".customize-agent","projects",function(a=(0,j.aY)()){return d.createHash("sha1").update(g.resolve(a)).digest("hex").slice(0,12)}(a),"generatedDocuments");return e.mkdirSync(g.join(b,"drafts"),{recursive:!0}),e.mkdirSync(g.join(b,"assets"),{recursive:!0}),b}function m(a=(0,j.aY)()){return g.join(l(a),"index.json")}function n(a=(0,j.aY)()){return g.join(l(a),"assets.json")}function o(a,b=(0,j.aY)()){return g.join(l(b),"drafts",`${a}.json`)}function p(a,b=(0,j.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(l(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join(b,"knowledgeBase",a.path):null}function q(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function r(a,b){e.mkdirSync(g.dirname(a),{recursive:!0}),e.writeFileSync(a,JSON.stringify(b,null,2))}function s(a=(0,j.aY)()){return q(m(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function t(a,b=(0,j.aY)()){return q(o(a,b),null)}function u(a,b=(0,j.aY)()){let c=Date.now(),d={...a,updatedAt:c};r(o(d.id,b),d);let e=s(b).filter(a=>a.id!==d.id);return e.unshift(d),r(m(b),e.map(a=>({...a,draft:void 0,executionStages:a.executionStages}))),d}function v(a,b,c=(0,j.aY)()){let d=t(a,c);return d?u({...d,...b,id:a},c):null}function w(a,b=(0,j.aY)()){let c=t(a,b);if(!c||"generating"!==c.status)return null;for(let[b,c]of k)if(c.documentId===a){c.controller.abort(),k.delete(b);break}return u({...c,status:"failed",error:"用户中止",updatedAt:Date.now()},b)}function x(a,b=(0,j.aY)()){try{e.rmSync(o(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}r(m(b),s(b).filter(b=>b.id!==a))}function y(a=(0,j.aY)()){return q(n(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function z(a,b=(0,j.aY)()){return y(b).find(b=>b.id===a)||null}function A(a,b=(0,j.aY)()){let c=z(a,b);if(!c)return!1;let d=p(c,b);if(d&&d.startsWith(l(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return r(n(b),y(b).filter(b=>b.id!==a)),!0}async function B(a,b=(0,j.aY)()){let c=g.join("生成文档",`${a.title.replace(/[\\/:*?"<>|]/gu,"_").slice(0,120)||"generated-document"}-${a.id}.md`).split(g.sep).join("/"),d=g.join(b,"knowledgeBase",c);e.mkdirSync(g.dirname(d),{recursive:!0}),e.writeFileSync(d,a.editedMarkdown||a.markdown,"utf8");let f=await (0,j.Qh)().getProject(b);return await f.reindexFile(c),c}async function C(a,b=(0,j.aY)()){let c=z(a,b);if(!c?.path)return null;let d=p(c,b);if(!d||!e.existsSync(d))throw Error("asset file not found");let f=g.join("生成资源",g.basename(c.path)).split(g.sep).join("/"),h=g.join(b,"knowledgeBase",f);e.mkdirSync(g.dirname(h),{recursive:!0}),d!==h&&e.copyFileSync(d,h);let i=await (0,j.Qh)().getProject(b);await i.reindexFile(f);let k=y(b).map(b=>b.id===a?{...b,path:f,source:"generated",indexed:!0,updatedAt:Date.now()}:b);return r(n(b),k),k.find(b=>b.id===a)||null}function D(a,b,c=(0,j.aY)()){let d=z(a,c);if(!d)return null;let f=p(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function E(a,b=(0,j.aY)()){let c=Date.now(),e=`doc-${c}-${d.randomBytes(4).toString("hex")}`,f=`task-${c}-${d.randomBytes(4).toString("hex")}`,l={id:e,taskId:f,templateId:a.templateId,title:"生成中",requirement:a.requirement||"",markdown:"",status:"generating",assets:[],createdAt:c,updatedAt:c};u(l,b);let m=new AbortController,o=(0,h.OX)({...a,projectRoot:b,signal:m.signal,onProgress:a=>{try{let c=t(e,b);c&&"generating"===c.status&&(u({...c,executionStages:a},b),console.log(`[gen] progress saved: ${a.length} stages, doc=${e}`))}catch(a){console.error("[gen] progress save error:",a)}}}).then(async a=>{let c=t(e,b);if(!c||"generating"!==c.status)return c??l;let d=a.validationIssues.filter(a=>"error"===a.level||"warning"===a.level).map(a=>a.suggestion?`${a.message}:${a.suggestion}`:a.message);a.exportGate.passed||0!==d.length||d.push("导出门禁未通过:存在未完成的检查项");let f=u(function(a){let b=a=>({...a,content:a.content.slice(0,500)}),c=a.draft?{...a.draft,chapters:a.draft.chapters.map(a=>({...a,evidence:a.evidence.map(b)}))}:a.draft;return{...a,draft:c}}({...c,templateName:a.templateName,title:a.title,markdown:a.markdown,status:d.length>0?"warning":"completed",draft:a,executionStages:a.executionStages,assets:a.assets||[],completedAt:Date.now(),warningIssues:d}),b);!function(a,b=(0,j.aY)()){let c=a.draft?.sources.slice(0,8).map(a=>a.filePath).join("、")||"无明确来源",d=a.warningIssues?.slice(0,5).join(";")||"无阻断问题";(0,i.i3)("project_fact",`文档《${a.title}》已基于模板“${a.templateName||a.templateId}”生成。用户要求:${a.requirement||"未填写"}。主要资料来源:${c}。校验结果:${d}。`,`Project: ${g.resolve(b)} | Generated document: ${a.id}`)}(f,b);let h=function(a,b,c=(0,j.aY)()){let d=Date.now(),e=[...y(c)];for(let c of a){let a=e.findIndex(a=>a.id===c.id),f=c.path?.startsWith("generatedDocuments/assets/")||"generated"===c.status||"prompt_ready"===c.status?"generated":"knowledge_base",h={...c,name:g.basename(c.path||c.url||c.id),source:f,indexed:a>=0&&e[a].indexed,usedByDocumentIds:a>=0?[...new Set([...e[a].usedByDocumentIds,b])]:[b],createdAt:a>=0?e[a].createdAt:d,updatedAt:d};a>=0?e[a]={...e[a],...h}:e.push(h)}return r(n(c),e),e}(a.assets||[],e,b);for(let a of(await B(f,b).catch(a=>console.warn("[generated-documents] 自动入库生成文档失败",a)),h.filter(a=>a.usedByDocumentIds.includes(e)&&!a.indexed)))await C(a.id,b).catch(b=>console.warn("[generated-documents] 自动入库生成资源失败",a.id,b));return f}).catch(a=>{let c=t(e,b);return c&&"generating"===c.status?u({...c,status:"failed",error:a instanceof Error?a.message:String(a)},b):c??l}).finally(()=>{k.delete(f)});return k.set(f,{id:f,documentId:e,status:"generating",controller:m,promise:o}),{taskId:f,documentId:e,record:l}}},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},83142:a=>{a.exports=import("marked")},83237:a=>{a.exports=import("playwright")},83258:(a,b,c)=>{c.r(b),c.d(b,{config:()=>Y,default:()=>X,handler:()=>$});var d={};c.r(d),c.d(d,{__documentExportTest__:()=>T,default:()=>U});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(31421),j=c(73024),k=c(48161),l=c(76760);let m=require("node:url"),n=require("node:util"),o=require("jszip");var p=c.n(o),q=c(67461),r=c(23328),s=c(49750),t=c(17496);function u(a){return a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,""")}let v=(0,n.promisify)(i.execFile),w={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif",".svg":"image/svg+xml"};function x(a){return w[l.extname(a).toLowerCase()]||""}function y(a,b){let c=l.relative(b,a);return!!c&&!c.startsWith("..")&&!l.isAbsolute(c)}function z(a,b=(0,r.aY)()){if(!a||/^(?:https?:|data:|file:|blob:|#)/iu.test(a))return null;let c=function(a){try{return decodeURIComponent(a.split(/[?#]/u)[0]||a)}catch{return""}}(a);if(!c||l.isAbsolute(c))return null;let d=l.resolve(b,"knowledgeBase"),e=l.resolve((0,q.Gl)(b),"assets");return[c.startsWith("generatedDocuments/assets/")?l.resolve(e,c.replace(/^generatedDocuments\/assets\//u,"")):"",l.resolve(d,c)].filter(Boolean).find(a=>{let b=l.resolve(a);return(y(b,d)||y(b,e))&&!!x(b)&&j.existsSync(b)&&j.statSync(b).isFile()})||null}function A(a,b=(0,r.aY)()){let c=new Map,d=0;return a.replace(/<img\b([^>]*?)\bsrc=["']([^"']+)["']([^>]*)>/giu,(a,e,f,g)=>{let h=z(f,b);if(!h)return a;let i=j.statSync(h);if(i.size>8388608||d+i.size>0x2000000)return a;let k=c.get(h);return k||(k=`data:${x(h)};base64,${j.readFileSync(h).toString("base64")}`,c.set(h,k),d+=i.size),`<img${e}src="${k}"${g}>`})}function B(a){return(function(a){let b=a.trim(),c=/^```(?:markdown|md)?\s*\n([\s\S]*?)\n```\s*$/iu.exec(b);return c?c[1].trim():a})(a).replace(/m\s*<sup>\s*2\s*<\/sup>/giu,"m\xb2").replace(/m\s*<sup>\s*3\s*<\/sup>/giu,"m\xb3").replace(/m\s*\^\s*2/giu,"m\xb2").replace(/m\s*\^\s*3/giu,"m\xb3").replace(/㎡/gu,"m\xb2").replace(/㎥/gu,"m\xb3").replace(/(?<=\d)m\s*2(?![\p{L}\p{N}_])/giu,"m\xb2").replace(/(?<=\d)m\s*3(?![\p{L}\p{N}_])/giu,"m\xb3").replace(/(?<![\p{L}\p{N}_])m\s*2(?![\p{L}\p{N}_])/giu,"m\xb2").replace(/(?<![\p{L}\p{N}_])m\s*3(?![\p{L}\p{N}_])/giu,"m\xb3")}function C(a){return B(a).replace(/!\[[^\]]*\]\([^)]*\)/gu,"").replace(/\[([^\]]+)\]\([^)]*\)/gu,"$1").replace(/[*_`]/gu,"").replace(/<br\s*\/?>/giu,"\n").replace(/<[^>]+>/gu,"").trim()}function D(a,b){let c=/([\d.]+)\s*(pt|px)?/iu.exec(a||"");if(!c)return b;let d=Number(c[1]);return Number.isFinite(d)?c[2]?.toLowerCase()==="px"?.75*d:d:b}function E(a,b){return`${D(a,b)}pt`}function F(a,b){let c=/([\d.]+)\s*(cm|mm|in|pt)?/iu.exec(a||"");if(!c)return Math.round(567*b);let d=Number(c[1]);if(!Number.isFinite(d))return Math.round(567*b);let e=(c[2]||"cm").toLowerCase();return"mm"===e?Math.round(56.7*d):"in"===e?Math.round(1440*d):"pt"===e?Math.round(20*d):Math.round(567*d)}function G(a){let b=L(a),c=D(b.bodySize,14),d=D(b.titleSize,16),e=D(b.lineHeight,22);return{...b,bodyPt:c,titlePt:d,linePt:e,bodyHalfPoints:Math.round(2*c),titleHalfPoints:Math.round(2*d),lineTwips:Math.round(20*e),fontEastAsia:"宋体",fontAscii:"SimSun",bodyCss:`${c}pt`,titleCss:`${d}pt`,lineCss:`${e}pt`}}function H(a,b={}){if(b.pageBreak)return'<w:p><w:r><w:br w:type="page"/></w:r></w:p>';let c=[b.indentLeft?`w:left="${b.indentLeft}"`:"",b.firstLine?`w:firstLine="${b.firstLine}"`:""].filter(Boolean).join(" "),d=[b.keepNext?"<w:keepNext/>":"",b.align?`<w:jc w:val="${b.align}"/>`:"",c?`<w:ind ${c}/>`:"",`<w:spacing w:line="${b.line??440}" w:lineRule="exact" w:before="${b.spacingBefore??0}" w:after="${b.spacingAfter??120}"/>`].filter(Boolean).join("");return`<w:p><w:pPr>${d}</w:pPr>${function(a,b={}){let c=b.fontEastAsia||"宋体",d=b.fontAscii||"SimSun",e=[`<w:rFonts w:ascii="${u(d)}" w:hAnsi="${u(d)}" w:eastAsia="${u(c)}" w:cs="${u(d)}"/>`,b.bold?"<w:b/>":"",b.size?`<w:sz w:val="${b.size}"/><w:szCs w:val="${b.size}"/>`:""].filter(Boolean).join("");return`<w:r><w:rPr>${e}</w:rPr><w:t xml:space="preserve">${u(a)}</w:t></w:r>`}(a,b)}</w:p>`}function I(a){let b=G(a);return`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:styles xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:docDefaults><w:rPrDefault><w:rPr><w:rFonts w:ascii="${u(b.fontAscii)}" w:hAnsi="${u(b.fontAscii)}" w:eastAsia="${u(b.fontEastAsia)}" w:cs="${u(b.fontAscii)}"/><w:sz w:val="${b.bodyHalfPoints}"/><w:szCs w:val="${b.bodyHalfPoints}"/></w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:line="${b.lineTwips}" w:lineRule="exact" w:after="120"/></w:pPr></w:pPrDefault></w:docDefaults><w:style w:type="paragraph" w:default="1" w:styleId="Normal"><w:name w:val="Normal"/><w:qFormat/><w:rPr><w:rFonts w:ascii="${u(b.fontAscii)}" w:hAnsi="${u(b.fontAscii)}" w:eastAsia="${u(b.fontEastAsia)}" w:cs="${u(b.fontAscii)}"/><w:sz w:val="${b.bodyHalfPoints}"/><w:szCs w:val="${b.bodyHalfPoints}"/></w:rPr><w:pPr><w:spacing w:line="${b.lineTwips}" w:lineRule="exact" w:after="120"/></w:pPr></w:style><w:style w:type="paragraph" w:styleId="Heading1"><w:name w:val="heading 1"/><w:basedOn w:val="Normal"/><w:qFormat/><w:rPr><w:b/><w:rFonts w:ascii="${u(b.fontAscii)}" w:hAnsi="${u(b.fontAscii)}" w:eastAsia="${u(b.fontEastAsia)}" w:cs="${u(b.fontAscii)}"/><w:sz w:val="${b.titleHalfPoints}"/><w:szCs w:val="${b.titleHalfPoints}"/></w:rPr><w:pPr><w:spacing w:line="${b.lineTwips}" w:lineRule="exact" w:after="160"/></w:pPr></w:style></w:styles>`}async function J(a,b,c,d){let e=function(a,b){let c=G(b),d=c.titleHalfPoints,e=c.bodyHalfPoints,f=B(a).replace(/<div class="page-break"><\/div>/gu,"\n[[PAGE_BREAK]]\n").split("\n"),g=[],h=!1,i=!1;for(let a=0;a<f.length;){let b=f[a].trim();if(!b){a+=1;continue}if(/<div\s+class=["']document-cover["']\s*>/iu.test(b)){i=!0,a+=1;continue}if(i&&/^<\/div>$/iu.test(b)){i=!1,a+=1;continue}if("[[PAGE_BREAK]]"===b){h=!1,i=!1,g.push(H("",{pageBreak:!0})),a+=1;continue}if(i){let e=C(b.replace(/^#\s+/u,""));e&&g.push(H(e,{bold:!0,size:Math.max(d+8,44),line:Math.round(1.15*c.lineTwips),fontEastAsia:c.fontEastAsia,fontAscii:c.fontAscii,align:"center",spacingBefore:360,spacingAfter:220})),a+=1;continue}let k=function(a,b){if(b+1>=a.length||!/^\s*\|?.+\|\s*$/u.test(a[b])||!/^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/u.test(a[b+1]))return null;let c=[],d=b;for(;d<a.length&&/^\s*\|?.+\|\s*$/u.test(a[d]);)d!==b+1&&c.push(a[d].trim().replace(/^\|/u,"").replace(/\|$/u,"").split("|").map(a=>C(a))),d+=1;return{rows:c,next:d}}(f,a);if(k){g.push(function(a,b){return`<w:tbl><w:tblPr><w:tblW w:w="5000" w:type="pct"/><w:tblLook w:firstRow="1" w:noHBand="0"/><w:tblBorders><w:top w:val="single" w:sz="6" w:color="666666"/><w:left w:val="single" w:sz="6" w:color="666666"/><w:bottom w:val="single" w:sz="6" w:color="666666"/><w:right w:val="single" w:sz="6" w:color="666666"/><w:insideH w:val="single" w:sz="4" w:color="666666"/><w:insideV w:val="single" w:sz="4" w:color="666666"/></w:tblBorders></w:tblPr>${a.map((a,c)=>`<w:tr>${a.map(a=>`<w:tc><w:tcPr><w:tcW w:w="0" w:type="auto"/><w:tcMar><w:top w:w="80" w:type="dxa"/><w:left w:w="100" w:type="dxa"/><w:bottom w:w="80" w:type="dxa"/><w:right w:w="100" w:type="dxa"/></w:tcMar>${0===c?'<w:shd w:fill="F3F4F6"/>':""}</w:tcPr>${H(a,{bold:0===c,size:b.bodyHalfPoints,line:b.lineTwips,fontEastAsia:b.fontEastAsia,fontAscii:b.fontAscii,spacingAfter:0,align:0===c?"center":void 0})}</w:tc>`).join("")}</w:tr>`).join("")}</w:tbl>`}(k.rows,c),H("",{spacingAfter:80,line:c.lineTwips})),a=k.next;continue}let l=/^(#{1,4})\s+(.+)$/u.exec(b);if(l){var j;let b=C(l[2]);h="目录"===b,g.push((j=l[1].length,2===j?H(b,{bold:!0,size:Math.max(c.titleHalfPoints+4,36),line:c.lineTwips,fontEastAsia:c.fontEastAsia,fontAscii:c.fontAscii,align:"center",spacingBefore:260,spacingAfter:180,keepNext:!0}):3===j?H(b,{bold:!0,size:Math.max(c.titleHalfPoints,32),line:c.lineTwips,fontEastAsia:c.fontEastAsia,fontAscii:c.fontAscii,spacingBefore:180,spacingAfter:100,keepNext:!0}):H(b,{bold:!0,size:Math.max(c.bodyHalfPoints,28),line:c.lineTwips,fontEastAsia:c.fontEastAsia,fontAscii:c.fontAscii,spacingBefore:120,spacingAfter:80,keepNext:!0}))),a+=1;continue}let m=C(b),n=/^\*\*[^*]+\*\*\s*[::]?\s*$/u.test(b)||/^([一二三四五六七八九十]+)/u.test(m)||/^[一二三四五六七八九十]+、/u.test(m);g.push(h?function(a,b){let c=/^\s*\d+\.\d+\s+\S/u.test(a);return H(C(a),{bold:!c,size:b.bodyHalfPoints,line:b.lineTwips,fontEastAsia:b.fontEastAsia,fontAscii:b.fontAscii,spacingAfter:c?30:80,indentLeft:420*!!c,align:"left"})}(b,c):H(m,{bold:n,size:e,line:c.lineTwips,fontEastAsia:c.fontEastAsia,fontAscii:c.fontAscii,firstLine:560*!n,spacingBefore:80*!!n})),a+=1}return g.join("")}(b,c);if(d&&j.existsSync(d)){let b=await p().loadAsync(j.readFileSync(d)),f=b.file("word/document.xml");if(f){let d=await f.async("string");b.file("word/document.xml",d.replace(/\{\{title\}\}/gu,u(a)).replace(/\{\{content\}\}/gu,e)),b.file("word/styles.xml",I(c));let g="word/_rels/document.xml.rels",h=b.file(g);if(h){let a=await h.async("string");a.includes("officeDocument/2006/relationships/styles")||b.file(g,a.replace("</Relationships>",'<Relationship Id="rStyle" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/></Relationships>'))}else b.folder("word")?.folder("_rels")?.file("document.xml.rels",'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rStyle" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/></Relationships>');let i=b.file("[Content_Types].xml");if(i){let a=await i.async("string");a.includes("/word/styles.xml")||b.file("[Content_Types].xml",a.replace("</Types>",'<Override PartName="/word/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"/></Types>'))}return b.generateAsync({type:"nodebuffer"})}}let f=c?.page||{},g=new(p());return g.file("[Content_Types].xml",'<?xml version="1.0" encoding="UTF-8"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="xml" ContentType="application/xml"/><Override PartName="/word/document.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"/><Override PartName="/word/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"/></Types>'),g.folder("_rels")?.file(".rels",'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/></Relationships>'),g.folder("word")?.folder("_rels")?.file("document.xml.rels",'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rStyle" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/></Relationships>'),g.folder("word")?.file("styles.xml",I(c)),g.folder("word")?.file("document.xml",`<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:body>${e}<w:sectPr><w:pgSz w:w="11906" w:h="16838"/><w:pgMar w:top="${F(f.marginTop,2.5)}" w:right="${F(f.marginRight,2)}" w:bottom="${F(f.marginBottom,2)}" w:left="${F(f.marginLeft,2)}"/></w:sectPr></w:body></w:document>`),g.generateAsync({type:"nodebuffer"})}function K(a,b){return a&&/^[\w\s\u4e00-\u9fa5,"'().-]+$/u.test(a)?a:b}function L(a){let b=a?.page||{},c=a?.typography||{},d=K(b.paper,"A4"),e=K(b.marginTop,"24mm"),f=K(b.marginRight,"18mm"),g=K(b.marginBottom,"22mm"),h=K(b.marginLeft,"18mm"),i=K(c.fontFamily,"SimSun, 宋体, serif"),j=E(c.lineHeight,22);return{paper:d,marginTop:e,marginRight:f,marginBottom:g,marginLeft:h,fontFamily:i,lineHeight:j,titleSize:E(c.titleSize,16),bodySize:E(c.bodySize,14)}}function M(a){return a.replace(/(<h2[^>]*>\s*目录\s*<\/h2>)([\s\S]*?)(<div class="page-break"><\/div>)/u,(a,b,c,d)=>{let e=c.replace(/<ol>\s*([\s\S]*?)\s*<\/ol>/u,(a,b)=>b).replace(/<li>\s*([^<]+?)\s*<\/li>/gu,"<p>$1</p>").replace(/<p>(?:\s| | )*(\d+\.\d+\s+[^<]+)<\/p>/giu,'<p class="toc-section">$1</p>').replace(/<p>(?!(?:\s| | )*<\/p>|(?:\s| | )*\d+\.\d+\s)([\s\S]*?)<\/p>/giu,'<p class="toc-chapter">$1</p>');return`<section class="document-toc">${b}${e}</section>${d}`})}function N(a){let b=a.message.trim();return!/^(事实冲突|必需章节缺失):/u.test(b)&&/出现禁用文本\s*(资料未提供|占位|TODO|TBD)|正文包含.*(资料未提供|占位)|图片、地图或附件引用路径明显无效|无效路径|表格语法错误|临时远程生成 URL|提示词全文|内部错误|生成未完成|低于目标页数|低于目标字数|文档预算未达成|正文篇幅低于目标|缺少配置小节|缺少必要的正式表格|正文缺少章节标题/iu.test(b)}function O(a){return{chars:a.trim().length,h2:(a.match(/^##\s+/gmu)||[]).length,h3:(a.match(/^###\s+/gmu)||[]).length,tables:(a.match(/\n\s*\|\s*:?-{3,}/gu)||[]).length}}function P(){let a=[process.env.PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH,process.env.CHROME_PATH].filter(Boolean),b=k.homedir();return[...new Set([...a,..."darwin"===process.platform?["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome","/Applications/Chromium.app/Contents/MacOS/Chromium","/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge","/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",l.join(b,"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),l.join(b,"Applications/Chromium.app/Contents/MacOS/Chromium")]:"win32"===process.platform?[l.join(process.env.PROGRAMFILES||"C:\\Program Files","Google/Chrome/Application/chrome.exe"),l.join(process.env["PROGRAMFILES(X86)"]||"C:\\Program Files (x86)","Google/Chrome/Application/chrome.exe"),l.join(process.env.LOCALAPPDATA||"","Google/Chrome/Application/chrome.exe"),l.join(process.env.PROGRAMFILES||"C:\\Program Files","Microsoft/Edge/Application/msedge.exe")]:["/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/usr/bin/chromium","/usr/bin/chromium-browser","/snap/bin/chromium","/usr/bin/microsoft-edge"]].filter(a=>a&&j.existsSync(a)))]}async function Q(a,b,c){let d=j.mkdtempSync(l.join(k.tmpdir(),"customize-agent-pdf-")),e=l.join(d,"document.html"),f=l.join(d,"document.pdf"),g=l.join(d,"profile");j.writeFileSync(e,a,"utf-8");try{let a=L(c),d=(0,m.pathToFileURL)(e).href,h=["--disable-gpu","--no-sandbox","--disable-setuid-sandbox",`--user-data-dir=${g}`,`--print-to-pdf=${f}`,`--print-to-pdf-page-size=${a.paper}`,d],i=[];for(let a of["--headless=new","--headless"])try{if(await v(b,[a,...h],{timeout:3e4,maxBuffer:1048576}),j.existsSync(f)&&j.statSync(f).size>=1024)return j.readFileSync(f);i.push(`${a}: browser command did not produce a valid PDF`)}catch(b){i.push(`${a}: ${b instanceof Error?b.message:String(b)}`)}throw Error(i.join("\n"))}finally{j.rmSync(d,{recursive:!0,force:!0})}}async function R(a,b){let{chromium:d}=await Promise.resolve().then(c.bind(c,83237)),e=[{label:"playwright-bundled-chromium",options:{headless:!0,args:["--no-sandbox","--disable-setuid-sandbox"]}},{label:"system-chrome-channel",options:{channel:"chrome",headless:!0,args:["--no-sandbox","--disable-setuid-sandbox"]}},{label:"system-msedge-channel",options:{channel:"msedge",headless:!0,args:["--no-sandbox","--disable-setuid-sandbox"]}},...P().map(a=>({label:a,options:{executablePath:a,headless:!0,args:["--no-sandbox","--disable-setuid-sandbox"]}}))],f=[];for(let c of e)try{let e=await d.launch(c.options);try{let c=await e.newPage({locale:"zh-CN"});await c.setContent(a,{waitUntil:"load"}),await c.waitForFunction(()=>Array.from(document.images).every(a=>a.complete),void 0,{timeout:1e4}).catch(()=>void 0),await c.emulateMedia({media:"print"});let d=G(b),f=await c.pdf({format:d.paper,printBackground:!0,preferCSSPageSize:!0,margin:{top:d.marginTop,right:d.marginRight,bottom:d.marginBottom,left:d.marginLeft},displayHeaderFooter:!0,headerTemplate:"<div></div>",footerTemplate:`<div style="font-family:${d.fontFamily};font-size:10.5pt;line-height:12pt;width:100%;text-align:center;color:#666;">第 <span class="pageNumber"></span> 页 / 共 <span class="totalPages"></span> 页</div>`});return Buffer.from(f)}finally{await e.close()}}catch(a){f.push(`${c.label}: ${a instanceof Error?a.message:String(a)}`)}for(let c of P())try{return await Q(a,c,b)}catch(a){f.push(`browser-command ${c}: ${a instanceof Error?a.message:String(a)}`)}throw Error(f.join("\n"))}async function S(a,b){if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});let d=a.body,e=d.documentId?(0,q.v7)(d.documentId):null;if(d.documentId&&!e)return b.status(404).json({error:"Document not found"});let f=d.title||e?.title||"document",g=e?.editedMarkdown||e?.markdown||e?.draft?.markdown||"",h=B(d.useClientMarkdown&&"string"==typeof d.markdown?d.markdown:g||d.markdown||""),i=d.format;if(!i||!["markdown","html","pdf","docx"].includes(i))return b.status(400).json({error:"INVALID_EXPORT_FORMAT",message:"请选择有效的导出格式。"});let j=function(a,b){let c=O(a),d=b?O(b):void 0,e=[];return c.chars<200&&e.push("导出内容为空或过短"),d&&d.chars>1e3&&c.chars<.8*d.chars&&e.push("导出内容明显少于服务端生成记录"),d&&d.h3>0&&0===c.h3&&e.push("导出内容缺少服务端生成记录中的二级小节"),d&&d.tables>0&&0===c.tables&&e.push("导出内容缺少服务端生成记录中的表格"),e}(h,B(e?.draft?.markdown||e?.markdown||""));if(j.length)return b.status(422).json({error:"EXPORT_CONTENT_INVALID",issues:j});let k=e?.draft?.exportGate||d.exportGate,l=k?.blockingIssues?.filter(N)||[],m=k?.passed===!1&&0===l.length?[{message:"导出门禁未通过:存在未完成的检查项"}]:[];if(d.enforceGate&&(l.length||m.length))return b.status(422).json({error:"Export gate failed",issues:[...l,...m]});let n=f.replace(/[\\/:*?"<>|]/gu,"-").slice(0,80)||"document";if("markdown"===i)return b.setHeader("Content-Type","text/markdown; charset=utf-8"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${n}.md`)}`),b.status(200).send(h);if("docx"===i){let a=await J(f,h,e?.draft?.exportSettings,d.wordTemplatePath);return b.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${n}.docx`)}`),b.status(200).send(a)}let{marked:o}=await Promise.resolve().then(c.bind(c,83142)),p=(0,r.aY)(),t=e?.draft?.exportSettings,v=A(function(a,b,c){let d=G(c),e=M(b);return`<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><title>${u(a)}</title><style>
|
|
3
3
|
@page{size:${d.paper};margin:${d.marginTop} ${d.marginRight} ${d.marginBottom} ${d.marginLeft}}
|
|
4
4
|
*{box-sizing:border-box}
|
|
5
5
|
html,body{margin:0;padding:0;background:#fff}
|
|
@@ -23,4 +23,4 @@ th,td{font-family:${d.fontFamily};font-size:${d.bodyCss};line-height:${d.lineCss
|
|
|
23
23
|
th{background:#f3f4f6;font-weight:700;text-align:center}
|
|
24
24
|
pre{white-space:pre-wrap;font-family:${d.fontFamily};font-size:${d.bodyCss};line-height:${d.lineCss};page-break-inside:avoid;break-inside:avoid}.page-break{page-break-after:always;break-after:page;height:0}
|
|
25
25
|
@media print{body{-webkit-print-color-adjust:exact;print-color-adjust:exact}a{text-decoration:none;color:#111827}}
|
|
26
|
-
</style></head><body>${e}</body></html>`}(f,
|
|
26
|
+
</style></head><body>${e}</body></html>`}(f,o.parse(h,{async:!1}),t),p);if("html"===i)return b.setHeader("Content-Type","text/html; charset=utf-8"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${n}.html`)}`),b.status(200).send(v);try{let a=await R(v,t),c=function(a){let b=a.toString("latin1").match(/\/Type\s*\/Page\b/gu);return b?.length||void 0}(a);return b.setHeader("Content-Type","application/pdf"),c&&b.setHeader("X-PDF-Page-Count",String(c)),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${n}.pdf`)}`),b.status(200).send(a)}catch(c){return(0,s.wF)({level:"error",source:"api/documents/export",functionName:"pdfExportChromium",error:c,req:a,meta:{fallback:"system-browser-attempted"}}),b.status(500).json({error:"PDF_RENDER_FAILED",message:"PDF 渲染失败:未找到或无法启动可用的 Chrome/Chromium/Edge。请安装 Chrome,或设置 PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH 后重试。"})}}let T={inlineLocalImages:A,resolveLocalImagePath:z,normalizeExportUnits:B,stripInlineMarkdown:C,enhanceTocHtml:M},U=(0,t.j)("api/documents/export",S);var V=c(68970),W=c(50296);let X=(0,h.M)(d,"default"),Y=(0,h.M)(d,"config"),Z=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/export",pathname:"/api/documents/export",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function $(a,b,c){let d=await Z.prepare(a,b,{srcPage:"/api/documents/export"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,V.getTracer)(),e=d.getActiveScopeSpan(),j=Z.instrumentationOnRequestError.bind(Z),k=async e=>Z.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:Z.isDev,page:"/api/documents/export",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==W.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(W.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:V.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(Z.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},87550:a=>{a.exports=require("better-sqlite3")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,6697],()=>b(b.s=83258));module.exports=c})();
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
"use strict";(()=>{var a={};a.id=6011,a.ids=[6011],a.modules={15751:a=>{a.exports=require("xlsx")},17496:(a,b,c)=>{c.d(b,{j:()=>e});var d=c(49750);function e(a,b){return async function(c,e){try{await b(c,e)}catch(g){let f=(0,d.wF)({source:a,functionName:b.name||"anonymous",error:g,req:c});console.error(`[${a}]`,f.id,g),e.headersSent||e.status(500).json({error:g instanceof Error?g.message:"Internal server error",requestId:f.id})}}}(0,d.mG)()},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},28630:(a,b,c)=>{c.r(b),c.d(b,{config:()=>o,default:()=>n,handler:()=>q});var d={};c.r(d),c.d(d,{default:()=>k});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(67461);async function j(a,b){if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});let{templateId:c,requirement:d,maxEvidencePerChapter:e,projectRoot:f}=a.body;if(!c)return b.status(400).json({error:"templateId required"});let g=(0,i.YL)({templateId:c,requirement:d,maxEvidencePerChapter:e},f);b.status(202).json(g)}let k=(0,c(17496).j)("api/documents/generate",j);var l=c(68970),m=c(50296);let n=(0,h.M)(d,"default"),o=(0,h.M)(d,"config"),p=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/generate",pathname:"/api/documents/generate",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function q(a,b,c){let d=await p.prepare(a,b,{srcPage:"/api/documents/generate"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,l.getTracer)(),e=d.getActiveScopeSpan(),j=p.instrumentationOnRequestError.bind(p),k=async e=>p.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:p.isDev,page:"/api/documents/generate",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(m.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:l.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(p.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},49750:(a,b,c)=>{c.d(b,{hH:()=>p,mG:()=>r,cW:()=>o,wF:()=>n});var d=c(29021),e=c.n(d),f=c(21820),g=c.n(f),h=c(33873),i=c.n(h);let j=require("crypto");var k=c.n(j);let l=i().join(g().homedir(),".customize-agent","logs"),m=i().join(l,"errors.jsonl");function n(a){let{message:b,stack:c}=function(a){if(a instanceof Error)return{message:a.message,stack:a.stack};if("string"==typeof a)return{message:a};try{return{message:JSON.stringify(a)}}catch{return{message:String(a)}}}(a.error),d={id:`err_${Date.now()}_${k().randomBytes(4).toString("hex")}`,level:a.level||"error",source:a.source,functionName:a.functionName,message:b,stack:c,request:a.req?{method:a.req.method,url:a.req.url,query:a.req.query}:void 0,meta:a.meta,createdAt:Date.now()};try{e().mkdirSync(l,{recursive:!0}),function(){try{if(e().statSync(m).size<=2097152)return;e().renameSync(m,i().join(l,`errors-${Date.now()}.jsonl`))}catch{}}(),e().appendFileSync(m,`${JSON.stringify(d)}
|
|
2
|
-
`)}catch(a){console.error("[errorLogService] failed to write error log",a)}return d}function o(a=200){try{return e().readFileSync(m,"utf8").split("\n").filter(Boolean).slice(-a).reverse().map(a=>JSON.parse(a))}catch{return[]}}function p(){try{e().rmSync(m,{force:!0})}catch{}}let q=!1;function r(){q||(q=!0,process.on("uncaughtException",a=>{n({source:"process",functionName:"uncaughtException",error:a}),console.error("[process] uncaughtException",a)}),process.on("unhandledRejection",a=>{n({source:"process",functionName:"unhandledRejection",error:a}),console.error("[process] unhandledRejection",a)}))}},67461:(a,b,c)=>{c.d(b,{BH:()=>y,Gl:()=>l,JU:()=>A,Jz:()=>D,M$:()=>s,QG:()=>x,SE:()=>p,YL:()=>E,a6:()=>v,r:()=>w,uc:()=>C,v7:()=>t,yE:()=>z});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(56697),i=c(99842),j=c(23328);let k=new Map;function l(a=(0,j.aY)()){let b=g.join(f.homedir(),".customize-agent","projects",function(a=(0,j.aY)()){return d.createHash("sha1").update(g.resolve(a)).digest("hex").slice(0,12)}(a),"generatedDocuments");return e.mkdirSync(g.join(b,"drafts"),{recursive:!0}),e.mkdirSync(g.join(b,"assets"),{recursive:!0}),b}function m(a=(0,j.aY)()){return g.join(l(a),"index.json")}function n(a=(0,j.aY)()){return g.join(l(a),"assets.json")}function o(a,b=(0,j.aY)()){return g.join(l(b),"drafts",`${a}.json`)}function p(a,b=(0,j.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(l(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join(b,"knowledgeBase",a.path):null}function q(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function r(a,b){e.mkdirSync(g.dirname(a),{recursive:!0}),e.writeFileSync(a,JSON.stringify(b,null,2))}function s(a=(0,j.aY)()){return q(m(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function t(a,b=(0,j.aY)()){return q(o(a,b),null)}function u(a,b=(0,j.aY)()){let c=Date.now(),d={...a,updatedAt:c};r(o(d.id,b),d);let e=s(b).filter(a=>a.id!==d.id);return e.unshift(d),r(m(b),e.map(a=>({...a,draft:void 0,executionStages:a.executionStages}))),d}function v(a,b,c=(0,j.aY)()){let d=t(a,c);return d?u({...d,...b,id:a},c):null}function w(a,b=(0,j.aY)()){let c=t(a,b);if(!c||"generating"!==c.status)return null;for(let[b,c]of k)if(c.documentId===a){c.controller.abort(),k.delete(b);break}return u({...c,status:"failed",error:"用户中止",updatedAt:Date.now()},b)}function x(a,b=(0,j.aY)()){try{e.rmSync(o(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}r(m(b),s(b).filter(b=>b.id!==a))}function y(a=(0,j.aY)()){return q(n(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function z(a,b=(0,j.aY)()){return y(b).find(b=>b.id===a)||null}function A(a,b=(0,j.aY)()){let c=z(a,b);if(!c)return!1;let d=p(c,b);if(d&&d.startsWith(l(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return r(n(b),y(b).filter(b=>b.id!==a)),!0}async function B(a,b=(0,j.aY)()){let c=g.join("生成文档",`${a.title.replace(/[\\/:*?"<>|]/gu,"_").slice(0,120)||"generated-document"}-${a.id}.md`).split(g.sep).join("/"),d=g.join(b,"knowledgeBase",c);e.mkdirSync(g.dirname(d),{recursive:!0}),e.writeFileSync(d,a.editedMarkdown||a.markdown,"utf8");let f=await (0,j.Qh)().getProject(b);return await f.reindexFile(c),c}async function C(a,b=(0,j.aY)()){let c=z(a,b);if(!c?.path)return null;let d=p(c,b);if(!d||!e.existsSync(d))throw Error("asset file not found");let f=g.join("生成资源",g.basename(c.path)).split(g.sep).join("/"),h=g.join(b,"knowledgeBase",f);e.mkdirSync(g.dirname(h),{recursive:!0}),d!==h&&e.copyFileSync(d,h);let i=await (0,j.Qh)().getProject(b);await i.reindexFile(f);let k=y(b).map(b=>b.id===a?{...b,path:f,source:"generated",indexed:!0,updatedAt:Date.now()}:b);return r(n(b),k),k.find(b=>b.id===a)||null}function D(a,b,c=(0,j.aY)()){let d=z(a,c);if(!d)return null;let f=p(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function E(a,b=(0,j.aY)()){let c=Date.now(),e=`doc-${c}-${d.randomBytes(4).toString("hex")}`,f=`task-${c}-${d.randomBytes(4).toString("hex")}`,l={id:e,taskId:f,templateId:a.templateId,title:"生成中",requirement:a.requirement||"",markdown:"",status:"generating",assets:[],createdAt:c,updatedAt:c};u(l,b);let m=new AbortController,o=(0,h.OX)({...a,projectRoot:b,signal:m.signal,onProgress:a=>{try{let c=t(e,b);c&&"generating"===c.status&&(u({...c,executionStages:a},b),console.log(`[gen] progress saved: ${a.length} stages, doc=${e}`))}catch(a){console.error("[gen] progress save error:",a)}}}).then(async a=>{let c=t(e,b);if(!c||"generating"!==c.status)return c??l;let d=a.validationIssues.filter(a=>"error"===a.level||"warning"===a.level).map(a=>a.suggestion?`${a.message}:${a.suggestion}`:a.message)
|
|
2
|
+
`)}catch(a){console.error("[errorLogService] failed to write error log",a)}return d}function o(a=200){try{return e().readFileSync(m,"utf8").split("\n").filter(Boolean).slice(-a).reverse().map(a=>JSON.parse(a))}catch{return[]}}function p(){try{e().rmSync(m,{force:!0})}catch{}}let q=!1;function r(){q||(q=!0,process.on("uncaughtException",a=>{n({source:"process",functionName:"uncaughtException",error:a}),console.error("[process] uncaughtException",a)}),process.on("unhandledRejection",a=>{n({source:"process",functionName:"unhandledRejection",error:a}),console.error("[process] unhandledRejection",a)}))}},67461:(a,b,c)=>{c.d(b,{BH:()=>y,Gl:()=>l,JU:()=>A,Jz:()=>D,M$:()=>s,QG:()=>x,SE:()=>p,YL:()=>E,a6:()=>v,r:()=>w,uc:()=>C,v7:()=>t,yE:()=>z});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(56697),i=c(99842),j=c(23328);let k=new Map;function l(a=(0,j.aY)()){let b=g.join(f.homedir(),".customize-agent","projects",function(a=(0,j.aY)()){return d.createHash("sha1").update(g.resolve(a)).digest("hex").slice(0,12)}(a),"generatedDocuments");return e.mkdirSync(g.join(b,"drafts"),{recursive:!0}),e.mkdirSync(g.join(b,"assets"),{recursive:!0}),b}function m(a=(0,j.aY)()){return g.join(l(a),"index.json")}function n(a=(0,j.aY)()){return g.join(l(a),"assets.json")}function o(a,b=(0,j.aY)()){return g.join(l(b),"drafts",`${a}.json`)}function p(a,b=(0,j.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(l(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join(b,"knowledgeBase",a.path):null}function q(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function r(a,b){e.mkdirSync(g.dirname(a),{recursive:!0}),e.writeFileSync(a,JSON.stringify(b,null,2))}function s(a=(0,j.aY)()){return q(m(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function t(a,b=(0,j.aY)()){return q(o(a,b),null)}function u(a,b=(0,j.aY)()){let c=Date.now(),d={...a,updatedAt:c};r(o(d.id,b),d);let e=s(b).filter(a=>a.id!==d.id);return e.unshift(d),r(m(b),e.map(a=>({...a,draft:void 0,executionStages:a.executionStages}))),d}function v(a,b,c=(0,j.aY)()){let d=t(a,c);return d?u({...d,...b,id:a},c):null}function w(a,b=(0,j.aY)()){let c=t(a,b);if(!c||"generating"!==c.status)return null;for(let[b,c]of k)if(c.documentId===a){c.controller.abort(),k.delete(b);break}return u({...c,status:"failed",error:"用户中止",updatedAt:Date.now()},b)}function x(a,b=(0,j.aY)()){try{e.rmSync(o(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}r(m(b),s(b).filter(b=>b.id!==a))}function y(a=(0,j.aY)()){return q(n(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function z(a,b=(0,j.aY)()){return y(b).find(b=>b.id===a)||null}function A(a,b=(0,j.aY)()){let c=z(a,b);if(!c)return!1;let d=p(c,b);if(d&&d.startsWith(l(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return r(n(b),y(b).filter(b=>b.id!==a)),!0}async function B(a,b=(0,j.aY)()){let c=g.join("生成文档",`${a.title.replace(/[\\/:*?"<>|]/gu,"_").slice(0,120)||"generated-document"}-${a.id}.md`).split(g.sep).join("/"),d=g.join(b,"knowledgeBase",c);e.mkdirSync(g.dirname(d),{recursive:!0}),e.writeFileSync(d,a.editedMarkdown||a.markdown,"utf8");let f=await (0,j.Qh)().getProject(b);return await f.reindexFile(c),c}async function C(a,b=(0,j.aY)()){let c=z(a,b);if(!c?.path)return null;let d=p(c,b);if(!d||!e.existsSync(d))throw Error("asset file not found");let f=g.join("生成资源",g.basename(c.path)).split(g.sep).join("/"),h=g.join(b,"knowledgeBase",f);e.mkdirSync(g.dirname(h),{recursive:!0}),d!==h&&e.copyFileSync(d,h);let i=await (0,j.Qh)().getProject(b);await i.reindexFile(f);let k=y(b).map(b=>b.id===a?{...b,path:f,source:"generated",indexed:!0,updatedAt:Date.now()}:b);return r(n(b),k),k.find(b=>b.id===a)||null}function D(a,b,c=(0,j.aY)()){let d=z(a,c);if(!d)return null;let f=p(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function E(a,b=(0,j.aY)()){let c=Date.now(),e=`doc-${c}-${d.randomBytes(4).toString("hex")}`,f=`task-${c}-${d.randomBytes(4).toString("hex")}`,l={id:e,taskId:f,templateId:a.templateId,title:"生成中",requirement:a.requirement||"",markdown:"",status:"generating",assets:[],createdAt:c,updatedAt:c};u(l,b);let m=new AbortController,o=(0,h.OX)({...a,projectRoot:b,signal:m.signal,onProgress:a=>{try{let c=t(e,b);c&&"generating"===c.status&&(u({...c,executionStages:a},b),console.log(`[gen] progress saved: ${a.length} stages, doc=${e}`))}catch(a){console.error("[gen] progress save error:",a)}}}).then(async a=>{let c=t(e,b);if(!c||"generating"!==c.status)return c??l;let d=a.validationIssues.filter(a=>"error"===a.level||"warning"===a.level).map(a=>a.suggestion?`${a.message}:${a.suggestion}`:a.message);a.exportGate.passed||0!==d.length||d.push("导出门禁未通过:存在未完成的检查项");let f=u(function(a){let b=a=>({...a,content:a.content.slice(0,500)}),c=a.draft?{...a.draft,chapters:a.draft.chapters.map(a=>({...a,evidence:a.evidence.map(b)}))}:a.draft;return{...a,draft:c}}({...c,templateName:a.templateName,title:a.title,markdown:a.markdown,status:d.length>0?"warning":"completed",draft:a,executionStages:a.executionStages,assets:a.assets||[],completedAt:Date.now(),warningIssues:d}),b);!function(a,b=(0,j.aY)()){let c=a.draft?.sources.slice(0,8).map(a=>a.filePath).join("、")||"无明确来源",d=a.warningIssues?.slice(0,5).join(";")||"无阻断问题";(0,i.i3)("project_fact",`文档《${a.title}》已基于模板“${a.templateName||a.templateId}”生成。用户要求:${a.requirement||"未填写"}。主要资料来源:${c}。校验结果:${d}。`,`Project: ${g.resolve(b)} | Generated document: ${a.id}`)}(f,b);let h=function(a,b,c=(0,j.aY)()){let d=Date.now(),e=[...y(c)];for(let c of a){let a=e.findIndex(a=>a.id===c.id),f=c.path?.startsWith("generatedDocuments/assets/")||"generated"===c.status||"prompt_ready"===c.status?"generated":"knowledge_base",h={...c,name:g.basename(c.path||c.url||c.id),source:f,indexed:a>=0&&e[a].indexed,usedByDocumentIds:a>=0?[...new Set([...e[a].usedByDocumentIds,b])]:[b],createdAt:a>=0?e[a].createdAt:d,updatedAt:d};a>=0?e[a]={...e[a],...h}:e.push(h)}return r(n(c),e),e}(a.assets||[],e,b);for(let a of(await B(f,b).catch(a=>console.warn("[generated-documents] 自动入库生成文档失败",a)),h.filter(a=>a.usedByDocumentIds.includes(e)&&!a.indexed)))await C(a.id,b).catch(b=>console.warn("[generated-documents] 自动入库生成资源失败",a.id,b));return f}).catch(a=>{let c=t(e,b);return c&&"generating"===c.status?u({...c,status:"failed",error:a instanceof Error?a.message:String(a)},b):c??l}).finally(()=>{k.delete(f)});return k.set(f,{id:f,documentId:e,status:"generating",controller:m,promise:o}),{taskId:f,documentId:e,record:l}}},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},87550:a=>{a.exports=require("better-sqlite3")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,6697],()=>b(b.s=28630));module.exports=c})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(()=>{var a={};a.id=8889,a.ids=[8889],a.modules={15751:a=>{a.exports=require("xlsx")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},38765:(a,b,c)=>{c.r(b),c.d(b,{config:()=>n,default:()=>m,handler:()=>p});var d={};c.r(d),c.d(d,{default:()=>j});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(67461);function j(a,b){try{let c=String(a.query.id||"");if(!c)return b.status(400).json({error:"id required"});if("GET"===a.method){let d=(0,i.v7)(c);if(!d)return b.status(404).json({error:"Document not found"});if("1"===a.query.lite&&"generating"===d.status)return b.status(200).json({document:{id:d.id,taskId:d.taskId,templateId:d.templateId,templateName:d.templateName,title:d.title,requirement:d.requirement,markdown:"",status:d.status,executionStages:d.executionStages,assets:[],createdAt:d.createdAt,updatedAt:d.updatedAt,error:d.error,warningIssues:d.warningIssues}});return b.status(200).json({document:d})}if("PUT"===a.method){let d=(0,i.a6)(c,a.body||{});if(!d)return b.status(404).json({error:"Document not found"});return b.status(200).json({document:d})}if("DELETE"===a.method)return(0,i.QG)(c),b.status(200).json({ok:!0});return b.status(405).json({error:"Method not allowed"})}catch(a){console.error("[api] documents/generated/[id]",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}}var k=c(68970),l=c(50296);let m=(0,h.M)(d,"default"),n=(0,h.M)(d,"config"),o=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/generated/[id]",pathname:"/api/documents/generated/[id]",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function p(a,b,c){let d=await o.prepare(a,b,{srcPage:"/api/documents/generated/[id]"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,k.getTracer)(),e=d.getActiveScopeSpan(),j=o.instrumentationOnRequestError.bind(o),m=async e=>o.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:o.isDev,page:"/api/documents/generated/[id]",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==l.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await m(e):await d.withPropagatedContext(a.headers,()=>d.trace(l.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:k.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},m))}catch(a){if(o.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},48161:a=>{a.exports=require("node:os")},67461:(a,b,c)=>{c.d(b,{BH:()=>y,Gl:()=>l,JU:()=>A,Jz:()=>D,M$:()=>s,QG:()=>x,SE:()=>p,YL:()=>E,a6:()=>v,r:()=>w,uc:()=>C,v7:()=>t,yE:()=>z});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(56697),i=c(99842),j=c(23328);let k=new Map;function l(a=(0,j.aY)()){let b=g.join(f.homedir(),".customize-agent","projects",function(a=(0,j.aY)()){return d.createHash("sha1").update(g.resolve(a)).digest("hex").slice(0,12)}(a),"generatedDocuments");return e.mkdirSync(g.join(b,"drafts"),{recursive:!0}),e.mkdirSync(g.join(b,"assets"),{recursive:!0}),b}function m(a=(0,j.aY)()){return g.join(l(a),"index.json")}function n(a=(0,j.aY)()){return g.join(l(a),"assets.json")}function o(a,b=(0,j.aY)()){return g.join(l(b),"drafts",`${a}.json`)}function p(a,b=(0,j.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(l(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join(b,"knowledgeBase",a.path):null}function q(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function r(a,b){e.mkdirSync(g.dirname(a),{recursive:!0}),e.writeFileSync(a,JSON.stringify(b,null,2))}function s(a=(0,j.aY)()){return q(m(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function t(a,b=(0,j.aY)()){return q(o(a,b),null)}function u(a,b=(0,j.aY)()){let c=Date.now(),d={...a,updatedAt:c};r(o(d.id,b),d);let e=s(b).filter(a=>a.id!==d.id);return e.unshift(d),r(m(b),e.map(a=>({...a,draft:void 0,executionStages:a.executionStages}))),d}function v(a,b,c=(0,j.aY)()){let d=t(a,c);return d?u({...d,...b,id:a},c):null}function w(a,b=(0,j.aY)()){let c=t(a,b);if(!c||"generating"!==c.status)return null;for(let[b,c]of k)if(c.documentId===a){c.controller.abort(),k.delete(b);break}return u({...c,status:"failed",error:"用户中止",updatedAt:Date.now()},b)}function x(a,b=(0,j.aY)()){try{e.rmSync(o(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}r(m(b),s(b).filter(b=>b.id!==a))}function y(a=(0,j.aY)()){return q(n(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function z(a,b=(0,j.aY)()){return y(b).find(b=>b.id===a)||null}function A(a,b=(0,j.aY)()){let c=z(a,b);if(!c)return!1;let d=p(c,b);if(d&&d.startsWith(l(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return r(n(b),y(b).filter(b=>b.id!==a)),!0}async function B(a,b=(0,j.aY)()){let c=g.join("生成文档",`${a.title.replace(/[\\/:*?"<>|]/gu,"_").slice(0,120)||"generated-document"}-${a.id}.md`).split(g.sep).join("/"),d=g.join(b,"knowledgeBase",c);e.mkdirSync(g.dirname(d),{recursive:!0}),e.writeFileSync(d,a.editedMarkdown||a.markdown,"utf8");let f=await (0,j.Qh)().getProject(b);return await f.reindexFile(c),c}async function C(a,b=(0,j.aY)()){let c=z(a,b);if(!c?.path)return null;let d=p(c,b);if(!d||!e.existsSync(d))throw Error("asset file not found");let f=g.join("生成资源",g.basename(c.path)).split(g.sep).join("/"),h=g.join(b,"knowledgeBase",f);e.mkdirSync(g.dirname(h),{recursive:!0}),d!==h&&e.copyFileSync(d,h);let i=await (0,j.Qh)().getProject(b);await i.reindexFile(f);let k=y(b).map(b=>b.id===a?{...b,path:f,source:"generated",indexed:!0,updatedAt:Date.now()}:b);return r(n(b),k),k.find(b=>b.id===a)||null}function D(a,b,c=(0,j.aY)()){let d=z(a,c);if(!d)return null;let f=p(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function E(a,b=(0,j.aY)()){let c=Date.now(),e=`doc-${c}-${d.randomBytes(4).toString("hex")}`,f=`task-${c}-${d.randomBytes(4).toString("hex")}`,l={id:e,taskId:f,templateId:a.templateId,title:"生成中",requirement:a.requirement||"",markdown:"",status:"generating",assets:[],createdAt:c,updatedAt:c};u(l,b);let m=new AbortController,o=(0,h.OX)({...a,projectRoot:b,signal:m.signal,onProgress:a=>{try{let c=t(e,b);c&&"generating"===c.status&&(u({...c,executionStages:a},b),console.log(`[gen] progress saved: ${a.length} stages, doc=${e}`))}catch(a){console.error("[gen] progress save error:",a)}}}).then(async a=>{let c=t(e,b);if(!c||"generating"!==c.status)return c??l;let d=a.validationIssues.filter(a=>"error"===a.level||"warning"===a.level).map(a=>a.suggestion?`${a.message}:${a.suggestion}`:a.message)
|
|
1
|
+
"use strict";(()=>{var a={};a.id=8889,a.ids=[8889],a.modules={15751:a=>{a.exports=require("xlsx")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},38765:(a,b,c)=>{c.r(b),c.d(b,{config:()=>n,default:()=>m,handler:()=>p});var d={};c.r(d),c.d(d,{default:()=>j});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(67461);function j(a,b){try{let c=String(a.query.id||"");if(!c)return b.status(400).json({error:"id required"});if("GET"===a.method){let d=(0,i.v7)(c);if(!d)return b.status(404).json({error:"Document not found"});if("1"===a.query.lite&&"generating"===d.status)return b.status(200).json({document:{id:d.id,taskId:d.taskId,templateId:d.templateId,templateName:d.templateName,title:d.title,requirement:d.requirement,markdown:"",status:d.status,executionStages:d.executionStages,assets:[],createdAt:d.createdAt,updatedAt:d.updatedAt,error:d.error,warningIssues:d.warningIssues}});return b.status(200).json({document:d})}if("PUT"===a.method){let d=(0,i.a6)(c,a.body||{});if(!d)return b.status(404).json({error:"Document not found"});return b.status(200).json({document:d})}if("DELETE"===a.method)return(0,i.QG)(c),b.status(200).json({ok:!0});return b.status(405).json({error:"Method not allowed"})}catch(a){console.error("[api] documents/generated/[id]",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}}var k=c(68970),l=c(50296);let m=(0,h.M)(d,"default"),n=(0,h.M)(d,"config"),o=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/generated/[id]",pathname:"/api/documents/generated/[id]",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function p(a,b,c){let d=await o.prepare(a,b,{srcPage:"/api/documents/generated/[id]"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,k.getTracer)(),e=d.getActiveScopeSpan(),j=o.instrumentationOnRequestError.bind(o),m=async e=>o.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:o.isDev,page:"/api/documents/generated/[id]",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==l.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await m(e):await d.withPropagatedContext(a.headers,()=>d.trace(l.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:k.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},m))}catch(a){if(o.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},48161:a=>{a.exports=require("node:os")},67461:(a,b,c)=>{c.d(b,{BH:()=>y,Gl:()=>l,JU:()=>A,Jz:()=>D,M$:()=>s,QG:()=>x,SE:()=>p,YL:()=>E,a6:()=>v,r:()=>w,uc:()=>C,v7:()=>t,yE:()=>z});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(56697),i=c(99842),j=c(23328);let k=new Map;function l(a=(0,j.aY)()){let b=g.join(f.homedir(),".customize-agent","projects",function(a=(0,j.aY)()){return d.createHash("sha1").update(g.resolve(a)).digest("hex").slice(0,12)}(a),"generatedDocuments");return e.mkdirSync(g.join(b,"drafts"),{recursive:!0}),e.mkdirSync(g.join(b,"assets"),{recursive:!0}),b}function m(a=(0,j.aY)()){return g.join(l(a),"index.json")}function n(a=(0,j.aY)()){return g.join(l(a),"assets.json")}function o(a,b=(0,j.aY)()){return g.join(l(b),"drafts",`${a}.json`)}function p(a,b=(0,j.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(l(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join(b,"knowledgeBase",a.path):null}function q(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function r(a,b){e.mkdirSync(g.dirname(a),{recursive:!0}),e.writeFileSync(a,JSON.stringify(b,null,2))}function s(a=(0,j.aY)()){return q(m(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function t(a,b=(0,j.aY)()){return q(o(a,b),null)}function u(a,b=(0,j.aY)()){let c=Date.now(),d={...a,updatedAt:c};r(o(d.id,b),d);let e=s(b).filter(a=>a.id!==d.id);return e.unshift(d),r(m(b),e.map(a=>({...a,draft:void 0,executionStages:a.executionStages}))),d}function v(a,b,c=(0,j.aY)()){let d=t(a,c);return d?u({...d,...b,id:a},c):null}function w(a,b=(0,j.aY)()){let c=t(a,b);if(!c||"generating"!==c.status)return null;for(let[b,c]of k)if(c.documentId===a){c.controller.abort(),k.delete(b);break}return u({...c,status:"failed",error:"用户中止",updatedAt:Date.now()},b)}function x(a,b=(0,j.aY)()){try{e.rmSync(o(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}r(m(b),s(b).filter(b=>b.id!==a))}function y(a=(0,j.aY)()){return q(n(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function z(a,b=(0,j.aY)()){return y(b).find(b=>b.id===a)||null}function A(a,b=(0,j.aY)()){let c=z(a,b);if(!c)return!1;let d=p(c,b);if(d&&d.startsWith(l(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return r(n(b),y(b).filter(b=>b.id!==a)),!0}async function B(a,b=(0,j.aY)()){let c=g.join("生成文档",`${a.title.replace(/[\\/:*?"<>|]/gu,"_").slice(0,120)||"generated-document"}-${a.id}.md`).split(g.sep).join("/"),d=g.join(b,"knowledgeBase",c);e.mkdirSync(g.dirname(d),{recursive:!0}),e.writeFileSync(d,a.editedMarkdown||a.markdown,"utf8");let f=await (0,j.Qh)().getProject(b);return await f.reindexFile(c),c}async function C(a,b=(0,j.aY)()){let c=z(a,b);if(!c?.path)return null;let d=p(c,b);if(!d||!e.existsSync(d))throw Error("asset file not found");let f=g.join("生成资源",g.basename(c.path)).split(g.sep).join("/"),h=g.join(b,"knowledgeBase",f);e.mkdirSync(g.dirname(h),{recursive:!0}),d!==h&&e.copyFileSync(d,h);let i=await (0,j.Qh)().getProject(b);await i.reindexFile(f);let k=y(b).map(b=>b.id===a?{...b,path:f,source:"generated",indexed:!0,updatedAt:Date.now()}:b);return r(n(b),k),k.find(b=>b.id===a)||null}function D(a,b,c=(0,j.aY)()){let d=z(a,c);if(!d)return null;let f=p(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function E(a,b=(0,j.aY)()){let c=Date.now(),e=`doc-${c}-${d.randomBytes(4).toString("hex")}`,f=`task-${c}-${d.randomBytes(4).toString("hex")}`,l={id:e,taskId:f,templateId:a.templateId,title:"生成中",requirement:a.requirement||"",markdown:"",status:"generating",assets:[],createdAt:c,updatedAt:c};u(l,b);let m=new AbortController,o=(0,h.OX)({...a,projectRoot:b,signal:m.signal,onProgress:a=>{try{let c=t(e,b);c&&"generating"===c.status&&(u({...c,executionStages:a},b),console.log(`[gen] progress saved: ${a.length} stages, doc=${e}`))}catch(a){console.error("[gen] progress save error:",a)}}}).then(async a=>{let c=t(e,b);if(!c||"generating"!==c.status)return c??l;let d=a.validationIssues.filter(a=>"error"===a.level||"warning"===a.level).map(a=>a.suggestion?`${a.message}:${a.suggestion}`:a.message);a.exportGate.passed||0!==d.length||d.push("导出门禁未通过:存在未完成的检查项");let f=u(function(a){let b=a=>({...a,content:a.content.slice(0,500)}),c=a.draft?{...a.draft,chapters:a.draft.chapters.map(a=>({...a,evidence:a.evidence.map(b)}))}:a.draft;return{...a,draft:c}}({...c,templateName:a.templateName,title:a.title,markdown:a.markdown,status:d.length>0?"warning":"completed",draft:a,executionStages:a.executionStages,assets:a.assets||[],completedAt:Date.now(),warningIssues:d}),b);!function(a,b=(0,j.aY)()){let c=a.draft?.sources.slice(0,8).map(a=>a.filePath).join("、")||"无明确来源",d=a.warningIssues?.slice(0,5).join(";")||"无阻断问题";(0,i.i3)("project_fact",`文档《${a.title}》已基于模板“${a.templateName||a.templateId}”生成。用户要求:${a.requirement||"未填写"}。主要资料来源:${c}。校验结果:${d}。`,`Project: ${g.resolve(b)} | Generated document: ${a.id}`)}(f,b);let h=function(a,b,c=(0,j.aY)()){let d=Date.now(),e=[...y(c)];for(let c of a){let a=e.findIndex(a=>a.id===c.id),f=c.path?.startsWith("generatedDocuments/assets/")||"generated"===c.status||"prompt_ready"===c.status?"generated":"knowledge_base",h={...c,name:g.basename(c.path||c.url||c.id),source:f,indexed:a>=0&&e[a].indexed,usedByDocumentIds:a>=0?[...new Set([...e[a].usedByDocumentIds,b])]:[b],createdAt:a>=0?e[a].createdAt:d,updatedAt:d};a>=0?e[a]={...e[a],...h}:e.push(h)}return r(n(c),e),e}(a.assets||[],e,b);for(let a of(await B(f,b).catch(a=>console.warn("[generated-documents] 自动入库生成文档失败",a)),h.filter(a=>a.usedByDocumentIds.includes(e)&&!a.indexed)))await C(a.id,b).catch(b=>console.warn("[generated-documents] 自动入库生成资源失败",a.id,b));return f}).catch(a=>{let c=t(e,b);return c&&"generating"===c.status?u({...c,status:"failed",error:a instanceof Error?a.message:String(a)},b):c??l}).finally(()=>{k.delete(f)});return k.set(f,{id:f,documentId:e,status:"generating",controller:m,promise:o}),{taskId:f,documentId:e,record:l}}},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},87550:a=>{a.exports=require("better-sqlite3")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,6697],()=>b(b.s=38765));module.exports=c})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";(()=>{var a={};a.id=3269,a.ids=[3269],a.modules={15751:a=>{a.exports=require("xlsx")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},36583:(a,b,c)=>{c.r(b),c.d(b,{config:()=>n,default:()=>m,handler:()=>p});var d={};c.r(d),c.d(d,{default:()=>j});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(67461);function j(a,b){try{if("GET"===a.method){let c="string"==typeof a.query.id?a.query.id:void 0;if(c){let a=(0,i.v7)(c);if(!a)return b.status(404).json({error:"Document not found"});return b.status(200).json({document:a})}return b.status(200).json({documents:(0,i.M$)()})}if("PUT"===a.method){let{id:c,...d}=a.body;if(!c)return b.status(400).json({error:"id required"});let e=(0,i.a6)(c,d);if(!e)return b.status(404).json({error:"Document not found"});return b.status(200).json({document:e})}if("POST"===a.method){let{action:c,documentId:d}=a.body;if("abort"===c&&d){let a=(0,i.r)(d);if(!a)return b.status(404).json({error:"Document not found or not generating"});return b.status(200).json({document:a})}return b.status(400).json({error:"Unknown action"})}if("DELETE"===a.method){let c="string"==typeof a.query.id?a.query.id:a.body?.id;if(!c)return b.status(400).json({error:"id required"});return(0,i.QG)(c),b.status(200).json({ok:!0})}return b.status(405).json({error:"Method not allowed"})}catch(a){console.error("[api] documents/generated",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}}var k=c(68970),l=c(50296);let m=(0,h.M)(d,"default"),n=(0,h.M)(d,"config"),o=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/generated",pathname:"/api/documents/generated",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function p(a,b,c){let d=await o.prepare(a,b,{srcPage:"/api/documents/generated"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,k.getTracer)(),e=d.getActiveScopeSpan(),j=o.instrumentationOnRequestError.bind(o),m=async e=>o.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:o.isDev,page:"/api/documents/generated",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==l.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await m(e):await d.withPropagatedContext(a.headers,()=>d.trace(l.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:k.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},m))}catch(a){if(o.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},48161:a=>{a.exports=require("node:os")},67461:(a,b,c)=>{c.d(b,{BH:()=>y,Gl:()=>l,JU:()=>A,Jz:()=>D,M$:()=>s,QG:()=>x,SE:()=>p,YL:()=>E,a6:()=>v,r:()=>w,uc:()=>C,v7:()=>t,yE:()=>z});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(56697),i=c(99842),j=c(23328);let k=new Map;function l(a=(0,j.aY)()){let b=g.join(f.homedir(),".customize-agent","projects",function(a=(0,j.aY)()){return d.createHash("sha1").update(g.resolve(a)).digest("hex").slice(0,12)}(a),"generatedDocuments");return e.mkdirSync(g.join(b,"drafts"),{recursive:!0}),e.mkdirSync(g.join(b,"assets"),{recursive:!0}),b}function m(a=(0,j.aY)()){return g.join(l(a),"index.json")}function n(a=(0,j.aY)()){return g.join(l(a),"assets.json")}function o(a,b=(0,j.aY)()){return g.join(l(b),"drafts",`${a}.json`)}function p(a,b=(0,j.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(l(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join(b,"knowledgeBase",a.path):null}function q(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function r(a,b){e.mkdirSync(g.dirname(a),{recursive:!0}),e.writeFileSync(a,JSON.stringify(b,null,2))}function s(a=(0,j.aY)()){return q(m(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function t(a,b=(0,j.aY)()){return q(o(a,b),null)}function u(a,b=(0,j.aY)()){let c=Date.now(),d={...a,updatedAt:c};r(o(d.id,b),d);let e=s(b).filter(a=>a.id!==d.id);return e.unshift(d),r(m(b),e.map(a=>({...a,draft:void 0,executionStages:a.executionStages}))),d}function v(a,b,c=(0,j.aY)()){let d=t(a,c);return d?u({...d,...b,id:a},c):null}function w(a,b=(0,j.aY)()){let c=t(a,b);if(!c||"generating"!==c.status)return null;for(let[b,c]of k)if(c.documentId===a){c.controller.abort(),k.delete(b);break}return u({...c,status:"failed",error:"用户中止",updatedAt:Date.now()},b)}function x(a,b=(0,j.aY)()){try{e.rmSync(o(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}r(m(b),s(b).filter(b=>b.id!==a))}function y(a=(0,j.aY)()){return q(n(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function z(a,b=(0,j.aY)()){return y(b).find(b=>b.id===a)||null}function A(a,b=(0,j.aY)()){let c=z(a,b);if(!c)return!1;let d=p(c,b);if(d&&d.startsWith(l(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return r(n(b),y(b).filter(b=>b.id!==a)),!0}async function B(a,b=(0,j.aY)()){let c=g.join("生成文档",`${a.title.replace(/[\\/:*?"<>|]/gu,"_").slice(0,120)||"generated-document"}-${a.id}.md`).split(g.sep).join("/"),d=g.join(b,"knowledgeBase",c);e.mkdirSync(g.dirname(d),{recursive:!0}),e.writeFileSync(d,a.editedMarkdown||a.markdown,"utf8");let f=await (0,j.Qh)().getProject(b);return await f.reindexFile(c),c}async function C(a,b=(0,j.aY)()){let c=z(a,b);if(!c?.path)return null;let d=p(c,b);if(!d||!e.existsSync(d))throw Error("asset file not found");let f=g.join("生成资源",g.basename(c.path)).split(g.sep).join("/"),h=g.join(b,"knowledgeBase",f);e.mkdirSync(g.dirname(h),{recursive:!0}),d!==h&&e.copyFileSync(d,h);let i=await (0,j.Qh)().getProject(b);await i.reindexFile(f);let k=y(b).map(b=>b.id===a?{...b,path:f,source:"generated",indexed:!0,updatedAt:Date.now()}:b);return r(n(b),k),k.find(b=>b.id===a)||null}function D(a,b,c=(0,j.aY)()){let d=z(a,c);if(!d)return null;let f=p(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function E(a,b=(0,j.aY)()){let c=Date.now(),e=`doc-${c}-${d.randomBytes(4).toString("hex")}`,f=`task-${c}-${d.randomBytes(4).toString("hex")}`,l={id:e,taskId:f,templateId:a.templateId,title:"生成中",requirement:a.requirement||"",markdown:"",status:"generating",assets:[],createdAt:c,updatedAt:c};u(l,b);let m=new AbortController,o=(0,h.OX)({...a,projectRoot:b,signal:m.signal,onProgress:a=>{try{let c=t(e,b);c&&"generating"===c.status&&(u({...c,executionStages:a},b),console.log(`[gen] progress saved: ${a.length} stages, doc=${e}`))}catch(a){console.error("[gen] progress save error:",a)}}}).then(async a=>{let c=t(e,b);if(!c||"generating"!==c.status)return c??l;let d=a.validationIssues.filter(a=>"error"===a.level||"warning"===a.level).map(a=>a.suggestion?`${a.message}:${a.suggestion}`:a.message)
|
|
1
|
+
"use strict";(()=>{var a={};a.id=3269,a.ids=[3269],a.modules={15751:a=>{a.exports=require("xlsx")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},36583:(a,b,c)=>{c.r(b),c.d(b,{config:()=>n,default:()=>m,handler:()=>p});var d={};c.r(d),c.d(d,{default:()=>j});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(67461);function j(a,b){try{if("GET"===a.method){let c="string"==typeof a.query.id?a.query.id:void 0;if(c){let a=(0,i.v7)(c);if(!a)return b.status(404).json({error:"Document not found"});return b.status(200).json({document:a})}return b.status(200).json({documents:(0,i.M$)()})}if("PUT"===a.method){let{id:c,...d}=a.body;if(!c)return b.status(400).json({error:"id required"});let e=(0,i.a6)(c,d);if(!e)return b.status(404).json({error:"Document not found"});return b.status(200).json({document:e})}if("POST"===a.method){let{action:c,documentId:d}=a.body;if("abort"===c&&d){let a=(0,i.r)(d);if(!a)return b.status(404).json({error:"Document not found or not generating"});return b.status(200).json({document:a})}return b.status(400).json({error:"Unknown action"})}if("DELETE"===a.method){let c="string"==typeof a.query.id?a.query.id:a.body?.id;if(!c)return b.status(400).json({error:"id required"});return(0,i.QG)(c),b.status(200).json({ok:!0})}return b.status(405).json({error:"Method not allowed"})}catch(a){console.error("[api] documents/generated",a),b.status(500).json({error:a instanceof Error?a.message:"Internal server error"})}}var k=c(68970),l=c(50296);let m=(0,h.M)(d,"default"),n=(0,h.M)(d,"config"),o=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/documents/generated",pathname:"/api/documents/generated",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function p(a,b,c){let d=await o.prepare(a,b,{srcPage:"/api/documents/generated"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,k.getTracer)(),e=d.getActiveScopeSpan(),j=o.instrumentationOnRequestError.bind(o),m=async e=>o.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:o.isDev,page:"/api/documents/generated",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==l.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await m(e):await d.withPropagatedContext(a.headers,()=>d.trace(l.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:k.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},m))}catch(a){if(o.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},48161:a=>{a.exports=require("node:os")},67461:(a,b,c)=>{c.d(b,{BH:()=>y,Gl:()=>l,JU:()=>A,Jz:()=>D,M$:()=>s,QG:()=>x,SE:()=>p,YL:()=>E,a6:()=>v,r:()=>w,uc:()=>C,v7:()=>t,yE:()=>z});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(56697),i=c(99842),j=c(23328);let k=new Map;function l(a=(0,j.aY)()){let b=g.join(f.homedir(),".customize-agent","projects",function(a=(0,j.aY)()){return d.createHash("sha1").update(g.resolve(a)).digest("hex").slice(0,12)}(a),"generatedDocuments");return e.mkdirSync(g.join(b,"drafts"),{recursive:!0}),e.mkdirSync(g.join(b,"assets"),{recursive:!0}),b}function m(a=(0,j.aY)()){return g.join(l(a),"index.json")}function n(a=(0,j.aY)()){return g.join(l(a),"assets.json")}function o(a,b=(0,j.aY)()){return g.join(l(b),"drafts",`${a}.json`)}function p(a,b=(0,j.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(l(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join(b,"knowledgeBase",a.path):null}function q(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function r(a,b){e.mkdirSync(g.dirname(a),{recursive:!0}),e.writeFileSync(a,JSON.stringify(b,null,2))}function s(a=(0,j.aY)()){return q(m(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function t(a,b=(0,j.aY)()){return q(o(a,b),null)}function u(a,b=(0,j.aY)()){let c=Date.now(),d={...a,updatedAt:c};r(o(d.id,b),d);let e=s(b).filter(a=>a.id!==d.id);return e.unshift(d),r(m(b),e.map(a=>({...a,draft:void 0,executionStages:a.executionStages}))),d}function v(a,b,c=(0,j.aY)()){let d=t(a,c);return d?u({...d,...b,id:a},c):null}function w(a,b=(0,j.aY)()){let c=t(a,b);if(!c||"generating"!==c.status)return null;for(let[b,c]of k)if(c.documentId===a){c.controller.abort(),k.delete(b);break}return u({...c,status:"failed",error:"用户中止",updatedAt:Date.now()},b)}function x(a,b=(0,j.aY)()){try{e.rmSync(o(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}r(m(b),s(b).filter(b=>b.id!==a))}function y(a=(0,j.aY)()){return q(n(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function z(a,b=(0,j.aY)()){return y(b).find(b=>b.id===a)||null}function A(a,b=(0,j.aY)()){let c=z(a,b);if(!c)return!1;let d=p(c,b);if(d&&d.startsWith(l(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return r(n(b),y(b).filter(b=>b.id!==a)),!0}async function B(a,b=(0,j.aY)()){let c=g.join("生成文档",`${a.title.replace(/[\\/:*?"<>|]/gu,"_").slice(0,120)||"generated-document"}-${a.id}.md`).split(g.sep).join("/"),d=g.join(b,"knowledgeBase",c);e.mkdirSync(g.dirname(d),{recursive:!0}),e.writeFileSync(d,a.editedMarkdown||a.markdown,"utf8");let f=await (0,j.Qh)().getProject(b);return await f.reindexFile(c),c}async function C(a,b=(0,j.aY)()){let c=z(a,b);if(!c?.path)return null;let d=p(c,b);if(!d||!e.existsSync(d))throw Error("asset file not found");let f=g.join("生成资源",g.basename(c.path)).split(g.sep).join("/"),h=g.join(b,"knowledgeBase",f);e.mkdirSync(g.dirname(h),{recursive:!0}),d!==h&&e.copyFileSync(d,h);let i=await (0,j.Qh)().getProject(b);await i.reindexFile(f);let k=y(b).map(b=>b.id===a?{...b,path:f,source:"generated",indexed:!0,updatedAt:Date.now()}:b);return r(n(b),k),k.find(b=>b.id===a)||null}function D(a,b,c=(0,j.aY)()){let d=z(a,c);if(!d)return null;let f=p(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function E(a,b=(0,j.aY)()){let c=Date.now(),e=`doc-${c}-${d.randomBytes(4).toString("hex")}`,f=`task-${c}-${d.randomBytes(4).toString("hex")}`,l={id:e,taskId:f,templateId:a.templateId,title:"生成中",requirement:a.requirement||"",markdown:"",status:"generating",assets:[],createdAt:c,updatedAt:c};u(l,b);let m=new AbortController,o=(0,h.OX)({...a,projectRoot:b,signal:m.signal,onProgress:a=>{try{let c=t(e,b);c&&"generating"===c.status&&(u({...c,executionStages:a},b),console.log(`[gen] progress saved: ${a.length} stages, doc=${e}`))}catch(a){console.error("[gen] progress save error:",a)}}}).then(async a=>{let c=t(e,b);if(!c||"generating"!==c.status)return c??l;let d=a.validationIssues.filter(a=>"error"===a.level||"warning"===a.level).map(a=>a.suggestion?`${a.message}:${a.suggestion}`:a.message);a.exportGate.passed||0!==d.length||d.push("导出门禁未通过:存在未完成的检查项");let f=u(function(a){let b=a=>({...a,content:a.content.slice(0,500)}),c=a.draft?{...a.draft,chapters:a.draft.chapters.map(a=>({...a,evidence:a.evidence.map(b)}))}:a.draft;return{...a,draft:c}}({...c,templateName:a.templateName,title:a.title,markdown:a.markdown,status:d.length>0?"warning":"completed",draft:a,executionStages:a.executionStages,assets:a.assets||[],completedAt:Date.now(),warningIssues:d}),b);!function(a,b=(0,j.aY)()){let c=a.draft?.sources.slice(0,8).map(a=>a.filePath).join("、")||"无明确来源",d=a.warningIssues?.slice(0,5).join(";")||"无阻断问题";(0,i.i3)("project_fact",`文档《${a.title}》已基于模板“${a.templateName||a.templateId}”生成。用户要求:${a.requirement||"未填写"}。主要资料来源:${c}。校验结果:${d}。`,`Project: ${g.resolve(b)} | Generated document: ${a.id}`)}(f,b);let h=function(a,b,c=(0,j.aY)()){let d=Date.now(),e=[...y(c)];for(let c of a){let a=e.findIndex(a=>a.id===c.id),f=c.path?.startsWith("generatedDocuments/assets/")||"generated"===c.status||"prompt_ready"===c.status?"generated":"knowledge_base",h={...c,name:g.basename(c.path||c.url||c.id),source:f,indexed:a>=0&&e[a].indexed,usedByDocumentIds:a>=0?[...new Set([...e[a].usedByDocumentIds,b])]:[b],createdAt:a>=0?e[a].createdAt:d,updatedAt:d};a>=0?e[a]={...e[a],...h}:e.push(h)}return r(n(c),e),e}(a.assets||[],e,b);for(let a of(await B(f,b).catch(a=>console.warn("[generated-documents] 自动入库生成文档失败",a)),h.filter(a=>a.usedByDocumentIds.includes(e)&&!a.indexed)))await C(a.id,b).catch(b=>console.warn("[generated-documents] 自动入库生成资源失败",a.id,b));return f}).catch(a=>{let c=t(e,b);return c&&"generating"===c.status?u({...c,status:"failed",error:a instanceof Error?a.message:String(a)},b):c??l}).finally(()=>{k.delete(f)});return k.set(f,{id:f,documentId:e,status:"generating",controller:m,promise:o}),{taskId:f,documentId:e,record:l}}},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:a=>{a.exports=require("node:path")},77598:a=>{a.exports=require("node:crypto")},87550:a=>{a.exports=require("better-sqlite3")},95393:a=>{a.exports=require("@customize-agent/llm")},96770:a=>{a.exports=require("@customize-agent/runtime")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705,6697],()=>b(b.s=36583));module.exports=c})();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";(()=>{var a={};a.id=9452,a.ids=[9452],a.modules={6708:(a,b,c)=>{c.d(b,{CU:()=>q,H7:()=>p,JB:()=>m,Qf:()=>k,kW:()=>n,oy:()=>l,sn:()=>o});var d=c(29021),e=c(21820),f=c(33873),g=c(19898);function h(a){return f.join(e.homedir(),".customize-agent","projects",(0,g.computeProjectId)(a),"kb-operations.jsonl")}function i(a){let b=h(a);return d.existsSync(b)?d.readFileSync(b,"utf8").split("\n").filter(Boolean).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}}):[]}function j(a,b){let c=h(a);d.mkdirSync(f.dirname(c),{recursive:!0}),d.writeFileSync(c,`${b.slice(-200).map(a=>JSON.stringify(a)).join("\n")}
|
|
2
|
-
`,"utf8")}function k(a,b){let c=Date.now(),d=i(a),e=d.findIndex(a=>a.id===b.id),f=e>=0?d[e]:void 0,g={id:b.id,type:b.type,title:b.title,stage:b.stage??f?.stage??"uploading",status:b.status??f?.status??"processing",message:b.message??f?.message??"",percent:b.percent??f?.percent??0,fileName:b.fileName??f?.fileName,filePath:b.filePath??f?.filePath,chunkCount:b.chunkCount??f?.chunkCount,textLength:b.textLength??f?.textLength,extractionMode:b.extractionMode??f?.extractionMode,error:b.error??f?.error,createdAt:f?.createdAt??c,updatedAt:c};return e>=0?d[e]=g:d.push(g),j(a,d),g}function l(a,b=50){return i(a).sort((a,b)=>b.updatedAt-a.updatedAt).slice(0,b)}function m(a,b){return i(a).find(a=>a.id===b)}function n(a,b){return i(a).filter(a=>!b||a.type===b).sort((a,b)=>b.updatedAt-a.updatedAt)[0]}function o(a){return i(a).filter(a=>"processing"===a.status).sort((a,b)=>b.updatedAt-a.updatedAt)}function p(a){let b=i(a),c=h(a);return d.existsSync(c)&&d.unlinkSync(c),b.length}function q(a,b){let c=i(a),d=c.filter(a=>a.id!==b);return d.length!==c.length&&(j(a,d),!0)}},15151:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{config:()=>p,default:()=>o});var e=c(67313),f=c(23328),g=c(97217),h=c(6708),i=c(70432),j=a([e]);e=(j.then?(await j)():j)[0];let p={api:{bodyParser:!1,responseLimit:!1}};function k(a){return Array.isArray(a)?a[0]:a}function l(a){return"1"===a||"true"===a}function m(a,b){let c=Number.parseInt(a??"",10);return Number.isFinite(c)?c:b}function n(a){return a.originalFilename||a.newFilename||"uploaded-file"}async function o(a,b){
|
|
2
|
+
`,"utf8")}function k(a,b){let c=Date.now(),d=i(a),e=d.findIndex(a=>a.id===b.id),f=e>=0?d[e]:void 0,g={id:b.id,type:b.type,title:b.title,stage:b.stage??f?.stage??"uploading",status:b.status??f?.status??"processing",message:b.message??f?.message??"",percent:b.percent??f?.percent??0,fileName:b.fileName??f?.fileName,filePath:b.filePath??f?.filePath,chunkCount:b.chunkCount??f?.chunkCount,textLength:b.textLength??f?.textLength,extractionMode:b.extractionMode??f?.extractionMode,error:b.error??f?.error,createdAt:f?.createdAt??c,updatedAt:c};return e>=0?d[e]=g:d.push(g),j(a,d),g}function l(a,b=50){return i(a).sort((a,b)=>b.updatedAt-a.updatedAt).slice(0,b)}function m(a,b){return i(a).find(a=>a.id===b)}function n(a,b){return i(a).filter(a=>!b||a.type===b).sort((a,b)=>b.updatedAt-a.updatedAt)[0]}function o(a){return i(a).filter(a=>"processing"===a.status).sort((a,b)=>b.updatedAt-a.updatedAt)}function p(a){let b=i(a),c=h(a);return d.existsSync(c)&&d.unlinkSync(c),b.length}function q(a,b){let c=i(a),d=c.filter(a=>a.id!==b);return d.length!==c.length&&(j(a,d),!0)}},15151:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{config:()=>p,default:()=>o});var e=c(67313),f=c(23328),g=c(97217),h=c(6708),i=c(70432),j=a([e]);e=(j.then?(await j)():j)[0];let p={api:{bodyParser:!1,responseLimit:!1}};function k(a){return Array.isArray(a)?a[0]:a}function l(a){return"1"===a||"true"===a}function m(a,b){let c=Number.parseInt(a??"",10);return Number.isFinite(c)?c:b}let q=/(^|\/)\.DS_Store$|(^|\/)Thumbs\.db$|(^|\/)__MACOSX\/|\.bak$/iu;function n(a){return a.originalFilename||a.newFilename||"uploaded-file"}async function o(a,b){var c;if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});let d=(c=a.query.uploadId,(Array.isArray(c)?c[0]:c)||`upload-${Date.now()}`),j=(0,f.aY)(),o="文件夹上传";try{j&&((0,h.Qf)(j,{id:d,type:"upload",title:`上传 ${o}`,stage:"uploading",status:"processing",percent:1,message:"正在接收上传请求",fileName:o}),(0,g.M)(d,{stage:"uploading",percent:1,message:"正在接收上传请求",fileName:o}));let c=await function(a){let b=Number(process.env.CUSTOMIZE_KB_UPLOAD_MAX_BYTES||0x100000000),c=(0,e.default)({multiples:!0,maxFileSize:b,maxTotalFileSize:b,keepExtensions:!0,allowEmptyFiles:!0});return new Promise((b,d)=>{c.parse(a,(a,c,e)=>{var f;if(a)return void d(a);let g=Object.values(e).flat().filter(Boolean),h=m(k(c.batchIndex),0),i=Math.max(1,m(k(c.totalBatches),1));b({fields:{uploadId:k(c.uploadId),projectRoot:k(c.projectRoot),relativePaths:(f=c.relativePaths)?Array.isArray(f)?f:[f]:[],batchIndex:h,totalBatches:i,startIndex:l(k(c.startIndex))||0===h,uploadComplete:l(k(c.uploadComplete))||h>=i-1,fileOffset:Math.max(0,m(k(c.fileOffset),500*h))},files:g})})})}(a);if(d=c.fields.uploadId||d,!(j=c.fields.projectRoot||j))return b.status(400).json({error:"Project root is required"});if(0===c.files.length)return b.status(400).json({error:"files required"});if(c.fields.relativePaths.length!==c.files.length)return b.status(400).json({error:"relativePaths count mismatch"});let p=c.files.map((a,b)=>({file:a,relativePath:c.fields.relativePaths[b]})).filter(a=>(a.file.size||0)>0&&!q.test(a.relativePath||n(a.file))),r=c.files.length-p.length;o=1===p.length?n(p[0].file):`${p.length} 个文件`;let s=await (0,f.Qh)().getProject(j);if(0===p.length){c.fields.uploadComplete&&await s.stageUploadedFilePaths([],d,c.fields.fileOffset,!0);let a=`第 ${c.fields.batchIndex+1}/${c.fields.totalBatches} 批仅包含空文件、系统文件或备份文件,已跳过`;return(0,g.M)(d,{stage:c.fields.uploadComplete?"done":"uploading",percent:c.fields.uploadComplete?100:Math.min(4,Math.max(1,Math.round((c.fields.batchIndex+1)/c.fields.totalBatches*4))),message:a,fileName:o}),(0,h.Qf)(j,{id:d,type:"upload",title:`上传 ${o}`,stage:c.fields.uploadComplete?"done":"uploading",status:"warning",percent:c.fields.uploadComplete?100:Math.min(4,Math.max(1,Math.round((c.fields.batchIndex+1)/c.fields.totalBatches*4))),message:a,fileName:o}),b.status(202).json({success:!0,accepted:!0,operationId:d,jobs:[],skippedEmptyCount:r,batchIndex:c.fields.batchIndex,totalBatches:c.fields.totalBatches,indexingStarted:!1})}let t=p.map(a=>({fileName:n(a.file),sourcePath:a.file.filepath,targetRelativePath:a.relativePath})),u=await s.stageUploadedFilePaths(t,d,c.fields.fileOffset,c.fields.uploadComplete),v=u[0]?.relativePath,w=c.fields.startIndex?5:Math.min(4,Math.max(1,Math.round((c.fields.batchIndex+1)/c.fields.totalBatches*4))),x=c.fields.startIndex?`文件已落盘,后台索引任务已排队${r?`,已跳过 ${r} 个空文件、系统文件或备份文件`:""}`:`文件已落盘:第 ${c.fields.batchIndex+1}/${c.fields.totalBatches} 批${r?`,已跳过 ${r} 个空文件、系统文件或备份文件`:""}`;return(0,g.M)(d,{stage:"uploading",percent:w,message:x,fileName:o}),(0,h.Qf)(j,{id:d,type:"upload",title:`上传 ${o}`,stage:"uploading",status:"processing",percent:w,message:x,fileName:o,filePath:v}),c.fields.startIndex&&(0,i.DA)({id:`${d}-worker`,projectRoot:j,vectorMode:"sync",uploadOperationId:d,uploadTitle:o}),b.status(202).json({success:!0,accepted:!0,operationId:d,relativePath:1===p.length?v:void 0,jobs:u,skippedEmptyCount:r,batchIndex:c.fields.batchIndex,totalBatches:c.fields.totalBatches,indexingStarted:c.fields.startIndex})}catch(c){let a=c instanceof Error?c.message:"上传或索引失败";if((0,g.M)(d,{stage:"error",percent:100,message:a,fileName:o}),j){try{let b=await (0,f.Qh)().getProject(j);await b.stageUploadedFilePaths([],d,0,!0),b.failPendingIndexJobs(a)}catch(a){console.error("[api] kb/upload cleanup",a)}(0,h.Qf)(j,{id:d,type:"upload",title:`上传 ${o}`,stage:"error",status:"error",percent:100,message:a,fileName:o,error:a})}console.error("[api] kb/upload",c),b.status(500).json({error:a})}}d()}catch(a){d(a)}})},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},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}
|
|
3
3
|
${a.category}
|
|
4
4
|
${a.format}
|
|
5
5
|
${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}}},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},67313:a=>{a.exports=import("formidable")},70432:(a,b,c)=>{c.d(b,{DA:()=>k,ls:()=>l});var d=c(79646),e=c(33873),f=c.n(e),g=c(23328),h=c(6708);let i=new Map;async function j(a,b,c,d){let e;try{e=await (0,g.Qh)().getProject(a.projectRoot);let f=e=>{var f;return(0,h.Qf)(a.projectRoot,{id:b,type:c,title:d,stage:(f=e.stage,"parsing"===f||"chunking"===f||"vectorizing"===f||"done"===f||"error"===f?f:"indexing"===f?"chunking":"scanning"===f?"uploading":"vectorizing"),status:"error"===e.stage?"error":"processing",percent:e.percent,message:e.message,filePath:e.filePath||a.relativePath,chunkCount:e.chunkCount,error:e.vectorStatus?.error})},i=a.relativePath?await e.reindexFile(a.relativePath,{vectorMode:a.vectorMode,onProgress:f}):a.forceReindexAll?await e.forceReindexAll({vectorMode:a.vectorMode,onProgress:f}):await e.consumePendingIndexJobs({vectorMode:a.vectorMode,onProgress:f,waitForUploadId:a.uploadOperationId}),j=0;for(;!a.relativePath&&(e.countPendingIndexJobs()>0||a.uploadOperationId&&e.uploadSessionIsOpen(a.uploadOperationId)&&j<120);){if(0===e.countPendingIndexJobs()){j+=1,await new Promise(a=>setTimeout(a,1e3));continue}j=0;let b=await e.consumePendingIndexJobs({vectorMode:a.vectorMode,onProgress:f,waitForUploadId:a.uploadOperationId});i={newFiles:[...i.newFiles,...b.newFiles],modifiedFiles:[...i.modifiedFiles,...b.modifiedFiles],deletedFiles:[...i.deletedFiles,...b.deletedFiles],unchangedCount:i.unchangedCount+b.unchangedCount,mtimeOnlyCount:i.mtimeOnlyCount+b.mtimeOnlyCount,skippedFiles:[...i.skippedFiles,...b.skippedFiles],hasChanges:i.hasChanges||b.hasChanges,diffTimeMs:i.diffTimeMs+b.diffTimeMs}}let k=e.getVectorStatus();if("error"===k.status){let f=k.error||"HNSWLib 向量入库失败";return(0,h.Qf)(a.projectRoot,{id:b,type:c,title:d,stage:"error",status:"error",percent:100,message:f,error:f}),{success:!1,error:f,stats:{...e.getStats(),vectorStatus:k}}}return(0,h.Qf)(a.projectRoot,{id:b,type:c,title:d,stage:"done",status:"success",percent:100,message:a.relativePath?"单文件重新解析完成":"知识库后台索引完成",filePath:a.relativePath,fileName:a.relativePath?.split("/").pop()}),{success:!0,stats:{...e.getStats(),vectorStatus:k}}}catch(g){let f=g instanceof Error?g.stack||g.message:String(g);return e?.failPendingIndexJobs?.(f),(0,h.Qf)(a.projectRoot,{id:b,type:c,title:d,stage:"error",status:"error",percent:100,message:f,error:f}),{success:!1,error:f}}}function k(a){!function(a){let b=i.get(a.projectRoot);if(b)return b.promise;let c=a.uploadOperationId??a.id,e=a.uploadOperationId?"upload":"reindex",g=a.uploadOperationId?`上传 ${a.uploadTitle??"文件"}`:a.relativePath?`重新解析 ${a.relativePath}`:"知识库后台索引";(0,h.Qf)(a.projectRoot,{id:c,type:e,title:g,stage:"uploading",status:"processing",percent:5,message:"索引任务已进入后台队列",filePath:a.relativePath,fileName:a.relativePath?.split("/").pop()});let k=("1"===process.env.CUSTOMIZE_AGENT_DISABLE_KB_CHILD_PROCESS?j(a,c,e,g):function(a,b,c,e){let g=f().resolve(process.cwd(),"scripts/kb-index-worker.cjs");return new Promise(f=>{let i=(0,d.fork)(g,[JSON.stringify({...a,operationId:b})],{cwd:process.cwd(),stdio:["ignore","ignore","ignore","ipc"],env:process.env});i.on("error",d=>{let g=d instanceof Error?d.message:String(d);(0,h.Qf)(a.projectRoot,{id:b,type:c,title:e,stage:"error",status:"error",percent:100,message:g,error:g}),f({success:!1,error:g})}),i.on("exit",d=>{if(0===d)f({success:!0});else{let g=`知识库后台进程退出,退出码 ${d??"unknown"}`;(0,h.Qf)(a.projectRoot,{id:b,type:c,title:e,stage:"error",status:"error",percent:100,message:g,error:g}),f({success:!1,error:g})}})})}(a,c,e,g)).finally(()=>i.delete(a.projectRoot));i.set(a.projectRoot,{operationId:c,promise:k,startedAt:Date.now()})}(a)}function l(a){let b=i.get(a);return b?{operationId:b.operationId,startedAt:b.startedAt}:void 0}},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},79646:a=>{a.exports=require("child_process")},87550:a=>{a.exports=require("better-sqlite3")},97217:(a,b,c)=>{c.d(b,{M:()=>e,Q:()=>f});let d=new Map;function e(a,b){a&&d.set(a,{id:a,...b,updatedAt:Date.now()})}function f(a){let b=d.get(a);if(b)return Date.now()-b.updatedAt>18e5?void d.delete(a):b}},99249:(a,b,c)=>{c.a(a,async(a,d)=>{try{c.r(b),c.d(b,{config:()=>o,default:()=>n,handler:()=>m});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(15151),j=c(68970),k=c(50296),l=a([i]);i=(l.then?(await l)():l)[0];let n=(0,h.M)(i,"default"),o=(0,h.M)(i,"config"),p=new g.PagesAPIRouteModule({definition:{kind:f.A.PAGES_API,page:"/api/kb/upload",pathname:"/api/kb/upload",bundlePath:"",filename:""},userland:i,distDir:".next",relativeProjectDir:""});async function m(a,b,c){let d=await p.prepare(a,b,{srcPage:"/api/kb/upload"});if(!d){b.statusCode=400,b.end("Bad Request"),null==c.waitUntil||c.waitUntil.call(c,Promise.resolve());return}let{query:f,params:g,prerenderManifest:h,routerServerContext:i}=d;try{let c=a.method||"GET",d=(0,j.getTracer)(),e=d.getActiveScopeSpan(),l=p.instrumentationOnRequestError.bind(p),m=async e=>p.render(a,b,{query:{...f,...g},params:g,allowedRevalidateHeaderKeys:[],multiZoneDraftMode:!1,trustHostHeader:!1,previewProps:h.preview,propagateError:!1,dev:p.isDev,page:"/api/kb/upload",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>l(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==k.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await m(e):await d.withPropagatedContext(a.headers,()=>d.trace(k.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:j.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},m))}catch(a){if(p.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}d()}catch(a){d(a)}})}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=99249));module.exports=c})();
|