@customize-agent/server 4.0.2 → 4.0.3
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 +20 -20
- package/.next/prerender-manifest.json +3 -3
- package/.next/server/chunks/3445.js +40 -14
- package/.next/server/chunks/8204.js +1 -1
- package/.next/server/chunks/9270.js +1 -1
- package/.next/server/chunks/9301.js +2 -2
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/pages/404.html +1 -1
- package/.next/server/pages/500.html +1 -1
- package/.next/server/pages/api/assets/generated/preview.js +1 -1
- package/.next/server/pages/api/assets/generated.js +1 -1
- package/.next/server/pages/api/context.js +25 -1
- package/.next/server/pages/api/documents/export.js +1 -1
- package/.next/server/pages/api/documents/generate.js +1 -1
- package/.next/server/pages/api/documents/generated/[id].js +1 -1
- package/.next/server/pages/api/documents/generated.js +1 -1
- package/.next/server/pages/asset-library.html +1 -1
- package/.next/server/pages/context/long-term.html +1 -1
- package/.next/server/pages/context/short-term.html +1 -1
- package/.next/server/pages/document-roles.html +1 -1
- package/.next/server/pages/document-specs.html +1 -1
- package/.next/server/pages/documents.html +1 -1
- package/.next/server/pages/guide.html +1 -1
- package/.next/server/pages/index.html +1 -1
- package/.next/server/pages/knowledge/file-detail.html +1 -1
- package/.next/server/pages/knowledge/files.html +1 -1
- package/.next/server/pages/knowledge/manage.html +1 -1
- package/.next/server/pages/knowledge/search.html +1 -1
- package/.next/server/pages/knowledge/search.js.nft.json +1 -1
- package/.next/server/pages/knowledge.html +1 -1
- package/.next/server/pages/models.html +1 -1
- package/.next/server/pages/overview.html +1 -1
- package/.next/server/pages/prompt.html +1 -1
- package/.next/server/pages/settings.html +1 -1
- package/.next/server/pages/system/logs.html +1 -1
- package/.next/server/pages-manifest.json +24 -24
- package/.next/static/{JSSClm7Ao89P7zD8JkYIG → Hr2tsu12MBY5TxEsnEZnS}/_buildManifest.js +1 -1
- package/.next/static/chunks/261-38aa5b7186d6c652.js +1 -0
- package/.next/static/chunks/4427-3157df6662359f8b.js +1 -0
- package/.next/static/chunks/{7150-123ff059dd0e2eb9.js → 7150-337333a0e39eac73.js} +2 -2
- package/.next/static/chunks/7223-97205011db4aa4ae.js +1 -0
- package/.next/static/chunks/8676-ae7c8476d85cc5eb.js +1 -0
- package/.next/static/chunks/pages/{_app-38ff7f551a80399f.js → _app-efe7c86ef4792ef9.js} +14 -14
- package/.next/static/chunks/pages/document-roles-612878579899e768.js +1 -0
- package/.next/static/chunks/pages/documents-ebcb8c79491fe28a.js +1 -0
- package/.next/static/chunks/pages/guide-4aa2f239f4d37599.js +1 -0
- package/.next/static/chunks/pages/knowledge/search-5d949867a3849147.js +1 -0
- package/.next/static/chunks/pages/{models-a37db9926d9a0a52.js → models-1788b9741155e3ce.js} +1 -1
- package/.next/static/chunks/pages/overview-7390048298712904.js +1 -0
- package/next.config.ts +3 -0
- package/package.json +2 -2
- package/.next/static/chunks/261-8a5ce39d74fc746e.js +0 -1
- package/.next/static/chunks/4427-302c5267a1f8493e.js +0 -1
- package/.next/static/chunks/7223-58376fd8a1d62df4.js +0 -1
- package/.next/static/chunks/8676-5982391f15ea1190.js +0 -1
- package/.next/static/chunks/pages/document-roles-ab6dfead3fd99a2c.js +0 -1
- package/.next/static/chunks/pages/documents-c04e4ed600384e6a.js +0 -1
- package/.next/static/chunks/pages/guide-c5ef2e13eab4c312.js +0 -1
- package/.next/static/chunks/pages/knowledge/search-72a46d6d1200ef93.js +0 -1
- package/.next/static/chunks/pages/overview-3dd4c539302d7349.js +0 -1
- /package/.next/static/{JSSClm7Ao89P7zD8JkYIG → Hr2tsu12MBY5TxEsnEZnS}/_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")},31421:a=>{a.exports=require("node:child_process")},33873:a=>{a.exports=require("path")},48161:a=>{a.exports=require("node:os")},67461:(a,b,c)=>{c.d(b,{BH:()=>
|
|
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")},31421:a=>{a.exports=require("node:child_process")},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(73445),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({...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,3328,7367,3445],()=>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:()=>
|
|
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(73445),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({...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,3328,7367,3445],()=>b(b.s=55883));module.exports=c})();
|
|
@@ -1 +1,25 @@
|
|
|
1
|
-
"use strict";(()=>{var a={};a.id=6044,a.ids=[6044],a.modules={21820:a=>{a.exports=require("os")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},
|
|
1
|
+
"use strict";(()=>{var a={};a.id=6044,a.ids=[6044],a.modules={21820:a=>{a.exports=require("os")},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},87354:(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(99842);function j(a,b){try{if("GET"===a.method){let c=a.query.type||"long_term";if("1"===a.query.stats)return b.status(200).json((0,i.p)(c));let d=a.query.search,e="long_term"===c?(0,i.dg)(d):(0,i.pJ)(d);return b.status(200).json(e)}if("POST"===a.method){let{action:c,type:d="long_term"}=a.body;if("compress"===c)return b.status(200).json({success:!0,...(0,i.PH)(d)});if("clear"===c)return b.status(200).json({success:!0,deleted:(0,i.E)(d)});return b.status(400).json({error:"Unknown action"})}if("DELETE"===a.method){let c=a.query.id;if(!c)return b.status(400).json({error:"id required"});if(!(0,i.h0)(c))return b.status(404).json({error:"Not found"});return b.status(200).json({success:!0})}if("PUT"===a.method){let{id:c,content:d,context:e}=a.body;if(!c||!d)return b.status(400).json({error:"id and content required"});if(!(0,i.jk)(c,{content:d,context:e}))return b.status(404).json({error:"Not found"});return b.status(200).json({success:!0})}b.status(405).json({error:"Method not allowed"})}catch(a){console.error("[api] context",a),b.status(500).json({error:"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/context",pathname:"/api/context",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function p(a,b,c){let d=await o.prepare(a,b,{srcPage:"/api/context"});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/context",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())}}},87550:a=>{a.exports=require("better-sqlite3")},99842:(a,b,c)=>{c.d(b,{E:()=>t,Hh:()=>n,PH:()=>u,dg:()=>l,h0:()=>p,i3:()=>o,jk:()=>q,p:()=>s,pJ:()=>m});var d=c(87550),e=c.n(d),f=c(33873),g=c(21820),h=c(29021);let i={project_fact:"项目知识",user_preference:"用户偏好",feedback:"历史纠偏",pattern:"解决方案"};function j(){let a=f.join(g.homedir(),".customize-agent","memory.db");return h.existsSync(a)?new(e())(a,{readonly:!0}):null}function k(a){let b=Number(a.access_count??0);return{id:String(a.id),title:String(a.content||"").slice(0,80),content:String(a.content||""),type:String(a.type||"project_fact"),importance:b>=5?"high":b>=2?"medium":"low",tags:[i[String(a.type)]||String(a.type)],source:String(a.context||"").slice(0,100),created_at:new Date(String(a.created_at)).getTime(),updated_at:new Date(String(a.updated_at)).getTime()}}function l(a){let b=j();if(!b)return[];try{let c="SELECT * FROM memories WHERE access_count >= 2",d=[];return a&&(c+=" AND (content LIKE ? OR context LIKE ?)",d.push(`%${a}%`,`%${a}%`)),c+=" ORDER BY access_count DESC, updated_at DESC LIMIT 200",b.prepare(c).all(...d).map(k)}finally{b.close()}}function m(a){let b=j();if(!b)return[];try{let c="SELECT * FROM memories WHERE access_count < 2",d=[];return a&&(c+=" AND (content LIKE ? OR context LIKE ?)",d.push(`%${a}%`,`%${a}%`)),c+=" ORDER BY updated_at DESC LIMIT 200",b.prepare(c).all(...d).map(k)}finally{b.close()}}function n(a,b=8,c){let d=j();if(!d)return[];try{let e=a.split(/[\s,,。;;::、/\\|]+/u).map(a=>a.trim()).filter(a=>a.length>=2).slice(0,8),g=c?`%Project: ${f.resolve(c)}%`:void 0;if(0===e.length)return(g?d.prepare("SELECT * FROM memories WHERE context LIKE ? ORDER BY access_count DESC, updated_at DESC LIMIT ?").all(g,b):d.prepare("SELECT * FROM memories ORDER BY access_count DESC, updated_at DESC LIMIT ?").all(b)).map(k);let h=e.map(()=>"(content LIKE ? OR context LIKE ?)").join(" OR "),i=e.flatMap(a=>[`%${a}%`,`%${a}%`]);return(g?d.prepare(`
|
|
2
|
+
SELECT * FROM memories
|
|
3
|
+
WHERE context LIKE ? AND (${h})
|
|
4
|
+
ORDER BY access_count DESC, updated_at DESC
|
|
5
|
+
LIMIT ?
|
|
6
|
+
`).all(g,...i,b):d.prepare(`
|
|
7
|
+
SELECT * FROM memories
|
|
8
|
+
WHERE ${h}
|
|
9
|
+
ORDER BY access_count DESC, updated_at DESC
|
|
10
|
+
LIMIT ?
|
|
11
|
+
`).all(...i,b)).map(k)}finally{d.close()}}function o(a,b,c=""){let d=b.replace(/\s+/gu," ").trim();if(!d)return null;let i=f.join(g.homedir(),".customize-agent","memory.db");h.mkdirSync(f.dirname(i),{recursive:!0});let j=new(e())(i);try{j.exec(`
|
|
12
|
+
CREATE TABLE IF NOT EXISTS memories (
|
|
13
|
+
id TEXT PRIMARY KEY,
|
|
14
|
+
type TEXT NOT NULL CHECK(type IN ('project_fact', 'user_preference', 'feedback', 'pattern')),
|
|
15
|
+
content TEXT NOT NULL,
|
|
16
|
+
context TEXT NOT NULL DEFAULT '',
|
|
17
|
+
access_count INTEGER NOT NULL DEFAULT 0,
|
|
18
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
19
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
20
|
+
);
|
|
21
|
+
`);let b=function(a){let b=0x811c9dc5;for(let c=0;c<a.length;c++)b^=a.charCodeAt(c),b=Math.imul(b,0x1000193);return(b>>>0).toString(16).padStart(8,"0")}(`${c}
|
|
22
|
+
${d.slice(0,200)}`);return j.prepare(`
|
|
23
|
+
INSERT INTO memories (id, type, content, context) VALUES (?, ?, ?, ?)
|
|
24
|
+
ON CONFLICT(id) DO UPDATE SET access_count = access_count + 1, updated_at = datetime('now'), context = ?
|
|
25
|
+
`).run(b,a,d,c,c),b}finally{j.close()}}function p(a){let b=f.join(g.homedir(),".customize-agent","memory.db");if(!h.existsSync(b))return!1;let c=new(e())(b);try{return c.prepare("DELETE FROM memories WHERE id = ?").run(a).changes>0}finally{c.close()}}function q(a,b){let c=f.join(g.homedir(),".customize-agent","memory.db");if(!h.existsSync(c))return!1;let d=new(e())(c);try{return d.prepare("UPDATE memories SET content = ?, context = ?, updated_at = datetime('now') WHERE id = ?").run(b.content,b.context||"",a).changes>0}finally{d.close()}}function r(a){return"long_term"===a?"access_count >= 2":"access_count < 2"}function s(a){let b=j();if(!b)return{count:0,totalBytes:0};try{let c=b.prepare(`SELECT COUNT(*) as count, COALESCE(SUM(LENGTH(content) + LENGTH(context)), 0) as totalBytes FROM memories WHERE ${r(a)}`).get();return{count:Number(c.count??0),totalBytes:Number(c.totalBytes??0)}}finally{b.close()}}function t(a){let b=f.join(g.homedir(),".customize-agent","memory.db");if(!h.existsSync(b))return 0;let c=new(e())(b);try{let b=c.prepare(`SELECT rowid FROM memories WHERE ${r(a)}`).all();return c.transaction(()=>{c.prepare(`DELETE FROM memories WHERE ${r(a)}`).run()})(),b.length}finally{c.close()}}function u(a){let b=f.join(g.homedir(),".customize-agent","memory.db");if(!h.existsSync(b))return{changed:0,beforeBytes:0,afterBytes:0};let c=new(e())(b);try{let b=c.prepare(`SELECT id, content, context FROM memories WHERE ${r(a)}`).all(),d=0,e=0,f=0,g=a=>{let b=String(a||"").replace(/\s+/gu," ").trim();return b.length>1200?`${b.slice(0,1e3)} … ${b.slice(-160)}`:b},h=c.prepare("UPDATE memories SET content = ?, context = ?, updated_at = datetime('now') WHERE id = ?");return c.transaction(()=>{for(let a of b){e+=Buffer.byteLength(`${a.content}${a.context}`);let b=g(a.content),c=g(a.context);f+=Buffer.byteLength(`${b}${c}`),(b!==a.content||c!==a.context)&&(h.run(b,c,a.id),d++)}})(),{changed:d,beforeBytes:e,afterBytes:f}}finally{c.close()}}}};var b=require("../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=87354));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:()=>x,Gl:()=>k,JU:()=>z,Jz:()=>C,M$:()=>r,QG:()=>w,SE:()=>o,YL:()=>D,a6:()=>u,r:()=>v,uc:()=>B,v7:()=>s,yE:()=>y});var d=c(77598),e=c(73024),f=c(48161),g=c(76760),h=c(73445),i=c(23328);let j=new Map;function k(a=(0,i.aY)()){let b=g.join(f.homedir(),".customize-agent","projects",function(a=(0,i.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 l(a=(0,i.aY)()){return g.join(k(a),"index.json")}function m(a=(0,i.aY)()){return g.join(k(a),"assets.json")}function n(a,b=(0,i.aY)()){return g.join(k(b),"drafts",`${a}.json`)}function o(a,b=(0,i.aY)()){return a.path?g.isAbsolute(a.path)?a.path:a.path.startsWith("generatedDocuments/assets/")?g.join(k(b),a.path.replace(/^generatedDocuments\/assets\//u,"assets/")):g.join(b,"knowledgeBase",a.path):null}function p(a,b){try{return JSON.parse(e.readFileSync(a,"utf8"))}catch{return b}}function q(a,b){e.mkdirSync(g.dirname(a),{recursive:!0}),e.writeFileSync(a,JSON.stringify(b,null,2))}function r(a=(0,i.aY)()){return p(l(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function s(a,b=(0,i.aY)()){return p(n(a,b),null)}function t(a,b=(0,i.aY)()){let c=Date.now(),d={...a,updatedAt:c};q(n(d.id,b),d);let e=r(b).filter(a=>a.id!==d.id);return e.unshift(d),q(l(b),e.map(a=>({...a,draft:void 0,executionStages:a.executionStages}))),d}function u(a,b,c=(0,i.aY)()){let d=s(a,c);return d?t({...d,...b,id:a},c):null}function v(a,b=(0,i.aY)()){let c=s(a,b);if(!c||"generating"!==c.status)return null;for(let[b,c]of j)if(c.documentId===a){c.controller.abort(),j.delete(b);break}return t({...c,status:"failed",error:"用户中止",updatedAt:Date.now()},b)}function w(a,b=(0,i.aY)()){try{e.rmSync(n(a,b),{force:!0})}catch{console.warn("[generated-documents] 删除文档记录失败或文件不存在",a)}q(l(b),r(b).filter(b=>b.id!==a))}function x(a=(0,i.aY)()){return p(m(a),[]).sort((a,b)=>b.updatedAt-a.updatedAt)}function y(a,b=(0,i.aY)()){return x(b).find(b=>b.id===a)||null}function z(a,b=(0,i.aY)()){let c=y(a,b);if(!c)return!1;let d=o(c,b);if(d&&d.startsWith(k(b)))try{e.rmSync(d,{force:!0})}catch{console.warn("[generated-documents] 删除生成资源文件失败或文件不存在",d)}return q(m(b),x(b).filter(b=>b.id!==a)),!0}async function A(a,b=(0,i.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,i.Qh)().getProject(b);return await f.reindexFile(c),c}async function B(a,b=(0,i.aY)()){let c=y(a,b);if(!c?.path)return null;let d=o(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 j=await (0,i.Qh)().getProject(b);await j.reindexFile(f);let k=x(b).map(b=>b.id===a?{...b,path:f,source:"generated",indexed:!0,updatedAt:Date.now()}:b);return q(m(b),k),k.find(b=>b.id===a)||null}function C(a,b,c=(0,i.aY)()){let d=y(a,c);if(!d)return null;let f=o(d,c);return f&&e.existsSync(f)?"directory"===b?g.dirname(f):f:null}function D(a,b=(0,i.aY)()){let c=Date.now(),e=`doc-${c}-${d.randomBytes(4).toString("hex")}`,f=`task-${c}-${d.randomBytes(4).toString("hex")}`,k={id:e,taskId:f,templateId:a.templateId,title:"生成中",requirement:a.requirement||"",markdown:"",status:"generating",assets:[],createdAt:c,updatedAt:c};t(k,b);let l=new AbortController,n=(0,h.OX)({...a,projectRoot:b,signal:l.signal,onProgress:a=>{try{let c=s(e,b);c&&"generating"===c.status&&(t({...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=s(e,b);if(!c||"generating"!==c.status)return c??k;let d=a.validationIssues.filter(a=>"error"===a.level||"warning"===a.level).map(a=>a.suggestion?`${a.message}:${a.suggestion}`:a.message),f=t({...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),h=function(a,b,c=(0,i.aY)()){let d=Date.now(),e=[...x(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 q(m(c),e),e}(a.assets||[],e,b);for(let a of(await A(f,b).catch(a=>console.warn("[generated-documents] 自动入库生成文档失败",a)),h.filter(a=>a.usedByDocumentIds.includes(e)&&!a.indexed)))await B(a.id,b).catch(b=>console.warn("[generated-documents] 自动入库生成资源失败",a.id,b));return f}).catch(a=>{let c=s(e,b);return c&&"generating"===c.status?t({...c,status:"failed",error:a instanceof Error?a.message:String(a)},b):c??k}).finally(()=>{j.delete(f)});return j.set(f,{id:f,documentId:e,status:"generating",controller:l,promise:n}),{taskId:f,documentId:e,record:k}}},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")},87550:a=>{a.exports=require("better-sqlite3")},89529:(a,b,c)=>{c.r(b),c.d(b,{config:()=>F,default:()=>E,handler:()=>H});var d={};c.r(d),c.d(d,{__documentExportTest__:()=>A,default:()=>B});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(73024),j=c(76760);let k=require("jszip");var l=c.n(k),m=c(67461),n=c(23328),o=c(49750),p=c(17496);function q(a){return a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,""")}let r={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif",".svg":"image/svg+xml"};function s(a){return r[j.extname(a).toLowerCase()]||""}function t(a,b){let c=j.relative(b,a);return!!c&&!c.startsWith("..")&&!j.isAbsolute(c)}function u(a,b=(0,n.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||j.isAbsolute(c))return null;let d=j.resolve(b,"knowledgeBase"),e=j.resolve((0,m.Gl)(b),"assets");return[c.startsWith("generatedDocuments/assets/")?j.resolve(e,c.replace(/^generatedDocuments\/assets\//u,"")):"",j.resolve(d,c)].filter(Boolean).find(a=>{let b=j.resolve(a);return(t(b,d)||t(b,e))&&!!s(b)&&i.existsSync(b)&&i.statSync(b).isFile()})||null}function v(a,b=(0,n.aY)()){let c=new Map,d=0;return a.replace(/<img\b([^>]*?)\bsrc=["']([^"']+)["']([^>]*)>/giu,(a,e,f,g)=>{let h=u(f,b);if(!h)return a;let j=i.statSync(h);if(j.size>8388608||d+j.size>0x2000000)return a;let k=c.get(h);return k||(k=`data:${s(h)};base64,${i.readFileSync(h).toString("base64")}`,c.set(h,k),d+=j.size),`<img${e}src="${k}"${g}>`})}function w(a){return a.replace(/<[^>]+>/gu,"").split("\n").map(a=>`<w:p><w:r><w:t xml:space="preserve">${q(a)}</w:t></w:r></w:p>`).join("")}async function x(a,b,c){if(c&&i.existsSync(c)){let d=await l().loadAsync(i.readFileSync(c)),e=d.file("word/document.xml");if(e){let c=await e.async("string");return d.file("word/document.xml",c.replace(/\{\{title\}\}/gu,q(a)).replace(/\{\{content\}\}/gu,w(b))),d.generateAsync({type:"nodebuffer"})}}let d=new(l());return d.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"/></Types>'),d.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>'),d.folder("word")?.folder("_rels")?.file("document.xml.rels",'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"/>'),d.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><w:p><w:r><w:t>${q(a)}</w:t></w:r></w:p>${w(b)}<w:sectPr><w:pgSz w:w="11906" w:h="16838"/><w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440"/></w:sectPr></w:body></w:document>`),d.generateAsync({type:"nodebuffer"})}function y(a){let b=a.message.trim();return!/^(事实冲突|必需章节缺失):/u.test(b)&&/出现禁用文本\s*(资料未提供|占位|TODO|TBD)|正文包含.*(资料未提供|占位)|图片、地图或附件引用路径明显无效|无效路径|表格语法错误|临时远程生成 URL|提示词全文|内部错误/iu.test(b)}async function z(a,b){var d;if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});let e=a.body,f=e.documentId?(0,m.v7)(e.documentId):null;if(e.documentId&&!f)return b.status(404).json({error:"Document not found"});let g=e.title||f?.title||"document",h="string"==typeof e.markdown?e.markdown:f?.editedMarkdown||f?.markdown||"",i=e.format||"markdown",j=f?.draft?.exportGate||e.exportGate,k=j?.blockingIssues?.filter(y)||[];if(e.enforceGate&&k.length)return b.status(422).json({error:"Export gate failed",issues:k});let l=g.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(`${l}.md`)}`),b.status(200).send(h);if("docx"===i){let a=await x(g,h,e.wordTemplatePath);return b.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${l}.docx`)}`),b.status(200).send(a)}let{marked:p}=await Promise.resolve().then(c.bind(c,83142)),r=(0,n.aY)(),s=v((d=p.parse(h,{async:!1}),`<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><title>${q(g)}</title><style>@page{size:A4;margin:24mm 18mm 22mm 18mm}body{font-family:"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans CJK SC",Arial,sans-serif;line-height:1.75;color:#111827;font-size:14px}h1{text-align:center;font-size:28px;margin-top:80px}h2{border-bottom:1px solid #d1d5db;padding-bottom:6px;margin-top:28px;page-break-after:avoid}h3{margin-top:20px}img{display:block;max-width:100%;max-height:520px;object-fit:contain;margin:12px auto;page-break-inside:avoid}table{width:100%;border-collapse:collapse;page-break-inside:auto}tr{page-break-inside:avoid;page-break-after:auto}th,td{border:1px solid #6b7280;padding:6px 8px;vertical-align:top}th{background:#f3f4f6}pre{white-space:pre-wrap}.document-cover{min-height:720px;display:flex;flex-direction:column;justify-content:center}.document-cover h1{margin-top:0}.page-break{page-break-after:always;height:0}</style></head><body>${d}</body></html>`),r);if("html"===i)return b.setHeader("Content-Type","text/html; charset=utf-8"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${l}.html`)}`),b.status(200).send(s);try{let{chromium:a}=await Promise.resolve().then(c.bind(c,83237)),d=await a.launch({headless:!0,args:["--no-sandbox","--disable-setuid-sandbox"]});try{let a=await d.newPage({locale:"zh-CN"});await a.setContent(s,{waitUntil:"load"}),await a.waitForFunction(()=>Array.from(document.images).every(a=>a.complete&&a.naturalWidth>0),void 0,{timeout:1e4}).catch(()=>void 0),await a.emulateMedia({media:"print"});let c=await a.pdf({format:"A4",printBackground:!0,preferCSSPageSize:!0,margin:{top:"24mm",right:"18mm",bottom:"22mm",left:"18mm"},displayHeaderFooter:!0,headerTemplate:"<div></div>",footerTemplate:'<div style="font-size:9px;width:100%;text-align:center;color:#666;">第 <span class="pageNumber"></span> 页 / 共 <span class="totalPages"></span> 页</div>'});return b.setHeader("Content-Type","application/pdf"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${l}.pdf`)}`),b.status(200).send(Buffer.from(c))}finally{await d.close()}}catch(d){(0,o.wF)({level:"warn",source:"api/documents/export",functionName:"pdfExportChromium",error:d,req:a,meta:{fallback:"minimal-pdf"}});let c=function(a,b){let c=[a,"",...b.replace(/<[^>]+>/gu,"").replace(/!\[[^\]]*\]\([^)]*\)/gu,"").replace(/\[([^\]]+)\]\([^)]*\)/gu,"$1").replace(/[#*_`>|-]/gu,"").replace(/\n{3,}/gu,"\n\n").trim().split("\n")].flatMap(a=>a.length>34?a.match(/.{1,34}/gu)||[]:[a]).slice(0,900),d=[];for(let a=0;a<c.length;a+=34)d.push(c.slice(a,a+34));let e=[],f=a=>(e.push(a),e.length),g=f(""),h=f(""),i=f("<< /Type /Font /Subtype /Type0 /BaseFont /STSong-Light /Encoding /UniGB-UCS2-H /DescendantFonts [<< /Type /Font /Subtype /CIDFontType0 /BaseFont /STSong-Light /CIDSystemInfo << /Registry (Adobe) /Ordering (GB1) /Supplement 2 >> >>] >>"),j=[];for(let a of d){let b=a.map((a,b)=>`BT /F1 ${0===b?18:11} Tf 50 ${790-22*b} Td <${Buffer.from(`\uFEFF${a}`,"utf16le").swap16().toString("hex").toUpperCase()}> Tj ET`).join("\n"),c=f(`<< /Length ${Buffer.byteLength(b)} >>
|
|
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(73445),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({...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")},87550:a=>{a.exports=require("better-sqlite3")},89529:(a,b,c)=>{c.r(b),c.d(b,{config:()=>F,default:()=>E,handler:()=>H});var d={};c.r(d),c.d(d,{__documentExportTest__:()=>A,default:()=>B});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(73024),j=c(76760);let k=require("jszip");var l=c.n(k),m=c(67461),n=c(23328),o=c(49750),p=c(17496);function q(a){return a.replace(/&/gu,"&").replace(/</gu,"<").replace(/>/gu,">").replace(/"/gu,""")}let r={".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".webp":"image/webp",".gif":"image/gif",".svg":"image/svg+xml"};function s(a){return r[j.extname(a).toLowerCase()]||""}function t(a,b){let c=j.relative(b,a);return!!c&&!c.startsWith("..")&&!j.isAbsolute(c)}function u(a,b=(0,n.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||j.isAbsolute(c))return null;let d=j.resolve(b,"knowledgeBase"),e=j.resolve((0,m.Gl)(b),"assets");return[c.startsWith("generatedDocuments/assets/")?j.resolve(e,c.replace(/^generatedDocuments\/assets\//u,"")):"",j.resolve(d,c)].filter(Boolean).find(a=>{let b=j.resolve(a);return(t(b,d)||t(b,e))&&!!s(b)&&i.existsSync(b)&&i.statSync(b).isFile()})||null}function v(a,b=(0,n.aY)()){let c=new Map,d=0;return a.replace(/<img\b([^>]*?)\bsrc=["']([^"']+)["']([^>]*)>/giu,(a,e,f,g)=>{let h=u(f,b);if(!h)return a;let j=i.statSync(h);if(j.size>8388608||d+j.size>0x2000000)return a;let k=c.get(h);return k||(k=`data:${s(h)};base64,${i.readFileSync(h).toString("base64")}`,c.set(h,k),d+=j.size),`<img${e}src="${k}"${g}>`})}function w(a){return a.replace(/<[^>]+>/gu,"").split("\n").map(a=>`<w:p><w:r><w:t xml:space="preserve">${q(a)}</w:t></w:r></w:p>`).join("")}async function x(a,b,c){if(c&&i.existsSync(c)){let d=await l().loadAsync(i.readFileSync(c)),e=d.file("word/document.xml");if(e){let c=await e.async("string");return d.file("word/document.xml",c.replace(/\{\{title\}\}/gu,q(a)).replace(/\{\{content\}\}/gu,w(b))),d.generateAsync({type:"nodebuffer"})}}let d=new(l());return d.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"/></Types>'),d.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>'),d.folder("word")?.folder("_rels")?.file("document.xml.rels",'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"/>'),d.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><w:p><w:r><w:t>${q(a)}</w:t></w:r></w:p>${w(b)}<w:sectPr><w:pgSz w:w="11906" w:h="16838"/><w:pgMar w:top="1440" w:right="1440" w:bottom="1440" w:left="1440"/></w:sectPr></w:body></w:document>`),d.generateAsync({type:"nodebuffer"})}function y(a){let b=a.message.trim();return!/^(事实冲突|必需章节缺失):/u.test(b)&&/出现禁用文本\s*(资料未提供|占位|TODO|TBD)|正文包含.*(资料未提供|占位)|图片、地图或附件引用路径明显无效|无效路径|表格语法错误|临时远程生成 URL|提示词全文|内部错误/iu.test(b)}async function z(a,b){var d;if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});let e=a.body,f=e.documentId?(0,m.v7)(e.documentId):null;if(e.documentId&&!f)return b.status(404).json({error:"Document not found"});let g=e.title||f?.title||"document",h="string"==typeof e.markdown?e.markdown:f?.editedMarkdown||f?.markdown||"",i=e.format||"markdown",j=f?.draft?.exportGate||e.exportGate,k=j?.blockingIssues?.filter(y)||[];if(e.enforceGate&&k.length)return b.status(422).json({error:"Export gate failed",issues:k});let l=g.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(`${l}.md`)}`),b.status(200).send(h);if("docx"===i){let a=await x(g,h,e.wordTemplatePath);return b.setHeader("Content-Type","application/vnd.openxmlformats-officedocument.wordprocessingml.document"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${l}.docx`)}`),b.status(200).send(a)}let{marked:p}=await Promise.resolve().then(c.bind(c,83142)),r=(0,n.aY)(),s=v((d=p.parse(h,{async:!1}),`<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><title>${q(g)}</title><style>@page{size:A4;margin:24mm 18mm 22mm 18mm}body{font-family:"PingFang SC","Hiragino Sans GB","Microsoft YaHei","Noto Sans CJK SC",Arial,sans-serif;line-height:1.75;color:#111827;font-size:14px}h1{text-align:center;font-size:28px;margin-top:80px}h2{border-bottom:1px solid #d1d5db;padding-bottom:6px;margin-top:28px;page-break-after:avoid}h3{margin-top:20px}img{display:block;max-width:100%;max-height:520px;object-fit:contain;margin:12px auto;page-break-inside:avoid}table{width:100%;border-collapse:collapse;page-break-inside:auto}tr{page-break-inside:avoid;page-break-after:auto}th,td{border:1px solid #6b7280;padding:6px 8px;vertical-align:top}th{background:#f3f4f6}pre{white-space:pre-wrap}.document-cover{min-height:720px;display:flex;flex-direction:column;justify-content:center}.document-cover h1{margin-top:0}.page-break{page-break-after:always;height:0}</style></head><body>${d}</body></html>`),r);if("html"===i)return b.setHeader("Content-Type","text/html; charset=utf-8"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${l}.html`)}`),b.status(200).send(s);try{let{chromium:a}=await Promise.resolve().then(c.bind(c,83237)),d=await a.launch({headless:!0,args:["--no-sandbox","--disable-setuid-sandbox"]});try{let a=await d.newPage({locale:"zh-CN"});await a.setContent(s,{waitUntil:"load"}),await a.waitForFunction(()=>Array.from(document.images).every(a=>a.complete&&a.naturalWidth>0),void 0,{timeout:1e4}).catch(()=>void 0),await a.emulateMedia({media:"print"});let c=await a.pdf({format:"A4",printBackground:!0,preferCSSPageSize:!0,margin:{top:"24mm",right:"18mm",bottom:"22mm",left:"18mm"},displayHeaderFooter:!0,headerTemplate:"<div></div>",footerTemplate:'<div style="font-size:9px;width:100%;text-align:center;color:#666;">第 <span class="pageNumber"></span> 页 / 共 <span class="totalPages"></span> 页</div>'});return b.setHeader("Content-Type","application/pdf"),b.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(`${l}.pdf`)}`),b.status(200).send(Buffer.from(c))}finally{await d.close()}}catch(d){(0,o.wF)({level:"warn",source:"api/documents/export",functionName:"pdfExportChromium",error:d,req:a,meta:{fallback:"minimal-pdf"}});let c=function(a,b){let c=[a,"",...b.replace(/<[^>]+>/gu,"").replace(/!\[[^\]]*\]\([^)]*\)/gu,"").replace(/\[([^\]]+)\]\([^)]*\)/gu,"$1").replace(/[#*_`>|-]/gu,"").replace(/\n{3,}/gu,"\n\n").trim().split("\n")].flatMap(a=>a.length>34?a.match(/.{1,34}/gu)||[]:[a]).slice(0,900),d=[];for(let a=0;a<c.length;a+=34)d.push(c.slice(a,a+34));let e=[],f=a=>(e.push(a),e.length),g=f(""),h=f(""),i=f("<< /Type /Font /Subtype /Type0 /BaseFont /STSong-Light /Encoding /UniGB-UCS2-H /DescendantFonts [<< /Type /Font /Subtype /CIDFontType0 /BaseFont /STSong-Light /CIDSystemInfo << /Registry (Adobe) /Ordering (GB1) /Supplement 2 >> >>] >>"),j=[];for(let a of d){let b=a.map((a,b)=>`BT /F1 ${0===b?18:11} Tf 50 ${790-22*b} Td <${Buffer.from(`\uFEFF${a}`,"utf16le").swap16().toString("hex").toUpperCase()}> Tj ET`).join("\n"),c=f(`<< /Length ${Buffer.byteLength(b)} >>
|
|
3
3
|
stream
|
|
4
4
|
${b}
|
|
5
5
|
endstream`);j.push(f(`<< /Type /Page /Parent ${h} 0 R /MediaBox [0 0 595 842] /Resources << /Font << /F1 ${i} 0 R >> >> /Contents ${c} 0 R >>`))}e[g-1]=`<< /Type /Catalog /Pages ${h} 0 R >>`,e[h-1]=`<< /Type /Pages /Kids [${j.map(a=>`${a} 0 R`).join(" ")}] /Count ${j.length} >>`;let k="%PDF-1.4\n",l=[0];e.forEach((a,b)=>{l.push(Buffer.byteLength(k)),k+=`${b+1} 0 obj
|
|
@@ -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")},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:()=>
|
|
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(73445),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({...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,3328,7367,3445],()=>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")},31421:a=>{a.exports=require("node:child_process")},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 a=(0,i.v7)(c);if(!a)return b.status(404).json({error:"Document not found"});return b.status(200).json({document:a})}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:()=>
|
|
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")},31421:a=>{a.exports=require("node:child_process")},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 a=(0,i.v7)(c);if(!a)return b.status(404).json({error:"Document not found"});return b.status(200).json({document:a})}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(73445),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({...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,3328,7367,3445],()=>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")},31421:a=>{a.exports=require("node:child_process")},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:()=>
|
|
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")},31421:a=>{a.exports=require("node:child_process")},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(73445),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({...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,3328,7367,3445],()=>b(b.s=36583));module.exports=c})();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" data-next-head=""/><link rel="preload" href="/_next/static/css/38dba0a7a42a8df3.css" as="style"/><link rel="stylesheet" href="/_next/static/css/38dba0a7a42a8df3.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-689755a4ff6d1f93.js" defer=""></script><script src="/_next/static/chunks/framework-fbc6f575b16f07d7.js" defer=""></script><script src="/_next/static/chunks/main-105db6ecf7f64ff3.js" defer=""></script><script src="/_next/static/chunks/pages/_app-38ff7f551a80399f.js" defer=""></script><script src="/_next/static/chunks/347-62c74776c299477d.js" defer=""></script><script src="/_next/static/chunks/8787-c8bea0f25cbd3cf0.js" defer=""></script><script src="/_next/static/chunks/4277-ba039fcf8f4e9cdc.js" defer=""></script><script src="/_next/static/chunks/7889-8531b79751a71e39.js" defer=""></script><script src="/_next/static/chunks/7150-123ff059dd0e2eb9.js" defer=""></script><script src="/_next/static/chunks/2073-244191fe7cc6e330.js" defer=""></script><script src="/_next/static/chunks/6578-6422ce4e29eb07d4.js" defer=""></script><script src="/_next/static/chunks/pages/asset-library-634d18652eb7507d.js" defer=""></script><script src="/_next/static/JSSClm7Ao89P7zD8JkYIG/_buildManifest.js" defer=""></script><script src="/_next/static/JSSClm7Ao89P7zD8JkYIG/_ssgManifest.js" defer=""></script></head><body><div id="__next"><script>((e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=["light","dark"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n==="system"?c():n;p(y)}catch(n){}})("class","theme","system",null,["light","dark"],null,true,true)</script><div class="css-1pi45l5 ant-app css-var-_R_16_"><aside class="sidebar"><a href="/overview"><div class="sidebarLogo"><div class="sidebarLogoTitle" style="font-size:20px;font-weight:800;letter-spacing:0.5px"><span class="logoGradient">Customize Agent</span></div></div></a><button class="sidebarCollapseBtn" aria-label="收起侧边栏"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-panel-left-close"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M9 3v18"></path><path d="m16 15-3-3 3-3"></path></svg></button><nav class="sidebarNav"><a href="/overview"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg><span>总览</span></div></a><div><div class="sidebarItem sidebarParent"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-database"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5V19A9 3 0 0 0 21 19V5"></path><path d="M3 12A9 3 0 0 0 21 12"></path></svg><span>知识库</span><span class="sidebarChevron"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right"><path d="m9 18 6-6-6-6"></path></svg></span></div></div><a href="/models"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cpu"><rect width="16" height="16" x="4" y="4" rx="2"></rect><rect width="6" height="6" x="9" y="9" rx="1"></rect><path d="M15 2v2"></path><path d="M15 20v2"></path><path d="M2 15h2"></path><path d="M2 9h2"></path><path d="M20 15h2"></path><path d="M20 9h2"></path><path d="M9 2v2"></path><path d="M9 20v2"></path></svg><span>模型配置</span></div></a><a href="/prompt"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg><span>提示词管理</span></div></a><a href="/document-roles"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span>角色配置</span></div></a><a href="/document-specs"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-text"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"></path><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M10 9H8"></path><path d="M16 13H8"></path><path d="M16 17H8"></path></svg><span>文档规范包</span></div></a><a href="/documents"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-files"><path d="M20 7h-3a2 2 0 0 1-2-2V2"></path><path d="M9 18a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h7l4 4v10a2 2 0 0 1-2 2Z"></path><path d="M3 7.6v12.8A1.6 1.6 0 0 0 4.6 22h9.8"></path></svg><span>工作流模版库</span></div></a><a href="/asset-library"><div class="sidebarItem sidebarItemActive"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-folder-open"><path d="m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2"></path></svg><span>生成资源</span></div></a><div><div class="sidebarItem sidebarParent"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-brain"><path d="M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z"></path><path d="M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z"></path><path d="M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4"></path><path d="M17.599 6.5a3 3 0 0 0 .399-1.375"></path><path d="M6.003 5.125A3 3 0 0 0 6.401 6.5"></path><path d="M3.477 10.896a4 4 0 0 1 .585-.396"></path><path d="M19.938 10.5a4 4 0 0 1 .585.396"></path><path d="M6 18a4 4 0 0 1-1.967-.516"></path><path d="M19.967 17.484A4 4 0 0 1 18 18"></path></svg><span>上下文工程</span><span class="sidebarChevron"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right"><path d="m9 18 6-6-6-6"></path></svg></span></div></div><a href="/system/logs"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bug"><path d="m8 2 1.88 1.88"></path><path d="M14.12 3.88 16 2"></path><path d="M9 7.13v-1a3.003 3.003 0 1 1 6 0v1"></path><path d="M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6"></path><path d="M12 20v-9"></path><path d="M6.53 9C4.6 8.8 3 7.1 3 5"></path><path d="M6 13H2"></path><path d="M3 21c0-2.1 1.7-3.9 3.8-4"></path><path d="M20.97 5c0 2.1-1.6 3.8-3.5 4"></path><path d="M22 13h-4"></path><path d="M17.2 17c2.1.1 3.8 1.9 3.8 4"></path></svg><span>系统日志</span></div></a><a href="/guide"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path></svg><span>指引</span></div></a><a href="/settings"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span>设置</span></div></a></nav></aside><div class="mainContent"><header class="topbar"><div class="flex-1"></div><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg><span>深色</span></button><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-languages"><path d="m5 8 6 6"></path><path d="m4 14 6-6 2-3"></path><path d="M2 5h12"></path><path d="M7 2h1"></path><path d="m22 22-5-10-5 10"></path><path d="M14 18h6"></path></svg><span>English</span></button></header><main class="mainInner"><div class="space-y-5 animateFadeIn"><div class="ant-skeleton ant-skeleton-active css-1pi45l5 css-var-_R_16_"><div class="ant-skeleton-section"><h3 class="ant-skeleton-title" style="width:38%"></h3><ul class="ant-skeleton-paragraph"><li style="width:61%"></li></ul></div></div><div class="ant-row css-1pi45l5 css-var-_R_16_" style="margin-inline:-6px;row-gap:12px"><div style="padding-inline:6px" class="ant-col ant-col-xs-24 ant-col-sm-12 ant-col-md-8 ant-col-xl-6 css-1pi45l5 css-var-_R_16_"><div class="ant-card ant-card-bordered ant-card-small css-1pi45l5 css-var-_R_16_"><div class="ant-card-body"><div class="ant-skeleton ant-skeleton-active css-1pi45l5 css-var-_R_16_"><div class="ant-skeleton-section"><h3 class="ant-skeleton-title" style="width:38%"></h3><ul class="ant-skeleton-paragraph"><li></li><li></li><li style="width:61%"></li></ul></div></div></div></div></div><div style="padding-inline:6px" class="ant-col ant-col-xs-24 ant-col-sm-12 ant-col-md-8 ant-col-xl-6 css-1pi45l5 css-var-_R_16_"><div class="ant-card ant-card-bordered ant-card-small css-1pi45l5 css-var-_R_16_"><div class="ant-card-body"><div class="ant-skeleton ant-skeleton-active css-1pi45l5 css-var-_R_16_"><div class="ant-skeleton-section"><h3 class="ant-skeleton-title" style="width:38%"></h3><ul class="ant-skeleton-paragraph"><li></li><li></li><li style="width:61%"></li></ul></div></div></div></div></div><div style="padding-inline:6px" class="ant-col ant-col-xs-24 ant-col-sm-12 ant-col-md-8 ant-col-xl-6 css-1pi45l5 css-var-_R_16_"><div class="ant-card ant-card-bordered ant-card-small css-1pi45l5 css-var-_R_16_"><div class="ant-card-body"><div class="ant-skeleton ant-skeleton-active css-1pi45l5 css-var-_R_16_"><div class="ant-skeleton-section"><h3 class="ant-skeleton-title" style="width:38%"></h3><ul class="ant-skeleton-paragraph"><li></li><li></li><li style="width:61%"></li></ul></div></div></div></div></div><div style="padding-inline:6px" class="ant-col ant-col-xs-24 ant-col-sm-12 ant-col-md-8 ant-col-xl-6 css-1pi45l5 css-var-_R_16_"><div class="ant-card ant-card-bordered ant-card-small css-1pi45l5 css-var-_R_16_"><div class="ant-card-body"><div class="ant-skeleton ant-skeleton-active css-1pi45l5 css-var-_R_16_"><div class="ant-skeleton-section"><h3 class="ant-skeleton-title" style="width:38%"></h3><ul class="ant-skeleton-paragraph"><li></li><li></li><li style="width:61%"></li></ul></div></div></div></div></div><div style="padding-inline:6px" class="ant-col ant-col-xs-24 ant-col-sm-12 ant-col-md-8 ant-col-xl-6 css-1pi45l5 css-var-_R_16_"><div class="ant-card ant-card-bordered ant-card-small css-1pi45l5 css-var-_R_16_"><div class="ant-card-body"><div class="ant-skeleton ant-skeleton-active css-1pi45l5 css-var-_R_16_"><div class="ant-skeleton-section"><h3 class="ant-skeleton-title" style="width:38%"></h3><ul class="ant-skeleton-paragraph"><li></li><li></li><li style="width:61%"></li></ul></div></div></div></div></div><div style="padding-inline:6px" class="ant-col ant-col-xs-24 ant-col-sm-12 ant-col-md-8 ant-col-xl-6 css-1pi45l5 css-var-_R_16_"><div class="ant-card ant-card-bordered ant-card-small css-1pi45l5 css-var-_R_16_"><div class="ant-card-body"><div class="ant-skeleton ant-skeleton-active css-1pi45l5 css-var-_R_16_"><div class="ant-skeleton-section"><h3 class="ant-skeleton-title" style="width:38%"></h3><ul class="ant-skeleton-paragraph"><li></li><li></li><li style="width:61%"></li></ul></div></div></div></div></div></div></div></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/asset-library","query":{},"buildId":"JSSClm7Ao89P7zD8JkYIG","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" data-next-head=""/><link rel="preload" href="/_next/static/css/38dba0a7a42a8df3.css" as="style"/><link rel="stylesheet" href="/_next/static/css/38dba0a7a42a8df3.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-689755a4ff6d1f93.js" defer=""></script><script src="/_next/static/chunks/framework-fbc6f575b16f07d7.js" defer=""></script><script src="/_next/static/chunks/main-105db6ecf7f64ff3.js" defer=""></script><script src="/_next/static/chunks/pages/_app-efe7c86ef4792ef9.js" defer=""></script><script src="/_next/static/chunks/347-62c74776c299477d.js" defer=""></script><script src="/_next/static/chunks/8787-c8bea0f25cbd3cf0.js" defer=""></script><script src="/_next/static/chunks/4277-ba039fcf8f4e9cdc.js" defer=""></script><script src="/_next/static/chunks/7889-8531b79751a71e39.js" defer=""></script><script src="/_next/static/chunks/7150-337333a0e39eac73.js" defer=""></script><script src="/_next/static/chunks/2073-244191fe7cc6e330.js" defer=""></script><script src="/_next/static/chunks/6578-6422ce4e29eb07d4.js" defer=""></script><script src="/_next/static/chunks/pages/asset-library-634d18652eb7507d.js" defer=""></script><script src="/_next/static/Hr2tsu12MBY5TxEsnEZnS/_buildManifest.js" defer=""></script><script src="/_next/static/Hr2tsu12MBY5TxEsnEZnS/_ssgManifest.js" defer=""></script></head><body><div id="__next"><script>((e,i,s,u,m,a,l,h)=>{let d=document.documentElement,w=["light","dark"];function p(n){(Array.isArray(e)?e:[e]).forEach(y=>{let k=y==="class",S=k&&a?m.map(f=>a[f]||f):m;k?(d.classList.remove(...S),d.classList.add(a&&a[n]?a[n]:n)):d.setAttribute(y,n)}),R(n)}function R(n){h&&w.includes(n)&&(d.style.colorScheme=n)}function c(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(u)p(u);else try{let n=localStorage.getItem(i)||s,y=l&&n==="system"?c():n;p(y)}catch(n){}})("class","theme","system",null,["light","dark"],null,true,true)</script><div class="css-1pi45l5 ant-app css-var-_R_16_"><aside class="sidebar"><a href="/overview"><div class="sidebarLogo"><div class="sidebarLogoTitle" style="font-size:20px;font-weight:800;letter-spacing:0.5px"><span class="logoGradient">Customize Agent</span></div></div></a><button class="sidebarCollapseBtn" aria-label="收起侧边栏"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-panel-left-close"><rect width="18" height="18" x="3" y="3" rx="2"></rect><path d="M9 3v18"></path><path d="m16 15-3-3 3-3"></path></svg></button><nav class="sidebarNav"><a href="/overview"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-layout-dashboard"><rect width="7" height="9" x="3" y="3" rx="1"></rect><rect width="7" height="5" x="14" y="3" rx="1"></rect><rect width="7" height="9" x="14" y="12" rx="1"></rect><rect width="7" height="5" x="3" y="16" rx="1"></rect></svg><span>总览</span></div></a><div><div class="sidebarItem sidebarParent"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-database"><ellipse cx="12" cy="5" rx="9" ry="3"></ellipse><path d="M3 5V19A9 3 0 0 0 21 19V5"></path><path d="M3 12A9 3 0 0 0 21 12"></path></svg><span>知识库</span><span class="sidebarChevron"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right"><path d="m9 18 6-6-6-6"></path></svg></span></div></div><a href="/models"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-cpu"><rect width="16" height="16" x="4" y="4" rx="2"></rect><rect width="6" height="6" x="9" y="9" rx="1"></rect><path d="M15 2v2"></path><path d="M15 20v2"></path><path d="M2 15h2"></path><path d="M2 9h2"></path><path d="M20 15h2"></path><path d="M20 9h2"></path><path d="M9 2v2"></path><path d="M9 20v2"></path></svg><span>模型配置</span></div></a><a href="/prompt"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-message-square"><path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path></svg><span>提示词管理</span></div></a><a href="/document-roles"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span>角色配置</span></div></a><a href="/document-specs"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-text"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"></path><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M10 9H8"></path><path d="M16 13H8"></path><path d="M16 17H8"></path></svg><span>文档规范包</span></div></a><a href="/documents"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-files"><path d="M20 7h-3a2 2 0 0 1-2-2V2"></path><path d="M9 18a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h7l4 4v10a2 2 0 0 1-2 2Z"></path><path d="M3 7.6v12.8A1.6 1.6 0 0 0 4.6 22h9.8"></path></svg><span>工作流模版库</span></div></a><a href="/asset-library"><div class="sidebarItem sidebarItemActive"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-folder-open"><path d="m6 14 1.5-2.9A2 2 0 0 1 9.24 10H20a2 2 0 0 1 1.94 2.5l-1.54 6a2 2 0 0 1-1.95 1.5H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h3.9a2 2 0 0 1 1.69.9l.81 1.2a2 2 0 0 0 1.67.9H18a2 2 0 0 1 2 2v2"></path></svg><span>生成资源</span></div></a><div><div class="sidebarItem sidebarParent"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-brain"><path d="M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z"></path><path d="M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z"></path><path d="M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4"></path><path d="M17.599 6.5a3 3 0 0 0 .399-1.375"></path><path d="M6.003 5.125A3 3 0 0 0 6.401 6.5"></path><path d="M3.477 10.896a4 4 0 0 1 .585-.396"></path><path d="M19.938 10.5a4 4 0 0 1 .585.396"></path><path d="M6 18a4 4 0 0 1-1.967-.516"></path><path d="M19.967 17.484A4 4 0 0 1 18 18"></path></svg><span>上下文工程</span><span class="sidebarChevron"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right"><path d="m9 18 6-6-6-6"></path></svg></span></div></div><a href="/system/logs"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bug"><path d="m8 2 1.88 1.88"></path><path d="M14.12 3.88 16 2"></path><path d="M9 7.13v-1a3.003 3.003 0 1 1 6 0v1"></path><path d="M12 20c-3.3 0-6-2.7-6-6v-3a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v3c0 3.3-2.7 6-6 6"></path><path d="M12 20v-9"></path><path d="M6.53 9C4.6 8.8 3 7.1 3 5"></path><path d="M6 13H2"></path><path d="M3 21c0-2.1 1.7-3.9 3.8-4"></path><path d="M20.97 5c0 2.1-1.6 3.8-3.5 4"></path><path d="M22 13h-4"></path><path d="M17.2 17c2.1.1 3.8 1.9 3.8 4"></path></svg><span>系统日志</span></div></a><a href="/guide"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path></svg><span>指引</span></div></a><a href="/settings"><div class="sidebarItem"><svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-settings"><path d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"></path><circle cx="12" cy="12" r="3"></circle></svg><span>设置</span></div></a></nav></aside><div class="mainContent"><header class="topbar"><div class="flex-1"></div><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-moon"><path d="M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z"></path></svg><span>深色</span></button><button class="topbarBtn"><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-languages"><path d="m5 8 6 6"></path><path d="m4 14 6-6 2-3"></path><path d="M2 5h12"></path><path d="M7 2h1"></path><path d="m22 22-5-10-5 10"></path><path d="M14 18h6"></path></svg><span>English</span></button></header><main class="mainInner"><div class="space-y-5 animateFadeIn"><div class="ant-skeleton ant-skeleton-active css-1pi45l5 css-var-_R_16_"><div class="ant-skeleton-section"><h3 class="ant-skeleton-title" style="width:38%"></h3><ul class="ant-skeleton-paragraph"><li style="width:61%"></li></ul></div></div><div class="ant-row css-1pi45l5 css-var-_R_16_" style="margin-inline:-6px;row-gap:12px"><div style="padding-inline:6px" class="ant-col ant-col-xs-24 ant-col-sm-12 ant-col-md-8 ant-col-xl-6 css-1pi45l5 css-var-_R_16_"><div class="ant-card ant-card-bordered ant-card-small css-1pi45l5 css-var-_R_16_"><div class="ant-card-body"><div class="ant-skeleton ant-skeleton-active css-1pi45l5 css-var-_R_16_"><div class="ant-skeleton-section"><h3 class="ant-skeleton-title" style="width:38%"></h3><ul class="ant-skeleton-paragraph"><li></li><li></li><li style="width:61%"></li></ul></div></div></div></div></div><div style="padding-inline:6px" class="ant-col ant-col-xs-24 ant-col-sm-12 ant-col-md-8 ant-col-xl-6 css-1pi45l5 css-var-_R_16_"><div class="ant-card ant-card-bordered ant-card-small css-1pi45l5 css-var-_R_16_"><div class="ant-card-body"><div class="ant-skeleton ant-skeleton-active css-1pi45l5 css-var-_R_16_"><div class="ant-skeleton-section"><h3 class="ant-skeleton-title" style="width:38%"></h3><ul class="ant-skeleton-paragraph"><li></li><li></li><li style="width:61%"></li></ul></div></div></div></div></div><div style="padding-inline:6px" class="ant-col ant-col-xs-24 ant-col-sm-12 ant-col-md-8 ant-col-xl-6 css-1pi45l5 css-var-_R_16_"><div class="ant-card ant-card-bordered ant-card-small css-1pi45l5 css-var-_R_16_"><div class="ant-card-body"><div class="ant-skeleton ant-skeleton-active css-1pi45l5 css-var-_R_16_"><div class="ant-skeleton-section"><h3 class="ant-skeleton-title" style="width:38%"></h3><ul class="ant-skeleton-paragraph"><li></li><li></li><li style="width:61%"></li></ul></div></div></div></div></div><div style="padding-inline:6px" class="ant-col ant-col-xs-24 ant-col-sm-12 ant-col-md-8 ant-col-xl-6 css-1pi45l5 css-var-_R_16_"><div class="ant-card ant-card-bordered ant-card-small css-1pi45l5 css-var-_R_16_"><div class="ant-card-body"><div class="ant-skeleton ant-skeleton-active css-1pi45l5 css-var-_R_16_"><div class="ant-skeleton-section"><h3 class="ant-skeleton-title" style="width:38%"></h3><ul class="ant-skeleton-paragraph"><li></li><li></li><li style="width:61%"></li></ul></div></div></div></div></div><div style="padding-inline:6px" class="ant-col ant-col-xs-24 ant-col-sm-12 ant-col-md-8 ant-col-xl-6 css-1pi45l5 css-var-_R_16_"><div class="ant-card ant-card-bordered ant-card-small css-1pi45l5 css-var-_R_16_"><div class="ant-card-body"><div class="ant-skeleton ant-skeleton-active css-1pi45l5 css-var-_R_16_"><div class="ant-skeleton-section"><h3 class="ant-skeleton-title" style="width:38%"></h3><ul class="ant-skeleton-paragraph"><li></li><li></li><li style="width:61%"></li></ul></div></div></div></div></div><div style="padding-inline:6px" class="ant-col ant-col-xs-24 ant-col-sm-12 ant-col-md-8 ant-col-xl-6 css-1pi45l5 css-var-_R_16_"><div class="ant-card ant-card-bordered ant-card-small css-1pi45l5 css-var-_R_16_"><div class="ant-card-body"><div class="ant-skeleton ant-skeleton-active css-1pi45l5 css-var-_R_16_"><div class="ant-skeleton-section"><h3 class="ant-skeleton-title" style="width:38%"></h3><ul class="ant-skeleton-paragraph"><li></li><li></li><li style="width:61%"></li></ul></div></div></div></div></div></div></div></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/asset-library","query":{},"buildId":"Hr2tsu12MBY5TxEsnEZnS","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|