@customize-agent/server 3.0.14 → 3.0.16

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 (208) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/build-manifest.json +210 -193
  3. package/.next/prerender-manifest.json +3 -3
  4. package/.next/required-server-files.json +14 -0
  5. package/.next/routes-manifest.json +29 -14
  6. package/.next/server/chunks/3328.js +196 -0
  7. package/.next/server/chunks/3445.js +151 -57
  8. package/.next/server/chunks/{5076.js → 774.js} +25 -25
  9. package/.next/server/chunks/8204.js +1 -1
  10. package/.next/server/chunks/8645.js +1 -0
  11. package/.next/server/chunks/9199.js +2 -2
  12. package/.next/server/chunks/9270.js +1 -1
  13. package/.next/server/chunks/9301.js +2 -2
  14. package/.next/server/middleware-build-manifest.js +1 -1
  15. package/.next/server/pages/404.html +1 -1
  16. package/.next/server/pages/500.html +1 -1
  17. package/.next/server/pages/_app.js +1 -1
  18. package/.next/server/pages/_app.js.nft.json +1 -1
  19. package/.next/server/pages/_document.js +1 -1
  20. package/.next/server/pages/_document.js.nft.json +1 -1
  21. package/.next/server/pages/_error.js +1 -1
  22. package/.next/server/pages/_error.js.nft.json +1 -1
  23. package/.next/server/pages/api/assets/generated/preview.js +1 -0
  24. package/.next/server/pages/api/assets/generated/preview.js.nft.json +1 -0
  25. package/.next/server/pages/api/assets/generated.js +1 -0
  26. package/.next/server/pages/api/assets/generated.js.nft.json +1 -0
  27. package/.next/server/pages/api/config/providers/[provider].js +1 -1
  28. package/.next/server/pages/api/config/providers.js +1 -1
  29. package/.next/server/pages/api/documents/chapter/regenerate.js +1 -1
  30. package/.next/server/pages/api/documents/chapter/regenerate.js.nft.json +1 -1
  31. package/.next/server/pages/api/documents/export.js +2 -2
  32. package/.next/server/pages/api/documents/export.js.nft.json +1 -1
  33. package/.next/server/pages/api/documents/generate.js +1 -1
  34. package/.next/server/pages/api/documents/generate.js.nft.json +1 -1
  35. package/.next/server/pages/api/documents/generated/[id].js +1 -0
  36. package/.next/server/pages/api/documents/generated/[id].js.nft.json +1 -0
  37. package/.next/server/pages/api/documents/generated.js +1 -0
  38. package/.next/server/pages/api/documents/generated.js.nft.json +1 -0
  39. package/.next/server/pages/api/documents/roles.js +1 -1
  40. package/.next/server/pages/api/documents/specs.js +1 -1
  41. package/.next/server/pages/api/documents/templates.js +1 -1
  42. package/.next/server/pages/api/documents/templates.js.nft.json +1 -1
  43. package/.next/server/pages/api/kb/categories.js +1 -52
  44. package/.next/server/pages/api/kb/categories.js.nft.json +1 -1
  45. package/.next/server/pages/api/kb/duplicates.js +1 -52
  46. package/.next/server/pages/api/kb/duplicates.js.nft.json +1 -1
  47. package/.next/server/pages/api/kb/files/detail.js +3 -52
  48. package/.next/server/pages/api/kb/files/detail.js.nft.json +1 -1
  49. package/.next/server/pages/api/kb/files/open.js +1 -52
  50. package/.next/server/pages/api/kb/files/open.js.nft.json +1 -1
  51. package/.next/server/pages/api/kb/files/preview-pdf-page.js +1 -52
  52. package/.next/server/pages/api/kb/files/preview-pdf-page.js.nft.json +1 -1
  53. package/.next/server/pages/api/kb/files/reindex.js +1 -52
  54. package/.next/server/pages/api/kb/files/reindex.js.nft.json +1 -1
  55. package/.next/server/pages/api/kb/files.js +1 -52
  56. package/.next/server/pages/api/kb/files.js.nft.json +1 -1
  57. package/.next/server/pages/api/kb/ignore.js +1 -52
  58. package/.next/server/pages/api/kb/ignore.js.nft.json +1 -1
  59. package/.next/server/pages/api/kb/operations.js +1 -52
  60. package/.next/server/pages/api/kb/operations.js.nft.json +1 -1
  61. package/.next/server/pages/api/kb/reindex.js +1 -52
  62. package/.next/server/pages/api/kb/reindex.js.nft.json +1 -1
  63. package/.next/server/pages/api/kb/search.js +1 -52
  64. package/.next/server/pages/api/kb/search.js.nft.json +1 -1
  65. package/.next/server/pages/api/kb/stats.js +1 -52
  66. package/.next/server/pages/api/kb/stats.js.nft.json +1 -1
  67. package/.next/server/pages/api/kb/tags.js +1 -52
  68. package/.next/server/pages/api/kb/tags.js.nft.json +1 -1
  69. package/.next/server/pages/api/kb/upload.js +1 -52
  70. package/.next/server/pages/api/kb/upload.js.nft.json +1 -1
  71. package/.next/server/pages/api/prompt.js +1 -1
  72. package/.next/server/pages/asset-library.html +1 -0
  73. package/.next/server/pages/asset-library.js.nft.json +1 -0
  74. package/.next/server/pages/context/long-term.html +1 -1
  75. package/.next/server/pages/context/long-term.js.nft.json +1 -1
  76. package/.next/server/pages/context/short-term.html +1 -1
  77. package/.next/server/pages/context/short-term.js.nft.json +1 -1
  78. package/.next/server/pages/document-roles.html +1 -1
  79. package/.next/server/pages/document-roles.js.nft.json +1 -1
  80. package/.next/server/pages/document-specs.html +1 -1
  81. package/.next/server/pages/document-specs.js.nft.json +1 -1
  82. package/.next/server/pages/documents.html +1 -1
  83. package/.next/server/pages/documents.js.nft.json +1 -1
  84. package/.next/server/pages/guide.html +1 -1
  85. package/.next/server/pages/guide.js.nft.json +1 -1
  86. package/.next/server/pages/index.html +1 -1
  87. package/.next/server/pages/index.js.nft.json +1 -1
  88. package/.next/server/pages/knowledge/file-detail.html +1 -1
  89. package/.next/server/pages/knowledge/file-detail.js.nft.json +1 -1
  90. package/.next/server/pages/knowledge/files.html +1 -1
  91. package/.next/server/pages/knowledge/files.js.nft.json +1 -1
  92. package/.next/server/pages/knowledge/manage.html +1 -1
  93. package/.next/server/pages/knowledge/manage.js.nft.json +1 -1
  94. package/.next/server/pages/knowledge/search.html +1 -1
  95. package/.next/server/pages/knowledge/search.js.nft.json +1 -1
  96. package/.next/server/pages/knowledge.html +1 -1
  97. package/.next/server/pages/knowledge.js.nft.json +1 -1
  98. package/.next/server/pages/models.html +1 -1
  99. package/.next/server/pages/models.js.nft.json +1 -1
  100. package/.next/server/pages/overview.html +1 -1
  101. package/.next/server/pages/overview.js.nft.json +1 -1
  102. package/.next/server/pages/prompt.html +1 -1
  103. package/.next/server/pages/prompt.js.nft.json +1 -1
  104. package/.next/server/pages/settings.html +1 -1
  105. package/.next/server/pages/settings.js.nft.json +1 -1
  106. package/.next/server/pages-manifest.json +27 -22
  107. package/.next/static/chunks/15-4683808cb8db7005.js +4 -0
  108. package/.next/static/chunks/167-d4f384b289ecb70c.js +1 -0
  109. package/.next/static/chunks/174-51b6d64f21e9b976.js +10 -0
  110. package/.next/static/chunks/183-8da0232dd30cdc81.js +1 -0
  111. package/.next/static/chunks/20-8968ee2d4013a5b8.js +1 -0
  112. package/.next/static/chunks/224-9a7074031493793b.js +1 -0
  113. package/.next/static/chunks/232-813af4932a145fdc.js +6 -0
  114. package/.next/static/chunks/257-e4ebae17a8ee8412.js +1 -0
  115. package/.next/static/chunks/260-cec84dc6c353e104.js +28 -0
  116. package/.next/static/chunks/271-39045be4cdbd6af1.js +16 -0
  117. package/.next/static/chunks/292-f0a2c92861c304e6.js +16 -0
  118. package/.next/static/chunks/350-8c5e13c0577a38c3.js +1 -0
  119. package/.next/static/chunks/382-6ab5f41cd91edad0.js +25 -0
  120. package/.next/static/chunks/400-1fa1899b7c3f0bb4.js +78 -0
  121. package/.next/static/chunks/576-fd55b302cb0c9a48.js +4 -0
  122. package/.next/static/chunks/577-5b2691f0c8f17187.js +1 -0
  123. package/.next/static/chunks/617-68a9e848c380f9c3.js +1 -0
  124. package/.next/static/chunks/628-27424ba8ca9ca8ce.js +1 -0
  125. package/.next/static/chunks/700-5d29b0475311f590.js +1 -0
  126. package/.next/static/chunks/80-96429163e5c103a8.js +1 -0
  127. package/.next/static/chunks/858-5e6982e2b239d4b7.js +1 -0
  128. package/.next/static/chunks/881-a1eb917222b66f09.js +4 -0
  129. package/.next/static/chunks/935-daa0026982d7fa8d.js +1 -0
  130. package/.next/static/chunks/951-8ecf8af33ab36369.js +1 -0
  131. package/.next/static/chunks/969-5d5ff5a3ed74f52b.js +11 -0
  132. package/.next/static/chunks/985-4b4a3ed36ada16eb.js +4 -0
  133. package/.next/static/chunks/framework-161be364fd69a7ce.js +1 -0
  134. package/.next/static/chunks/main-ed4abb3bb200c815.js +1 -0
  135. package/.next/static/chunks/pages/_app-b1f31c6bbc0bb7b1.js +140 -0
  136. package/.next/static/chunks/pages/{_error-18decb9cd478883d.js → _error-282257fbdcc167b4.js} +1 -1
  137. package/.next/static/chunks/pages/asset-library-0f607b74fa016470.js +1 -0
  138. package/.next/static/chunks/pages/context/long-term-09e23b06634b08d9.js +1 -0
  139. package/.next/static/chunks/pages/context/short-term-2f5fd8531e87b5bd.js +1 -0
  140. package/.next/static/chunks/pages/document-roles-077fc7159c88e89e.js +1 -0
  141. package/.next/static/chunks/pages/document-specs-fb5b8a89cff6d1e3.js +1 -0
  142. package/.next/static/chunks/pages/documents-38320ae2fd50be35.js +1 -0
  143. package/.next/static/chunks/pages/guide-acf32d66a6df6e5a.js +1 -0
  144. package/.next/static/chunks/pages/index-c5e0758e6b31deee.js +1 -0
  145. package/.next/static/chunks/pages/knowledge/file-detail-ad1dc61c1413db0c.js +1 -0
  146. package/.next/static/chunks/pages/knowledge/files-896c058f2da5e907.js +1 -0
  147. package/.next/static/chunks/pages/knowledge/manage-6da10158f75718cf.js +1 -0
  148. package/.next/static/chunks/pages/knowledge/search-3fd704d2afa1af3e.js +1 -0
  149. package/.next/static/chunks/pages/knowledge-905248d8dcb15453.js +1 -0
  150. package/.next/static/chunks/pages/models-7bdf24068811ae91.js +1 -0
  151. package/.next/static/chunks/pages/overview-572bba4876e617f5.js +1 -0
  152. package/.next/static/chunks/pages/prompt-c9bc7884a44d3767.js +1 -0
  153. package/.next/static/chunks/pages/settings-68f0d05bf95d12da.js +1 -0
  154. package/.next/static/css/9af88fe8ee791d26.css +1 -0
  155. package/.next/static/customize-agent-dashboard/_buildManifest.js +1 -0
  156. package/README.md +18 -0
  157. package/next.config.ts +15 -6
  158. package/package.json +4 -4
  159. package/public/favicon.ico +1 -0
  160. package/.next/server/chunks/2583.js +0 -1
  161. package/.next/server/chunks/6352.js +0 -1
  162. package/.next/static/HrpIpnt5wstKoy1Bjfffe/_buildManifest.js +0 -1
  163. package/.next/static/chunks/15-289cb38b53bafa4a.js +0 -4
  164. package/.next/static/chunks/167-9f45623d7ea7ab43.js +0 -1
  165. package/.next/static/chunks/174-e7df14600b457a5c.js +0 -10
  166. package/.next/static/chunks/201-b16b4788042ed1aa.js +0 -1
  167. package/.next/static/chunks/227-442963c7b630eade.js +0 -1
  168. package/.next/static/chunks/257-ba16dfe16a27f417.js +0 -1
  169. package/.next/static/chunks/260-7a7a65a3ca8539ba.js +0 -28
  170. package/.next/static/chunks/292-c2888a94068fae74.js +0 -16
  171. package/.next/static/chunks/382-dd7535429e16931b.js +0 -25
  172. package/.next/static/chunks/400-f06f00619f22421e.js +0 -78
  173. package/.next/static/chunks/446-0591221372df7d49.js +0 -4
  174. package/.next/static/chunks/455-e31becaaf948f868.js +0 -6
  175. package/.next/static/chunks/492-62671486700ed3f9.js +0 -1
  176. package/.next/static/chunks/517-f43787133528ba48.js +0 -1
  177. package/.next/static/chunks/668-662b7bc81e4ad48f.js +0 -4
  178. package/.next/static/chunks/730-727fe4b055c78dc2.js +0 -1
  179. package/.next/static/chunks/740-2bcba39d841f2b16.js +0 -16
  180. package/.next/static/chunks/746-120983153bceeea6.js +0 -1
  181. package/.next/static/chunks/804-e654a1589d9adc65.js +0 -11
  182. package/.next/static/chunks/846-fed995f7c83fc6c3.js +0 -1
  183. package/.next/static/chunks/851-1190cb42a0630eef.js +0 -1
  184. package/.next/static/chunks/891-b6a172e1df7ab8c1.js +0 -1
  185. package/.next/static/chunks/958-66e2dcf301fb3c3f.js +0 -1
  186. package/.next/static/chunks/969-8843874536e7fd83.js +0 -1
  187. package/.next/static/chunks/992-ea93dfa182a02a8e.js +0 -1
  188. package/.next/static/chunks/framework-b5223c1542334872.js +0 -1
  189. package/.next/static/chunks/main-1a03005b3754c708.js +0 -1
  190. package/.next/static/chunks/pages/_app-725afbb7d3371a13.js +0 -140
  191. package/.next/static/chunks/pages/context/long-term-dba1d735f2b5e12b.js +0 -1
  192. package/.next/static/chunks/pages/context/short-term-7cc72881b42b74fb.js +0 -1
  193. package/.next/static/chunks/pages/document-roles-0f24b162cfd49513.js +0 -1
  194. package/.next/static/chunks/pages/document-specs-991368925b27ceda.js +0 -1
  195. package/.next/static/chunks/pages/documents-93e638518deec9b5.js +0 -1
  196. package/.next/static/chunks/pages/guide-414134ce66270eb0.js +0 -1
  197. package/.next/static/chunks/pages/index-505bd438c95ec0e8.js +0 -1
  198. package/.next/static/chunks/pages/knowledge/file-detail-793d12234ccddac1.js +0 -1
  199. package/.next/static/chunks/pages/knowledge/files-1662e995b81e79aa.js +0 -1
  200. package/.next/static/chunks/pages/knowledge/manage-64ad6cdce068edb1.js +0 -1
  201. package/.next/static/chunks/pages/knowledge/search-fe148477dfe05966.js +0 -1
  202. package/.next/static/chunks/pages/knowledge-81fd1e907a6fcb84.js +0 -1
  203. package/.next/static/chunks/pages/models-0fb086e70387dde1.js +0 -1
  204. package/.next/static/chunks/pages/overview-db5df4f0bec2a77c.js +0 -1
  205. package/.next/static/chunks/pages/prompt-aa556d7a438117f1.js +0 -1
  206. package/.next/static/chunks/pages/settings-88f50b9cafc389e0.js +0 -1
  207. package/.next/static/css/5237c5e3358f3282.css +0 -1
  208. /package/.next/static/{HrpIpnt5wstKoy1Bjfffe → customize-agent-dashboard}/_ssgManifest.js +0 -0
@@ -0,0 +1,196 @@
1
+ "use strict";exports.id=3328,exports.ids=[3328],exports.modules={23328:(a,b,c)=>{c.d(b,{Qh:()=>q,T4:()=>o,aY:()=>s});var d=c(19898),e=c(87550),f=c.n(e),g=c(33873),h=c(21820),i=c(29021),j=c(31421),k=c(15751);let l=null;function m(a,b){i.mkdirSync(g.dirname(a),{recursive:!0});try{if(i.existsSync(a)&&i.readFileSync(a,"utf-8")===b)return;i.writeFileSync(a,b,"utf-8")}catch{if(!i.existsSync(a))throw Error(`内置文本资料写入失败:${a}`)}}function n(a){if(i.existsSync(a)&&i.statSync(a).size>1e3)return;i.mkdirSync(g.dirname(a),{recursive:!0});let b=k.utils.book_new();k.utils.book_append_sheet(b,k.utils.aoa_to_sheet([["干员名称","定位","推荐指数","上手难度","推荐场景","队伍职责"],["露娜","侦察","5","中","信息侦察和路线判断","开局侦察、标记威胁、辅助路线选择"],["红狼","突击","5","中高","突破和正面交火","负责开团突破和正面压制"],["牧羊人","工程","4","中","防守控场和区域封锁","负责卡点、防守和限制敌方推进"],["蜂医","支援","5","低","治疗救援和续航","负责救援、治疗和提高队伍容错"]]),"热门干员推荐"),k.writeFile(b,a)}function o(a=s()){let b=g.resolve(a),c=g.join(b,"knowledgeBase");for(let a of(i.mkdirSync(c,{recursive:!0}),["图纸文件/图纸文件-战术路线示意.md","文档资料/PDF资料-三角洲干员攻略摘要.pdf","文档资料/Word资料-三角洲干员打法说明.docx","文档资料/Word资料-队伍搭配说明.doc","图片素材/干员图片/地图图纸-零号大坝-官方地图图纸瓦片.jpg","图片素材/干员图片/地图图纸-航天基地-官方地图图纸瓦片.jpg","图片素材/干员图片/地图图纸-巴克什-官方地图图纸瓦片.jpg","图片素材/干员图片/地图图纸-潮汐监狱-官方地图图纸瓦片.jpg","图片素材/干员图片/地图图纸-AZ3-官方地图图纸瓦片.jpg","图片素材/干员图片/地图图纸-全面战场-攀升官方地图图纸瓦片.jpg"])){let b=g.join(c,a);try{i.existsSync(b)&&i.rmSync(b,{force:!0})}catch{}}for(let[a,b]of Object.entries({"文档资料/规则文件-攻略写作要求.md":`# 【内置】三角洲热门干员攻略写作要求
2
+
3
+ 公开参考入口:https://df.qq.com/、https://df.qq.com/cp/a20240729directory/、https://playerhub.df.qq.com/
4
+
5
+ 写作要求:
6
+ - 面向新手和进阶玩家,语言要直白。
7
+ - 必须解释干员定位、技能价值、适用场景和常见误区。
8
+ - 地图章节必须引用官方地图工具的地图图纸/底图瓦片来源。
9
+ - 不能把没有来源的数据写成确定结论。
10
+ - 表格中的推荐指数只能作为示例参考。`,"文档资料/项目事实-热门干员资料.md":`# 【内置】三角洲热门干员资料
11
+
12
+ 公开来源:三角洲行动官网 https://df.qq.com/、官方地图工具 https://df.qq.com/cp/a20240729directory/、PlayerHub 干员图片资源。
13
+
14
+ 攻略目标:帮助用户快速理解热门干员怎么选、怎么搭配、怎么上手,并能把干员选择与地图推进、撤离路线和队伍分工结合起来。
15
+ 适用人群:刚开始游玩三角洲行动的新手,以及希望快速建立队伍分工的进阶玩家。
16
+
17
+ ## 资料使用方式
18
+ - 写攻略时先引用本文件确认干员定位,再结合表格数据给出推荐优先级。
19
+ - 地图段落必须结合官方地图工具来源,不要把玩家经验写成官方结论。
20
+ - 生成内容应区分“适合新手的稳定打法”和“需要配合的进阶打法”。
21
+
22
+ ## 热门干员详解
23
+
24
+ ### 露娜
25
+ - 定位:侦察 / 信息位。
26
+ - 主要价值:提前发现敌方动向,帮助队伍判断安全路线、交火风险和撤离窗口。
27
+ - 推荐指数:5。
28
+ - 上手难度:中。
29
+ - 适合场景:开局探点、复杂建筑区推进、撤离点前最后确认。
30
+ - 常见误区:把侦察位当成单人突击位。露娜的价值不是第一个开枪,而是让队伍更早做出正确决策。
31
+
32
+ ### 红狼
33
+ - 定位:突击 / 突破位。
34
+ - 主要价值:在队伍已经掌握信息后打开突破口,压制敌方关键角度。
35
+ - 推荐指数:5。
36
+ - 上手难度:中高。
37
+ - 适合场景:门口突破、近中距离强交火、撤离点争夺。
38
+ - 常见误区:没有侦察信息就盲目强冲。红狼适合执行突破,不适合代替信息位探路。
39
+
40
+ ### 牧羊人
41
+ - 定位:工程 / 控场位。
42
+ - 主要价值:限制敌方推进、保护队友换弹/救援/撤离,适合固定入口、楼梯、狭窄通道和撤离路线防守。
43
+ - 推荐指数:4。
44
+ - 上手难度:中。
45
+ - 适合场景:建筑防守、据点争夺、撤离点反打。
46
+ - 常见误区:认为控场就是原地不动。优秀的控场应当让敌方不能舒服推进,同时给己方创造转移时间。
47
+
48
+ ### 蜂医
49
+ - 定位:支援 / 治疗救援位。
50
+ - 主要价值:提高队伍容错,让队伍在一次交火失误后仍然有继续行动的空间。
51
+ - 推荐指数:5。
52
+ - 上手难度:低。
53
+ - 适合场景:新手三排、长线搜资源、撤离前连续交火。
54
+ - 常见误区:只在队友倒地后才行动。蜂医应提前判断安全救援位置和撤退路线。
55
+
56
+ ## 队伍搭配建议
57
+ | 队伍类型 | 推荐组合 | 适合用户 | 使用要点 |
58
+ | --- | --- | --- | --- |
59
+ | 新手稳健队 | 露娜 + 蜂医 + 牧羊人 | 刚熟悉地图和撤离机制的玩家 | 先拿信息,再稳步推进,不追求每次强开 |
60
+ | 突破压制队 | 露娜 + 红狼 + 蜂医 | 有基本交火能力的玩家 | 露娜给信息,红狼执行突破,蜂医保障容错 |
61
+ | 控图防守队 | 露娜 + 牧羊人 + 蜂医 | 喜欢资源控制和防守反打的玩家 | 依靠地图理解和撤离路线控制获胜 |
62
+
63
+ ## 地图事实
64
+ 官方地图工具提供零号大坝、长弓溪谷、航天基地、巴克什、潮汐监狱、AZ3、攀升、临界点、贯穿、烬区、堑壕战等地图图纸/底图瓦片,并包含物资点、出生点、撤离点、首领、据点、载具、固定弹药箱等坐标信息。
65
+
66
+ ## 实战技巧
67
+ - 新手队伍建议至少包含一名侦察和一名支援;进攻队伍可以搭配突击位;防守或卡点时工程位价值更高。
68
+ - 进入高风险建筑前,先用信息位确认敌方大致位置,再由突击位执行突破。
69
+ - 撤离前优先确认地图上的撤离路线、固定补给点和可能交火区域。
70
+ - 如果队伍里有蜂医,不代表可以无视站位;治疗和救援必须建立在安全角度和队友掩护之上。
71
+ - 如果队伍里有牧羊人,应提前规划控场位置,而不是交火后临时补救。`,"表格数据/表格数据-热门干员推荐.csv":`干员名称,定位,推荐指数,上手难度,推荐场景
72
+ 露娜,侦察,5,中,信息侦察和路线判断
73
+ 红狼,突击,5,中高,突破和正面交火
74
+ 牧羊人,工程,4,中,防守控场和区域封锁
75
+ 蜂医,支援,5,低,治疗救援和续航`,"文档资料/规范文件-攻略结构规范.md":`# 【内置】攻略结构规范
76
+
77
+ 必须包含:攻略目标、热门干员定位、队伍搭配、推荐优先级、地图图纸说明、实战注意事项。
78
+ 推荐写法:先讲结论,再讲原因,最后给操作建议。
79
+ 导出前检查:不能出现缺失资料占位语;必须包含至少一张推荐表;必须覆盖露娜、红狼、牧羊人、蜂医;必须引用官方地图工具。`,"文档资料/模板案例-热门干员攻略示例.md":`# 【内置】模板案例:热门干员攻略示例
80
+
81
+ ## 示例导语
82
+ 本文面向新手和进阶玩家,先给出热门干员选择结论,再说明证据来源、推荐优先级、地图使用和队伍搭配。
83
+
84
+ ## 示例章节结构
85
+ 1. 攻略目标和适用人群:说明谁适合阅读、解决什么问题。
86
+ 2. 热门干员定位速览:用表格列出干员、定位、推荐指数、上手难度。
87
+ 3. 队伍搭配建议:把侦察、突击、工程、支援放入真实队伍组合。
88
+ 4. 地图图纸和路线理解:只引用知识库检索到的官方地图图纸,不硬插固定地图。
89
+ 5. 实战注意事项:列出新手误区、资料缺失和复核建议。
90
+
91
+ ## 示例表达方式
92
+ - 先写结论:新手优先露娜 + 蜂医,进阶突破可加入红狼,防守控图可加入牧羊人。
93
+ - 再写依据:引用项目事实文件、推荐表格、官方地图图纸、图片资料和 Word/PDF 附件。
94
+ - 最后写建议:按地图风险、队伍分工和撤离路线给出操作建议。
95
+
96
+ ## 示例来源清单写法
97
+ - 规则文件:用于约束写作边界。
98
+ - 项目事实:用于抽取干员定位和玩法事实。
99
+ - 表格数据:用于形成推荐优先级。
100
+ - 图纸文件:用于说明地图和路线。
101
+ - 图片/附件:用于补充视觉和文档依据。`,"文档资料/模板案例-导出样式参考.md":`# 【内置】模板案例:导出样式参考
102
+
103
+ ## 标题层级
104
+ - H1:文档标题。
105
+ - H2:章节标题。
106
+ - H3:小节标题,例如“本章结论”“证据依据”“操作建议”。
107
+
108
+ ## 表格样式
109
+ 表格列建议控制在 4-6 列,列名简短,单元格不要塞入超长段落。
110
+
111
+ ## 图片和地图说明
112
+ 图片前应说明引用目的,图片后应解释它与章节结论的关系。地图图纸不能作为装饰图,应说明区域、路线、点位或撤离/交战路径。
113
+
114
+ ## 来源和缺失说明
115
+ 导出前应保留来源清单,并对资料未覆盖的内容标注“建议补充”,不要用确定语气替代缺失事实。`,"文档资料/模板样式-攻略文档排版规范.md":`# 【内置】模板样式:攻略文档排版规范
116
+
117
+ ## 结构规范
118
+ - 开头必须有短导语,说明适用对象、使用场景和核心结论。
119
+ - 每章建议包含“本章结论 / 证据依据 / 操作建议 / 资料来源”。
120
+ - 结尾必须包含来源清单、适用范围和资料缺失提醒。
121
+
122
+ ## 内容规范
123
+ - 事实来自文件角色;写法来自提示词角色;完整性来自文档规范包。
124
+ - 不把提示词全文、远程临时 URL、内部错误堆栈放入正文。
125
+ - 对冲突事实要提示用户复核。
126
+
127
+ ## 导出规范
128
+ - Markdown 标题不跳级。
129
+ - 图片必须有 alt 文本。
130
+ - 表格必须是标准 Markdown 表格。
131
+ - DOCX/PDF 视角下段落不宜过长。`,"文档资料/导出门禁-攻略文档检查清单.md":`# 【内置】导出门禁:攻略文档检查清单
132
+
133
+ ## 阻断项
134
+ - 正文包含“资料未提供”等未处理占位语。
135
+ - 必填事实字段缺失,且没有资料缺失说明。
136
+ - 图片、地图或附件引用路径明显无效。
137
+ - 表格语法错误导致 Markdown/DOCX/PDF 无法正常展示。
138
+ - 正文包含提示词全文、内部错误、临时远程生成 URL。
139
+
140
+ ## 警告项
141
+ - 章节过短,缺少操作建议。
142
+ - 来源文件列出不完整。
143
+ - 表格字段缺少解释。
144
+ - 图片或地图只有展示,没有说明其用途。
145
+
146
+ ## 通过标准
147
+ 文档应能说明:使用了哪些文件角色、哪些提示词角色、哪些规范包规则,以及最终导出为什么可以交付。`}))m(g.join(c,a),b);n(g.join(c,"表格数据","表格数据-热门干员推荐.xlsx")),n(g.join(c,"表格数据","表格数据-热门干员推荐.xls")),m(g.join(c,"文档资料","Word资料-队伍搭配说明.doc"),"【内置 DOC 示例】\n队伍搭配建议:露娜负责侦察和路线判断,蜂医负责治疗和救援,红狼负责突破,牧羊人负责防守控场。\n"),function(a,b,c){if(i.existsSync(a)&&i.statSync(a).size>1e3)return;i.mkdirSync(g.dirname(a),{recursive:!0});let d=`import sys,zipfile,html
148
+ out=sys.argv[1]; title=sys.argv[2]; ps=sys.argv[3:]
149
+ def p(t): return '<w:p><w:r><w:t>'+html.escape(t)+'</w:t></w:r></w:p>'
150
+ xml='<?xml version="1.0" encoding="UTF-8" standalone="yes"?><w:document xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main"><w:body>'+p(title)+''.join(p(x) for x in ps)+'<w:sectPr/></w:body></w:document>'
151
+ with zipfile.ZipFile(out,'w',zipfile.ZIP_DEFLATED) as z:
152
+ 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>')
153
+ 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>')
154
+ z.writestr('word/document.xml',xml)
155
+ `;(0,j.execFileSync)("python3",["-c",d,a,b,...c],{stdio:"pipe"})}(g.join(c,"文档资料","Word资料-队伍搭配说明.docx"),"三角洲行动队伍搭配说明",["露娜负责侦察和路线判断,蜂医负责治疗和救援。","红狼适合突破和正面压制,牧羊人适合防守控场。","内置 DOCX 用于验证 Word 类文件解析、索引、角色绑定和文档生成全流程。"]),function(a,b){if(i.existsSync(a)&&i.statSync(a).size>500)return;i.mkdirSync(g.dirname(a),{recursive:!0});let c=`%PDF-1.4
156
+ 1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj
157
+ 2 0 obj<</Type/Pages/Count 1/Kids[3 0 R]>>endobj
158
+ 3 0 obj<</Type/Page/Parent 2 0 R/MediaBox[0 0 595 842]/Contents 4 0 R/Resources<</Font<</F1 5 0 R>>>>>>endobj
159
+ 4 0 obj<</Length 96>>stream
160
+ BT /F1 18 Tf 72 760 Td (${b.replace(/[()\\]/gu,"")}) Tj 0 -32 Td (Delta Force builtin PDF sample for knowledge workflow.) Tj ET
161
+ endstream endobj
162
+ 5 0 obj<</Type/Font/Subtype/Type1/BaseFont/Helvetica>>endobj
163
+ trailer<</Root 1 0 R>>
164
+ %%EOF
165
+ `;i.writeFileSync(a,c,"binary")}(g.join(c,"文档资料","PDF资料-官方攻略摘录.pdf"),"Delta Force Builtin PDF Sample");let d=["# 【内置】干员图片资料","","图片公开来源:PlayerHub / luoy-oss deltaforce_id 公开索引",""];for(let[a,b]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 e=g.join(c,"图片素材","干员图片",a);!function(a,b,c){if(!i.existsSync(b)||!(i.statSync(b).size>=1e3)){var d=(0,j.execFileSync)("python3",["-c",'import sys,urllib.request; url=sys.argv[1]; req=urllib.request.Request(url,headers={"User-Agent":"Mozilla/5.0"}); sys.stdout.buffer.write(urllib.request.urlopen(req,timeout=30).read())',a],{encoding:"buffer",maxBuffer:0x1e00000});if(i.mkdirSync(g.dirname(b),{recursive:!0}),d.length<1e3)throw Error(`内置资料下载失败或文件过小:${a}`);let e=g.join(g.dirname(b),`.${g.basename(b)}.${process.pid}.tmp`);try{i.writeFileSync(e,d),i.renameSync(e,b)}catch(c){try{i.existsSync(e)&&i.rmSync(e,{force:!0})}catch{console.warn("[builtin-demo] 临时文件清理失败",e)}throw Error(`内置资料写入失败:${b},来源:${a},原因:${c instanceof Error?c.message:String(c)}`,{cause:c})}if(!i.existsSync(b)||i.statSync(b).size<c)throw Error(`内置资料写入失败或文件过小:${a}`);try{i.writeFileSync(`${b}.source.txt`,`公开来源:${a}
166
+ 本地文件:${g.basename(b)}
167
+ 文件大小:${i.statSync(b).size} 字节
168
+ `,"utf-8")}catch{}}}(b,e,1e3),d.push(`- ${a.replace(".png","")}:${b};本地文件:${g.relative(c,e)};大小:${i.statSync(e).size} 字节`)}m(g.join(c,"图片素材","图片文件-干员图片来源.md"),d.join("\n"));let e=["# 【内置】三角洲官方完整地图图纸资料","","来源页面:https://df.qq.com/cp/a20240729directory/","说明:该官方地图工具使用 Leaflet 瓦片图作为地图图纸/底图资源,以下文件不是单瓦片,而是由官方 4x4 瓦片网格拼接得到的完整地图图纸。",""];for(let[a,b]of Object.entries({"零号大坝-官方完整地图图纸.jpg":"map_db","航天基地-官方完整地图图纸.jpg":"map_htjd","巴克什-官方完整地图图纸.jpg":"map_bks","潮汐监狱-官方完整地图图纸.jpg":"map_cxjy","AZ3-官方完整地图图纸.jpg":"map_az3","全面战场-攀升官方完整地图图纸.jpg":"map_qhz"})){let d=g.join(c,"图片素材","干员图片",`地图图纸-${a}`);!function(a,b,c){if(i.existsSync(b)&&i.statSync(b).size>=5e4)return;i.mkdirSync(g.dirname(b),{recursive:!0});let d=`
169
+ const { createCanvas, loadImage } = require('@napi-rs/canvas');
170
+ const fs = require('fs');
171
+ const cp = require('child_process');
172
+ const mapName = process.argv[1];
173
+ const out = process.argv[2];
174
+ const zoom = 2;
175
+ const tileSize = 256;
176
+ const gridSize = 4;
177
+ const canvas = createCanvas(tileSize * gridSize, tileSize * gridSize);
178
+ const ctx = canvas.getContext('2d');
179
+ (async () => {
180
+ for (let y = 0; y < gridSize; y++) {
181
+ for (let x = 0; x < gridSize; x++) {
182
+ const url = \`https://game.gtimg.cn/images/dfm/cp/a20240729directory/img/\${mapName}/\${zoom}_\${x}_\${y}.jpg\`;
183
+ const py = 'import sys,urllib.request; url=sys.argv[1]; req=urllib.request.Request(url,headers={"User-Agent":"Mozilla/5.0"}); sys.stdout.buffer.write(urllib.request.urlopen(req,timeout=30).read())';
184
+ const data = cp.execFileSync('python3', ['-c', py, url], { encoding: 'buffer', maxBuffer: 30 * 1024 * 1024 });
185
+ const image = await loadImage(data);
186
+ ctx.drawImage(image, x * tileSize, y * tileSize, tileSize, tileSize);
187
+ }
188
+ }
189
+ fs.writeFileSync(out, canvas.toBuffer('image/jpeg'));
190
+ })().catch(error => { console.error(error); process.exit(1); });
191
+ `;if((0,j.execFileSync)(process.execPath,["-e",d,a,b],{cwd:process.cwd(),stdio:"pipe",maxBuffer:0xa00000}),!i.existsSync(b)||i.statSync(b).size<5e4)throw Error(`完整地图拼接失败:${a}`);try{i.writeFileSync(`${b}.source.txt`,`公开来源:https://df.qq.com/cp/a20240729directory/
192
+ 地图目录:${a}
193
+ 拼接方式:zoom=2,4x4 官方瓦片完整覆盖
194
+ 本地文件:${g.basename(b)}
195
+ 文件大小:${i.statSync(b).size} 字节
196
+ `,"utf-8")}catch{}}(b,d,5e4),e.push(`- ${a}:官方目录 ${b},来源页面:https://df.qq.com/cp/a20240729directory/;本地文件:${g.relative(c,d)};大小:${i.statSync(d).size} 字节`)}return m(g.join(c,"图纸文件","图纸文件-官方地图图纸来源.md"),e.join("\n")),b}function p(){return g.join(h.homedir(),".customize-agent")}function q(){return l||(l=new d.MultiProjectManager(p())),l}function r(a){let b=g.resolve(a),c=g.resolve(g.join(h.homedir(),".customize-agent"));return!(i.existsSync(g.join(b,"pnpm-workspace.yaml"))&&i.existsSync(g.join(b,"apps","server")))&&(b===c||b.includes(`${g.sep}.customize-agent${g.sep}`)||b.endsWith(`${g.sep}apps${g.sep}server`)||b.endsWith(`${g.sep}apps${g.sep}cli`))}function s(){let a=process.env.CUSTOMIZE_PROJECT_ROOT??process.env.INIT_CWD;if(a&&i.existsSync(a)&&!r(a))return g.resolve(a);let b=function(){let a=g.join(p(),"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=>!r(a))}finally{b.close()}}();return b.length>0?b[0]:process.env.INIT_CWD&&!r(process.env.INIT_CWD)?process.env.INIT_CWD:g.resolve(process.cwd(),"../..")}}};