@customize-agent/server 3.0.13 → 3.0.14

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.
Files changed (44) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +2 -2
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/server/chunks/3445.js +5 -9
  5. package/.next/server/pages/404.html +1 -1
  6. package/.next/server/pages/500.html +1 -1
  7. package/.next/server/pages/api/documents/chapter/regenerate.js +1 -1
  8. package/.next/server/pages/api/documents/export.js +14 -1
  9. package/.next/server/pages/api/documents/generate.js +1 -1
  10. package/.next/server/pages/api/documents/templates.js +1 -1
  11. package/.next/server/pages/api/kb/categories.js +5 -9
  12. package/.next/server/pages/api/kb/duplicates.js +5 -9
  13. package/.next/server/pages/api/kb/files/detail.js +5 -9
  14. package/.next/server/pages/api/kb/files/open.js +5 -9
  15. package/.next/server/pages/api/kb/files/preview-pdf-page.js +5 -9
  16. package/.next/server/pages/api/kb/files/reindex.js +5 -9
  17. package/.next/server/pages/api/kb/files.js +5 -9
  18. package/.next/server/pages/api/kb/ignore.js +5 -9
  19. package/.next/server/pages/api/kb/operations.js +5 -9
  20. package/.next/server/pages/api/kb/reindex.js +5 -9
  21. package/.next/server/pages/api/kb/search.js +5 -9
  22. package/.next/server/pages/api/kb/stats.js +5 -9
  23. package/.next/server/pages/api/kb/tags.js +5 -9
  24. package/.next/server/pages/api/kb/upload.js +5 -9
  25. package/.next/server/pages/context/long-term.html +1 -1
  26. package/.next/server/pages/context/short-term.html +1 -1
  27. package/.next/server/pages/document-roles.html +1 -1
  28. package/.next/server/pages/document-specs.html +1 -1
  29. package/.next/server/pages/documents.html +1 -1
  30. package/.next/server/pages/guide.html +1 -1
  31. package/.next/server/pages/index.html +1 -1
  32. package/.next/server/pages/knowledge/file-detail.html +1 -1
  33. package/.next/server/pages/knowledge/files.html +1 -1
  34. package/.next/server/pages/knowledge/manage.html +1 -1
  35. package/.next/server/pages/knowledge/search.html +1 -1
  36. package/.next/server/pages/knowledge.html +1 -1
  37. package/.next/server/pages/models.html +1 -1
  38. package/.next/server/pages/overview.html +1 -1
  39. package/.next/server/pages/prompt.html +1 -1
  40. package/.next/server/pages/settings.html +1 -1
  41. package/.next/server/pages-manifest.json +23 -23
  42. package/package.json +2 -2
  43. /package/.next/static/{yL_ilPc9XJWtNmN2W4Njc → HrpIpnt5wstKoy1Bjfffe}/_buildManifest.js +0 -0
  44. /package/.next/static/{yL_ilPc9XJWtNmN2W4Njc → HrpIpnt5wstKoy1Bjfffe}/_ssgManifest.js +0 -0
@@ -1,4 +1,4 @@
1
- "use strict";(()=>{var a={};a.id=2864,a.ids=[2864],a.modules={17532:a=>{a.exports=import("pdfjs-dist/legacy/build/pdf.mjs")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},23328:(a,b,c)=>{c.d(b,{Qh:()=>m,aY:()=>o});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021),j=c(79646);let k=null;function l(){let a=g.join(h.homedir(),".customize-agent","demo-project"),b=g.join(a,"knowledgeBase");for(let[a,c]of(i.mkdirSync(b,{recursive:!0}),Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
1
+ "use strict";(()=>{var a={};a.id=2864,a.ids=[2864],a.modules={17532:a=>{a.exports=import("pdfjs-dist/legacy/build/pdf.mjs")},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},23328:(a,b,c)=>{c.d(b,{Qh:()=>l,aY:()=>n});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021);let j=null;function k(){let a=g.join(h.homedir(),".customize-agent","demo-project"),b=g.join(a,"knowledgeBase");for(let[a,c]of(i.mkdirSync(b,{recursive:!0}),Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
2
2
 
3
3
  公开参考入口:https://df.qq.com/ 和 https://deltaforce.garena.com/
4
4
 
@@ -46,11 +46,7 @@ xref
46
46
  trailer << /Root 1 0 R /Size 6 >>
47
47
  startxref
48
48
  0
49
- %%EOF`;i.writeFileSync(a,e,"binary")}(c,"【内置】三角洲热门干员攻略 PDF 摘要","露娜负责侦察信息,红狼负责突破,牧羊人负责控场,蜂医负责支援续航。推荐新手优先熟悉蜂医和露娜,再练红狼与牧羊人。"),function(a,b,c){if(i.existsSync(a)&&i.statSync(a).size>0)return;let d=`import zipfile, html, sys
50
- file,title,body=sys.argv[1],sys.argv[2],sys.argv[3]
51
- content=''.join(f'<w:p><w:r><w:t>{html.escape(line)}</w:t></w:r></w:p>' for line in (title+'\\n'+body).split('\\n'))
52
- with zipfile.ZipFile(file,'w') as z:
53
- z.writestr('[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>')
54
- z.writestr('_rels/.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>')
55
- z.writestr('word/document.xml',f'<?xml version="1.0" encoding="UTF-8"?><w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:body>{content}</w:body></w:document>')`;try{(0,j.execFileSync)("python3",["-c",d,a,b,c],{stdio:"ignore"})}catch{i.writeFileSync(a,`${b}
56
- ${c}`,"utf-8")}}(d,"【内置】三角洲热门干员 Word 打法说明","露娜适合信息侦察;红狼适合进攻突破;牧羊人适合区域封锁;蜂医适合治疗救援。队伍建议至少包含侦察和支援。"),i.existsSync(e)||i.writeFileSync(e,"【内置】三角洲队伍搭配 Word 兼容资料\n侦察位看信息,突击位打开突破口,工程位控场,支援位保证续航。","utf-8");let f=g.join(b,"图片素材","干员图片");i.mkdirSync(f,{recursive:!0});let k=["# 干员图片资料","","图片来源参考:https://github.com/luoy-oss/deltaforce_id 和 https://playerhub.df.qq.com/playerhub/60004/object/p_{ID}.png",""];for(let[a,c]of Object.entries({"露娜.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000028.png","红狼.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000030.png","牧羊人.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000029.png","蜂医.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000027.png"})){let d=g.join(f,a);if(!i.existsSync(d)||!(i.statSync(d).size>0))try{(0,j.execFileSync)("curl",["-L","--max-time","12","-o",d,c],{stdio:"ignore"})}catch{i.writeFileSync(`${d}.url.txt`,c,"utf-8")}k.push(`- ${a.replace(".png","")}:${c};本地文件:${g.relative(b,d)}`)}return i.writeFileSync(g.join(b,"图片素材","图片文件-干员图片来源.md"),k.join("\n"),"utf-8"),a}function m(){return k||(k=new d.MultiProjectManager),k}function n(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return b!==g.resolve(g.join(h.homedir(),".customize-agent","demo-project"))&&(!!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))||b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function o(a=!1){let b=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(b&&i.existsSync(b)&&!n(b))return g.resolve(b);if(!a)return l();let c=function(){let a=g.join(h.homedir(),".customize-agent","projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!n(a))}finally{b.close()}}();return c.length>0?c[0]:n(process.cwd())?l():process.cwd()}},28183:a=>{a.exports=require("@napi-rs/canvas")},29021:a=>{a.exports=require("fs")},29283:(a,b,c)=>{c.r(b),c.d(b,{config:()=>o,default:()=>n,handler:()=>q});var d={};c.r(d),c.d(d,{config:()=>j,default:()=>k});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(23328);let j={api:{responseLimit:!1}};async function k(a,b){if("GET"!==a.method)return b.status(405).json({error:"Method not allowed"});try{let d=a.query.projectRoot||(0,i.aY)(),e=a.query.relativePath,f=Math.max(1,Number(a.query.page??1));if(!d||!e)return b.status(400).json({error:"projectRoot and relativePath are required"});let g=(await (0,i.Qh)().getProject(d)).getFileDetail(e);if(!g?.absolutePath||"pdf"!==g.file.format)return b.status(404).json({error:"pdf not found"});let[{createCanvas:h},j]=await Promise.all([Promise.resolve().then(c.t.bind(c,28183,23)),Promise.resolve().then(c.bind(c,17532))]),k=await Promise.resolve().then(c.t.bind(c,73024,23)),l=new Uint8Array(k.readFileSync(g.absolutePath)),m=await j.getDocument({data:l}).promise,n=await m.getPage(Math.min(f,m.numPages)),o=n.getViewport({scale:1.6}),p=h(Math.ceil(o.width),Math.ceil(o.height));await n.render({canvasContext:p.getContext("2d"),viewport:o}).promise,b.setHeader("Content-Type","image/png"),b.setHeader("Cache-Control","private, max-age=3600"),b.status(200).send(p.toBuffer("image/png"))}catch(a){console.error("[api] kb/files/preview-pdf-page",a),b.status(500).json({error:"Internal server error"})}}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/kb/files/preview-pdf-page",pathname:"/api/kb/files/preview-pdf-page",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function q(a,b,c){let d=await p.prepare(a,b,{srcPage:"/api/kb/files/preview-pdf-page"});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/kb/files/preview-pdf-page",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())}}},33873:a=>{a.exports=require("path")},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},79646:a=>{a.exports=require("child_process")},87550:a=>{a.exports=require("better-sqlite3")}};var b=require("../../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=29283));module.exports=c})();
49
+ %%EOF`;i.writeFileSync(a,e,"binary")}(c,"【内置】三角洲热门干员攻略 PDF 摘要","露娜负责侦察信息,红狼负责突破,牧羊人负责控场,蜂医负责支援续航。推荐新手优先熟悉蜂医和露娜,再练红狼与牧羊人。"),i.existsSync(d)&&i.statSync(d).size>0||i.writeFileSync(d,`【内置】三角洲热门干员 Word 打法说明
50
+ 露娜适合信息侦察;红狼适合进攻突破;牧羊人适合区域封锁;蜂医适合治疗救援。队伍建议至少包含侦察和支援。`,"utf-8"),i.existsSync(e)||i.writeFileSync(e,"【内置】三角洲队伍搭配 Word 兼容资料\n侦察位看信息,突击位打开突破口,工程位控场,支援位保证续航。","utf-8");let f=g.join(b,"图片素材","干员图片");i.mkdirSync(f,{recursive:!0});let j=["# 干员图片资料","","图片来源参考:https://github.com/luoy-oss/deltaforce_id 和 https://playerhub.df.qq.com/playerhub/60004/object/p_{ID}.png",""];for(let[a,c]of Object.entries({"露娜.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000028.png","红狼.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000030.png","牧羊人.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000029.png","蜂医.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000027.png"})){let d=g.join(f,a);if(!i.existsSync(d)||i.statSync(d).size<20){let a=Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+/p9sAAAAASUVORK5CYII=","base64");i.writeFileSync(d,a)}i.writeFileSync(`${d}.source.txt`,`图片公开来源:${c}
51
+ 本地图片文件:${g.basename(d)}
52
+ `,"utf-8"),j.push(`- ${a.replace(".png","")}:${c};本地文件:${g.relative(b,d)}`)}return i.writeFileSync(g.join(b,"图片素材","图片文件-干员图片来源.md"),j.join("\n"),"utf-8"),a}function l(){return j||(j=new d.MultiProjectManager),j}function m(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return b!==g.resolve(g.join(h.homedir(),".customize-agent","demo-project"))&&(!!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))||b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function n(a=!1){let b=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(b&&i.existsSync(b)&&!m(b))return g.resolve(b);if(!a)return k();let c=function(){let a=g.join(h.homedir(),".customize-agent","projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!m(a))}finally{b.close()}}();return c.length>0?c[0]:m(process.cwd())?k():process.cwd()}},28183:a=>{a.exports=require("@napi-rs/canvas")},29021:a=>{a.exports=require("fs")},29283:(a,b,c)=>{c.r(b),c.d(b,{config:()=>o,default:()=>n,handler:()=>q});var d={};c.r(d),c.d(d,{config:()=>j,default:()=>k});var e=c(11400),f=c(50029),g=c(71086),h=c(38513),i=c(23328);let j={api:{responseLimit:!1}};async function k(a,b){if("GET"!==a.method)return b.status(405).json({error:"Method not allowed"});try{let d=a.query.projectRoot||(0,i.aY)(),e=a.query.relativePath,f=Math.max(1,Number(a.query.page??1));if(!d||!e)return b.status(400).json({error:"projectRoot and relativePath are required"});let g=(await (0,i.Qh)().getProject(d)).getFileDetail(e);if(!g?.absolutePath||"pdf"!==g.file.format)return b.status(404).json({error:"pdf not found"});let[{createCanvas:h},j]=await Promise.all([Promise.resolve().then(c.t.bind(c,28183,23)),Promise.resolve().then(c.bind(c,17532))]),k=await Promise.resolve().then(c.t.bind(c,73024,23)),l=new Uint8Array(k.readFileSync(g.absolutePath)),m=await j.getDocument({data:l}).promise,n=await m.getPage(Math.min(f,m.numPages)),o=n.getViewport({scale:1.6}),p=h(Math.ceil(o.width),Math.ceil(o.height));await n.render({canvasContext:p.getContext("2d"),viewport:o}).promise,b.setHeader("Content-Type","image/png"),b.setHeader("Cache-Control","private, max-age=3600"),b.status(200).send(p.toBuffer("image/png"))}catch(a){console.error("[api] kb/files/preview-pdf-page",a),b.status(500).json({error:"Internal server error"})}}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/kb/files/preview-pdf-page",pathname:"/api/kb/files/preview-pdf-page",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function q(a,b,c){let d=await p.prepare(a,b,{srcPage:"/api/kb/files/preview-pdf-page"});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/kb/files/preview-pdf-page",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())}}},33873:a=>{a.exports=require("path")},73024:a=>{a.exports=require("node:fs")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},87550:a=>{a.exports=require("better-sqlite3")}};var b=require("../../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=29283));module.exports=c})();
@@ -1,4 +1,4 @@
1
- "use strict";(()=>{var a={};a.id=5796,a.ids=[5796],a.modules={19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},23328:(a,b,c)=>{c.d(b,{Qh:()=>m,aY:()=>o});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021),j=c(79646);let k=null;function l(){let a=g.join(h.homedir(),".customize-agent","demo-project"),b=g.join(a,"knowledgeBase");for(let[a,c]of(i.mkdirSync(b,{recursive:!0}),Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
1
+ "use strict";(()=>{var a={};a.id=5796,a.ids=[5796],a.modules={19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},23328:(a,b,c)=>{c.d(b,{Qh:()=>l,aY:()=>n});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021);let j=null;function k(){let a=g.join(h.homedir(),".customize-agent","demo-project"),b=g.join(a,"knowledgeBase");for(let[a,c]of(i.mkdirSync(b,{recursive:!0}),Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
2
2
 
3
3
  公开参考入口:https://df.qq.com/ 和 https://deltaforce.garena.com/
4
4
 
@@ -46,11 +46,7 @@ xref
46
46
  trailer << /Root 1 0 R /Size 6 >>
47
47
  startxref
48
48
  0
49
- %%EOF`;i.writeFileSync(a,e,"binary")}(c,"【内置】三角洲热门干员攻略 PDF 摘要","露娜负责侦察信息,红狼负责突破,牧羊人负责控场,蜂医负责支援续航。推荐新手优先熟悉蜂医和露娜,再练红狼与牧羊人。"),function(a,b,c){if(i.existsSync(a)&&i.statSync(a).size>0)return;let d=`import zipfile, html, sys
50
- file,title,body=sys.argv[1],sys.argv[2],sys.argv[3]
51
- content=''.join(f'<w:p><w:r><w:t>{html.escape(line)}</w:t></w:r></w:p>' for line in (title+'\\n'+body).split('\\n'))
52
- with zipfile.ZipFile(file,'w') as z:
53
- z.writestr('[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>')
54
- z.writestr('_rels/.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>')
55
- z.writestr('word/document.xml',f'<?xml version="1.0" encoding="UTF-8"?><w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:body>{content}</w:body></w:document>')`;try{(0,j.execFileSync)("python3",["-c",d,a,b,c],{stdio:"ignore"})}catch{i.writeFileSync(a,`${b}
56
- ${c}`,"utf-8")}}(d,"【内置】三角洲热门干员 Word 打法说明","露娜适合信息侦察;红狼适合进攻突破;牧羊人适合区域封锁;蜂医适合治疗救援。队伍建议至少包含侦察和支援。"),i.existsSync(e)||i.writeFileSync(e,"【内置】三角洲队伍搭配 Word 兼容资料\n侦察位看信息,突击位打开突破口,工程位控场,支援位保证续航。","utf-8");let f=g.join(b,"图片素材","干员图片");i.mkdirSync(f,{recursive:!0});let k=["# 干员图片资料","","图片来源参考:https://github.com/luoy-oss/deltaforce_id 和 https://playerhub.df.qq.com/playerhub/60004/object/p_{ID}.png",""];for(let[a,c]of Object.entries({"露娜.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000028.png","红狼.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000030.png","牧羊人.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000029.png","蜂医.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000027.png"})){let d=g.join(f,a);if(!i.existsSync(d)||!(i.statSync(d).size>0))try{(0,j.execFileSync)("curl",["-L","--max-time","12","-o",d,c],{stdio:"ignore"})}catch{i.writeFileSync(`${d}.url.txt`,c,"utf-8")}k.push(`- ${a.replace(".png","")}:${c};本地文件:${g.relative(b,d)}`)}return i.writeFileSync(g.join(b,"图片素材","图片文件-干员图片来源.md"),k.join("\n"),"utf-8"),a}function m(){return k||(k=new d.MultiProjectManager),k}function n(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return b!==g.resolve(g.join(h.homedir(),".customize-agent","demo-project"))&&(!!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))||b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function o(a=!1){let b=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(b&&i.existsSync(b)&&!n(b))return g.resolve(b);if(!a)return l();let c=function(){let a=g.join(h.homedir(),".customize-agent","projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!n(a))}finally{b.close()}}();return c.length>0?c[0]:n(process.cwd())?l():process.cwd()}},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")},79646:a=>{a.exports=require("child_process")},87176:(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(23328);async function j(a,b){if("POST"!==a.method)return b.status(405).json({error:"method not allowed"});try{let c=a.body?.projectRoot||(0,i.aY)(),d=a.body?.relativePath;if(!c||!d)return b.status(400).json({error:"projectRoot and relativePath are required"});let e=await (0,i.Qh)().getProject(c),f=await e.reindexFile(d),g=e.getFileDetail(d);b.status(200).json({diff:f,detail:g})}catch(a){console.error("[api] kb/files/reindex",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/kb/files/reindex",pathname:"/api/kb/files/reindex",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function p(a,b,c){let d=await o.prepare(a,b,{srcPage:"/api/kb/files/reindex"});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/kb/files/reindex",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")}};var b=require("../../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=87176));module.exports=c})();
49
+ %%EOF`;i.writeFileSync(a,e,"binary")}(c,"【内置】三角洲热门干员攻略 PDF 摘要","露娜负责侦察信息,红狼负责突破,牧羊人负责控场,蜂医负责支援续航。推荐新手优先熟悉蜂医和露娜,再练红狼与牧羊人。"),i.existsSync(d)&&i.statSync(d).size>0||i.writeFileSync(d,`【内置】三角洲热门干员 Word 打法说明
50
+ 露娜适合信息侦察;红狼适合进攻突破;牧羊人适合区域封锁;蜂医适合治疗救援。队伍建议至少包含侦察和支援。`,"utf-8"),i.existsSync(e)||i.writeFileSync(e,"【内置】三角洲队伍搭配 Word 兼容资料\n侦察位看信息,突击位打开突破口,工程位控场,支援位保证续航。","utf-8");let f=g.join(b,"图片素材","干员图片");i.mkdirSync(f,{recursive:!0});let j=["# 干员图片资料","","图片来源参考:https://github.com/luoy-oss/deltaforce_id 和 https://playerhub.df.qq.com/playerhub/60004/object/p_{ID}.png",""];for(let[a,c]of Object.entries({"露娜.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000028.png","红狼.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000030.png","牧羊人.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000029.png","蜂医.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000027.png"})){let d=g.join(f,a);if(!i.existsSync(d)||i.statSync(d).size<20){let a=Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+/p9sAAAAASUVORK5CYII=","base64");i.writeFileSync(d,a)}i.writeFileSync(`${d}.source.txt`,`图片公开来源:${c}
51
+ 本地图片文件:${g.basename(d)}
52
+ `,"utf-8"),j.push(`- ${a.replace(".png","")}:${c};本地文件:${g.relative(b,d)}`)}return i.writeFileSync(g.join(b,"图片素材","图片文件-干员图片来源.md"),j.join("\n"),"utf-8"),a}function l(){return j||(j=new d.MultiProjectManager),j}function m(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return b!==g.resolve(g.join(h.homedir(),".customize-agent","demo-project"))&&(!!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))||b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function n(a=!1){let b=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(b&&i.existsSync(b)&&!m(b))return g.resolve(b);if(!a)return k();let c=function(){let a=g.join(h.homedir(),".customize-agent","projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!m(a))}finally{b.close()}}();return c.length>0?c[0]:m(process.cwd())?k():process.cwd()}},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")},87176:(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(23328);async function j(a,b){if("POST"!==a.method)return b.status(405).json({error:"method not allowed"});try{let c=a.body?.projectRoot||(0,i.aY)(),d=a.body?.relativePath;if(!c||!d)return b.status(400).json({error:"projectRoot and relativePath are required"});let e=await (0,i.Qh)().getProject(c),f=await e.reindexFile(d),g=e.getFileDetail(d);b.status(200).json({diff:f,detail:g})}catch(a){console.error("[api] kb/files/reindex",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/kb/files/reindex",pathname:"/api/kb/files/reindex",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function p(a,b,c){let d=await o.prepare(a,b,{srcPage:"/api/kb/files/reindex"});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/kb/files/reindex",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")}};var b=require("../../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=87176));module.exports=c})();
@@ -1,5 +1,5 @@
1
1
  "use strict";(()=>{var a={};a.id=5592,a.ids=[5592],a.modules={6708:(a,b,c)=>{c.d(b,{H7:()=>l,Qf:()=>j,oy:()=>k});var d=c(29021),e=c(21820),f=c(33873),g=c(19898);function h(a){return f.join(e.homedir(),".customize-agent","projects",(0,g.computeProjectId)(a),"kb-operations.jsonl")}function i(a){let b=h(a);return d.existsSync(b)?d.readFileSync(b,"utf8").split("\n").filter(Boolean).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}}):[]}function j(a,b){let c=Date.now(),e=i(a),g=e.findIndex(a=>a.id===b.id),j=g>=0?e[g]:void 0,k={id:b.id,type:b.type,title:b.title,stage:b.stage??j?.stage??"uploading",status:b.status??j?.status??"processing",message:b.message??j?.message??"",percent:b.percent??j?.percent??0,fileName:b.fileName??j?.fileName,filePath:b.filePath??j?.filePath,chunkCount:b.chunkCount??j?.chunkCount,textLength:b.textLength??j?.textLength,extractionMode:b.extractionMode??j?.extractionMode,error:b.error??j?.error,createdAt:j?.createdAt??c,updatedAt:c};g>=0?e[g]=k:e.push(k);let l=h(a);return d.mkdirSync(f.dirname(l),{recursive:!0}),d.writeFileSync(l,`${e.slice(-200).map(a=>JSON.stringify(a)).join("\n")}
2
- `,"utf8"),k}function k(a,b=50){return i(a).sort((a,b)=>b.updatedAt-a.updatedAt).slice(0,b)}function l(a){let b=i(a),c=h(a);return d.existsSync(c)&&d.unlinkSync(c),b.length}},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},23328:(a,b,c)=>{c.d(b,{Qh:()=>m,aY:()=>o});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021),j=c(79646);let k=null;function l(){let a=g.join(h.homedir(),".customize-agent","demo-project"),b=g.join(a,"knowledgeBase");for(let[a,c]of(i.mkdirSync(b,{recursive:!0}),Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
2
+ `,"utf8"),k}function k(a,b=50){return i(a).sort((a,b)=>b.updatedAt-a.updatedAt).slice(0,b)}function l(a){let b=i(a),c=h(a);return d.existsSync(c)&&d.unlinkSync(c),b.length}},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},23328:(a,b,c)=>{c.d(b,{Qh:()=>l,aY:()=>n});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021);let j=null;function k(){let a=g.join(h.homedir(),".customize-agent","demo-project"),b=g.join(a,"knowledgeBase");for(let[a,c]of(i.mkdirSync(b,{recursive:!0}),Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
3
3
 
4
4
  公开参考入口:https://df.qq.com/ 和 https://deltaforce.garena.com/
5
5
 
@@ -47,11 +47,7 @@ xref
47
47
  trailer << /Root 1 0 R /Size 6 >>
48
48
  startxref
49
49
  0
50
- %%EOF`;i.writeFileSync(a,e,"binary")}(c,"【内置】三角洲热门干员攻略 PDF 摘要","露娜负责侦察信息,红狼负责突破,牧羊人负责控场,蜂医负责支援续航。推荐新手优先熟悉蜂医和露娜,再练红狼与牧羊人。"),function(a,b,c){if(i.existsSync(a)&&i.statSync(a).size>0)return;let d=`import zipfile, html, sys
51
- file,title,body=sys.argv[1],sys.argv[2],sys.argv[3]
52
- content=''.join(f'<w:p><w:r><w:t>{html.escape(line)}</w:t></w:r></w:p>' for line in (title+'\\n'+body).split('\\n'))
53
- with zipfile.ZipFile(file,'w') as z:
54
- z.writestr('[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>')
55
- z.writestr('_rels/.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>')
56
- z.writestr('word/document.xml',f'<?xml version="1.0" encoding="UTF-8"?><w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:body>{content}</w:body></w:document>')`;try{(0,j.execFileSync)("python3",["-c",d,a,b,c],{stdio:"ignore"})}catch{i.writeFileSync(a,`${b}
57
- ${c}`,"utf-8")}}(d,"【内置】三角洲热门干员 Word 打法说明","露娜适合信息侦察;红狼适合进攻突破;牧羊人适合区域封锁;蜂医适合治疗救援。队伍建议至少包含侦察和支援。"),i.existsSync(e)||i.writeFileSync(e,"【内置】三角洲队伍搭配 Word 兼容资料\n侦察位看信息,突击位打开突破口,工程位控场,支援位保证续航。","utf-8");let f=g.join(b,"图片素材","干员图片");i.mkdirSync(f,{recursive:!0});let k=["# 干员图片资料","","图片来源参考:https://github.com/luoy-oss/deltaforce_id 和 https://playerhub.df.qq.com/playerhub/60004/object/p_{ID}.png",""];for(let[a,c]of Object.entries({"露娜.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000028.png","红狼.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000030.png","牧羊人.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000029.png","蜂医.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000027.png"})){let d=g.join(f,a);if(!i.existsSync(d)||!(i.statSync(d).size>0))try{(0,j.execFileSync)("curl",["-L","--max-time","12","-o",d,c],{stdio:"ignore"})}catch{i.writeFileSync(`${d}.url.txt`,c,"utf-8")}k.push(`- ${a.replace(".png","")}:${c};本地文件:${g.relative(b,d)}`)}return i.writeFileSync(g.join(b,"图片素材","图片文件-干员图片来源.md"),k.join("\n"),"utf-8"),a}function m(){return k||(k=new d.MultiProjectManager),k}function n(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return b!==g.resolve(g.join(h.homedir(),".customize-agent","demo-project"))&&(!!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))||b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function o(a=!1){let b=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(b&&i.existsSync(b)&&!n(b))return g.resolve(b);if(!a)return l();let c=function(){let a=g.join(h.homedir(),".customize-agent","projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!n(a))}finally{b.close()}}();return c.length>0?c[0]:n(process.cwd())?l():process.cwd()}},24501:(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(23328),j=c(6708);async function k(a,b){if(!["GET","DELETE"].includes(a.method))return b.status(405).json({error:"Method not allowed"});try{let c="string"==typeof a.body?.projectRoot?a.body.projectRoot:void 0,d=a.query.projectRoot||c||(0,i.aY)();if(!d)return b.status(200).json({files:[],total:0});let e=await (0,i.Qh)().getProject(d);if(await e.incrementalIndex(),"DELETE"===a.method){let{relativePath:c,relativePaths:f,all:g}=a.body,h=g?e.listFiles().map(a=>a.relativePath):Array.isArray(f)?f.map(String):c?[String(c)]:[];if(0===h.length)return b.status(400).json({error:"relativePath or relativePaths is required"});let i=`delete-${Date.now()}-${Math.random().toString(36).slice(2)}`,k=g?`删除全部 ${h.length} 个文件`:1===h.length?`删除 ${h[0]}`:`批量删除 ${h.length} 个文件`;(0,j.Qf)(d,{id:i,type:"delete",title:k,stage:"uploading",status:"processing",percent:10,message:"正在删除文件和索引",filePath:h[0],fileName:h[0]?.split("/").pop()});let l=0;for(let a of h)await e.removeFile(a),l++,(0,j.Qf)(d,{id:i,type:"delete",title:k,stage:"uploading",status:"processing",percent:Math.min(95,Math.round(l/h.length*90)),message:`已删除 ${l}/${h.length}`,filePath:a,fileName:a.split("/").pop()});return(0,j.Qf)(d,{id:i,type:"delete",title:k,stage:"done",status:"success",percent:100,message:`已删除 ${l} 个文件和索引`,filePath:h[0],fileName:h[0]?.split("/").pop()}),b.status(200).json({success:!0,deleted:l})}let f=a.query.category,g=parseInt(a.query.page||"1",10),h=parseInt(a.query.limit||"50",10),k=e.listFiles();f&&(k=k.filter(a=>a.category===f));let l=e.getVectorStatus(),m=k.length,n=k.slice((g-1)*h,g*h).map(a=>({...a,builtIn:d.includes("/.customize-agent/demo-project")||d.includes("\\.customize-agent\\demo-project")}));b.status(200).json({files:n,total:m,page:g,limit:h,vectorStatus:l})}catch(a){console.error("[api] kb/files/index",a),b.status(500).json({error:"Internal server error"})}}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/kb/files",pathname:"/api/kb/files",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function q(a,b,c){let d=await p.prepare(a,b,{srcPage:"/api/kb/files"});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/kb/files",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(m.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:l.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(p.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},79646:a=>{a.exports=require("child_process")},87550:a=>{a.exports=require("better-sqlite3")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=24501));module.exports=c})();
50
+ %%EOF`;i.writeFileSync(a,e,"binary")}(c,"【内置】三角洲热门干员攻略 PDF 摘要","露娜负责侦察信息,红狼负责突破,牧羊人负责控场,蜂医负责支援续航。推荐新手优先熟悉蜂医和露娜,再练红狼与牧羊人。"),i.existsSync(d)&&i.statSync(d).size>0||i.writeFileSync(d,`【内置】三角洲热门干员 Word 打法说明
51
+ 露娜适合信息侦察;红狼适合进攻突破;牧羊人适合区域封锁;蜂医适合治疗救援。队伍建议至少包含侦察和支援。`,"utf-8"),i.existsSync(e)||i.writeFileSync(e,"【内置】三角洲队伍搭配 Word 兼容资料\n侦察位看信息,突击位打开突破口,工程位控场,支援位保证续航。","utf-8");let f=g.join(b,"图片素材","干员图片");i.mkdirSync(f,{recursive:!0});let j=["# 干员图片资料","","图片来源参考:https://github.com/luoy-oss/deltaforce_id 和 https://playerhub.df.qq.com/playerhub/60004/object/p_{ID}.png",""];for(let[a,c]of Object.entries({"露娜.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000028.png","红狼.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000030.png","牧羊人.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000029.png","蜂医.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000027.png"})){let d=g.join(f,a);if(!i.existsSync(d)||i.statSync(d).size<20){let a=Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+/p9sAAAAASUVORK5CYII=","base64");i.writeFileSync(d,a)}i.writeFileSync(`${d}.source.txt`,`图片公开来源:${c}
52
+ 本地图片文件:${g.basename(d)}
53
+ `,"utf-8"),j.push(`- ${a.replace(".png","")}:${c};本地文件:${g.relative(b,d)}`)}return i.writeFileSync(g.join(b,"图片素材","图片文件-干员图片来源.md"),j.join("\n"),"utf-8"),a}function l(){return j||(j=new d.MultiProjectManager),j}function m(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return b!==g.resolve(g.join(h.homedir(),".customize-agent","demo-project"))&&(!!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))||b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function n(a=!1){let b=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(b&&i.existsSync(b)&&!m(b))return g.resolve(b);if(!a)return k();let c=function(){let a=g.join(h.homedir(),".customize-agent","projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!m(a))}finally{b.close()}}();return c.length>0?c[0]:m(process.cwd())?k():process.cwd()}},24501:(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(23328),j=c(6708);async function k(a,b){if(!["GET","DELETE"].includes(a.method))return b.status(405).json({error:"Method not allowed"});try{let c="string"==typeof a.body?.projectRoot?a.body.projectRoot:void 0,d=a.query.projectRoot||c||(0,i.aY)();if(!d)return b.status(200).json({files:[],total:0});let e=await (0,i.Qh)().getProject(d);if(("POST"===a.method||"1"===a.query.reindex)&&await e.incrementalIndex(),"DELETE"===a.method){let{relativePath:c,relativePaths:f,all:g}=a.body,h=g?e.listFiles().map(a=>a.relativePath):Array.isArray(f)?f.map(String):c?[String(c)]:[];if(0===h.length)return b.status(400).json({error:"relativePath or relativePaths is required"});let i=`delete-${Date.now()}-${Math.random().toString(36).slice(2)}`,k=g?`删除全部 ${h.length} 个文件`:1===h.length?`删除 ${h[0]}`:`批量删除 ${h.length} 个文件`;(0,j.Qf)(d,{id:i,type:"delete",title:k,stage:"uploading",status:"processing",percent:10,message:"正在删除文件和索引",filePath:h[0],fileName:h[0]?.split("/").pop()});let l=0;for(let a of h)await e.removeFile(a),l++,(0,j.Qf)(d,{id:i,type:"delete",title:k,stage:"uploading",status:"processing",percent:Math.min(95,Math.round(l/h.length*90)),message:`已删除 ${l}/${h.length}`,filePath:a,fileName:a.split("/").pop()});return(0,j.Qf)(d,{id:i,type:"delete",title:k,stage:"done",status:"success",percent:100,message:`已删除 ${l} 个文件和索引`,filePath:h[0],fileName:h[0]?.split("/").pop()}),b.status(200).json({success:!0,deleted:l})}let f=a.query.category,g=parseInt(a.query.page||"1",10),h=parseInt(a.query.limit||"50",10),k=e.listFiles();0===k.length&&(d.includes("/.customize-agent/demo-project")||d.includes("\\.customize-agent\\demo-project"))&&(await e.incrementalIndex(),k=e.listFiles()),f&&(k=k.filter(a=>a.category===f));let l=e.getVectorStatus(),m=k.length,n=k.slice((g-1)*h,g*h).map(a=>({...a,builtIn:d.includes("/.customize-agent/demo-project")||d.includes("\\.customize-agent\\demo-project")}));b.status(200).json({files:n,total:m,page:g,limit:h,vectorStatus:l})}catch(a){console.error("[api] kb/files/index",a),b.status(500).json({error:"Internal server error"})}}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/kb/files",pathname:"/api/kb/files",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function q(a,b,c){let d=await p.prepare(a,b,{srcPage:"/api/kb/files"});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/kb/files",internalRevalidate:null==i?void 0:i.revalidate,onError:(...b)=>j(a,...b)}).finally(()=>{if(!e)return;e.setAttributes({"http.status_code":b.statusCode,"next.rsc":!1});let f=d.getRootSpanAttributes();if(!f)return;if(f.get("next.span_type")!==m.BaseServerSpan.handleRequest)return void console.warn(`Unexpected root span type '${f.get("next.span_type")}'. Please report this Next.js issue https://github.com/vercel/next.js`);let g=f.get("next.route");if(g){let a=`${c} ${g}`;e.setAttributes({"next.route":g,"http.route":g,"next.span_name":a}),e.updateName(a)}else e.updateName(`${c} ${a.url}`)});e?await k(e):await d.withPropagatedContext(a.headers,()=>d.trace(m.BaseServerSpan.handleRequest,{spanName:`${c} ${a.url}`,kind:l.SpanKind.SERVER,attributes:{"http.method":c,"http.target":a.url}},k))}catch(a){if(p.isDev)throw a;(0,e.sendError)(b,500,"Internal Server Error")}finally{null==c.waitUntil||c.waitUntil.call(c,Promise.resolve())}}},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},87550:a=>{a.exports=require("better-sqlite3")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=24501));module.exports=c})();
@@ -1,4 +1,4 @@
1
- "use strict";(()=>{var a={};a.id=9041,a.ids=[9041],a.modules={19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},23328:(a,b,c)=>{c.d(b,{Qh:()=>m,aY:()=>o});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021),j=c(79646);let k=null;function l(){let a=g.join(h.homedir(),".customize-agent","demo-project"),b=g.join(a,"knowledgeBase");for(let[a,c]of(i.mkdirSync(b,{recursive:!0}),Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
1
+ "use strict";(()=>{var a={};a.id=9041,a.ids=[9041],a.modules={19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},23328:(a,b,c)=>{c.d(b,{Qh:()=>l,aY:()=>n});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021);let j=null;function k(){let a=g.join(h.homedir(),".customize-agent","demo-project"),b=g.join(a,"knowledgeBase");for(let[a,c]of(i.mkdirSync(b,{recursive:!0}),Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
2
2
 
3
3
  公开参考入口:https://df.qq.com/ 和 https://deltaforce.garena.com/
4
4
 
@@ -46,11 +46,7 @@ xref
46
46
  trailer << /Root 1 0 R /Size 6 >>
47
47
  startxref
48
48
  0
49
- %%EOF`;i.writeFileSync(a,e,"binary")}(c,"【内置】三角洲热门干员攻略 PDF 摘要","露娜负责侦察信息,红狼负责突破,牧羊人负责控场,蜂医负责支援续航。推荐新手优先熟悉蜂医和露娜,再练红狼与牧羊人。"),function(a,b,c){if(i.existsSync(a)&&i.statSync(a).size>0)return;let d=`import zipfile, html, sys
50
- file,title,body=sys.argv[1],sys.argv[2],sys.argv[3]
51
- content=''.join(f'<w:p><w:r><w:t>{html.escape(line)}</w:t></w:r></w:p>' for line in (title+'\\n'+body).split('\\n'))
52
- with zipfile.ZipFile(file,'w') as z:
53
- z.writestr('[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>')
54
- z.writestr('_rels/.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>')
55
- z.writestr('word/document.xml',f'<?xml version="1.0" encoding="UTF-8"?><w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:body>{content}</w:body></w:document>')`;try{(0,j.execFileSync)("python3",["-c",d,a,b,c],{stdio:"ignore"})}catch{i.writeFileSync(a,`${b}
56
- ${c}`,"utf-8")}}(d,"【内置】三角洲热门干员 Word 打法说明","露娜适合信息侦察;红狼适合进攻突破;牧羊人适合区域封锁;蜂医适合治疗救援。队伍建议至少包含侦察和支援。"),i.existsSync(e)||i.writeFileSync(e,"【内置】三角洲队伍搭配 Word 兼容资料\n侦察位看信息,突击位打开突破口,工程位控场,支援位保证续航。","utf-8");let f=g.join(b,"图片素材","干员图片");i.mkdirSync(f,{recursive:!0});let k=["# 干员图片资料","","图片来源参考:https://github.com/luoy-oss/deltaforce_id 和 https://playerhub.df.qq.com/playerhub/60004/object/p_{ID}.png",""];for(let[a,c]of Object.entries({"露娜.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000028.png","红狼.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000030.png","牧羊人.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000029.png","蜂医.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000027.png"})){let d=g.join(f,a);if(!i.existsSync(d)||!(i.statSync(d).size>0))try{(0,j.execFileSync)("curl",["-L","--max-time","12","-o",d,c],{stdio:"ignore"})}catch{i.writeFileSync(`${d}.url.txt`,c,"utf-8")}k.push(`- ${a.replace(".png","")}:${c};本地文件:${g.relative(b,d)}`)}return i.writeFileSync(g.join(b,"图片素材","图片文件-干员图片来源.md"),k.join("\n"),"utf-8"),a}function m(){return k||(k=new d.MultiProjectManager),k}function n(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return b!==g.resolve(g.join(h.homedir(),".customize-agent","demo-project"))&&(!!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))||b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function o(a=!1){let b=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(b&&i.existsSync(b)&&!n(b))return g.resolve(b);if(!a)return l();let c=function(){let a=g.join(h.homedir(),".customize-agent","projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!n(a))}finally{b.close()}}();return c.length>0?c[0]:n(process.cwd())?l():process.cwd()}},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},55279:(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(23328);async function j(a,b){if(!["GET","POST"].includes(a.method))return b.status(405).json({error:"Method not allowed"});try{let c=a.query.projectRoot||(0,i.aY)();if(!c)return b.status(200).json([]);let d=await (0,i.Qh)().getProject(c);if("POST"===a.method){let{rules:c}=a.body;return Array.isArray(c)&&c.forEach(a=>{a.trim()&&d.addIgnoreRule(a.trim())}),b.status(200).json({success:!0})}b.status(200).json(d.listIgnoreRules().map(a=>a.pattern))}catch(a){console.error("[api] kb/ignore",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/kb/ignore",pathname:"/api/kb/ignore",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function p(a,b,c){let d=await o.prepare(a,b,{srcPage:"/api/kb/ignore"});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/kb/ignore",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())}}},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},79646:a=>{a.exports=require("child_process")},87550:a=>{a.exports=require("better-sqlite3")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=55279));module.exports=c})();
49
+ %%EOF`;i.writeFileSync(a,e,"binary")}(c,"【内置】三角洲热门干员攻略 PDF 摘要","露娜负责侦察信息,红狼负责突破,牧羊人负责控场,蜂医负责支援续航。推荐新手优先熟悉蜂医和露娜,再练红狼与牧羊人。"),i.existsSync(d)&&i.statSync(d).size>0||i.writeFileSync(d,`【内置】三角洲热门干员 Word 打法说明
50
+ 露娜适合信息侦察;红狼适合进攻突破;牧羊人适合区域封锁;蜂医适合治疗救援。队伍建议至少包含侦察和支援。`,"utf-8"),i.existsSync(e)||i.writeFileSync(e,"【内置】三角洲队伍搭配 Word 兼容资料\n侦察位看信息,突击位打开突破口,工程位控场,支援位保证续航。","utf-8");let f=g.join(b,"图片素材","干员图片");i.mkdirSync(f,{recursive:!0});let j=["# 干员图片资料","","图片来源参考:https://github.com/luoy-oss/deltaforce_id 和 https://playerhub.df.qq.com/playerhub/60004/object/p_{ID}.png",""];for(let[a,c]of Object.entries({"露娜.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000028.png","红狼.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000030.png","牧羊人.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000029.png","蜂医.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000027.png"})){let d=g.join(f,a);if(!i.existsSync(d)||i.statSync(d).size<20){let a=Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+/p9sAAAAASUVORK5CYII=","base64");i.writeFileSync(d,a)}i.writeFileSync(`${d}.source.txt`,`图片公开来源:${c}
51
+ 本地图片文件:${g.basename(d)}
52
+ `,"utf-8"),j.push(`- ${a.replace(".png","")}:${c};本地文件:${g.relative(b,d)}`)}return i.writeFileSync(g.join(b,"图片素材","图片文件-干员图片来源.md"),j.join("\n"),"utf-8"),a}function l(){return j||(j=new d.MultiProjectManager),j}function m(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return b!==g.resolve(g.join(h.homedir(),".customize-agent","demo-project"))&&(!!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))||b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function n(a=!1){let b=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(b&&i.existsSync(b)&&!m(b))return g.resolve(b);if(!a)return k();let c=function(){let a=g.join(h.homedir(),".customize-agent","projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!m(a))}finally{b.close()}}();return c.length>0?c[0]:m(process.cwd())?k():process.cwd()}},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},55279:(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(23328);async function j(a,b){if(!["GET","POST"].includes(a.method))return b.status(405).json({error:"Method not allowed"});try{let c=a.query.projectRoot||(0,i.aY)();if(!c)return b.status(200).json([]);let d=await (0,i.Qh)().getProject(c);if("POST"===a.method){let{rules:c}=a.body;return Array.isArray(c)&&c.forEach(a=>{a.trim()&&d.addIgnoreRule(a.trim())}),b.status(200).json({success:!0})}b.status(200).json(d.listIgnoreRules().map(a=>a.pattern))}catch(a){console.error("[api] kb/ignore",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/kb/ignore",pathname:"/api/kb/ignore",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function p(a,b,c){let d=await o.prepare(a,b,{srcPage:"/api/kb/ignore"});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/kb/ignore",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())}}},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},87550:a=>{a.exports=require("better-sqlite3")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=55279));module.exports=c})();
@@ -1,5 +1,5 @@
1
1
  "use strict";(()=>{var a={};a.id=4197,a.ids=[4197],a.modules={6708:(a,b,c)=>{c.d(b,{H7:()=>l,Qf:()=>j,oy:()=>k});var d=c(29021),e=c(21820),f=c(33873),g=c(19898);function h(a){return f.join(e.homedir(),".customize-agent","projects",(0,g.computeProjectId)(a),"kb-operations.jsonl")}function i(a){let b=h(a);return d.existsSync(b)?d.readFileSync(b,"utf8").split("\n").filter(Boolean).flatMap(a=>{try{return[JSON.parse(a)]}catch{return[]}}):[]}function j(a,b){let c=Date.now(),e=i(a),g=e.findIndex(a=>a.id===b.id),j=g>=0?e[g]:void 0,k={id:b.id,type:b.type,title:b.title,stage:b.stage??j?.stage??"uploading",status:b.status??j?.status??"processing",message:b.message??j?.message??"",percent:b.percent??j?.percent??0,fileName:b.fileName??j?.fileName,filePath:b.filePath??j?.filePath,chunkCount:b.chunkCount??j?.chunkCount,textLength:b.textLength??j?.textLength,extractionMode:b.extractionMode??j?.extractionMode,error:b.error??j?.error,createdAt:j?.createdAt??c,updatedAt:c};g>=0?e[g]=k:e.push(k);let l=h(a);return d.mkdirSync(f.dirname(l),{recursive:!0}),d.writeFileSync(l,`${e.slice(-200).map(a=>JSON.stringify(a)).join("\n")}
2
- `,"utf8"),k}function k(a,b=50){return i(a).sort((a,b)=>b.updatedAt-a.updatedAt).slice(0,b)}function l(a){let b=i(a),c=h(a);return d.existsSync(c)&&d.unlinkSync(c),b.length}},13743:(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(23328),j=c(6708);function k(a,b){try{let c=a.query.projectRoot||(0,i.aY)();if(!c)return b.status(200).json("DELETE"===a.method?{success:!0,deleted:0}:{operations:[]});if("GET"===a.method){let d=Number(a.query.limit??50);return b.status(200).json({operations:(0,j.oy)(c,Number.isFinite(d)?d:50)})}if("DELETE"===a.method)return b.status(200).json({success:!0,deleted:(0,j.H7)(c)});return b.status(405).json({error:"Method not allowed"})}catch(a){console.error("[api] kb/operations",a),b.status(500).json({error:"Internal server error"})}}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/kb/operations",pathname:"/api/kb/operations",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function q(a,b,c){let d=await p.prepare(a,b,{srcPage:"/api/kb/operations"});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/kb/operations",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())}}},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},23328:(a,b,c)=>{c.d(b,{Qh:()=>m,aY:()=>o});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021),j=c(79646);let k=null;function l(){let a=g.join(h.homedir(),".customize-agent","demo-project"),b=g.join(a,"knowledgeBase");for(let[a,c]of(i.mkdirSync(b,{recursive:!0}),Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
2
+ `,"utf8"),k}function k(a,b=50){return i(a).sort((a,b)=>b.updatedAt-a.updatedAt).slice(0,b)}function l(a){let b=i(a),c=h(a);return d.existsSync(c)&&d.unlinkSync(c),b.length}},13743:(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(23328),j=c(6708);function k(a,b){try{let c=a.query.projectRoot||(0,i.aY)();if(!c)return b.status(200).json("DELETE"===a.method?{success:!0,deleted:0}:{operations:[]});if("GET"===a.method){let d=Number(a.query.limit??50);return b.status(200).json({operations:(0,j.oy)(c,Number.isFinite(d)?d:50)})}if("DELETE"===a.method)return b.status(200).json({success:!0,deleted:(0,j.H7)(c)});return b.status(405).json({error:"Method not allowed"})}catch(a){console.error("[api] kb/operations",a),b.status(500).json({error:"Internal server error"})}}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/kb/operations",pathname:"/api/kb/operations",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function q(a,b,c){let d=await p.prepare(a,b,{srcPage:"/api/kb/operations"});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/kb/operations",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())}}},19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},23328:(a,b,c)=>{c.d(b,{Qh:()=>l,aY:()=>n});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021);let j=null;function k(){let a=g.join(h.homedir(),".customize-agent","demo-project"),b=g.join(a,"knowledgeBase");for(let[a,c]of(i.mkdirSync(b,{recursive:!0}),Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
3
3
 
4
4
  公开参考入口:https://df.qq.com/ 和 https://deltaforce.garena.com/
5
5
 
@@ -47,11 +47,7 @@ xref
47
47
  trailer << /Root 1 0 R /Size 6 >>
48
48
  startxref
49
49
  0
50
- %%EOF`;i.writeFileSync(a,e,"binary")}(c,"【内置】三角洲热门干员攻略 PDF 摘要","露娜负责侦察信息,红狼负责突破,牧羊人负责控场,蜂医负责支援续航。推荐新手优先熟悉蜂医和露娜,再练红狼与牧羊人。"),function(a,b,c){if(i.existsSync(a)&&i.statSync(a).size>0)return;let d=`import zipfile, html, sys
51
- file,title,body=sys.argv[1],sys.argv[2],sys.argv[3]
52
- content=''.join(f'<w:p><w:r><w:t>{html.escape(line)}</w:t></w:r></w:p>' for line in (title+'\\n'+body).split('\\n'))
53
- with zipfile.ZipFile(file,'w') as z:
54
- z.writestr('[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>')
55
- z.writestr('_rels/.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>')
56
- z.writestr('word/document.xml',f'<?xml version="1.0" encoding="UTF-8"?><w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:body>{content}</w:body></w:document>')`;try{(0,j.execFileSync)("python3",["-c",d,a,b,c],{stdio:"ignore"})}catch{i.writeFileSync(a,`${b}
57
- ${c}`,"utf-8")}}(d,"【内置】三角洲热门干员 Word 打法说明","露娜适合信息侦察;红狼适合进攻突破;牧羊人适合区域封锁;蜂医适合治疗救援。队伍建议至少包含侦察和支援。"),i.existsSync(e)||i.writeFileSync(e,"【内置】三角洲队伍搭配 Word 兼容资料\n侦察位看信息,突击位打开突破口,工程位控场,支援位保证续航。","utf-8");let f=g.join(b,"图片素材","干员图片");i.mkdirSync(f,{recursive:!0});let k=["# 干员图片资料","","图片来源参考:https://github.com/luoy-oss/deltaforce_id 和 https://playerhub.df.qq.com/playerhub/60004/object/p_{ID}.png",""];for(let[a,c]of Object.entries({"露娜.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000028.png","红狼.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000030.png","牧羊人.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000029.png","蜂医.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000027.png"})){let d=g.join(f,a);if(!i.existsSync(d)||!(i.statSync(d).size>0))try{(0,j.execFileSync)("curl",["-L","--max-time","12","-o",d,c],{stdio:"ignore"})}catch{i.writeFileSync(`${d}.url.txt`,c,"utf-8")}k.push(`- ${a.replace(".png","")}:${c};本地文件:${g.relative(b,d)}`)}return i.writeFileSync(g.join(b,"图片素材","图片文件-干员图片来源.md"),k.join("\n"),"utf-8"),a}function m(){return k||(k=new d.MultiProjectManager),k}function n(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return b!==g.resolve(g.join(h.homedir(),".customize-agent","demo-project"))&&(!!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))||b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function o(a=!1){let b=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(b&&i.existsSync(b)&&!n(b))return g.resolve(b);if(!a)return l();let c=function(){let a=g.join(h.homedir(),".customize-agent","projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!n(a))}finally{b.close()}}();return c.length>0?c[0]:n(process.cwd())?l():process.cwd()}},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")},79646:a=>{a.exports=require("child_process")},87550:a=>{a.exports=require("better-sqlite3")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=13743));module.exports=c})();
50
+ %%EOF`;i.writeFileSync(a,e,"binary")}(c,"【内置】三角洲热门干员攻略 PDF 摘要","露娜负责侦察信息,红狼负责突破,牧羊人负责控场,蜂医负责支援续航。推荐新手优先熟悉蜂医和露娜,再练红狼与牧羊人。"),i.existsSync(d)&&i.statSync(d).size>0||i.writeFileSync(d,`【内置】三角洲热门干员 Word 打法说明
51
+ 露娜适合信息侦察;红狼适合进攻突破;牧羊人适合区域封锁;蜂医适合治疗救援。队伍建议至少包含侦察和支援。`,"utf-8"),i.existsSync(e)||i.writeFileSync(e,"【内置】三角洲队伍搭配 Word 兼容资料\n侦察位看信息,突击位打开突破口,工程位控场,支援位保证续航。","utf-8");let f=g.join(b,"图片素材","干员图片");i.mkdirSync(f,{recursive:!0});let j=["# 干员图片资料","","图片来源参考:https://github.com/luoy-oss/deltaforce_id 和 https://playerhub.df.qq.com/playerhub/60004/object/p_{ID}.png",""];for(let[a,c]of Object.entries({"露娜.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000028.png","红狼.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000030.png","牧羊人.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000029.png","蜂医.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000027.png"})){let d=g.join(f,a);if(!i.existsSync(d)||i.statSync(d).size<20){let a=Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+/p9sAAAAASUVORK5CYII=","base64");i.writeFileSync(d,a)}i.writeFileSync(`${d}.source.txt`,`图片公开来源:${c}
52
+ 本地图片文件:${g.basename(d)}
53
+ `,"utf-8"),j.push(`- ${a.replace(".png","")}:${c};本地文件:${g.relative(b,d)}`)}return i.writeFileSync(g.join(b,"图片素材","图片文件-干员图片来源.md"),j.join("\n"),"utf-8"),a}function l(){return j||(j=new d.MultiProjectManager),j}function m(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return b!==g.resolve(g.join(h.homedir(),".customize-agent","demo-project"))&&(!!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))||b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function n(a=!1){let b=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(b&&i.existsSync(b)&&!m(b))return g.resolve(b);if(!a)return k();let c=function(){let a=g.join(h.homedir(),".customize-agent","projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!m(a))}finally{b.close()}}();return c.length>0?c[0]:m(process.cwd())?k():process.cwd()}},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")},87550:a=>{a.exports=require("better-sqlite3")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=13743));module.exports=c})();
@@ -1,4 +1,4 @@
1
- "use strict";(()=>{var a={};a.id=3676,a.ids=[3676],a.modules={19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},23328:(a,b,c)=>{c.d(b,{Qh:()=>m,aY:()=>o});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021),j=c(79646);let k=null;function l(){let a=g.join(h.homedir(),".customize-agent","demo-project"),b=g.join(a,"knowledgeBase");for(let[a,c]of(i.mkdirSync(b,{recursive:!0}),Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
1
+ "use strict";(()=>{var a={};a.id=3676,a.ids=[3676],a.modules={19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},23328:(a,b,c)=>{c.d(b,{Qh:()=>l,aY:()=>n});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021);let j=null;function k(){let a=g.join(h.homedir(),".customize-agent","demo-project"),b=g.join(a,"knowledgeBase");for(let[a,c]of(i.mkdirSync(b,{recursive:!0}),Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
2
2
 
3
3
  公开参考入口:https://df.qq.com/ 和 https://deltaforce.garena.com/
4
4
 
@@ -46,11 +46,7 @@ xref
46
46
  trailer << /Root 1 0 R /Size 6 >>
47
47
  startxref
48
48
  0
49
- %%EOF`;i.writeFileSync(a,e,"binary")}(c,"【内置】三角洲热门干员攻略 PDF 摘要","露娜负责侦察信息,红狼负责突破,牧羊人负责控场,蜂医负责支援续航。推荐新手优先熟悉蜂医和露娜,再练红狼与牧羊人。"),function(a,b,c){if(i.existsSync(a)&&i.statSync(a).size>0)return;let d=`import zipfile, html, sys
50
- file,title,body=sys.argv[1],sys.argv[2],sys.argv[3]
51
- content=''.join(f'<w:p><w:r><w:t>{html.escape(line)}</w:t></w:r></w:p>' for line in (title+'\\n'+body).split('\\n'))
52
- with zipfile.ZipFile(file,'w') as z:
53
- z.writestr('[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>')
54
- z.writestr('_rels/.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>')
55
- z.writestr('word/document.xml',f'<?xml version="1.0" encoding="UTF-8"?><w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:body>{content}</w:body></w:document>')`;try{(0,j.execFileSync)("python3",["-c",d,a,b,c],{stdio:"ignore"})}catch{i.writeFileSync(a,`${b}
56
- ${c}`,"utf-8")}}(d,"【内置】三角洲热门干员 Word 打法说明","露娜适合信息侦察;红狼适合进攻突破;牧羊人适合区域封锁;蜂医适合治疗救援。队伍建议至少包含侦察和支援。"),i.existsSync(e)||i.writeFileSync(e,"【内置】三角洲队伍搭配 Word 兼容资料\n侦察位看信息,突击位打开突破口,工程位控场,支援位保证续航。","utf-8");let f=g.join(b,"图片素材","干员图片");i.mkdirSync(f,{recursive:!0});let k=["# 干员图片资料","","图片来源参考:https://github.com/luoy-oss/deltaforce_id 和 https://playerhub.df.qq.com/playerhub/60004/object/p_{ID}.png",""];for(let[a,c]of Object.entries({"露娜.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000028.png","红狼.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000030.png","牧羊人.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000029.png","蜂医.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000027.png"})){let d=g.join(f,a);if(!i.existsSync(d)||!(i.statSync(d).size>0))try{(0,j.execFileSync)("curl",["-L","--max-time","12","-o",d,c],{stdio:"ignore"})}catch{i.writeFileSync(`${d}.url.txt`,c,"utf-8")}k.push(`- ${a.replace(".png","")}:${c};本地文件:${g.relative(b,d)}`)}return i.writeFileSync(g.join(b,"图片素材","图片文件-干员图片来源.md"),k.join("\n"),"utf-8"),a}function m(){return k||(k=new d.MultiProjectManager),k}function n(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return b!==g.resolve(g.join(h.homedir(),".customize-agent","demo-project"))&&(!!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))||b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function o(a=!1){let b=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(b&&i.existsSync(b)&&!n(b))return g.resolve(b);if(!a)return l();let c=function(){let a=g.join(h.homedir(),".customize-agent","projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!n(a))}finally{b.close()}}();return c.length>0?c[0]:n(process.cwd())?l():process.cwd()}},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},38962:(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(23328);async function j(a,b){if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});try{let c=a.body?.projectRoot||(0,i.aY)();if(!c)return b.status(400).json({error:"Project root is required"});let d=await (0,i.Qh)().getProject(c),e=await d.incrementalIndex();b.status(200).json({success:!0,stats:{...d.getStats(),vectorStatus:d.getVectorStatus()},diff:{newFiles:e.newFiles.length,modifiedFiles:e.modifiedFiles.length,deletedFiles:e.deletedFiles.length,hasChanges:e.hasChanges}})}catch(a){console.error("[api] kb/reindex",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/kb/reindex",pathname:"/api/kb/reindex",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function p(a,b,c){let d=await o.prepare(a,b,{srcPage:"/api/kb/reindex"});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/kb/reindex",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())}}},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},79646:a=>{a.exports=require("child_process")},87550:a=>{a.exports=require("better-sqlite3")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=38962));module.exports=c})();
49
+ %%EOF`;i.writeFileSync(a,e,"binary")}(c,"【内置】三角洲热门干员攻略 PDF 摘要","露娜负责侦察信息,红狼负责突破,牧羊人负责控场,蜂医负责支援续航。推荐新手优先熟悉蜂医和露娜,再练红狼与牧羊人。"),i.existsSync(d)&&i.statSync(d).size>0||i.writeFileSync(d,`【内置】三角洲热门干员 Word 打法说明
50
+ 露娜适合信息侦察;红狼适合进攻突破;牧羊人适合区域封锁;蜂医适合治疗救援。队伍建议至少包含侦察和支援。`,"utf-8"),i.existsSync(e)||i.writeFileSync(e,"【内置】三角洲队伍搭配 Word 兼容资料\n侦察位看信息,突击位打开突破口,工程位控场,支援位保证续航。","utf-8");let f=g.join(b,"图片素材","干员图片");i.mkdirSync(f,{recursive:!0});let j=["# 干员图片资料","","图片来源参考:https://github.com/luoy-oss/deltaforce_id 和 https://playerhub.df.qq.com/playerhub/60004/object/p_{ID}.png",""];for(let[a,c]of Object.entries({"露娜.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000028.png","红狼.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000030.png","牧羊人.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000029.png","蜂医.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000027.png"})){let d=g.join(f,a);if(!i.existsSync(d)||i.statSync(d).size<20){let a=Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+/p9sAAAAASUVORK5CYII=","base64");i.writeFileSync(d,a)}i.writeFileSync(`${d}.source.txt`,`图片公开来源:${c}
51
+ 本地图片文件:${g.basename(d)}
52
+ `,"utf-8"),j.push(`- ${a.replace(".png","")}:${c};本地文件:${g.relative(b,d)}`)}return i.writeFileSync(g.join(b,"图片素材","图片文件-干员图片来源.md"),j.join("\n"),"utf-8"),a}function l(){return j||(j=new d.MultiProjectManager),j}function m(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return b!==g.resolve(g.join(h.homedir(),".customize-agent","demo-project"))&&(!!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))||b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function n(a=!1){let b=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(b&&i.existsSync(b)&&!m(b))return g.resolve(b);if(!a)return k();let c=function(){let a=g.join(h.homedir(),".customize-agent","projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!m(a))}finally{b.close()}}();return c.length>0?c[0]:m(process.cwd())?k():process.cwd()}},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},38962:(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(23328);async function j(a,b){if("POST"!==a.method)return b.status(405).json({error:"Method not allowed"});try{let c=a.body?.projectRoot||(0,i.aY)();if(!c)return b.status(400).json({error:"Project root is required"});let d=await (0,i.Qh)().getProject(c),e=await d.incrementalIndex();b.status(200).json({success:!0,stats:{...d.getStats(),vectorStatus:d.getVectorStatus()},diff:{newFiles:e.newFiles.length,modifiedFiles:e.modifiedFiles.length,deletedFiles:e.deletedFiles.length,hasChanges:e.hasChanges}})}catch(a){console.error("[api] kb/reindex",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/kb/reindex",pathname:"/api/kb/reindex",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function p(a,b,c){let d=await o.prepare(a,b,{srcPage:"/api/kb/reindex"});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/kb/reindex",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())}}},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},87550:a=>{a.exports=require("better-sqlite3")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=38962));module.exports=c})();
@@ -1,4 +1,4 @@
1
- "use strict";(()=>{var a={};a.id=5555,a.ids=[5555],a.modules={19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},23328:(a,b,c)=>{c.d(b,{Qh:()=>m,aY:()=>o});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021),j=c(79646);let k=null;function l(){let a=g.join(h.homedir(),".customize-agent","demo-project"),b=g.join(a,"knowledgeBase");for(let[a,c]of(i.mkdirSync(b,{recursive:!0}),Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
1
+ "use strict";(()=>{var a={};a.id=5555,a.ids=[5555],a.modules={19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},23328:(a,b,c)=>{c.d(b,{Qh:()=>l,aY:()=>n});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021);let j=null;function k(){let a=g.join(h.homedir(),".customize-agent","demo-project"),b=g.join(a,"knowledgeBase");for(let[a,c]of(i.mkdirSync(b,{recursive:!0}),Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
2
2
 
3
3
  公开参考入口:https://df.qq.com/ 和 https://deltaforce.garena.com/
4
4
 
@@ -46,11 +46,7 @@ xref
46
46
  trailer << /Root 1 0 R /Size 6 >>
47
47
  startxref
48
48
  0
49
- %%EOF`;i.writeFileSync(a,e,"binary")}(c,"【内置】三角洲热门干员攻略 PDF 摘要","露娜负责侦察信息,红狼负责突破,牧羊人负责控场,蜂医负责支援续航。推荐新手优先熟悉蜂医和露娜,再练红狼与牧羊人。"),function(a,b,c){if(i.existsSync(a)&&i.statSync(a).size>0)return;let d=`import zipfile, html, sys
50
- file,title,body=sys.argv[1],sys.argv[2],sys.argv[3]
51
- content=''.join(f'<w:p><w:r><w:t>{html.escape(line)}</w:t></w:r></w:p>' for line in (title+'\\n'+body).split('\\n'))
52
- with zipfile.ZipFile(file,'w') as z:
53
- z.writestr('[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>')
54
- z.writestr('_rels/.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>')
55
- z.writestr('word/document.xml',f'<?xml version="1.0" encoding="UTF-8"?><w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:body>{content}</w:body></w:document>')`;try{(0,j.execFileSync)("python3",["-c",d,a,b,c],{stdio:"ignore"})}catch{i.writeFileSync(a,`${b}
56
- ${c}`,"utf-8")}}(d,"【内置】三角洲热门干员 Word 打法说明","露娜适合信息侦察;红狼适合进攻突破;牧羊人适合区域封锁;蜂医适合治疗救援。队伍建议至少包含侦察和支援。"),i.existsSync(e)||i.writeFileSync(e,"【内置】三角洲队伍搭配 Word 兼容资料\n侦察位看信息,突击位打开突破口,工程位控场,支援位保证续航。","utf-8");let f=g.join(b,"图片素材","干员图片");i.mkdirSync(f,{recursive:!0});let k=["# 干员图片资料","","图片来源参考:https://github.com/luoy-oss/deltaforce_id 和 https://playerhub.df.qq.com/playerhub/60004/object/p_{ID}.png",""];for(let[a,c]of Object.entries({"露娜.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000028.png","红狼.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000030.png","牧羊人.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000029.png","蜂医.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000027.png"})){let d=g.join(f,a);if(!i.existsSync(d)||!(i.statSync(d).size>0))try{(0,j.execFileSync)("curl",["-L","--max-time","12","-o",d,c],{stdio:"ignore"})}catch{i.writeFileSync(`${d}.url.txt`,c,"utf-8")}k.push(`- ${a.replace(".png","")}:${c};本地文件:${g.relative(b,d)}`)}return i.writeFileSync(g.join(b,"图片素材","图片文件-干员图片来源.md"),k.join("\n"),"utf-8"),a}function m(){return k||(k=new d.MultiProjectManager),k}function n(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return b!==g.resolve(g.join(h.homedir(),".customize-agent","demo-project"))&&(!!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))||b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function o(a=!1){let b=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(b&&i.existsSync(b)&&!n(b))return g.resolve(b);if(!a)return l();let c=function(){let a=g.join(h.homedir(),".customize-agent","projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!n(a))}finally{b.close()}}();return c.length>0?c[0]:n(process.cwd())?l():process.cwd()}},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")},79646:a=>{a.exports=require("child_process")},87550:a=>{a.exports=require("better-sqlite3")},99977:(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(23328);async function j(a,b){if("GET"!==a.method)return b.status(405).json({error:"Method not allowed"});try{let c=a.query.q||"";if(!c.trim())return b.status(200).json({results:[],total:0});let d=a.query.projectRoot||(0,i.aY)();if(!d)return b.status(200).json({results:[],total:0});let e=parseInt(a.query.limit||"20",10),f=a=>{let b=Number(Array.isArray(a)?a[0]:a);return Number.isFinite(b)?Math.max(0,b):void 0},g={keyword:f(a.query.keywordWeight),vector:f(a.query.vectorWeight),rewrite:f(a.query.rewriteWeight),hybridBonus:f(a.query.hybridBonus)},h=await (0,i.Qh)().search(d,c,{limit:e,weights:g});b.status(200).json({results:h.results,total:h.results.length,queryTimeMs:h.queryTimeMs,scopesSearched:h.scopesSearched,debug:h.debug})}catch(a){console.error("[api] kb/search",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/kb/search",pathname:"/api/kb/search",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function p(a,b,c){let d=await o.prepare(a,b,{srcPage:"/api/kb/search"});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/kb/search",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())}}}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=99977));module.exports=c})();
49
+ %%EOF`;i.writeFileSync(a,e,"binary")}(c,"【内置】三角洲热门干员攻略 PDF 摘要","露娜负责侦察信息,红狼负责突破,牧羊人负责控场,蜂医负责支援续航。推荐新手优先熟悉蜂医和露娜,再练红狼与牧羊人。"),i.existsSync(d)&&i.statSync(d).size>0||i.writeFileSync(d,`【内置】三角洲热门干员 Word 打法说明
50
+ 露娜适合信息侦察;红狼适合进攻突破;牧羊人适合区域封锁;蜂医适合治疗救援。队伍建议至少包含侦察和支援。`,"utf-8"),i.existsSync(e)||i.writeFileSync(e,"【内置】三角洲队伍搭配 Word 兼容资料\n侦察位看信息,突击位打开突破口,工程位控场,支援位保证续航。","utf-8");let f=g.join(b,"图片素材","干员图片");i.mkdirSync(f,{recursive:!0});let j=["# 干员图片资料","","图片来源参考:https://github.com/luoy-oss/deltaforce_id 和 https://playerhub.df.qq.com/playerhub/60004/object/p_{ID}.png",""];for(let[a,c]of Object.entries({"露娜.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000028.png","红狼.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000030.png","牧羊人.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000029.png","蜂医.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000027.png"})){let d=g.join(f,a);if(!i.existsSync(d)||i.statSync(d).size<20){let a=Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+/p9sAAAAASUVORK5CYII=","base64");i.writeFileSync(d,a)}i.writeFileSync(`${d}.source.txt`,`图片公开来源:${c}
51
+ 本地图片文件:${g.basename(d)}
52
+ `,"utf-8"),j.push(`- ${a.replace(".png","")}:${c};本地文件:${g.relative(b,d)}`)}return i.writeFileSync(g.join(b,"图片素材","图片文件-干员图片来源.md"),j.join("\n"),"utf-8"),a}function l(){return j||(j=new d.MultiProjectManager),j}function m(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return b!==g.resolve(g.join(h.homedir(),".customize-agent","demo-project"))&&(!!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))||b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function n(a=!1){let b=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(b&&i.existsSync(b)&&!m(b))return g.resolve(b);if(!a)return k();let c=function(){let a=g.join(h.homedir(),".customize-agent","projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!m(a))}finally{b.close()}}();return c.length>0?c[0]:m(process.cwd())?k():process.cwd()}},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")},87550:a=>{a.exports=require("better-sqlite3")},99977:(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(23328);async function j(a,b){if("GET"!==a.method)return b.status(405).json({error:"Method not allowed"});try{let c=a.query.q||"";if(!c.trim())return b.status(200).json({results:[],total:0});let d=a.query.projectRoot||(0,i.aY)();if(!d)return b.status(200).json({results:[],total:0});let e=parseInt(a.query.limit||"20",10),f=a=>{let b=Number(Array.isArray(a)?a[0]:a);return Number.isFinite(b)?Math.max(0,b):void 0},g={keyword:f(a.query.keywordWeight),vector:f(a.query.vectorWeight),rewrite:f(a.query.rewriteWeight),hybridBonus:f(a.query.hybridBonus)},h=await (0,i.Qh)().search(d,c,{limit:e,weights:g});b.status(200).json({results:h.results,total:h.results.length,queryTimeMs:h.queryTimeMs,scopesSearched:h.scopesSearched,debug:h.debug})}catch(a){console.error("[api] kb/search",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/kb/search",pathname:"/api/kb/search",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function p(a,b,c){let d=await o.prepare(a,b,{srcPage:"/api/kb/search"});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/kb/search",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())}}}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=99977));module.exports=c})();
@@ -1,4 +1,4 @@
1
- "use strict";(()=>{var a={};a.id=3244,a.ids=[3244],a.modules={19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},23328:(a,b,c)=>{c.d(b,{Qh:()=>m,aY:()=>o});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021),j=c(79646);let k=null;function l(){let a=g.join(h.homedir(),".customize-agent","demo-project"),b=g.join(a,"knowledgeBase");for(let[a,c]of(i.mkdirSync(b,{recursive:!0}),Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
1
+ "use strict";(()=>{var a={};a.id=3244,a.ids=[3244],a.modules={19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},23328:(a,b,c)=>{c.d(b,{Qh:()=>l,aY:()=>n});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021);let j=null;function k(){let a=g.join(h.homedir(),".customize-agent","demo-project"),b=g.join(a,"knowledgeBase");for(let[a,c]of(i.mkdirSync(b,{recursive:!0}),Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
2
2
 
3
3
  公开参考入口:https://df.qq.com/ 和 https://deltaforce.garena.com/
4
4
 
@@ -46,11 +46,7 @@ xref
46
46
  trailer << /Root 1 0 R /Size 6 >>
47
47
  startxref
48
48
  0
49
- %%EOF`;i.writeFileSync(a,e,"binary")}(c,"【内置】三角洲热门干员攻略 PDF 摘要","露娜负责侦察信息,红狼负责突破,牧羊人负责控场,蜂医负责支援续航。推荐新手优先熟悉蜂医和露娜,再练红狼与牧羊人。"),function(a,b,c){if(i.existsSync(a)&&i.statSync(a).size>0)return;let d=`import zipfile, html, sys
50
- file,title,body=sys.argv[1],sys.argv[2],sys.argv[3]
51
- content=''.join(f'<w:p><w:r><w:t>{html.escape(line)}</w:t></w:r></w:p>' for line in (title+'\\n'+body).split('\\n'))
52
- with zipfile.ZipFile(file,'w') as z:
53
- z.writestr('[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>')
54
- z.writestr('_rels/.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>')
55
- z.writestr('word/document.xml',f'<?xml version="1.0" encoding="UTF-8"?><w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:body>{content}</w:body></w:document>')`;try{(0,j.execFileSync)("python3",["-c",d,a,b,c],{stdio:"ignore"})}catch{i.writeFileSync(a,`${b}
56
- ${c}`,"utf-8")}}(d,"【内置】三角洲热门干员 Word 打法说明","露娜适合信息侦察;红狼适合进攻突破;牧羊人适合区域封锁;蜂医适合治疗救援。队伍建议至少包含侦察和支援。"),i.existsSync(e)||i.writeFileSync(e,"【内置】三角洲队伍搭配 Word 兼容资料\n侦察位看信息,突击位打开突破口,工程位控场,支援位保证续航。","utf-8");let f=g.join(b,"图片素材","干员图片");i.mkdirSync(f,{recursive:!0});let k=["# 干员图片资料","","图片来源参考:https://github.com/luoy-oss/deltaforce_id 和 https://playerhub.df.qq.com/playerhub/60004/object/p_{ID}.png",""];for(let[a,c]of Object.entries({"露娜.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000028.png","红狼.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000030.png","牧羊人.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000029.png","蜂医.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000027.png"})){let d=g.join(f,a);if(!i.existsSync(d)||!(i.statSync(d).size>0))try{(0,j.execFileSync)("curl",["-L","--max-time","12","-o",d,c],{stdio:"ignore"})}catch{i.writeFileSync(`${d}.url.txt`,c,"utf-8")}k.push(`- ${a.replace(".png","")}:${c};本地文件:${g.relative(b,d)}`)}return i.writeFileSync(g.join(b,"图片素材","图片文件-干员图片来源.md"),k.join("\n"),"utf-8"),a}function m(){return k||(k=new d.MultiProjectManager),k}function n(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return b!==g.resolve(g.join(h.homedir(),".customize-agent","demo-project"))&&(!!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))||b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function o(a=!1){let b=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(b&&i.existsSync(b)&&!n(b))return g.resolve(b);if(!a)return l();let c=function(){let a=g.join(h.homedir(),".customize-agent","projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!n(a))}finally{b.close()}}();return c.length>0?c[0]:n(process.cwd())?l():process.cwd()}},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},71328:(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(23328);async function j(a,b){if("GET"!==a.method)return b.status(405).json({error:"Method not allowed"});try{let c=a.query.projectRoot||(0,i.aY)();if(!c)return b.status(200).json({});let d=await (0,i.Qh)().getProject(c);b.status(200).json({...d.getStats(),vectorStatus:d.getVectorStatus()})}catch(a){console.error("[api] kb/stats",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/kb/stats",pathname:"/api/kb/stats",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function p(a,b,c){let d=await o.prepare(a,b,{srcPage:"/api/kb/stats"});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/kb/stats",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())}}},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},79646:a=>{a.exports=require("child_process")},87550:a=>{a.exports=require("better-sqlite3")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=71328));module.exports=c})();
49
+ %%EOF`;i.writeFileSync(a,e,"binary")}(c,"【内置】三角洲热门干员攻略 PDF 摘要","露娜负责侦察信息,红狼负责突破,牧羊人负责控场,蜂医负责支援续航。推荐新手优先熟悉蜂医和露娜,再练红狼与牧羊人。"),i.existsSync(d)&&i.statSync(d).size>0||i.writeFileSync(d,`【内置】三角洲热门干员 Word 打法说明
50
+ 露娜适合信息侦察;红狼适合进攻突破;牧羊人适合区域封锁;蜂医适合治疗救援。队伍建议至少包含侦察和支援。`,"utf-8"),i.existsSync(e)||i.writeFileSync(e,"【内置】三角洲队伍搭配 Word 兼容资料\n侦察位看信息,突击位打开突破口,工程位控场,支援位保证续航。","utf-8");let f=g.join(b,"图片素材","干员图片");i.mkdirSync(f,{recursive:!0});let j=["# 干员图片资料","","图片来源参考:https://github.com/luoy-oss/deltaforce_id 和 https://playerhub.df.qq.com/playerhub/60004/object/p_{ID}.png",""];for(let[a,c]of Object.entries({"露娜.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000028.png","红狼.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000030.png","牧羊人.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000029.png","蜂医.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000027.png"})){let d=g.join(f,a);if(!i.existsSync(d)||i.statSync(d).size<20){let a=Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+/p9sAAAAASUVORK5CYII=","base64");i.writeFileSync(d,a)}i.writeFileSync(`${d}.source.txt`,`图片公开来源:${c}
51
+ 本地图片文件:${g.basename(d)}
52
+ `,"utf-8"),j.push(`- ${a.replace(".png","")}:${c};本地文件:${g.relative(b,d)}`)}return i.writeFileSync(g.join(b,"图片素材","图片文件-干员图片来源.md"),j.join("\n"),"utf-8"),a}function l(){return j||(j=new d.MultiProjectManager),j}function m(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return b!==g.resolve(g.join(h.homedir(),".customize-agent","demo-project"))&&(!!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))||b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function n(a=!1){let b=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(b&&i.existsSync(b)&&!m(b))return g.resolve(b);if(!a)return k();let c=function(){let a=g.join(h.homedir(),".customize-agent","projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!m(a))}finally{b.close()}}();return c.length>0?c[0]:m(process.cwd())?k():process.cwd()}},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},71328:(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(23328);async function j(a,b){if("GET"!==a.method)return b.status(405).json({error:"Method not allowed"});try{let c=a.query.projectRoot||(0,i.aY)();if(!c)return b.status(200).json({});let d=await (0,i.Qh)().getProject(c);b.status(200).json({...d.getStats(),vectorStatus:d.getVectorStatus()})}catch(a){console.error("[api] kb/stats",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/kb/stats",pathname:"/api/kb/stats",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function p(a,b,c){let d=await o.prepare(a,b,{srcPage:"/api/kb/stats"});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/kb/stats",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())}}},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},87550:a=>{a.exports=require("better-sqlite3")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=71328));module.exports=c})();
@@ -1,4 +1,4 @@
1
- "use strict";(()=>{var a={};a.id=9928,a.ids=[9928],a.modules={19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},23328:(a,b,c)=>{c.d(b,{Qh:()=>m,aY:()=>o});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021),j=c(79646);let k=null;function l(){let a=g.join(h.homedir(),".customize-agent","demo-project"),b=g.join(a,"knowledgeBase");for(let[a,c]of(i.mkdirSync(b,{recursive:!0}),Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
1
+ "use strict";(()=>{var a={};a.id=9928,a.ids=[9928],a.modules={19898:a=>{a.exports=require("@customize-agent/knowledge")},21820:a=>{a.exports=require("os")},23328:(a,b,c)=>{c.d(b,{Qh:()=>l,aY:()=>n});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021);let j=null;function k(){let a=g.join(h.homedir(),".customize-agent","demo-project"),b=g.join(a,"knowledgeBase");for(let[a,c]of(i.mkdirSync(b,{recursive:!0}),Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
2
2
 
3
3
  公开参考入口:https://df.qq.com/ 和 https://deltaforce.garena.com/
4
4
 
@@ -46,11 +46,7 @@ xref
46
46
  trailer << /Root 1 0 R /Size 6 >>
47
47
  startxref
48
48
  0
49
- %%EOF`;i.writeFileSync(a,e,"binary")}(c,"【内置】三角洲热门干员攻略 PDF 摘要","露娜负责侦察信息,红狼负责突破,牧羊人负责控场,蜂医负责支援续航。推荐新手优先熟悉蜂医和露娜,再练红狼与牧羊人。"),function(a,b,c){if(i.existsSync(a)&&i.statSync(a).size>0)return;let d=`import zipfile, html, sys
50
- file,title,body=sys.argv[1],sys.argv[2],sys.argv[3]
51
- content=''.join(f'<w:p><w:r><w:t>{html.escape(line)}</w:t></w:r></w:p>' for line in (title+'\\n'+body).split('\\n'))
52
- with zipfile.ZipFile(file,'w') as z:
53
- z.writestr('[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>')
54
- z.writestr('_rels/.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>')
55
- z.writestr('word/document.xml',f'<?xml version="1.0" encoding="UTF-8"?><w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:body>{content}</w:body></w:document>')`;try{(0,j.execFileSync)("python3",["-c",d,a,b,c],{stdio:"ignore"})}catch{i.writeFileSync(a,`${b}
56
- ${c}`,"utf-8")}}(d,"【内置】三角洲热门干员 Word 打法说明","露娜适合信息侦察;红狼适合进攻突破;牧羊人适合区域封锁;蜂医适合治疗救援。队伍建议至少包含侦察和支援。"),i.existsSync(e)||i.writeFileSync(e,"【内置】三角洲队伍搭配 Word 兼容资料\n侦察位看信息,突击位打开突破口,工程位控场,支援位保证续航。","utf-8");let f=g.join(b,"图片素材","干员图片");i.mkdirSync(f,{recursive:!0});let k=["# 干员图片资料","","图片来源参考:https://github.com/luoy-oss/deltaforce_id 和 https://playerhub.df.qq.com/playerhub/60004/object/p_{ID}.png",""];for(let[a,c]of Object.entries({"露娜.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000028.png","红狼.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000030.png","牧羊人.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000029.png","蜂医.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000027.png"})){let d=g.join(f,a);if(!i.existsSync(d)||!(i.statSync(d).size>0))try{(0,j.execFileSync)("curl",["-L","--max-time","12","-o",d,c],{stdio:"ignore"})}catch{i.writeFileSync(`${d}.url.txt`,c,"utf-8")}k.push(`- ${a.replace(".png","")}:${c};本地文件:${g.relative(b,d)}`)}return i.writeFileSync(g.join(b,"图片素材","图片文件-干员图片来源.md"),k.join("\n"),"utf-8"),a}function m(){return k||(k=new d.MultiProjectManager),k}function n(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return b!==g.resolve(g.join(h.homedir(),".customize-agent","demo-project"))&&(!!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))||b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function o(a=!1){let b=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(b&&i.existsSync(b)&&!n(b))return g.resolve(b);if(!a)return l();let c=function(){let a=g.join(h.homedir(),".customize-agent","projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!n(a))}finally{b.close()}}();return c.length>0?c[0]:n(process.cwd())?l():process.cwd()}},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},40930:(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(23328);async function j(a,b){if("GET"!==a.method)return b.status(405).json({error:"Method not allowed"});try{let c=a.query.projectRoot||(0,i.aY)();if(!c)return b.status(200).json([]);let d=(await (0,i.Qh)().getProject(c)).listTags();b.status(200).json([...new Set(d.map(a=>a.tag))])}catch(a){console.error("[api] kb/tags",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/kb/tags",pathname:"/api/kb/tags",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function p(a,b,c){let d=await o.prepare(a,b,{srcPage:"/api/kb/tags"});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/kb/tags",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())}}},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},79646:a=>{a.exports=require("child_process")},87550:a=>{a.exports=require("better-sqlite3")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=40930));module.exports=c})();
49
+ %%EOF`;i.writeFileSync(a,e,"binary")}(c,"【内置】三角洲热门干员攻略 PDF 摘要","露娜负责侦察信息,红狼负责突破,牧羊人负责控场,蜂医负责支援续航。推荐新手优先熟悉蜂医和露娜,再练红狼与牧羊人。"),i.existsSync(d)&&i.statSync(d).size>0||i.writeFileSync(d,`【内置】三角洲热门干员 Word 打法说明
50
+ 露娜适合信息侦察;红狼适合进攻突破;牧羊人适合区域封锁;蜂医适合治疗救援。队伍建议至少包含侦察和支援。`,"utf-8"),i.existsSync(e)||i.writeFileSync(e,"【内置】三角洲队伍搭配 Word 兼容资料\n侦察位看信息,突击位打开突破口,工程位控场,支援位保证续航。","utf-8");let f=g.join(b,"图片素材","干员图片");i.mkdirSync(f,{recursive:!0});let j=["# 干员图片资料","","图片来源参考:https://github.com/luoy-oss/deltaforce_id 和 https://playerhub.df.qq.com/playerhub/60004/object/p_{ID}.png",""];for(let[a,c]of Object.entries({"露娜.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000028.png","红狼.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000030.png","牧羊人.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000029.png","蜂医.png":"https://playerhub.df.qq.com/playerhub/60004/object/p_88000000027.png"})){let d=g.join(f,a);if(!i.existsSync(d)||i.statSync(d).size<20){let a=Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+/p9sAAAAASUVORK5CYII=","base64");i.writeFileSync(d,a)}i.writeFileSync(`${d}.source.txt`,`图片公开来源:${c}
51
+ 本地图片文件:${g.basename(d)}
52
+ `,"utf-8"),j.push(`- ${a.replace(".png","")}:${c};本地文件:${g.relative(b,d)}`)}return i.writeFileSync(g.join(b,"图片素材","图片文件-干员图片来源.md"),j.join("\n"),"utf-8"),a}function l(){return j||(j=new d.MultiProjectManager),j}function m(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return b!==g.resolve(g.join(h.homedir(),".customize-agent","demo-project"))&&(!!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))||b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function n(a=!1){let b=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(b&&i.existsSync(b)&&!m(b))return g.resolve(b);if(!a)return k();let c=function(){let a=g.join(h.homedir(),".customize-agent","projects","registry.db");if(!i.existsSync(a))return[];let b=new(f())(a,{readonly:!0});try{return b.prepare("SELECT project_root FROM project_registry ORDER BY last_opened_at DESC").all().map(a=>g.resolve(a.project_root)).filter(a=>!m(a))}finally{b.close()}}();return c.length>0?c[0]:m(process.cwd())?k():process.cwd()}},29021:a=>{a.exports=require("fs")},33873:a=>{a.exports=require("path")},40930:(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(23328);async function j(a,b){if("GET"!==a.method)return b.status(405).json({error:"Method not allowed"});try{let c=a.query.projectRoot||(0,i.aY)();if(!c)return b.status(200).json([]);let d=(await (0,i.Qh)().getProject(c)).listTags();b.status(200).json([...new Set(d.map(a=>a.tag))])}catch(a){console.error("[api] kb/tags",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/kb/tags",pathname:"/api/kb/tags",bundlePath:"",filename:""},userland:d,distDir:".next",relativeProjectDir:""});async function p(a,b,c){let d=await o.prepare(a,b,{srcPage:"/api/kb/tags"});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/kb/tags",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())}}},75600:a=>{a.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},87550:a=>{a.exports=require("better-sqlite3")}};var b=require("../../../webpack-api-runtime.js");b.C(a);var c=b.X(0,[9705],()=>b(b.s=40930));module.exports=c})();