codewave-openclaw-installer 1.0.2 → 2.1.1

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 (1060) hide show
  1. package/README.md +95 -22
  2. package/bin/check.mjs +623 -0
  3. package/bin/install-lib.mjs +215 -0
  4. package/bin/install.mjs +818 -76
  5. package/index.js +21 -0
  6. package/openclaw.plugin.json +11 -0
  7. package/package.json +29 -5
  8. package/skills/acceptance-doc-entry/SKILL.md +289 -0
  9. package/skills/meeting-to-prd/SKILL.md +210 -0
  10. package/skills/meeting-to-prd/references/meeting-notes-template.md +50 -0
  11. package/skills/meeting-to-prd/references/prd-reference.docx +0 -0
  12. package/skills/meeting-to-prd/references/prd-template.md +67 -0
  13. package/skills/pmo-weekly-report/SKILL.md +536 -0
  14. package/skills/popo-doc/SKILL.md +77 -0
  15. package/skills/popo-robot-api/SKILL.md +232 -0
  16. package/skills/ppt-master/SKILL.md +314 -0
  17. package/skills/ppt-master/projects/.gitkeep +0 -0
  18. package/skills/ppt-master/references/canvas-formats.md +73 -0
  19. package/skills/ppt-master/references/executor-base.md +198 -0
  20. package/skills/ppt-master/references/executor-consultant-top.md +218 -0
  21. package/skills/ppt-master/references/executor-consultant.md +197 -0
  22. package/skills/ppt-master/references/executor-general.md +122 -0
  23. package/skills/ppt-master/references/image-generator.md +444 -0
  24. package/skills/ppt-master/references/image-layout-spec.md +174 -0
  25. package/skills/ppt-master/references/shared-standards.md +442 -0
  26. package/skills/ppt-master/references/strategist.md +391 -0
  27. package/skills/ppt-master/references/svg-image-embedding.md +177 -0
  28. package/skills/ppt-master/references/template-designer.md +175 -0
  29. package/skills/ppt-master/scripts/README.md +78 -0
  30. package/skills/ppt-master/scripts/analyze_images.py +239 -0
  31. package/skills/ppt-master/scripts/assets/bg_48.png +0 -0
  32. package/skills/ppt-master/scripts/assets/bg_96.png +0 -0
  33. package/skills/ppt-master/scripts/batch_validate.py +309 -0
  34. package/skills/ppt-master/scripts/config.py +604 -0
  35. package/skills/ppt-master/scripts/doc_to_md.py +232 -0
  36. package/skills/ppt-master/scripts/docs/conversion.md +89 -0
  37. package/skills/ppt-master/scripts/docs/image.md +96 -0
  38. package/skills/ppt-master/scripts/docs/project.md +84 -0
  39. package/skills/ppt-master/scripts/docs/svg-pipeline.md +161 -0
  40. package/skills/ppt-master/scripts/docs/troubleshooting.md +62 -0
  41. package/skills/ppt-master/scripts/error_helper.py +438 -0
  42. package/skills/ppt-master/scripts/finalize_svg.py +302 -0
  43. package/skills/ppt-master/scripts/gemini_watermark_remover.py +230 -0
  44. package/skills/ppt-master/scripts/generate_examples_index.py +241 -0
  45. package/skills/ppt-master/scripts/image_backends/__init__.py +1 -0
  46. package/skills/ppt-master/scripts/image_backends/backend_aigw_gemini.py +209 -0
  47. package/skills/ppt-master/scripts/image_backends/backend_bfl.py +177 -0
  48. package/skills/ppt-master/scripts/image_backends/backend_common.py +244 -0
  49. package/skills/ppt-master/scripts/image_backends/backend_fal.py +127 -0
  50. package/skills/ppt-master/scripts/image_backends/backend_gemini.py +227 -0
  51. package/skills/ppt-master/scripts/image_backends/backend_ideogram.py +152 -0
  52. package/skills/ppt-master/scripts/image_backends/backend_openai.py +233 -0
  53. package/skills/ppt-master/scripts/image_backends/backend_qwen.py +197 -0
  54. package/skills/ppt-master/scripts/image_backends/backend_replicate.py +173 -0
  55. package/skills/ppt-master/scripts/image_backends/backend_siliconflow.py +180 -0
  56. package/skills/ppt-master/scripts/image_backends/backend_stability.py +143 -0
  57. package/skills/ppt-master/scripts/image_backends/backend_volcengine.py +187 -0
  58. package/skills/ppt-master/scripts/image_backends/backend_zhipu.py +188 -0
  59. package/skills/ppt-master/scripts/image_gen.py +412 -0
  60. package/skills/ppt-master/scripts/pdf_to_md.py +794 -0
  61. package/skills/ppt-master/scripts/pptx_animations.py +268 -0
  62. package/skills/ppt-master/scripts/project_manager.py +661 -0
  63. package/skills/ppt-master/scripts/project_utils.py +475 -0
  64. package/skills/ppt-master/scripts/rotate_images.py +583 -0
  65. package/skills/ppt-master/scripts/svg_finalize/__init__.py +1 -0
  66. package/skills/ppt-master/scripts/svg_finalize/crop_images.py +343 -0
  67. package/skills/ppt-master/scripts/svg_finalize/embed_icons.py +250 -0
  68. package/skills/ppt-master/scripts/svg_finalize/embed_images.py +184 -0
  69. package/skills/ppt-master/scripts/svg_finalize/fix_image_aspect.py +380 -0
  70. package/skills/ppt-master/scripts/svg_finalize/flatten_tspan.py +493 -0
  71. package/skills/ppt-master/scripts/svg_finalize/svg_rect_to_path.py +337 -0
  72. package/skills/ppt-master/scripts/svg_position_calculator.py +1486 -0
  73. package/skills/ppt-master/scripts/svg_quality_checker.py +487 -0
  74. package/skills/ppt-master/scripts/svg_to_pptx/__init__.py +17 -0
  75. package/skills/ppt-master/scripts/svg_to_pptx/drawingml_context.py +102 -0
  76. package/skills/ppt-master/scripts/svg_to_pptx/drawingml_converter.py +269 -0
  77. package/skills/ppt-master/scripts/svg_to_pptx/drawingml_elements.py +848 -0
  78. package/skills/ppt-master/scripts/svg_to_pptx/drawingml_paths.py +429 -0
  79. package/skills/ppt-master/scripts/svg_to_pptx/drawingml_styles.py +359 -0
  80. package/skills/ppt-master/scripts/svg_to_pptx/drawingml_utils.py +310 -0
  81. package/skills/ppt-master/scripts/svg_to_pptx/pptx_builder.py +366 -0
  82. package/skills/ppt-master/scripts/svg_to_pptx/pptx_cli.py +196 -0
  83. package/skills/ppt-master/scripts/svg_to_pptx/pptx_dimensions.py +148 -0
  84. package/skills/ppt-master/scripts/svg_to_pptx/pptx_discovery.py +101 -0
  85. package/skills/ppt-master/scripts/svg_to_pptx/pptx_media.py +86 -0
  86. package/skills/ppt-master/scripts/svg_to_pptx/pptx_notes.py +157 -0
  87. package/skills/ppt-master/scripts/svg_to_pptx/pptx_slide_xml.py +136 -0
  88. package/skills/ppt-master/scripts/svg_to_pptx.py +17 -0
  89. package/skills/ppt-master/scripts/total_md_split.py +367 -0
  90. package/skills/ppt-master/scripts/web_to_md.cjs +850 -0
  91. package/skills/ppt-master/scripts/web_to_md.py +755 -0
  92. package/skills/ppt-master/templates/README.md +48 -0
  93. package/skills/ppt-master/templates/charts/README.md +102 -0
  94. package/skills/ppt-master/templates/charts/area_chart.svg +255 -0
  95. package/skills/ppt-master/templates/charts/bar_chart.svg +185 -0
  96. package/skills/ppt-master/templates/charts/box_plot_chart.svg +308 -0
  97. package/skills/ppt-master/templates/charts/bubble_chart.svg +289 -0
  98. package/skills/ppt-master/templates/charts/bullet_chart.svg +214 -0
  99. package/skills/ppt-master/templates/charts/butterfly_chart.svg +247 -0
  100. package/skills/ppt-master/templates/charts/charts_index.json +286 -0
  101. package/skills/ppt-master/templates/charts/donut_chart.svg +246 -0
  102. package/skills/ppt-master/templates/charts/dual_axis_line_chart.svg +311 -0
  103. package/skills/ppt-master/templates/charts/dumbbell_chart.svg +196 -0
  104. package/skills/ppt-master/templates/charts/funnel_chart.svg +241 -0
  105. package/skills/ppt-master/templates/charts/gantt_chart.svg +315 -0
  106. package/skills/ppt-master/templates/charts/gauge_chart.svg +262 -0
  107. package/skills/ppt-master/templates/charts/grouped_bar_chart.svg +275 -0
  108. package/skills/ppt-master/templates/charts/heatmap_chart.svg +214 -0
  109. package/skills/ppt-master/templates/charts/horizontal_bar_chart.svg +213 -0
  110. package/skills/ppt-master/templates/charts/kpi_cards.svg +215 -0
  111. package/skills/ppt-master/templates/charts/line_chart.svg +218 -0
  112. package/skills/ppt-master/templates/charts/matrix_2x2.svg +334 -0
  113. package/skills/ppt-master/templates/charts/org_chart.svg +316 -0
  114. package/skills/ppt-master/templates/charts/pareto_chart.svg +227 -0
  115. package/skills/ppt-master/templates/charts/pie_chart.svg +215 -0
  116. package/skills/ppt-master/templates/charts/porter_five_forces.svg +246 -0
  117. package/skills/ppt-master/templates/charts/process_flow.svg +333 -0
  118. package/skills/ppt-master/templates/charts/progress_bar_chart.svg +295 -0
  119. package/skills/ppt-master/templates/charts/radar_chart.svg +158 -0
  120. package/skills/ppt-master/templates/charts/sankey_chart.svg +303 -0
  121. package/skills/ppt-master/templates/charts/scatter_chart.svg +235 -0
  122. package/skills/ppt-master/templates/charts/stacked_area_chart.svg +230 -0
  123. package/skills/ppt-master/templates/charts/stacked_bar_chart.svg +199 -0
  124. package/skills/ppt-master/templates/charts/swot_analysis.svg +277 -0
  125. package/skills/ppt-master/templates/charts/timeline.svg +279 -0
  126. package/skills/ppt-master/templates/charts/treemap_chart.svg +226 -0
  127. package/skills/ppt-master/templates/charts/waterfall_chart.svg +265 -0
  128. package/skills/ppt-master/templates/design_spec_reference.md +282 -0
  129. package/skills/ppt-master/templates/icons/FULL_INDEX.md +272 -0
  130. package/skills/ppt-master/templates/icons/README.md +75 -0
  131. package/skills/ppt-master/templates/icons/a.svg +4 -0
  132. package/skills/ppt-master/templates/icons/accessibility.svg +4 -0
  133. package/skills/ppt-master/templates/icons/activity.svg +5 -0
  134. package/skills/ppt-master/templates/icons/address-card.svg +4 -0
  135. package/skills/ppt-master/templates/icons/alarm-clock.svg +6 -0
  136. package/skills/ppt-master/templates/icons/alien.svg +4 -0
  137. package/skills/ppt-master/templates/icons/align-bottom.svg +6 -0
  138. package/skills/ppt-master/templates/icons/align-center-horizontal.svg +5 -0
  139. package/skills/ppt-master/templates/icons/align-center-vertical.svg +5 -0
  140. package/skills/ppt-master/templates/icons/align-left.svg +6 -0
  141. package/skills/ppt-master/templates/icons/align-right.svg +6 -0
  142. package/skills/ppt-master/templates/icons/align-text-center.svg +7 -0
  143. package/skills/ppt-master/templates/icons/align-text-justify.svg +7 -0
  144. package/skills/ppt-master/templates/icons/align-text-left.svg +7 -0
  145. package/skills/ppt-master/templates/icons/align-text-right.svg +7 -0
  146. package/skills/ppt-master/templates/icons/align-top.svg +6 -0
  147. package/skills/ppt-master/templates/icons/anchor.svg +4 -0
  148. package/skills/ppt-master/templates/icons/angle-down.svg +4 -0
  149. package/skills/ppt-master/templates/icons/angle-left.svg +4 -0
  150. package/skills/ppt-master/templates/icons/angle-right.svg +4 -0
  151. package/skills/ppt-master/templates/icons/angle-up.svg +4 -0
  152. package/skills/ppt-master/templates/icons/angles-down.svg +5 -0
  153. package/skills/ppt-master/templates/icons/angles-left.svg +5 -0
  154. package/skills/ppt-master/templates/icons/angles-right.svg +5 -0
  155. package/skills/ppt-master/templates/icons/angles-up.svg +5 -0
  156. package/skills/ppt-master/templates/icons/aperture.svg +9 -0
  157. package/skills/ppt-master/templates/icons/aquarius.svg +6 -0
  158. package/skills/ppt-master/templates/icons/archive-box.svg +5 -0
  159. package/skills/ppt-master/templates/icons/aries.svg +4 -0
  160. package/skills/ppt-master/templates/icons/arrow-down-from-line.svg +5 -0
  161. package/skills/ppt-master/templates/icons/arrow-down-left.svg +4 -0
  162. package/skills/ppt-master/templates/icons/arrow-down-right.svg +4 -0
  163. package/skills/ppt-master/templates/icons/arrow-down-short-wide.svg +7 -0
  164. package/skills/ppt-master/templates/icons/arrow-down-to-bracket.svg +5 -0
  165. package/skills/ppt-master/templates/icons/arrow-down-to-line.svg +5 -0
  166. package/skills/ppt-master/templates/icons/arrow-down-wide-short.svg +7 -0
  167. package/skills/ppt-master/templates/icons/arrow-down.svg +4 -0
  168. package/skills/ppt-master/templates/icons/arrow-left-arrow-right.svg +5 -0
  169. package/skills/ppt-master/templates/icons/arrow-left-from-line.svg +5 -0
  170. package/skills/ppt-master/templates/icons/arrow-left-to-line.svg +5 -0
  171. package/skills/ppt-master/templates/icons/arrow-left.svg +4 -0
  172. package/skills/ppt-master/templates/icons/arrow-right-from-bracket.svg +5 -0
  173. package/skills/ppt-master/templates/icons/arrow-right-from-line.svg +5 -0
  174. package/skills/ppt-master/templates/icons/arrow-right-to-bracket.svg +5 -0
  175. package/skills/ppt-master/templates/icons/arrow-right-to-line.svg +5 -0
  176. package/skills/ppt-master/templates/icons/arrow-right.svg +4 -0
  177. package/skills/ppt-master/templates/icons/arrow-rotate-left.svg +4 -0
  178. package/skills/ppt-master/templates/icons/arrow-rotate-right.svg +4 -0
  179. package/skills/ppt-master/templates/icons/arrow-trend-down.svg +4 -0
  180. package/skills/ppt-master/templates/icons/arrow-trend-up.svg +4 -0
  181. package/skills/ppt-master/templates/icons/arrow-turn-down-left.svg +4 -0
  182. package/skills/ppt-master/templates/icons/arrow-turn-down-right.svg +4 -0
  183. package/skills/ppt-master/templates/icons/arrow-turn-left-down.svg +4 -0
  184. package/skills/ppt-master/templates/icons/arrow-turn-left-up.svg +4 -0
  185. package/skills/ppt-master/templates/icons/arrow-turn-right-down.svg +4 -0
  186. package/skills/ppt-master/templates/icons/arrow-turn-right-up.svg +4 -0
  187. package/skills/ppt-master/templates/icons/arrow-turn-up-left.svg +4 -0
  188. package/skills/ppt-master/templates/icons/arrow-turn-up-right.svg +4 -0
  189. package/skills/ppt-master/templates/icons/arrow-u-down-left.svg +4 -0
  190. package/skills/ppt-master/templates/icons/arrow-u-down-right.svg +4 -0
  191. package/skills/ppt-master/templates/icons/arrow-u-left-down.svg +4 -0
  192. package/skills/ppt-master/templates/icons/arrow-u-left-up.svg +4 -0
  193. package/skills/ppt-master/templates/icons/arrow-u-right-down.svg +4 -0
  194. package/skills/ppt-master/templates/icons/arrow-u-right-up.svg +4 -0
  195. package/skills/ppt-master/templates/icons/arrow-u-up-left.svg +4 -0
  196. package/skills/ppt-master/templates/icons/arrow-u-up-right.svg +4 -0
  197. package/skills/ppt-master/templates/icons/arrow-up-arrow-down.svg +5 -0
  198. package/skills/ppt-master/templates/icons/arrow-up-from-bracket.svg +5 -0
  199. package/skills/ppt-master/templates/icons/arrow-up-from-line.svg +5 -0
  200. package/skills/ppt-master/templates/icons/arrow-up-left.svg +4 -0
  201. package/skills/ppt-master/templates/icons/arrow-up-right-from-square.svg +5 -0
  202. package/skills/ppt-master/templates/icons/arrow-up-right.svg +4 -0
  203. package/skills/ppt-master/templates/icons/arrow-up-short-wide.svg +7 -0
  204. package/skills/ppt-master/templates/icons/arrow-up-to-line.svg +5 -0
  205. package/skills/ppt-master/templates/icons/arrow-up-wide-short.svg +7 -0
  206. package/skills/ppt-master/templates/icons/arrow-up.svg +4 -0
  207. package/skills/ppt-master/templates/icons/arrows-left-right.svg +4 -0
  208. package/skills/ppt-master/templates/icons/arrows-repeat.svg +5 -0
  209. package/skills/ppt-master/templates/icons/arrows-rotate-clockwise.svg +5 -0
  210. package/skills/ppt-master/templates/icons/arrows-rotate-counter-clockwise.svg +5 -0
  211. package/skills/ppt-master/templates/icons/arrows-up-down.svg +4 -0
  212. package/skills/ppt-master/templates/icons/at.svg +4 -0
  213. package/skills/ppt-master/templates/icons/axe.svg +4 -0
  214. package/skills/ppt-master/templates/icons/b.svg +4 -0
  215. package/skills/ppt-master/templates/icons/badge-check.svg +4 -0
  216. package/skills/ppt-master/templates/icons/badge.svg +4 -0
  217. package/skills/ppt-master/templates/icons/ban.svg +4 -0
  218. package/skills/ppt-master/templates/icons/baseball-bat.svg +5 -0
  219. package/skills/ppt-master/templates/icons/baseball.svg +6 -0
  220. package/skills/ppt-master/templates/icons/basketball.svg +9 -0
  221. package/skills/ppt-master/templates/icons/battery-charge.svg +5 -0
  222. package/skills/ppt-master/templates/icons/battery-empty.svg +4 -0
  223. package/skills/ppt-master/templates/icons/battery-full.svg +4 -0
  224. package/skills/ppt-master/templates/icons/battery-half.svg +4 -0
  225. package/skills/ppt-master/templates/icons/battery-slash.svg +5 -0
  226. package/skills/ppt-master/templates/icons/bed.svg +4 -0
  227. package/skills/ppt-master/templates/icons/bee.svg +5 -0
  228. package/skills/ppt-master/templates/icons/bell-slash.svg +6 -0
  229. package/skills/ppt-master/templates/icons/bell.svg +5 -0
  230. package/skills/ppt-master/templates/icons/bicycle.svg +7 -0
  231. package/skills/ppt-master/templates/icons/bishop.svg +4 -0
  232. package/skills/ppt-master/templates/icons/block-quote.svg +8 -0
  233. package/skills/ppt-master/templates/icons/bluetooth.svg +4 -0
  234. package/skills/ppt-master/templates/icons/bold.svg +4 -0
  235. package/skills/ppt-master/templates/icons/bolt.svg +4 -0
  236. package/skills/ppt-master/templates/icons/bomb.svg +6 -0
  237. package/skills/ppt-master/templates/icons/bone.svg +4 -0
  238. package/skills/ppt-master/templates/icons/book-open.svg +4 -0
  239. package/skills/ppt-master/templates/icons/book.svg +4 -0
  240. package/skills/ppt-master/templates/icons/bookmark-plus.svg +4 -0
  241. package/skills/ppt-master/templates/icons/bookmark.svg +4 -0
  242. package/skills/ppt-master/templates/icons/books.svg +6 -0
  243. package/skills/ppt-master/templates/icons/bottle.svg +5 -0
  244. package/skills/ppt-master/templates/icons/bow-and-arrow.svg +4 -0
  245. package/skills/ppt-master/templates/icons/bowl.svg +5 -0
  246. package/skills/ppt-master/templates/icons/box.svg +4 -0
  247. package/skills/ppt-master/templates/icons/bridge.svg +4 -0
  248. package/skills/ppt-master/templates/icons/british-pound.svg +4 -0
  249. package/skills/ppt-master/templates/icons/browser.svg +4 -0
  250. package/skills/ppt-master/templates/icons/brush.svg +5 -0
  251. package/skills/ppt-master/templates/icons/bug.svg +5 -0
  252. package/skills/ppt-master/templates/icons/building.svg +4 -0
  253. package/skills/ppt-master/templates/icons/bullhorn.svg +5 -0
  254. package/skills/ppt-master/templates/icons/burger.svg +6 -0
  255. package/skills/ppt-master/templates/icons/bus.svg +4 -0
  256. package/skills/ppt-master/templates/icons/butterfly.svg +4 -0
  257. package/skills/ppt-master/templates/icons/c.svg +4 -0
  258. package/skills/ppt-master/templates/icons/cake-slice.svg +5 -0
  259. package/skills/ppt-master/templates/icons/cake.svg +8 -0
  260. package/skills/ppt-master/templates/icons/calculator.svg +4 -0
  261. package/skills/ppt-master/templates/icons/calendar.svg +5 -0
  262. package/skills/ppt-master/templates/icons/camera-slash.svg +5 -0
  263. package/skills/ppt-master/templates/icons/camera.svg +4 -0
  264. package/skills/ppt-master/templates/icons/cancer.svg +5 -0
  265. package/skills/ppt-master/templates/icons/capricorn.svg +4 -0
  266. package/skills/ppt-master/templates/icons/car.svg +4 -0
  267. package/skills/ppt-master/templates/icons/card-stack.svg +6 -0
  268. package/skills/ppt-master/templates/icons/caret-down.svg +4 -0
  269. package/skills/ppt-master/templates/icons/caret-left.svg +4 -0
  270. package/skills/ppt-master/templates/icons/caret-right.svg +4 -0
  271. package/skills/ppt-master/templates/icons/caret-up.svg +4 -0
  272. package/skills/ppt-master/templates/icons/castle.svg +4 -0
  273. package/skills/ppt-master/templates/icons/cat.svg +5 -0
  274. package/skills/ppt-master/templates/icons/chair.svg +5 -0
  275. package/skills/ppt-master/templates/icons/chart-bar.svg +6 -0
  276. package/skills/ppt-master/templates/icons/chart-line.svg +5 -0
  277. package/skills/ppt-master/templates/icons/chart-pie.svg +5 -0
  278. package/skills/ppt-master/templates/icons/checkmark.svg +4 -0
  279. package/skills/ppt-master/templates/icons/circle-3-dots-horizontal.svg +4 -0
  280. package/skills/ppt-master/templates/icons/circle-3-dots-vertical.svg +4 -0
  281. package/skills/ppt-master/templates/icons/circle-arrow-down-left.svg +4 -0
  282. package/skills/ppt-master/templates/icons/circle-arrow-down-right.svg +4 -0
  283. package/skills/ppt-master/templates/icons/circle-arrow-down.svg +4 -0
  284. package/skills/ppt-master/templates/icons/circle-arrow-left.svg +4 -0
  285. package/skills/ppt-master/templates/icons/circle-arrow-right.svg +4 -0
  286. package/skills/ppt-master/templates/icons/circle-arrow-up-left.svg +4 -0
  287. package/skills/ppt-master/templates/icons/circle-arrow-up-right.svg +4 -0
  288. package/skills/ppt-master/templates/icons/circle-arrow-up.svg +4 -0
  289. package/skills/ppt-master/templates/icons/circle-checkmark.svg +4 -0
  290. package/skills/ppt-master/templates/icons/circle-divide.svg +4 -0
  291. package/skills/ppt-master/templates/icons/circle-equals.svg +4 -0
  292. package/skills/ppt-master/templates/icons/circle-exclamation.svg +4 -0
  293. package/skills/ppt-master/templates/icons/circle-half.svg +4 -0
  294. package/skills/ppt-master/templates/icons/circle-info.svg +4 -0
  295. package/skills/ppt-master/templates/icons/circle-minus.svg +4 -0
  296. package/skills/ppt-master/templates/icons/circle-number-0.svg +5 -0
  297. package/skills/ppt-master/templates/icons/circle-number-1.svg +4 -0
  298. package/skills/ppt-master/templates/icons/circle-number-2.svg +4 -0
  299. package/skills/ppt-master/templates/icons/circle-number-3.svg +4 -0
  300. package/skills/ppt-master/templates/icons/circle-number-4.svg +4 -0
  301. package/skills/ppt-master/templates/icons/circle-number-5.svg +4 -0
  302. package/skills/ppt-master/templates/icons/circle-number-6.svg +5 -0
  303. package/skills/ppt-master/templates/icons/circle-number-7.svg +4 -0
  304. package/skills/ppt-master/templates/icons/circle-number-8.svg +6 -0
  305. package/skills/ppt-master/templates/icons/circle-number-9.svg +5 -0
  306. package/skills/ppt-master/templates/icons/circle-pause.svg +4 -0
  307. package/skills/ppt-master/templates/icons/circle-play.svg +4 -0
  308. package/skills/ppt-master/templates/icons/circle-plus.svg +4 -0
  309. package/skills/ppt-master/templates/icons/circle-question.svg +4 -0
  310. package/skills/ppt-master/templates/icons/circle-stop.svg +4 -0
  311. package/skills/ppt-master/templates/icons/circle-user.svg +5 -0
  312. package/skills/ppt-master/templates/icons/circle-x.svg +4 -0
  313. package/skills/ppt-master/templates/icons/circle.svg +4 -0
  314. package/skills/ppt-master/templates/icons/citrus-slice.svg +7 -0
  315. package/skills/ppt-master/templates/icons/city.svg +4 -0
  316. package/skills/ppt-master/templates/icons/clipboard.svg +5 -0
  317. package/skills/ppt-master/templates/icons/clock.svg +4 -0
  318. package/skills/ppt-master/templates/icons/closed-captioning.svg +4 -0
  319. package/skills/ppt-master/templates/icons/clothes-hanger.svg +4 -0
  320. package/skills/ppt-master/templates/icons/cloud-arrow-down.svg +4 -0
  321. package/skills/ppt-master/templates/icons/cloud-arrow-up.svg +4 -0
  322. package/skills/ppt-master/templates/icons/cloud-fog.svg +7 -0
  323. package/skills/ppt-master/templates/icons/cloud-lightning.svg +5 -0
  324. package/skills/ppt-master/templates/icons/cloud-rain.svg +7 -0
  325. package/skills/ppt-master/templates/icons/cloud-snow.svg +9 -0
  326. package/skills/ppt-master/templates/icons/cloud.svg +4 -0
  327. package/skills/ppt-master/templates/icons/club.svg +4 -0
  328. package/skills/ppt-master/templates/icons/cocktail.svg +4 -0
  329. package/skills/ppt-master/templates/icons/code-block.svg +4 -0
  330. package/skills/ppt-master/templates/icons/code.svg +6 -0
  331. package/skills/ppt-master/templates/icons/cog.svg +4 -0
  332. package/skills/ppt-master/templates/icons/coin.svg +4 -0
  333. package/skills/ppt-master/templates/icons/columns.svg +5 -0
  334. package/skills/ppt-master/templates/icons/command.svg +4 -0
  335. package/skills/ppt-master/templates/icons/comment-dots.svg +4 -0
  336. package/skills/ppt-master/templates/icons/comment.svg +4 -0
  337. package/skills/ppt-master/templates/icons/comments-slash.svg +5 -0
  338. package/skills/ppt-master/templates/icons/comments.svg +5 -0
  339. package/skills/ppt-master/templates/icons/compact-disc.svg +4 -0
  340. package/skills/ppt-master/templates/icons/compass-drafting.svg +5 -0
  341. package/skills/ppt-master/templates/icons/compass.svg +5 -0
  342. package/skills/ppt-master/templates/icons/component.svg +7 -0
  343. package/skills/ppt-master/templates/icons/copy.svg +5 -0
  344. package/skills/ppt-master/templates/icons/copyright.svg +4 -0
  345. package/skills/ppt-master/templates/icons/credit-card.svg +5 -0
  346. package/skills/ppt-master/templates/icons/crop.svg +5 -0
  347. package/skills/ppt-master/templates/icons/crosshairs.svg +5 -0
  348. package/skills/ppt-master/templates/icons/crown.svg +4 -0
  349. package/skills/ppt-master/templates/icons/crystal-ball.svg +5 -0
  350. package/skills/ppt-master/templates/icons/cube.svg +4 -0
  351. package/skills/ppt-master/templates/icons/cupcake.svg +5 -0
  352. package/skills/ppt-master/templates/icons/curling-stone.svg +5 -0
  353. package/skills/ppt-master/templates/icons/cursor-click.svg +7 -0
  354. package/skills/ppt-master/templates/icons/cursor.svg +4 -0
  355. package/skills/ppt-master/templates/icons/d-pad.svg +7 -0
  356. package/skills/ppt-master/templates/icons/d.svg +4 -0
  357. package/skills/ppt-master/templates/icons/database.svg +6 -0
  358. package/skills/ppt-master/templates/icons/delete.svg +4 -0
  359. package/skills/ppt-master/templates/icons/desktop.svg +4 -0
  360. package/skills/ppt-master/templates/icons/diamond-exclamation.svg +4 -0
  361. package/skills/ppt-master/templates/icons/diamond-half.svg +4 -0
  362. package/skills/ppt-master/templates/icons/diamond-shape.svg +4 -0
  363. package/skills/ppt-master/templates/icons/diamond.svg +4 -0
  364. package/skills/ppt-master/templates/icons/dice.svg +5 -0
  365. package/skills/ppt-master/templates/icons/die-1.svg +4 -0
  366. package/skills/ppt-master/templates/icons/die-2.svg +4 -0
  367. package/skills/ppt-master/templates/icons/die-3.svg +4 -0
  368. package/skills/ppt-master/templates/icons/die-4.svg +4 -0
  369. package/skills/ppt-master/templates/icons/die-5.svg +4 -0
  370. package/skills/ppt-master/templates/icons/die-6.svg +4 -0
  371. package/skills/ppt-master/templates/icons/distribute-horizontal.svg +6 -0
  372. package/skills/ppt-master/templates/icons/distribute-vertical.svg +6 -0
  373. package/skills/ppt-master/templates/icons/divide.svg +6 -0
  374. package/skills/ppt-master/templates/icons/dna.svg +4 -0
  375. package/skills/ppt-master/templates/icons/dog.svg +4 -0
  376. package/skills/ppt-master/templates/icons/dollar.svg +4 -0
  377. package/skills/ppt-master/templates/icons/door-open.svg +4 -0
  378. package/skills/ppt-master/templates/icons/door.svg +4 -0
  379. package/skills/ppt-master/templates/icons/dots-horizontal.svg +6 -0
  380. package/skills/ppt-master/templates/icons/dots-vertical.svg +6 -0
  381. package/skills/ppt-master/templates/icons/droplet.svg +4 -0
  382. package/skills/ppt-master/templates/icons/e.svg +4 -0
  383. package/skills/ppt-master/templates/icons/ear-slash.svg +5 -0
  384. package/skills/ppt-master/templates/icons/ear.svg +4 -0
  385. package/skills/ppt-master/templates/icons/eject.svg +5 -0
  386. package/skills/ppt-master/templates/icons/envelope.svg +5 -0
  387. package/skills/ppt-master/templates/icons/equals.svg +5 -0
  388. package/skills/ppt-master/templates/icons/euro.svg +4 -0
  389. package/skills/ppt-master/templates/icons/exclude.svg +4 -0
  390. package/skills/ppt-master/templates/icons/eye-slash.svg +5 -0
  391. package/skills/ppt-master/templates/icons/eye.svg +4 -0
  392. package/skills/ppt-master/templates/icons/eyedropper.svg +5 -0
  393. package/skills/ppt-master/templates/icons/f.svg +4 -0
  394. package/skills/ppt-master/templates/icons/face-angry.svg +4 -0
  395. package/skills/ppt-master/templates/icons/face-cry.svg +4 -0
  396. package/skills/ppt-master/templates/icons/face-id.svg +10 -0
  397. package/skills/ppt-master/templates/icons/face-laugh.svg +4 -0
  398. package/skills/ppt-master/templates/icons/face-meh.svg +4 -0
  399. package/skills/ppt-master/templates/icons/face-melt.svg +4 -0
  400. package/skills/ppt-master/templates/icons/face-no-mouth.svg +4 -0
  401. package/skills/ppt-master/templates/icons/face-open-mouth.svg +4 -0
  402. package/skills/ppt-master/templates/icons/face-sad.svg +4 -0
  403. package/skills/ppt-master/templates/icons/face-smile.svg +4 -0
  404. package/skills/ppt-master/templates/icons/factory.svg +4 -0
  405. package/skills/ppt-master/templates/icons/fast-forward.svg +4 -0
  406. package/skills/ppt-master/templates/icons/file-plus.svg +4 -0
  407. package/skills/ppt-master/templates/icons/file.svg +5 -0
  408. package/skills/ppt-master/templates/icons/files.svg +5 -0
  409. package/skills/ppt-master/templates/icons/film.svg +4 -0
  410. package/skills/ppt-master/templates/icons/filter.svg +7 -0
  411. package/skills/ppt-master/templates/icons/fire.svg +4 -0
  412. package/skills/ppt-master/templates/icons/fireplace.svg +5 -0
  413. package/skills/ppt-master/templates/icons/fish.svg +4 -0
  414. package/skills/ppt-master/templates/icons/flag.svg +4 -0
  415. package/skills/ppt-master/templates/icons/floppy-disk.svg +5 -0
  416. package/skills/ppt-master/templates/icons/flower.svg +6 -0
  417. package/skills/ppt-master/templates/icons/folder-open.svg +4 -0
  418. package/skills/ppt-master/templates/icons/folder.svg +4 -0
  419. package/skills/ppt-master/templates/icons/folders.svg +5 -0
  420. package/skills/ppt-master/templates/icons/font-case.svg +5 -0
  421. package/skills/ppt-master/templates/icons/football.svg +4 -0
  422. package/skills/ppt-master/templates/icons/frame.svg +4 -0
  423. package/skills/ppt-master/templates/icons/funnel.svg +4 -0
  424. package/skills/ppt-master/templates/icons/g.svg +4 -0
  425. package/skills/ppt-master/templates/icons/game-controller.svg +4 -0
  426. package/skills/ppt-master/templates/icons/gauge-high.svg +4 -0
  427. package/skills/ppt-master/templates/icons/gauge-low.svg +4 -0
  428. package/skills/ppt-master/templates/icons/gauge-medium.svg +4 -0
  429. package/skills/ppt-master/templates/icons/gem.svg +4 -0
  430. package/skills/ppt-master/templates/icons/gemini.svg +4 -0
  431. package/skills/ppt-master/templates/icons/ghost.svg +4 -0
  432. package/skills/ppt-master/templates/icons/gift.svg +6 -0
  433. package/skills/ppt-master/templates/icons/git-branch.svg +4 -0
  434. package/skills/ppt-master/templates/icons/git-commit.svg +4 -0
  435. package/skills/ppt-master/templates/icons/git-compare.svg +5 -0
  436. package/skills/ppt-master/templates/icons/git-fork.svg +4 -0
  437. package/skills/ppt-master/templates/icons/git-merge.svg +4 -0
  438. package/skills/ppt-master/templates/icons/glasses.svg +4 -0
  439. package/skills/ppt-master/templates/icons/globe.svg +7 -0
  440. package/skills/ppt-master/templates/icons/grid-masonry.svg +7 -0
  441. package/skills/ppt-master/templates/icons/grid.svg +4 -0
  442. package/skills/ppt-master/templates/icons/grip-horizontal.svg +9 -0
  443. package/skills/ppt-master/templates/icons/grip-vertical.svg +9 -0
  444. package/skills/ppt-master/templates/icons/group.svg +15 -0
  445. package/skills/ppt-master/templates/icons/h.svg +4 -0
  446. package/skills/ppt-master/templates/icons/hammer.svg +5 -0
  447. package/skills/ppt-master/templates/icons/hand-tap.svg +7 -0
  448. package/skills/ppt-master/templates/icons/hand.svg +4 -0
  449. package/skills/ppt-master/templates/icons/hashtag.svg +4 -0
  450. package/skills/ppt-master/templates/icons/head-side.svg +4 -0
  451. package/skills/ppt-master/templates/icons/headlights.svg +7 -0
  452. package/skills/ppt-master/templates/icons/headphones.svg +4 -0
  453. package/skills/ppt-master/templates/icons/heart-broken.svg +4 -0
  454. package/skills/ppt-master/templates/icons/heart-half.svg +4 -0
  455. package/skills/ppt-master/templates/icons/heart.svg +4 -0
  456. package/skills/ppt-master/templates/icons/hexagon.svg +4 -0
  457. package/skills/ppt-master/templates/icons/hockey.svg +6 -0
  458. package/skills/ppt-master/templates/icons/home-1.svg +4 -0
  459. package/skills/ppt-master/templates/icons/home.svg +4 -0
  460. package/skills/ppt-master/templates/icons/hospital.svg +4 -0
  461. package/skills/ppt-master/templates/icons/hourglass-empty.svg +4 -0
  462. package/skills/ppt-master/templates/icons/hourglass-half-bottom.svg +4 -0
  463. package/skills/ppt-master/templates/icons/hourglass-half-top.svg +4 -0
  464. package/skills/ppt-master/templates/icons/i-cursor.svg +4 -0
  465. package/skills/ppt-master/templates/icons/i.svg +4 -0
  466. package/skills/ppt-master/templates/icons/ice-cream.svg +5 -0
  467. package/skills/ppt-master/templates/icons/icons_index.json +257 -0
  468. package/skills/ppt-master/templates/icons/image.svg +4 -0
  469. package/skills/ppt-master/templates/icons/images.svg +5 -0
  470. package/skills/ppt-master/templates/icons/inbox.svg +4 -0
  471. package/skills/ppt-master/templates/icons/indent.svg +8 -0
  472. package/skills/ppt-master/templates/icons/intersect.svg +4 -0
  473. package/skills/ppt-master/templates/icons/italic.svg +4 -0
  474. package/skills/ppt-master/templates/icons/j.svg +4 -0
  475. package/skills/ppt-master/templates/icons/jersey.svg +5 -0
  476. package/skills/ppt-master/templates/icons/joystick.svg +4 -0
  477. package/skills/ppt-master/templates/icons/k.svg +4 -0
  478. package/skills/ppt-master/templates/icons/key-skeleton.svg +4 -0
  479. package/skills/ppt-master/templates/icons/key.svg +4 -0
  480. package/skills/ppt-master/templates/icons/keyboard.svg +14 -0
  481. package/skills/ppt-master/templates/icons/keyhole.svg +4 -0
  482. package/skills/ppt-master/templates/icons/king.svg +4 -0
  483. package/skills/ppt-master/templates/icons/knight.svg +4 -0
  484. package/skills/ppt-master/templates/icons/l.svg +4 -0
  485. package/skills/ppt-master/templates/icons/label.svg +4 -0
  486. package/skills/ppt-master/templates/icons/ladder.svg +4 -0
  487. package/skills/ppt-master/templates/icons/lamp.svg +5 -0
  488. package/skills/ppt-master/templates/icons/language.svg +4 -0
  489. package/skills/ppt-master/templates/icons/laptop.svg +5 -0
  490. package/skills/ppt-master/templates/icons/laundry-machine.svg +4 -0
  491. package/skills/ppt-master/templates/icons/layers.svg +6 -0
  492. package/skills/ppt-master/templates/icons/leaf.svg +4 -0
  493. package/skills/ppt-master/templates/icons/leo.svg +4 -0
  494. package/skills/ppt-master/templates/icons/libra.svg +5 -0
  495. package/skills/ppt-master/templates/icons/life-ring.svg +4 -0
  496. package/skills/ppt-master/templates/icons/lightbulb.svg +4 -0
  497. package/skills/ppt-master/templates/icons/lines-magnifying-glass.svg +8 -0
  498. package/skills/ppt-master/templates/icons/lines-plus.svg +8 -0
  499. package/skills/ppt-master/templates/icons/lines.svg +7 -0
  500. package/skills/ppt-master/templates/icons/link.svg +6 -0
  501. package/skills/ppt-master/templates/icons/list-ordered.svg +9 -0
  502. package/skills/ppt-master/templates/icons/list.svg +11 -0
  503. package/skills/ppt-master/templates/icons/location-arrow-slash.svg +5 -0
  504. package/skills/ppt-master/templates/icons/location-arrow.svg +4 -0
  505. package/skills/ppt-master/templates/icons/location-target.svg +5 -0
  506. package/skills/ppt-master/templates/icons/lock-closed.svg +4 -0
  507. package/skills/ppt-master/templates/icons/lock-open.svg +4 -0
  508. package/skills/ppt-master/templates/icons/m.svg +4 -0
  509. package/skills/ppt-master/templates/icons/magnet.svg +6 -0
  510. package/skills/ppt-master/templates/icons/magnifying-glass.svg +4 -0
  511. package/skills/ppt-master/templates/icons/mailbox.svg +4 -0
  512. package/skills/ppt-master/templates/icons/map-pin.svg +4 -0
  513. package/skills/ppt-master/templates/icons/map.svg +6 -0
  514. package/skills/ppt-master/templates/icons/maximize.svg +5 -0
  515. package/skills/ppt-master/templates/icons/meeple.svg +4 -0
  516. package/skills/ppt-master/templates/icons/megaphone.svg +4 -0
  517. package/skills/ppt-master/templates/icons/meteor.svg +4 -0
  518. package/skills/ppt-master/templates/icons/microchip.svg +5 -0
  519. package/skills/ppt-master/templates/icons/microphone-slash.svg +6 -0
  520. package/skills/ppt-master/templates/icons/microphone.svg +5 -0
  521. package/skills/ppt-master/templates/icons/minimize.svg +5 -0
  522. package/skills/ppt-master/templates/icons/minus.svg +4 -0
  523. package/skills/ppt-master/templates/icons/mobile.svg +4 -0
  524. package/skills/ppt-master/templates/icons/money.svg +8 -0
  525. package/skills/ppt-master/templates/icons/moon-cloud.svg +6 -0
  526. package/skills/ppt-master/templates/icons/moon-fog.svg +7 -0
  527. package/skills/ppt-master/templates/icons/moon.svg +5 -0
  528. package/skills/ppt-master/templates/icons/mortarboard.svg +5 -0
  529. package/skills/ppt-master/templates/icons/mountains.svg +4 -0
  530. package/skills/ppt-master/templates/icons/mouse.svg +6 -0
  531. package/skills/ppt-master/templates/icons/move-down.svg +6 -0
  532. package/skills/ppt-master/templates/icons/move-up.svg +6 -0
  533. package/skills/ppt-master/templates/icons/mug.svg +7 -0
  534. package/skills/ppt-master/templates/icons/museum.svg +5 -0
  535. package/skills/ppt-master/templates/icons/music.svg +4 -0
  536. package/skills/ppt-master/templates/icons/n.svg +4 -0
  537. package/skills/ppt-master/templates/icons/newspaper.svg +4 -0
  538. package/skills/ppt-master/templates/icons/number-0-alt.svg +4 -0
  539. package/skills/ppt-master/templates/icons/number-0.svg +4 -0
  540. package/skills/ppt-master/templates/icons/number-1-alt.svg +4 -0
  541. package/skills/ppt-master/templates/icons/number-1.svg +4 -0
  542. package/skills/ppt-master/templates/icons/number-2-alt.svg +4 -0
  543. package/skills/ppt-master/templates/icons/number-2.svg +4 -0
  544. package/skills/ppt-master/templates/icons/number-3-alt.svg +4 -0
  545. package/skills/ppt-master/templates/icons/number-3.svg +4 -0
  546. package/skills/ppt-master/templates/icons/number-4-alt.svg +4 -0
  547. package/skills/ppt-master/templates/icons/number-4.svg +4 -0
  548. package/skills/ppt-master/templates/icons/number-5-alt.svg +4 -0
  549. package/skills/ppt-master/templates/icons/number-5.svg +4 -0
  550. package/skills/ppt-master/templates/icons/number-6-alt.svg +4 -0
  551. package/skills/ppt-master/templates/icons/number-6.svg +4 -0
  552. package/skills/ppt-master/templates/icons/number-7-alt.svg +4 -0
  553. package/skills/ppt-master/templates/icons/number-7.svg +4 -0
  554. package/skills/ppt-master/templates/icons/number-8-alt.svg +4 -0
  555. package/skills/ppt-master/templates/icons/number-8.svg +4 -0
  556. package/skills/ppt-master/templates/icons/number-9-alt.svg +4 -0
  557. package/skills/ppt-master/templates/icons/number-9.svg +4 -0
  558. package/skills/ppt-master/templates/icons/nut.svg +4 -0
  559. package/skills/ppt-master/templates/icons/o.svg +4 -0
  560. package/skills/ppt-master/templates/icons/octagon-exclamation.svg +4 -0
  561. package/skills/ppt-master/templates/icons/octagon.svg +4 -0
  562. package/skills/ppt-master/templates/icons/option.svg +5 -0
  563. package/skills/ppt-master/templates/icons/outdent.svg +8 -0
  564. package/skills/ppt-master/templates/icons/outlet.svg +4 -0
  565. package/skills/ppt-master/templates/icons/p.svg +4 -0
  566. package/skills/ppt-master/templates/icons/paint-bucket.svg +5 -0
  567. package/skills/ppt-master/templates/icons/paint-roller.svg +4 -0
  568. package/skills/ppt-master/templates/icons/painting.svg +5 -0
  569. package/skills/ppt-master/templates/icons/palette.svg +4 -0
  570. package/skills/ppt-master/templates/icons/pants.svg +4 -0
  571. package/skills/ppt-master/templates/icons/paper-plane.svg +4 -0
  572. package/skills/ppt-master/templates/icons/paperclip.svg +4 -0
  573. package/skills/ppt-master/templates/icons/pause.svg +5 -0
  574. package/skills/ppt-master/templates/icons/paw.svg +8 -0
  575. package/skills/ppt-master/templates/icons/pawn.svg +4 -0
  576. package/skills/ppt-master/templates/icons/pen-nib.svg +4 -0
  577. package/skills/ppt-master/templates/icons/pencil-square.svg +5 -0
  578. package/skills/ppt-master/templates/icons/pencil.svg +5 -0
  579. package/skills/ppt-master/templates/icons/percent.svg +6 -0
  580. package/skills/ppt-master/templates/icons/person-walking.svg +5 -0
  581. package/skills/ppt-master/templates/icons/person-wave.svg +5 -0
  582. package/skills/ppt-master/templates/icons/person.svg +5 -0
  583. package/skills/ppt-master/templates/icons/phone-slash.svg +5 -0
  584. package/skills/ppt-master/templates/icons/phone.svg +4 -0
  585. package/skills/ppt-master/templates/icons/pills.svg +6 -0
  586. package/skills/ppt-master/templates/icons/pisces.svg +4 -0
  587. package/skills/ppt-master/templates/icons/pizza.svg +5 -0
  588. package/skills/ppt-master/templates/icons/plane.svg +4 -0
  589. package/skills/ppt-master/templates/icons/planet.svg +5 -0
  590. package/skills/ppt-master/templates/icons/play-pause.svg +6 -0
  591. package/skills/ppt-master/templates/icons/play.svg +4 -0
  592. package/skills/ppt-master/templates/icons/playing-card.svg +4 -0
  593. package/skills/ppt-master/templates/icons/plug.svg +4 -0
  594. package/skills/ppt-master/templates/icons/plus.svg +4 -0
  595. package/skills/ppt-master/templates/icons/point-down.svg +4 -0
  596. package/skills/ppt-master/templates/icons/point-left.svg +4 -0
  597. package/skills/ppt-master/templates/icons/point-right.svg +4 -0
  598. package/skills/ppt-master/templates/icons/point-up.svg +4 -0
  599. package/skills/ppt-master/templates/icons/poop.svg +4 -0
  600. package/skills/ppt-master/templates/icons/potion-empty.svg +4 -0
  601. package/skills/ppt-master/templates/icons/potion-full.svg +4 -0
  602. package/skills/ppt-master/templates/icons/potion-half.svg +4 -0
  603. package/skills/ppt-master/templates/icons/power.svg +5 -0
  604. package/skills/ppt-master/templates/icons/printer.svg +5 -0
  605. package/skills/ppt-master/templates/icons/q.svg +4 -0
  606. package/skills/ppt-master/templates/icons/queen.svg +5 -0
  607. package/skills/ppt-master/templates/icons/question-mark.svg +5 -0
  608. package/skills/ppt-master/templates/icons/quote-left.svg +5 -0
  609. package/skills/ppt-master/templates/icons/quote-right.svg +5 -0
  610. package/skills/ppt-master/templates/icons/radar.svg +4 -0
  611. package/skills/ppt-master/templates/icons/radioactive.svg +4 -0
  612. package/skills/ppt-master/templates/icons/rainbow-cloud.svg +6 -0
  613. package/skills/ppt-master/templates/icons/rainbow.svg +5 -0
  614. package/skills/ppt-master/templates/icons/receipt.svg +4 -0
  615. package/skills/ppt-master/templates/icons/recycle.svg +6 -0
  616. package/skills/ppt-master/templates/icons/reflect-horizontal.svg +6 -0
  617. package/skills/ppt-master/templates/icons/reflect-vertical.svg +6 -0
  618. package/skills/ppt-master/templates/icons/rewind.svg +4 -0
  619. package/skills/ppt-master/templates/icons/robot.svg +4 -0
  620. package/skills/ppt-master/templates/icons/rocket.svg +5 -0
  621. package/skills/ppt-master/templates/icons/rook.svg +4 -0
  622. package/skills/ppt-master/templates/icons/route.svg +6 -0
  623. package/skills/ppt-master/templates/icons/rows.svg +5 -0
  624. package/skills/ppt-master/templates/icons/rss.svg +6 -0
  625. package/skills/ppt-master/templates/icons/ruler.svg +4 -0
  626. package/skills/ppt-master/templates/icons/s.svg +4 -0
  627. package/skills/ppt-master/templates/icons/sagittarius.svg +4 -0
  628. package/skills/ppt-master/templates/icons/scissors.svg +5 -0
  629. package/skills/ppt-master/templates/icons/scooter.svg +4 -0
  630. package/skills/ppt-master/templates/icons/scorpio.svg +4 -0
  631. package/skills/ppt-master/templates/icons/screencast.svg +6 -0
  632. package/skills/ppt-master/templates/icons/screw.svg +6 -0
  633. package/skills/ppt-master/templates/icons/screwdriver.svg +5 -0
  634. package/skills/ppt-master/templates/icons/scribble.svg +5 -0
  635. package/skills/ppt-master/templates/icons/seedling.svg +4 -0
  636. package/skills/ppt-master/templates/icons/server.svg +5 -0
  637. package/skills/ppt-master/templates/icons/service-bell.svg +5 -0
  638. package/skills/ppt-master/templates/icons/share-nodes.svg +4 -0
  639. package/skills/ppt-master/templates/icons/shield-check.svg +4 -0
  640. package/skills/ppt-master/templates/icons/shield-half.svg +4 -0
  641. package/skills/ppt-master/templates/icons/shield.svg +4 -0
  642. package/skills/ppt-master/templates/icons/shift.svg +4 -0
  643. package/skills/ppt-master/templates/icons/ship.svg +5 -0
  644. package/skills/ppt-master/templates/icons/shirt.svg +4 -0
  645. package/skills/ppt-master/templates/icons/shoe.svg +5 -0
  646. package/skills/ppt-master/templates/icons/shop.svg +5 -0
  647. package/skills/ppt-master/templates/icons/shopping-bag.svg +5 -0
  648. package/skills/ppt-master/templates/icons/shopping-basket.svg +4 -0
  649. package/skills/ppt-master/templates/icons/shopping-cart.svg +4 -0
  650. package/skills/ppt-master/templates/icons/shuffle.svg +5 -0
  651. package/skills/ppt-master/templates/icons/sidebar-left.svg +5 -0
  652. package/skills/ppt-master/templates/icons/sidebar-right.svg +5 -0
  653. package/skills/ppt-master/templates/icons/signal-fair.svg +5 -0
  654. package/skills/ppt-master/templates/icons/signal-good.svg +6 -0
  655. package/skills/ppt-master/templates/icons/signal-slash.svg +7 -0
  656. package/skills/ppt-master/templates/icons/signal-weak.svg +4 -0
  657. package/skills/ppt-master/templates/icons/signal.svg +7 -0
  658. package/skills/ppt-master/templates/icons/signpost.svg +5 -0
  659. package/skills/ppt-master/templates/icons/sink.svg +5 -0
  660. package/skills/ppt-master/templates/icons/skip-backward.svg +4 -0
  661. package/skills/ppt-master/templates/icons/skip-forward.svg +4 -0
  662. package/skills/ppt-master/templates/icons/skull.svg +4 -0
  663. package/skills/ppt-master/templates/icons/sliders.svg +5 -0
  664. package/skills/ppt-master/templates/icons/smartwatch.svg +4 -0
  665. package/skills/ppt-master/templates/icons/snow.svg +4 -0
  666. package/skills/ppt-master/templates/icons/soccer.svg +9 -0
  667. package/skills/ppt-master/templates/icons/soda.svg +5 -0
  668. package/skills/ppt-master/templates/icons/sort.svg +5 -0
  669. package/skills/ppt-master/templates/icons/spade.svg +4 -0
  670. package/skills/ppt-master/templates/icons/sparkles.svg +8 -0
  671. package/skills/ppt-master/templates/icons/square-checkmark.svg +4 -0
  672. package/skills/ppt-master/templates/icons/square-divide.svg +4 -0
  673. package/skills/ppt-master/templates/icons/square-equals.svg +4 -0
  674. package/skills/ppt-master/templates/icons/square-minus.svg +4 -0
  675. package/skills/ppt-master/templates/icons/square-plus.svg +4 -0
  676. package/skills/ppt-master/templates/icons/square-user.svg +5 -0
  677. package/skills/ppt-master/templates/icons/square-x.svg +4 -0
  678. package/skills/ppt-master/templates/icons/square.svg +4 -0
  679. package/skills/ppt-master/templates/icons/squares-horizontal.svg +6 -0
  680. package/skills/ppt-master/templates/icons/squares-vertical.svg +6 -0
  681. package/skills/ppt-master/templates/icons/star-half.svg +4 -0
  682. package/skills/ppt-master/templates/icons/star.svg +4 -0
  683. package/skills/ppt-master/templates/icons/sticky-note.svg +5 -0
  684. package/skills/ppt-master/templates/icons/stop.svg +4 -0
  685. package/skills/ppt-master/templates/icons/stopwatch.svg +4 -0
  686. package/skills/ppt-master/templates/icons/strikethrough.svg +5 -0
  687. package/skills/ppt-master/templates/icons/subtract.svg +4 -0
  688. package/skills/ppt-master/templates/icons/suitcase.svg +6 -0
  689. package/skills/ppt-master/templates/icons/sun-cloud.svg +9 -0
  690. package/skills/ppt-master/templates/icons/sun-fog.svg +12 -0
  691. package/skills/ppt-master/templates/icons/sun.svg +12 -0
  692. package/skills/ppt-master/templates/icons/sunglasses.svg +4 -0
  693. package/skills/ppt-master/templates/icons/swatches.svg +6 -0
  694. package/skills/ppt-master/templates/icons/sword.svg +4 -0
  695. package/skills/ppt-master/templates/icons/swords-crossed.svg +6 -0
  696. package/skills/ppt-master/templates/icons/t.svg +4 -0
  697. package/skills/ppt-master/templates/icons/table.svg +8 -0
  698. package/skills/ppt-master/templates/icons/tag.svg +4 -0
  699. package/skills/ppt-master/templates/icons/target-arrow.svg +6 -0
  700. package/skills/ppt-master/templates/icons/target.svg +5 -0
  701. package/skills/ppt-master/templates/icons/taurus.svg +4 -0
  702. package/skills/ppt-master/templates/icons/temperature-high.svg +8 -0
  703. package/skills/ppt-master/templates/icons/temperature-low.svg +8 -0
  704. package/skills/ppt-master/templates/icons/temperature-medium.svg +8 -0
  705. package/skills/ppt-master/templates/icons/tennis-ball.svg +6 -0
  706. package/skills/ppt-master/templates/icons/terminal.svg +5 -0
  707. package/skills/ppt-master/templates/icons/text.svg +4 -0
  708. package/skills/ppt-master/templates/icons/thumbs-down.svg +5 -0
  709. package/skills/ppt-master/templates/icons/thumbs-up.svg +5 -0
  710. package/skills/ppt-master/templates/icons/thumbtack.svg +5 -0
  711. package/skills/ppt-master/templates/icons/ticket.svg +4 -0
  712. package/skills/ppt-master/templates/icons/toggle-circle-left.svg +4 -0
  713. package/skills/ppt-master/templates/icons/toggle-circle-right.svg +4 -0
  714. package/skills/ppt-master/templates/icons/toolbox.svg +5 -0
  715. package/skills/ppt-master/templates/icons/traffic-cone.svg +6 -0
  716. package/skills/ppt-master/templates/icons/traffic-light.svg +4 -0
  717. package/skills/ppt-master/templates/icons/train.svg +4 -0
  718. package/skills/ppt-master/templates/icons/trash.svg +5 -0
  719. package/skills/ppt-master/templates/icons/tree-evergreen.svg +4 -0
  720. package/skills/ppt-master/templates/icons/tree.svg +4 -0
  721. package/skills/ppt-master/templates/icons/triangle-exclamation.svg +4 -0
  722. package/skills/ppt-master/templates/icons/triangle.svg +4 -0
  723. package/skills/ppt-master/templates/icons/trophy.svg +4 -0
  724. package/skills/ppt-master/templates/icons/truck.svg +4 -0
  725. package/skills/ppt-master/templates/icons/tv-retro.svg +4 -0
  726. package/skills/ppt-master/templates/icons/tv.svg +5 -0
  727. package/skills/ppt-master/templates/icons/u.svg +4 -0
  728. package/skills/ppt-master/templates/icons/ufo.svg +5 -0
  729. package/skills/ppt-master/templates/icons/umbrella.svg +4 -0
  730. package/skills/ppt-master/templates/icons/underline.svg +5 -0
  731. package/skills/ppt-master/templates/icons/unite.svg +4 -0
  732. package/skills/ppt-master/templates/icons/user.svg +5 -0
  733. package/skills/ppt-master/templates/icons/users.svg +7 -0
  734. package/skills/ppt-master/templates/icons/utensils.svg +5 -0
  735. package/skills/ppt-master/templates/icons/v.svg +4 -0
  736. package/skills/ppt-master/templates/icons/vector-circle.svg +4 -0
  737. package/skills/ppt-master/templates/icons/vector-curve.svg +4 -0
  738. package/skills/ppt-master/templates/icons/vector-line.svg +4 -0
  739. package/skills/ppt-master/templates/icons/vector-square.svg +4 -0
  740. package/skills/ppt-master/templates/icons/video-camera-slash.svg +5 -0
  741. package/skills/ppt-master/templates/icons/video-camera.svg +5 -0
  742. package/skills/ppt-master/templates/icons/video.svg +4 -0
  743. package/skills/ppt-master/templates/icons/virgo.svg +4 -0
  744. package/skills/ppt-master/templates/icons/volume-high.svg +6 -0
  745. package/skills/ppt-master/templates/icons/volume-low.svg +5 -0
  746. package/skills/ppt-master/templates/icons/volume-none.svg +4 -0
  747. package/skills/ppt-master/templates/icons/volume-slash.svg +5 -0
  748. package/skills/ppt-master/templates/icons/volume-x.svg +5 -0
  749. package/skills/ppt-master/templates/icons/vr.svg +4 -0
  750. package/skills/ppt-master/templates/icons/w.svg +4 -0
  751. package/skills/ppt-master/templates/icons/wallet.svg +4 -0
  752. package/skills/ppt-master/templates/icons/wand-with-sparkles.svg +7 -0
  753. package/skills/ppt-master/templates/icons/watch.svg +4 -0
  754. package/skills/ppt-master/templates/icons/water.svg +5 -0
  755. package/skills/ppt-master/templates/icons/waveform.svg +7 -0
  756. package/skills/ppt-master/templates/icons/wheelchair.svg +5 -0
  757. package/skills/ppt-master/templates/icons/wifi-low.svg +4 -0
  758. package/skills/ppt-master/templates/icons/wifi-medium.svg +5 -0
  759. package/skills/ppt-master/templates/icons/wifi-slash.svg +5 -0
  760. package/skills/ppt-master/templates/icons/wifi.svg +6 -0
  761. package/skills/ppt-master/templates/icons/wind.svg +5 -0
  762. package/skills/ppt-master/templates/icons/window.svg +6 -0
  763. package/skills/ppt-master/templates/icons/wine-glass.svg +4 -0
  764. package/skills/ppt-master/templates/icons/wrench.svg +4 -0
  765. package/skills/ppt-master/templates/icons/x-1.svg +4 -0
  766. package/skills/ppt-master/templates/icons/x.svg +4 -0
  767. package/skills/ppt-master/templates/icons/y.svg +4 -0
  768. package/skills/ppt-master/templates/icons/yen.svg +4 -0
  769. package/skills/ppt-master/templates/icons/z.svg +4 -0
  770. package/skills/ppt-master/templates/icons/zoom-in.svg +4 -0
  771. package/skills/ppt-master/templates/icons/zoom-out.svg +4 -0
  772. package/skills/ppt-master/templates/layouts/README.md +257 -0
  773. package/skills/ppt-master/templates/layouts/academic_defense/01_cover.svg +49 -0
  774. package/skills/ppt-master/templates/layouts/academic_defense/02_chapter.svg +36 -0
  775. package/skills/ppt-master/templates/layouts/academic_defense/02_toc.svg +63 -0
  776. package/skills/ppt-master/templates/layouts/academic_defense/03_content.svg +58 -0
  777. package/skills/ppt-master/templates/layouts/academic_defense/04_ending.svg +52 -0
  778. package/skills/ppt-master/templates/layouts/academic_defense/design_spec.md +294 -0
  779. package/skills/ppt-master/templates/layouts/ai_ops/01_cover.svg +65 -0
  780. package/skills/ppt-master/templates/layouts/ai_ops/02_chapter.svg +36 -0
  781. package/skills/ppt-master/templates/layouts/ai_ops/02_toc.svg +51 -0
  782. package/skills/ppt-master/templates/layouts/ai_ops/03_content.svg +37 -0
  783. package/skills/ppt-master/templates/layouts/ai_ops/04_ending.svg +59 -0
  784. package/skills/ppt-master/templates/layouts/ai_ops/design_spec.md +357 -0
  785. package/skills/ppt-master/templates/layouts/ai_ops/reference_style.svg +154 -0
  786. package/skills/ppt-master/templates/layouts/anthropic/01_cover.svg +105 -0
  787. package/skills/ppt-master/templates/layouts/anthropic/02_chapter.svg +75 -0
  788. package/skills/ppt-master/templates/layouts/anthropic/02_toc.svg +120 -0
  789. package/skills/ppt-master/templates/layouts/anthropic/03_content.svg +118 -0
  790. package/skills/ppt-master/templates/layouts/anthropic/04_ending.svg +107 -0
  791. package/skills/ppt-master/templates/layouts/anthropic/design_spec.md +243 -0
  792. package/skills/ppt-master/templates/layouts/exhibit/01_cover.svg +49 -0
  793. package/skills/ppt-master/templates/layouts/exhibit/02_chapter.svg +43 -0
  794. package/skills/ppt-master/templates/layouts/exhibit/02_toc.svg +82 -0
  795. package/skills/ppt-master/templates/layouts/exhibit/03_content.svg +38 -0
  796. package/skills/ppt-master/templates/layouts/exhibit/04_ending.svg +54 -0
  797. package/skills/ppt-master/templates/layouts/exhibit/design_spec.md +244 -0
  798. package/skills/ppt-master/templates/layouts/google_style/01_cover.svg +79 -0
  799. package/skills/ppt-master/templates/layouts/google_style/02_chapter.svg +62 -0
  800. package/skills/ppt-master/templates/layouts/google_style/02_toc.svg +89 -0
  801. package/skills/ppt-master/templates/layouts/google_style/03_content.svg +72 -0
  802. package/skills/ppt-master/templates/layouts/google_style/04_ending.svg +97 -0
  803. package/skills/ppt-master/templates/layouts/google_style/design_spec.md +303 -0
  804. package/skills/ppt-master/templates/layouts/government_blue/01_cover.svg +93 -0
  805. package/skills/ppt-master/templates/layouts/government_blue/02_chapter.svg +82 -0
  806. package/skills/ppt-master/templates/layouts/government_blue/02_toc.svg +107 -0
  807. package/skills/ppt-master/templates/layouts/government_blue/03_content.svg +78 -0
  808. package/skills/ppt-master/templates/layouts/government_blue/04_ending.svg +81 -0
  809. package/skills/ppt-master/templates/layouts/government_blue/design_spec.md +233 -0
  810. package/skills/ppt-master/templates/layouts/government_red/01_cover.svg +73 -0
  811. package/skills/ppt-master/templates/layouts/government_red/02_chapter.svg +66 -0
  812. package/skills/ppt-master/templates/layouts/government_red/02_toc.svg +88 -0
  813. package/skills/ppt-master/templates/layouts/government_red/03_content.svg +66 -0
  814. package/skills/ppt-master/templates/layouts/government_red/04_ending.svg +75 -0
  815. package/skills/ppt-master/templates/layouts/government_red/design_spec.md +227 -0
  816. package/skills/ppt-master/templates/layouts/layouts_index.json +204 -0
  817. package/skills/ppt-master/templates/layouts/mckinsey/01_cover.svg +84 -0
  818. package/skills/ppt-master/templates/layouts/mckinsey/02_chapter.svg +76 -0
  819. package/skills/ppt-master/templates/layouts/mckinsey/02_toc.svg +91 -0
  820. package/skills/ppt-master/templates/layouts/mckinsey/03_content.svg +92 -0
  821. package/skills/ppt-master/templates/layouts/mckinsey/04_ending.svg +87 -0
  822. package/skills/ppt-master/templates/layouts/mckinsey/design_spec.md +265 -0
  823. package/skills/ppt-master/templates/layouts/medical_university/01_cover.svg +71 -0
  824. package/skills/ppt-master/templates/layouts/medical_university/02_chapter.svg +50 -0
  825. package/skills/ppt-master/templates/layouts/medical_university/02_toc.svg +97 -0
  826. package/skills/ppt-master/templates/layouts/medical_university/03_content.svg +78 -0
  827. package/skills/ppt-master/templates/layouts/medical_university/04_ending.svg +79 -0
  828. package/skills/ppt-master/templates/layouts/medical_university/design_spec.md +292 -0
  829. package/skills/ppt-master/templates/layouts/netease_zhiqi/01_cover.svg +36 -0
  830. package/skills/ppt-master/templates/layouts/netease_zhiqi/02_chapter.svg +23 -0
  831. package/skills/ppt-master/templates/layouts/netease_zhiqi/02_toc.svg +42 -0
  832. package/skills/ppt-master/templates/layouts/netease_zhiqi/03_content.svg +28 -0
  833. package/skills/ppt-master/templates/layouts/netease_zhiqi/03_content_architecture.svg +84 -0
  834. package/skills/ppt-master/templates/layouts/netease_zhiqi/03_content_bullet.svg +77 -0
  835. package/skills/ppt-master/templates/layouts/netease_zhiqi/03_content_cards.svg +123 -0
  836. package/skills/ppt-master/templates/layouts/netease_zhiqi/03_content_comparison.svg +56 -0
  837. package/skills/ppt-master/templates/layouts/netease_zhiqi/03_content_data.svg +69 -0
  838. package/skills/ppt-master/templates/layouts/netease_zhiqi/03_content_gray.svg +34 -0
  839. package/skills/ppt-master/templates/layouts/netease_zhiqi/03_content_image_full.svg +46 -0
  840. package/skills/ppt-master/templates/layouts/netease_zhiqi/03_content_image_grid.svg +44 -0
  841. package/skills/ppt-master/templates/layouts/netease_zhiqi/03_content_image_left.svg +43 -0
  842. package/skills/ppt-master/templates/layouts/netease_zhiqi/03_content_logos.svg +86 -0
  843. package/skills/ppt-master/templates/layouts/netease_zhiqi/03_content_table.svg +131 -0
  844. package/skills/ppt-master/templates/layouts/netease_zhiqi/03_content_timeline.svg +82 -0
  845. package/skills/ppt-master/templates/layouts/netease_zhiqi/04_ending.svg +26 -0
  846. package/skills/ppt-master/templates/layouts/netease_zhiqi/content_bg.png +0 -0
  847. package/skills/ppt-master/templates/layouts/netease_zhiqi/cover_bg.png +0 -0
  848. package/skills/ppt-master/templates/layouts/netease_zhiqi/design_spec.md +134 -0
  849. package/skills/ppt-master/templates/layouts/netease_zhiqi/ending_bg.png +0 -0
  850. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_000.svg +3 -0
  851. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_001.svg +3 -0
  852. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_002.svg +3 -0
  853. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_003.svg +3 -0
  854. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_004.svg +3 -0
  855. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_005.svg +3 -0
  856. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_006.svg +3 -0
  857. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_007.svg +3 -0
  858. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_008.svg +3 -0
  859. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_009.svg +3 -0
  860. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_010.svg +3 -0
  861. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_011.svg +3 -0
  862. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_012.svg +3 -0
  863. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_013.svg +3 -0
  864. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_014.svg +3 -0
  865. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_015.svg +3 -0
  866. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_016.svg +3 -0
  867. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_017.svg +3 -0
  868. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_018.svg +3 -0
  869. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_019.svg +3 -0
  870. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_020.svg +3 -0
  871. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_021.svg +3 -0
  872. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_022.svg +3 -0
  873. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_023.svg +3 -0
  874. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_024.svg +3 -0
  875. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_025.svg +3 -0
  876. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_026.svg +3 -0
  877. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_027.svg +3 -0
  878. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_028.svg +3 -0
  879. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_029.svg +3 -0
  880. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_030.svg +3 -0
  881. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_031.svg +3 -0
  882. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_032.svg +3 -0
  883. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_033.svg +3 -0
  884. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_034.svg +3 -0
  885. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_035.svg +3 -0
  886. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_036.svg +3 -0
  887. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_037.svg +3 -0
  888. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_038.svg +3 -0
  889. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_039.svg +3 -0
  890. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_040.svg +3 -0
  891. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_041.svg +3 -0
  892. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_042.svg +3 -0
  893. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_043.svg +3 -0
  894. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_044.svg +3 -0
  895. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_045.svg +3 -0
  896. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_046.svg +3 -0
  897. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_047.svg +3 -0
  898. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_048.svg +3 -0
  899. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_049.svg +3 -0
  900. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_050.svg +3 -0
  901. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_051.svg +3 -0
  902. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_052.svg +3 -0
  903. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_053.svg +3 -0
  904. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_054.svg +3 -0
  905. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_055.svg +3 -0
  906. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_056.svg +3 -0
  907. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_057.svg +3 -0
  908. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_058.svg +3 -0
  909. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_059.svg +3 -0
  910. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_060.svg +3 -0
  911. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_061.svg +3 -0
  912. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_062.svg +3 -0
  913. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_063.svg +3 -0
  914. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_064.svg +3 -0
  915. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_065.svg +3 -0
  916. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_066.svg +3 -0
  917. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_067.svg +3 -0
  918. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_068.svg +3 -0
  919. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_069.svg +3 -0
  920. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_070.svg +3 -0
  921. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_071.svg +3 -0
  922. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_072.svg +3 -0
  923. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_073.svg +3 -0
  924. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_074.svg +3 -0
  925. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_075.svg +3 -0
  926. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_076.svg +3 -0
  927. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_077.svg +3 -0
  928. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_078.svg +3 -0
  929. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_079.svg +3 -0
  930. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_080.svg +3 -0
  931. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_081.svg +3 -0
  932. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_082.svg +3 -0
  933. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_083.svg +3 -0
  934. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_084.svg +3 -0
  935. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_085.svg +3 -0
  936. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_086.svg +3 -0
  937. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_087.svg +3 -0
  938. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_088.svg +3 -0
  939. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_089.svg +3 -0
  940. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_090.svg +3 -0
  941. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_091.svg +3 -0
  942. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_092.svg +3 -0
  943. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_093.svg +3 -0
  944. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_094.svg +3 -0
  945. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_095.svg +3 -0
  946. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_096.svg +3 -0
  947. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_097.svg +3 -0
  948. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_098.svg +3 -0
  949. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_099.svg +3 -0
  950. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_100.svg +3 -0
  951. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_101.svg +3 -0
  952. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_102.svg +3 -0
  953. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_103.svg +3 -0
  954. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_104.svg +3 -0
  955. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_105.svg +3 -0
  956. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_106.svg +3 -0
  957. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_107.svg +3 -0
  958. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_108.svg +3 -0
  959. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_109.svg +3 -0
  960. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_110.svg +3 -0
  961. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_111.svg +3 -0
  962. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_112.svg +3 -0
  963. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_113.svg +3 -0
  964. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_114.svg +3 -0
  965. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_115.svg +3 -0
  966. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_116.svg +3 -0
  967. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_117.svg +3 -0
  968. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_118.svg +3 -0
  969. package/skills/ppt-master/templates/layouts/netease_zhiqi/icons/icon_119.svg +3 -0
  970. package/skills/ppt-master/templates/layouts/netease_zhiqi/logo_full.png +0 -0
  971. package/skills/ppt-master/templates/layouts/netease_zhiqi/logo_zhiqi.png +0 -0
  972. package/skills/ppt-master/templates/layouts/netease_zhiqi/toc_bg.png +0 -0
  973. package/skills/ppt-master/templates/layouts/pixel_retro/01_cover.svg +138 -0
  974. package/skills/ppt-master/templates/layouts/pixel_retro/02_chapter.svg +130 -0
  975. package/skills/ppt-master/templates/layouts/pixel_retro/02_toc.svg +130 -0
  976. package/skills/ppt-master/templates/layouts/pixel_retro/03_content.svg +50 -0
  977. package/skills/ppt-master/templates/layouts/pixel_retro/04_ending.svg +167 -0
  978. package/skills/ppt-master/templates/layouts/pixel_retro/design_spec.md +308 -0
  979. package/skills/ppt-master/templates/layouts/psychology_attachment/01_cover.svg +78 -0
  980. package/skills/ppt-master/templates/layouts/psychology_attachment/02_chapter.svg +82 -0
  981. package/skills/ppt-master/templates/layouts/psychology_attachment/02_toc.svg +115 -0
  982. package/skills/ppt-master/templates/layouts/psychology_attachment/03_content.svg +41 -0
  983. package/skills/ppt-master/templates/layouts/psychology_attachment/04_ending.svg +100 -0
  984. package/skills/ppt-master/templates/layouts/psychology_attachment/design_spec.md +394 -0
  985. package/skills/ppt-master/templates/layouts/smart_red/01_cover.svg +49 -0
  986. package/skills/ppt-master/templates/layouts/smart_red/02_chapter.svg +29 -0
  987. package/skills/ppt-master/templates/layouts/smart_red/02_toc.svg +59 -0
  988. package/skills/ppt-master/templates/layouts/smart_red/03_content.svg +59 -0
  989. package/skills/ppt-master/templates/layouts/smart_red/04_ending.svg +44 -0
  990. package/skills/ppt-master/templates/layouts/smart_red/design_spec.md +208 -0
  991. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/345/270/270/350/247/204/01_cover.svg +100 -0
  992. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/345/270/270/350/247/204/02_chapter.svg +81 -0
  993. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/345/270/270/350/247/204/02_toc.svg +112 -0
  994. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/345/270/270/350/247/204/03_content.svg +57 -0
  995. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/345/270/270/350/247/204/04_ending.svg +92 -0
  996. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/345/270/270/350/247/204/design_spec.md +209 -0
  997. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/345/270/270/350/247/204//344/270/255/345/233/275/346/260/264/345/212/241logo.png +0 -0
  998. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/345/270/270/350/247/204//345/215/216/344/270/234/351/231/242logo.png +0 -0
  999. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/345/270/270/350/247/204//346/260/264/347/224/265/344/270/211/345/261/200logo.png +0 -0
  1000. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/345/270/270/350/247/204//347/224/265/345/273/272logo.png +0 -0
  1001. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/347/216/260/344/273/243/01_cover.svg +90 -0
  1002. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/347/216/260/344/273/243/02_chapter.svg +61 -0
  1003. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/347/216/260/344/273/243/02_toc.svg +131 -0
  1004. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/347/216/260/344/273/243/03_content.svg +77 -0
  1005. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/347/216/260/344/273/243/04_ending.svg +78 -0
  1006. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/347/216/260/344/273/243/design_spec.md +177 -0
  1007. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/347/216/260/344/273/243//344/270/255/345/233/275/346/260/264/345/212/241logo.png +0 -0
  1008. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/347/216/260/344/273/243//345/215/216/344/270/234/351/231/242logo.png +0 -0
  1009. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/347/216/260/344/273/243//346/260/264/347/224/265/344/270/211/345/261/200logo.png +0 -0
  1010. package/skills/ppt-master/templates/layouts//344/270/255/345/233/275/347/224/265/345/273/272_/347/216/260/344/273/243//347/224/265/345/273/272logo.png +0 -0
  1011. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/345/225/206/345/212/241/01_cover.svg +83 -0
  1012. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/345/225/206/345/212/241/02_chapter.svg +55 -0
  1013. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/345/225/206/345/212/241/02_toc.svg +110 -0
  1014. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/345/225/206/345/212/241/03_content.svg +62 -0
  1015. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/345/225/206/345/212/241/04_ending.svg +60 -0
  1016. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/345/225/206/345/212/241/design_spec.md +166 -0
  1017. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/345/225/206/345/212/241//345/217/263/344/270/212/350/247/222 logo.png +0 -0
  1018. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/345/225/206/345/212/241//345/244/247/345/236/213 logo.png +0 -0
  1019. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/345/270/270/350/247/204/01_cover.svg +49 -0
  1020. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/345/270/270/350/247/204/02_chapter.svg +47 -0
  1021. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/345/270/270/350/247/204/02_toc.svg +73 -0
  1022. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/345/270/270/350/247/204/03_content.svg +57 -0
  1023. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/345/270/270/350/247/204/04_ending.svg +62 -0
  1024. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/345/270/270/350/247/204/design_spec.md +214 -0
  1025. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/345/270/270/350/247/204//345/217/263/344/270/212/350/247/222 logo.png +0 -0
  1026. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/345/270/270/350/247/204//345/244/247/345/236/213 logo.png +0 -0
  1027. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/347/216/260/344/273/243/01_cover.svg +89 -0
  1028. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/347/216/260/344/273/243/02_chapter.svg +55 -0
  1029. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/347/216/260/344/273/243/02_toc.svg +92 -0
  1030. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/347/216/260/344/273/243/03_content.svg +56 -0
  1031. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/347/216/260/344/273/243/04_ending.svg +64 -0
  1032. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/347/216/260/344/273/243/design_spec.md +170 -0
  1033. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/347/216/260/344/273/243//345/217/263/344/270/212/350/247/222 logo.png +0 -0
  1034. package/skills/ppt-master/templates/layouts//344/270/255/346/261/275/347/240/224_/347/216/260/344/273/243//345/244/247/345/236/213 logo.png +0 -0
  1035. package/skills/ppt-master/templates/layouts//346/213/233/345/225/206/351/223/266/350/241/214/01_cover.svg +113 -0
  1036. package/skills/ppt-master/templates/layouts//346/213/233/345/225/206/351/223/266/350/241/214/02_chapter.svg +90 -0
  1037. package/skills/ppt-master/templates/layouts//346/213/233/345/225/206/351/223/266/350/241/214/02_toc.svg +108 -0
  1038. package/skills/ppt-master/templates/layouts//346/213/233/345/225/206/351/223/266/350/241/214/03_content.svg +69 -0
  1039. package/skills/ppt-master/templates/layouts//346/213/233/345/225/206/351/223/266/350/241/214/04_ending.svg +120 -0
  1040. package/skills/ppt-master/templates/layouts//346/213/233/345/225/206/351/223/266/350/241/214/design_spec.md +209 -0
  1041. package/skills/ppt-master/templates/layouts//346/213/233/345/225/206/351/223/266/350/241/214//346/213/233/345/225/206/351/223/266/350/241/214/345/205/254/345/217/270/351/207/221/350/236/215.png +0 -0
  1042. package/skills/ppt-master/templates/layouts//347/247/221/346/212/200/350/223/235/345/225/206/345/212/241/01_cover.svg +52 -0
  1043. package/skills/ppt-master/templates/layouts//347/247/221/346/212/200/350/223/235/345/225/206/345/212/241/02_chapter.svg +50 -0
  1044. package/skills/ppt-master/templates/layouts//347/247/221/346/212/200/350/223/235/345/225/206/345/212/241/02_toc.svg +67 -0
  1045. package/skills/ppt-master/templates/layouts//347/247/221/346/212/200/350/223/235/345/225/206/345/212/241/03_content.svg +28 -0
  1046. package/skills/ppt-master/templates/layouts//347/247/221/346/212/200/350/223/235/345/225/206/345/212/241/04_ending.svg +52 -0
  1047. package/skills/ppt-master/templates/layouts//347/247/221/346/212/200/350/223/235/345/225/206/345/212/241/design_spec.md +206 -0
  1048. package/skills/ppt-master/templates/layouts//351/207/215/345/272/206/345/244/247/345/255/246/01_cover.svg +74 -0
  1049. package/skills/ppt-master/templates/layouts//351/207/215/345/272/206/345/244/247/345/255/246/02_chapter.svg +52 -0
  1050. package/skills/ppt-master/templates/layouts//351/207/215/345/272/206/345/244/247/345/255/246/02_toc.svg +80 -0
  1051. package/skills/ppt-master/templates/layouts//351/207/215/345/272/206/345/244/247/345/255/246/03_content.svg +56 -0
  1052. package/skills/ppt-master/templates/layouts//351/207/215/345/272/206/345/244/247/345/255/246/04_ending.svg +62 -0
  1053. package/skills/ppt-master/templates/layouts//351/207/215/345/272/206/345/244/247/345/255/246/design_spec.md +243 -0
  1054. package/skills/ppt-master/templates/layouts//351/207/215/345/272/206/345/244/247/345/255/246//351/207/215/345/272/206/345/244/247/345/255/246logo.png +0 -0
  1055. package/skills/ppt-master/templates/layouts//351/207/215/345/272/206/345/244/247/345/255/246//351/207/215/345/272/206/345/244/247/345/255/246logo2.png +0 -0
  1056. package/skills/ppt-master/workflows/create-template.md +173 -0
  1057. package/skills/speed-to-text/SKILL.md +64 -0
  1058. package/skills/tencent-meeting/SKILL.md +65 -0
  1059. package/skills/yidun-skill-sec/SKILL.md +838 -0
  1060. package/skills/smart-customer-service/docs//344/270/212/347/272/277/350/257/225/350/277/220/350/241/214/346/235/220/346/226/231.zip +0 -0
package/bin/install.mjs CHANGED
@@ -1,117 +1,859 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { spawn } from 'node:child_process';
4
- import { cpSync, rmSync, existsSync, mkdirSync } from 'node:fs';
5
- import { join, dirname } from 'node:path';
4
+ import { cpSync, existsSync, lstatSync, mkdirSync, readFileSync, rmSync, unlinkSync } from 'node:fs';
5
+ import { dirname, resolve, join } from 'node:path';
6
+ import * as path from 'node:path';
6
7
  import { homedir } from 'node:os';
7
8
  import { fileURLToPath } from 'node:url';
9
+ import { createInterface } from 'node:readline/promises';
10
+
11
+ import {
12
+ CHANNEL_DEFINITIONS,
13
+ SKILL_SUMMARIES,
14
+ buildRazelConfigBootstrap,
15
+ classifyPythonInstallFailure,
16
+ createInstallContext,
17
+ evaluateChannelDetection,
18
+ shouldDryRun,
19
+ } from './install-lib.mjs';
8
20
 
9
21
  const __filename = fileURLToPath(import.meta.url);
10
22
  const __dirname = dirname(__filename);
23
+ const PKG_ROOT = resolve(__dirname, '..');
11
24
 
12
- // ─── 颜色辅助 ───
13
25
  const bold = (s) => `\x1b[1m${s}\x1b[0m`;
14
- const green = (s) => `\x1b[32m${s}\x1b[0m`;
15
- const yellow = (s) => `\x1b[33m${s}\x1b[0m`;
16
- const red = (s) => `\x1b[31m${s}\x1b[0m`;
17
- const cyan = (s) => `\x1b[36m${s}\x1b[0m`;
26
+ const green = (s) => `\x1b[92m${s}\x1b[0m`;
27
+ const yellow = (s) => `\x1b[93m${s}\x1b[0m`;
28
+ const red = (s) => `\x1b[91m${s}\x1b[0m`;
29
+ const cyan = (s) => `\x1b[96m${s}\x1b[0m`;
30
+ const dim = (s) => `\x1b[97m${s}\x1b[0m`;
18
31
 
19
- // ─── 跨平台 npx 路径 ───
20
32
  const isWin = process.platform === 'win32';
21
- const NPX = isWin ? 'npx.cmd' : 'npx';
33
+ const NPM = 'npm';
34
+ const PIP = isWin ? 'pip' : 'pip3';
35
+ const DRY_RUN = shouldDryRun(process.argv);
36
+
37
+ function step(index, total, title) {
38
+ console.log('');
39
+ console.log(bold(`📦 阶段 ${index}/${total}: ${title}`));
40
+ console.log('');
41
+ }
22
42
 
23
- // ─── 等待子进程结束的 Promise 包装 ───
24
- function runCommand(cmd, args) {
43
+ function run(cmd, args, opts = {}) {
44
+ if (DRY_RUN) {
45
+ console.log(dim(` [dry-run] ${cmd} ${args.join(' ')}`));
46
+ return Promise.resolve(0);
47
+ }
25
48
  return new Promise((resolve) => {
26
- const child = spawn(cmd, args, { stdio: 'inherit' });
49
+ const child = spawn(cmd, args, { stdio: 'inherit', shell: isWin, ...opts });
27
50
  child.on('close', (code) => resolve(code ?? 1));
28
51
  child.on('error', (err) => {
29
- console.log(yellow(` 进程启动失败: ${err.message}`));
52
+ console.log(yellow(`进程启动失败: ${err.message}`));
30
53
  resolve(1);
31
54
  });
32
55
  });
33
56
  }
34
57
 
35
- // ─── 步骤 1: 欢迎信息 ───
36
- console.log('');
37
- console.log(bold('🦀 网易智企寄居蟹 Skill 一键安装器'));
38
- console.log('');
39
- console.log('将自动完成以下步骤:');
40
- console.log(cyan(' 1. 安装寄居蟹智能客服 Skill'));
41
- console.log(cyan(' 2. 安装飞书 OpenClaw 插件并绑定机器人(二维码)'));
42
- console.log('');
43
- console.log(''.repeat(50));
44
- console.log('');
58
+ function runCapture(cmd, args, opts = {}) {
59
+ return new Promise((resolve) => {
60
+ const child = spawn(cmd, args, { stdio: ['ignore', 'pipe', 'pipe'], shell: isWin, ...opts });
61
+ let stdout = '';
62
+ let stderr = '';
63
+ child.stdout?.on('data', (chunk) => { stdout += chunk.toString(); });
64
+ child.stderr?.on('data', (chunk) => { stderr += chunk.toString(); });
65
+ child.on('close', (code) => resolve({ code: code ?? 1, stdout, stderr }));
66
+ child.on('error', (err) => resolve({ code: 1, stdout, stderr: err.message }));
67
+ });
68
+ }
69
+
70
+ function commandExists(cmd) {
71
+ return new Promise((resolve) => {
72
+ const check = isWin ? 'where' : 'which';
73
+ const child = spawn(check, [cmd], { stdio: 'ignore', shell: isWin });
74
+ child.on('close', (code) => resolve(code === 0));
75
+ child.on('error', () => resolve(false));
76
+ });
77
+ }
78
+
79
+ function contextResult(context, key, value) {
80
+ context.results[key] = value;
81
+ }
82
+
83
+ function readJson(filePath) {
84
+ try {
85
+ return JSON.parse(readFileSync(filePath, 'utf8'));
86
+ } catch {
87
+ return null;
88
+ }
89
+ }
90
+
91
+ function findDesktopApps(appNames = []) {
92
+ const roots = [
93
+ '/Applications',
94
+ join(homedir(), 'Applications'),
95
+ ];
96
+ const matches = [];
97
+ for (const appName of appNames) {
98
+ for (const root of roots) {
99
+ const appPath = join(root, appName);
100
+ if (existsSync(appPath)) {
101
+ matches.push(appPath);
102
+ }
103
+ }
104
+ }
105
+ return [...new Set(matches)];
106
+ }
107
+
108
+ function detectDesktopClients() {
109
+ const candidates = {
110
+ feishu: ['Feishu.app', 'Lark.app', '飞书.app'],
111
+ dingtalk: ['DingTalk.app', '钉钉.app'],
112
+ wecom: ['企业微信.app', 'WeCom.app', 'WeChatWork.app'],
113
+ };
114
+
115
+ return Object.fromEntries(
116
+ Object.entries(candidates).map(([key, names]) => {
117
+ const installedPaths = findDesktopApps(names);
118
+ return [key, {
119
+ installed: installedPaths.length > 0,
120
+ installedPaths,
121
+ }];
122
+ }),
123
+ );
124
+ }
125
+
126
+ async function confirmPrompt(message, defaultYes = true) {
127
+ if (DRY_RUN || !process.stdin.isTTY) {
128
+ return defaultYes;
129
+ }
130
+
131
+ const rl = createInterface({
132
+ input: process.stdin,
133
+ output: process.stdout,
134
+ });
135
+ const answer = (await rl.question(message)).trim().toLowerCase();
136
+ rl.close();
137
+
138
+ if (!answer) {
139
+ return defaultYes;
140
+ }
141
+ return answer === 'y' || answer === 'yes';
142
+ }
143
+
144
+ function resolveChannelClientInfo(channelKey, desktopClients) {
145
+ if (!desktopClients) return { installed: false, displayName: '' };
146
+ if (channelKey === 'lark') return { installed: desktopClients.feishu.installed, displayName: '飞书' };
147
+ if (channelKey === 'dingtalk') return { installed: desktopClients.dingtalk.installed, displayName: '钉钉' };
148
+ if (channelKey === 'wecom') return { installed: desktopClients.wecom.installed, displayName: '企业微信' };
149
+ return { installed: false, displayName: '' };
150
+ }
151
+
152
+ async function ensureCommand(command, installArgs, resultKey, context, initArgs = []) {
153
+ if (await commandExists(command)) {
154
+ console.log(dim(` ↺ 已检测到 ${command},跳过安装`));
155
+ contextResult(context, resultKey, 'reused');
156
+ return;
157
+ }
158
+
159
+ const installCode = await run(installArgs[0], installArgs.slice(1));
160
+ if (installCode !== 0) {
161
+ console.log(yellow(` ⚠️ ${command} 安装失败`));
162
+ contextResult(context, resultKey, 'failed');
163
+ return;
164
+ }
165
+
166
+ console.log(green(` ✅ ${command} 安装成功`));
167
+
168
+ if (initArgs.length > 0) {
169
+ console.log(dim(' 正在初始化...'));
170
+ const initCode = await run(command, initArgs);
171
+ contextResult(context, resultKey, initCode === 0 ? 'ok' : 'installed (init failed)');
172
+ return;
173
+ }
174
+
175
+ contextResult(context, resultKey, 'ok');
176
+ }
177
+
178
+ async function installPythonCli(context) {
179
+ const hasPython = await commandExists('python3');
180
+ const hasPython313 = await commandExists('python3.13');
181
+ const hasPip = await commandExists(PIP);
182
+ const hasPipx = await commandExists('pipx');
183
+
184
+ if (!hasPython) {
185
+ console.log(yellow(` ⚠️ 缺少 python3,请先安装 Python 3`));
186
+ contextResult(context, 'python3', hasPython ? 'reused' : 'missing');
187
+ contextResult(context, 'pip', hasPip ? 'reused' : 'missing');
188
+ contextResult(context, 'pipx', hasPipx ? 'reused' : 'missing');
189
+ contextResult(context, 'razel-py-cli', 'skipped (missing python3)');
190
+ return;
191
+ }
192
+
193
+ contextResult(context, 'python3', 'reused');
194
+ contextResult(context, 'pip', 'reused');
195
+ contextResult(context, 'pipx', hasPipx ? 'reused' : 'missing');
196
+
197
+ if (await commandExists('razel-py-cli')) {
198
+ console.log(dim(' ↺ 已检测到 razel-py-cli,跳过安装'));
199
+ contextResult(context, 'razel-py-cli', 'reused');
200
+ return;
201
+ }
202
+
203
+ if (!hasPipx) {
204
+ console.log(yellow(' ⚠️ 未检测到 pipx,建议先安装 pipx 后再安装 razel-py-cli'));
205
+ if (hasPip) {
206
+ const classification = classifyPythonInstallFailure('externally-managed-environment');
207
+ console.log(dim(` 提示: ${classification.message}`));
208
+ }
209
+ contextResult(context, 'razel-py-cli', 'blocked (pipx missing)');
210
+ return;
211
+ }
212
+
213
+ const pipxPython = hasPython313 ? 'python3.13' : 'python3';
214
+ if (hasPython313) {
215
+ console.log(dim(' 已检测到 python3.13,pipx 将优先使用 python3.13 安装 razel-py-cli'));
216
+ } else {
217
+ console.log(dim(' 未检测到 python3.13,pipx 将使用默认 python3 安装 razel-py-cli'));
218
+ }
219
+
220
+ const pipxCode = await run('pipx', ['install', '--python', pipxPython, 'razel-py-cli']);
221
+ if (pipxCode !== 0) {
222
+ console.log(yellow(` ⚠️ razel-py-cli 通过 pipx 安装失败 (python=${pipxPython})`));
223
+ contextResult(context, 'razel-py-cli', 'failed (pipx)');
224
+ return;
225
+ }
226
+
227
+ console.log(green(' ✅ razel-py-cli 通过 pipx 安装成功'));
228
+ console.log(dim(' 正在初始化...'));
229
+ const initCode = await run('razel-py-cli', ['init']);
230
+ contextResult(context, 'razel-py-cli', initCode === 0 ? 'ok' : 'installed via pipx (init failed)');
231
+ }
232
+
233
+ async function applyConfigWrites(writes) {
234
+ let applied = 0;
235
+ const successKeys = new Set();
236
+
237
+ for (const write of writes) {
238
+ console.log(dim(` 准备写入 ${write.key} (${write.cli} config set)`));
239
+ const code = await run(write.cli, ['config', 'set', write.key, write.value]);
240
+ if (code === 0) {
241
+ applied += 1;
242
+ successKeys.add(write.key);
243
+ continue;
244
+ }
245
+ console.log(yellow(` ⚠️ ${write.cli} config set ${write.key} 执行失败`));
246
+ }
247
+
248
+ return { applied, successKeys };
249
+ }
250
+
251
+ function printConfigGuidance(missing) {
252
+ if (missing.length === 0) {
253
+ return;
254
+ }
255
+
256
+ console.log('');
257
+ console.log(yellow(' 仍有配置项缺失,可直接使用以下命令继续补齐:'));
258
+ for (const item of missing) {
259
+ console.log(dim(` • ${item.title}`));
260
+ for (const command of item.commands) {
261
+ console.log(cyan(` ${command}`));
262
+ }
263
+ }
264
+ }
265
+
266
+ function resolveMissingAfterWrites(missing, successKeys, options = {}) {
267
+ const has = (key) => successKeys.has(key);
268
+ const { skipPopo = false } = options;
269
+
270
+ return missing.filter((item) => {
271
+ if (item.group === 'popo') {
272
+ if (skipPopo) {
273
+ return false;
274
+ }
275
+ return !(has('popo_app_id') && has('popo_app_secret'));
276
+ }
277
+ if (item.group === 'llm') {
278
+ return !(has('llm_base_url') && has('llm_api_key'));
279
+ }
280
+ if (item.group === 'asr') {
281
+ const hasDashscope = has('dashscope_api_key');
282
+ const hasLocal = has('local_server');
283
+ const hasAigw = has('aigw_base_url') && has('aigw_api_key');
284
+ return !(hasDashscope || hasLocal || hasAigw);
285
+ }
286
+ return true;
287
+ });
288
+ }
289
+
290
+ async function collectInteractiveConfigWrites(missing, options = {}) {
291
+ const { hasPopoConfigured = false } = options;
292
+ if (!process.stdin.isTTY || DRY_RUN || missing.length === 0) {
293
+ return { writes: [], skipPopo: false };
294
+ }
295
+
296
+ const rl = createInterface({
297
+ input: process.stdin,
298
+ output: process.stdout,
299
+ });
300
+
301
+ const ask = async (prompt) => (await rl.question(prompt)).trim();
302
+ const askYesNo = async (prompt, defaultNo = true) => {
303
+ const raw = (await ask(prompt)).toLowerCase();
304
+ if (!raw) {
305
+ return !defaultNo;
306
+ }
307
+ return raw === 'y' || raw === 'yes';
308
+ };
309
+
310
+ const writes = [];
311
+ const hasGroup = (group) => missing.some((item) => item.group === group);
312
+
313
+ console.log(dim(' 检测到关键配置缺失,可现在交互配置(支持跳过)'));
314
+ const shouldConfigure = await askYesNo(' 现在进入配置向导吗?[y/N] ', true);
315
+ if (!shouldConfigure) {
316
+ rl.close();
317
+ return { writes: [], skipPopo: false };
318
+ }
319
+
320
+ if (hasGroup('llm')) {
321
+ console.log(dim(' [LLM] 回车可跳过'));
322
+ const baseUrl = await ask(' llm_base_url: ');
323
+ const apiKey = await ask(' llm_api_key: ');
324
+ if (baseUrl && apiKey) {
325
+ writes.push({ cli: 'razel-py-cli', key: 'llm_base_url', value: baseUrl });
326
+ writes.push({ cli: 'razel-py-cli', key: 'llm_api_key', value: apiKey });
327
+ }
328
+ }
45
329
 
46
- // ─── 步骤 2: 安装 smart-customer-service Skill ───
47
- console.log(bold('📂 步骤 1/2: 安装寄居蟹智能客服 Skill...'));
48
- console.log('');
330
+ if (hasGroup('asr')) {
331
+ console.log(dim(' [语音转写] speed-to-text 需要配置语音转文字服务'));
332
+ console.log(dim(' [ASR] 选择 provider,回车跳过'));
333
+ console.log(dim(' 1) DashScope 2) AIGW 3) Local Server'));
334
+ const provider = await ask(' 请选择 [1/2/3, skip=Enter]: ');
49
335
 
50
- const skillName = 'smart-customer-service';
51
- const srcDir = join(__dirname, '..', 'skills', skillName);
52
- const destBase = join(homedir(), '.openclaw', 'skills');
53
- const destDir = join(destBase, skillName);
336
+ if (provider === '1') {
337
+ const dashscopeKey = await ask(' dashscope_api_key: ');
338
+ if (dashscopeKey) {
339
+ writes.push({ cli: 'razel-py-cli', key: 'dashscope_api_key', value: dashscopeKey });
340
+ }
341
+ } else if (provider === '2') {
342
+ const aigwBaseUrl = await ask(' aigw_base_url: ');
343
+ const aigwApiKey = await ask(' aigw_api_key: ');
344
+ if (aigwBaseUrl && aigwApiKey) {
345
+ writes.push({ cli: 'razel-py-cli', key: 'aigw_base_url', value: aigwBaseUrl });
346
+ writes.push({ cli: 'razel-py-cli', key: 'aigw_api_key', value: aigwApiKey });
347
+ }
348
+ } else if (provider === '3') {
349
+ const localServer = await ask(' local_server: ');
350
+ if (localServer) {
351
+ writes.push({ cli: 'razel-py-cli', key: 'local_server', value: localServer });
352
+ }
353
+ }
354
+ }
355
+
356
+ let skipPopo = false;
357
+ const wantsPopoConfig = await askYesNo(' 是否需要配置 PoPo-doc / PoPo 机器人?[y/N] ', true);
358
+ if (wantsPopoConfig) {
359
+ let shouldCollectPopo = true;
360
+ if (hasPopoConfigured) {
361
+ shouldCollectPopo = await askYesNo(' 已检测到现有 PoPo 配置,是否覆盖?[y/N] ', true);
362
+ }
363
+ if (shouldCollectPopo) {
364
+ console.log(dim(' [PoPo] 回车可跳过'));
365
+ const appId = await ask(' popo_app_id: ');
366
+ const appSecret = await ask(' popo_app_secret: ');
367
+ if (appId && appSecret) {
368
+ writes.push({ cli: 'razel-cli', key: 'popo_app_id', value: appId });
369
+ writes.push({ cli: 'razel-cli', key: 'popo_app_secret', value: appSecret });
370
+ }
371
+ }
372
+ } else if (hasGroup('popo')) {
373
+ skipPopo = true;
374
+ console.log(dim(' 已选择跳过 PoPo 服务配置'));
375
+ }
54
376
 
55
- let skillInstallSuccess = true;
377
+ rl.close();
378
+ return { writes, skipPopo };
379
+ }
56
380
 
57
- try {
58
- if (!existsSync(srcDir)) {
59
- throw new Error(`源 Skill 目录不存在: ${srcDir}`);
381
+ async function inspectChannel(definition) {
382
+ const commands = [];
383
+ for (const cmd of definition.detectCommands) {
384
+ if (await commandExists(cmd)) {
385
+ commands.push(cmd);
386
+ }
60
387
  }
61
388
 
62
- if (!existsSync(destBase)) {
63
- mkdirSync(destBase, { recursive: true });
64
- console.log(` 创建目录: ${destBase}`);
389
+ const configPaths = definition.configPaths.filter((configPath) => existsSync(configPath));
390
+ const envVars = definition.envVars.filter((key) => Boolean(process.env[key]));
391
+ const desktopApps = findDesktopApps(definition.desktopAppCandidates ?? []);
392
+
393
+ const openclawConfigPath = join(homedir(), '.openclaw', 'openclaw.json');
394
+ const openclawConfig = readJson(openclawConfigPath);
395
+ if ((definition.label === '飞书' || definition.label === 'Lark') && openclawConfig?.channels?.feishu) {
396
+ configPaths.push(`${openclawConfigPath}#channels.feishu`);
65
397
  }
66
398
 
67
- if (existsSync(destDir)) {
68
- console.log(` 检测到已有版本,正在更新...`);
69
- rmSync(destDir, { recursive: true, force: true });
399
+ return { commands, configPaths, envVars, desktopApps };
400
+ }
401
+
402
+ async function detectChannel(definition) {
403
+ return evaluateChannelDetection(definition, await inspectChannel(definition));
404
+ }
405
+
406
+ async function runFirstAvailable(candidates) {
407
+ for (const [cmd, args] of candidates) {
408
+ if (await commandExists(cmd)) {
409
+ const code = await run(cmd, args);
410
+ if (code === 0) {
411
+ return { ok: true, command: cmd, args };
412
+ }
413
+ }
70
414
  }
415
+ return { ok: false };
416
+ }
71
417
 
72
- cpSync(srcDir, destDir, {
73
- recursive: true,
74
- filter: (src) => {
75
- const name = src.split('/').pop();
76
- if (name === '.DS_Store') return false;
77
- if (name === '__MACOSX') return false;
418
+ async function hasRuntimeCommand(definition) {
419
+ for (const cmd of definition.runtimeCommands) {
420
+ if (await commandExists(cmd)) {
78
421
  return true;
79
- },
422
+ }
423
+ }
424
+ return false;
425
+ }
426
+
427
+ async function getFirstAvailableRuntime(definition) {
428
+ for (const cmd of definition.runtimeCommands) {
429
+ if (await commandExists(cmd)) {
430
+ return cmd;
431
+ }
432
+ }
433
+ return null;
434
+ }
435
+
436
+ async function inferChannelActivation(channelKey) {
437
+ const definition = CHANNEL_DEFINITIONS[channelKey];
438
+ const details = await inspectChannel(definition);
439
+ const runtimeCommand = await getFirstAvailableRuntime(definition);
440
+
441
+ const hasConfigHints = details.configPaths.length > 0 || details.envVars.length > 0 || details.desktopApps.length > 0;
442
+ const hasRuntime = Boolean(runtimeCommand);
443
+
444
+ if (channelKey === 'lark') {
445
+ const openclawConfig = readJson(join(homedir(), '.openclaw', 'openclaw.json'));
446
+ const feishuConfig = openclawConfig?.channels?.feishu;
447
+ const hasFeishuAccount = Boolean(
448
+ feishuConfig?.enabled && (feishuConfig?.appId || feishuConfig?.accounts?.main?.appId),
449
+ );
450
+
451
+ if (hasRuntime && hasFeishuAccount) {
452
+ return {
453
+ status: 'configured',
454
+ message: `Lark 已存在可用配置 (${runtimeCommand})`,
455
+ };
456
+ }
457
+ }
458
+
459
+ if (channelKey === 'dingtalk') {
460
+ const hasCreds = details.envVars.includes('DWS_CLIENT_ID') && details.envVars.includes('DWS_CLIENT_SECRET');
461
+ const hasLocalState = details.configPaths.some((configPath) => configPath.includes('.dws'));
462
+
463
+ if (hasRuntime && (hasCreds || hasLocalState)) {
464
+ return {
465
+ status: 'configured',
466
+ message: `DingTalk 已存在运行与认证线索 (${runtimeCommand})`,
467
+ };
468
+ }
469
+ }
470
+
471
+ if (hasRuntime && hasConfigHints) {
472
+ return {
473
+ status: 'detected_uninitialized',
474
+ message: `${definition.label} 已检测到,存在配置线索但未确认完成初始化`,
475
+ };
476
+ }
477
+
478
+ if (hasRuntime) {
479
+ return {
480
+ status: 'runtime_only',
481
+ message: `${definition.label} 已检测到运行入口 ${runtimeCommand},但尚无明确配置线索`,
482
+ };
483
+ }
484
+
485
+ if (hasConfigHints) {
486
+ return {
487
+ status: 'hinted',
488
+ message: `${definition.label} 仍只有环境线索,尚未形成可用运行入口`,
489
+ };
490
+ }
491
+
492
+ return {
493
+ status: 'absent',
494
+ message: `${definition.label} 未检测到可用状态`,
495
+ };
496
+ }
497
+
498
+ async function bootstrapChannel(channelKey, context) {
499
+ const definition = CHANNEL_DEFINITIONS[channelKey];
500
+ const detection = await detectChannel(definition);
501
+ context.channels[channelKey] = detection;
502
+ const clientInfo = resolveChannelClientInfo(channelKey, context.desktopClients);
503
+
504
+ const shouldReuse = channelKey === 'lark'
505
+ ? true
506
+ : detection.status === 'ready' || detection.status === 'hinted';
507
+ if (!shouldReuse) {
508
+ console.log(dim(` • ${definition.label}: 未检测到环境线索,跳过`));
509
+ return;
510
+ }
511
+
512
+ console.log(cyan(` • ${definition.label}: ${detection.message}`));
513
+
514
+ const shouldStartBinding = await confirmPrompt(
515
+ ` 是否现在为${clientInfo.displayName || definition.label}安装/绑定机器人?[Y/n] `,
516
+ true,
517
+ );
518
+ if (!shouldStartBinding) {
519
+ context.channels[channelKey] = {
520
+ status: 'skipped-by-choice',
521
+ source: detection.source,
522
+ message: `已跳过${definition.label}机器人绑定`,
523
+ };
524
+ return;
525
+ }
526
+
527
+ if (channelKey === 'lark') {
528
+ const [installCmd, installArgs] = definition.installCommand;
529
+ console.log(dim(` 按官方流程执行 ${definition.label} 绑定(二维码创建/关联机器人)...`));
530
+ const installCode = await run(installCmd, installArgs);
531
+ if (installCode !== 0) {
532
+ context.channels[channelKey] = {
533
+ status: 'failed',
534
+ source: detection.source,
535
+ message: `${definition.label} 绑定流程失败(${installCmd} ${installArgs.join(' ')})`,
536
+ };
537
+ return;
538
+ }
539
+
540
+ const activated = await inferChannelActivation(channelKey);
541
+ context.channels[channelKey] = {
542
+ status: DRY_RUN ? 'would-enter-binding' : 'binding-flow-entered',
543
+ source: detection.source,
544
+ message: DRY_RUN
545
+ ? `${definition.label} 将执行官方绑定流程 (${installCmd} ${installArgs.join(' ')})`
546
+ : `${definition.label} 已执行官方绑定流程 (${installCmd} ${installArgs.join(' ')});${activated.message}`,
547
+ };
548
+ return;
549
+ }
550
+
551
+ let runtimeCommand = await getFirstAvailableRuntime(definition);
552
+ if (!runtimeCommand && detection.status === 'hinted') {
553
+ const [installCmd, installArgs] = definition.installCommand;
554
+ console.log(dim(` 未发现可用运行入口,按官方方式安装 ${definition.label}...`));
555
+ const installCode = await run(installCmd, installArgs);
556
+ if (installCode !== 0) {
557
+ context.channels[channelKey] = {
558
+ status: 'failed',
559
+ source: detection.source,
560
+ message: `${definition.label} 官方安装失败`,
561
+ };
562
+ return;
563
+ }
564
+ runtimeCommand = await getFirstAvailableRuntime(definition);
565
+ }
566
+
567
+ if (!runtimeCommand) {
568
+ context.channels[channelKey] = {
569
+ status: 'failed',
570
+ source: detection.source,
571
+ message: `${definition.label} 缺少可执行入口,无法继续初始化`,
572
+ };
573
+ return;
574
+ }
575
+
576
+ console.log(dim(` 复用现有 ${definition.label} 入口: ${runtimeCommand}`));
577
+
578
+ const initResult = await runFirstAvailable(definition.initCandidates);
579
+ if (initResult.ok) {
580
+ const activated = await inferChannelActivation(channelKey);
581
+ const flowLabel = channelKey === 'lark'
582
+ ? '飞书绑定流程'
583
+ : channelKey === 'dingtalk'
584
+ ? '钉钉登录流程'
585
+ : '引导流程';
586
+ context.channels[channelKey] = {
587
+ status: DRY_RUN
588
+ ? 'would-enter-binding'
589
+ : (activated.status === 'configured' ? 'binding-flow-entered' : activated.status),
590
+ source: detection.source,
591
+ message: DRY_RUN
592
+ ? `${definition.label} 将复用现有入口并进入${flowLabel} (${initResult.command} ${initResult.args.join(' ')})`
593
+ : `${definition.label} 已复用现有入口并进入${flowLabel} (${initResult.command} ${initResult.args.join(' ')});${activated.message}`,
594
+ };
595
+ return;
596
+ }
597
+
598
+ const qrResult = await runFirstAvailable(definition.qrCandidates);
599
+ if (qrResult.ok) {
600
+ const activated = await inferChannelActivation(channelKey);
601
+ context.channels[channelKey] = {
602
+ status: activated.status === 'configured' ? 're-onboarded' : 'waiting_auth',
603
+ source: detection.source,
604
+ message: activated.status === 'configured'
605
+ ? `${definition.label} 已复用现有入口并执行二维码引导;${activated.message}`
606
+ : `${definition.label} 已拉起二维码流程,请完成扫码授权`,
607
+ };
608
+ return;
609
+ }
610
+
611
+ const activated = await inferChannelActivation(channelKey);
612
+ context.channels[channelKey] = {
613
+ status: activated.status,
614
+ source: detection.source,
615
+ message: `${activated.message};未找到可用初始化命令,尚未完成新的引导流程`,
616
+ };
617
+ }
618
+
619
+ async function runPreflight(context) {
620
+ console.log(dim(` 平台: ${context.platform}`));
621
+ if (DRY_RUN) {
622
+ console.log(dim(' 模式: dry-run(只展示流程,不执行变更)'));
623
+ }
624
+ console.log(dim(` OpenClaw: ${await commandExists('openclaw') ? 'detected' : 'missing'}`));
625
+
626
+ context.channels.lark = await detectChannel(CHANNEL_DEFINITIONS.lark);
627
+ context.channels.dingtalk = await detectChannel(CHANNEL_DEFINITIONS.dingtalk);
628
+ context.channels.wecom = await detectChannel(CHANNEL_DEFINITIONS.wecom);
629
+ context.desktopClients = detectDesktopClients();
630
+
631
+ console.log(dim(` 飞书: ${context.channels.lark.message}`));
632
+ console.log(dim(` 钉钉: ${context.channels.dingtalk.message}`));
633
+ console.log(dim(` 企业微信: ${context.channels.wecom.message}`));
634
+ }
635
+
636
+ async function runCoreInstall(context) {
637
+ await installPythonCli(context);
638
+ await ensureCommand('razel-cli', [NPM, 'install', '-g', '@lcap-delivery/razel-cli@latest'], 'razel-cli', context, ['init']);
639
+ }
640
+
641
+ async function runConfigBootstrap(context) {
642
+ const razelConfigPath = join(homedir(), '.razel', 'config.json');
643
+ const razelConfig = readJson(razelConfigPath) || {};
644
+ const openclawConfig = readJson(join(homedir(), '.openclaw', 'openclaw.json'));
645
+ const plan = buildRazelConfigBootstrap({
646
+ razelConfig,
647
+ env: process.env,
648
+ hasOpenclawLlm: Boolean(openclawConfig?.providers || openclawConfig?.model || openclawConfig?.models),
80
649
  });
81
650
 
82
- console.log(green(` ✅ Skill 已安装到: ~/.openclaw/skills/${skillName}/`));
83
- } catch (err) {
84
- skillInstallSuccess = false;
85
- console.log(red(` ❌ Skill 安装失败: ${err.message}`));
651
+ if (plan.writes.length === 0 && plan.missing.length === 0) {
652
+ console.log(dim(' ↺ 已检测到关键配置,跳过 config bootstrap'));
653
+ contextResult(context, 'razel-config', 'reused');
654
+ return;
655
+ }
656
+
657
+ let applied = 0;
658
+ const successKeys = new Set();
659
+ if (plan.writes.length > 0) {
660
+ const result = await applyConfigWrites(plan.writes);
661
+ applied += result.applied;
662
+ for (const key of result.successKeys) {
663
+ successKeys.add(key);
664
+ }
665
+ }
666
+
667
+ const hasPopoConfigured = Boolean(razelConfig.popo_app_id && razelConfig.popo_app_secret);
668
+ const interactive = await collectInteractiveConfigWrites(plan.missing, { hasPopoConfigured });
669
+ if (interactive.writes.length > 0) {
670
+ const result = await applyConfigWrites(interactive.writes);
671
+ applied += result.applied;
672
+ for (const key of result.successKeys) {
673
+ successKeys.add(key);
674
+ }
675
+ }
676
+
677
+ const remainingMissing = resolveMissingAfterWrites(plan.missing, successKeys, { skipPopo: interactive.skipPopo });
678
+ context.configGuidance = remainingMissing;
679
+ if (applied > 0 && remainingMissing.length === 0) {
680
+ contextResult(context, 'razel-config', `synced ${applied} key(s)`);
681
+ } else if (applied > 0) {
682
+ contextResult(context, 'razel-config', `synced ${applied} key(s), guidance needed`);
683
+ } else if (remainingMissing.length > 0) {
684
+ contextResult(context, 'razel-config', 'guidance needed');
685
+ } else {
686
+ contextResult(context, 'razel-config', 'reused');
687
+ }
688
+
689
+ printConfigGuidance(remainingMissing);
86
690
  }
87
691
 
88
- console.log('');
89
- console.log(''.repeat(50));
90
- console.log('');
692
+ async function runExtensionInstall(context) {
693
+ const extensionId = 'codewave-toolkit';
694
+ const extensionsDir = join(homedir(), '.openclaw', 'extensions');
695
+ const extensionTarget = join(extensionsDir, extensionId);
696
+ const pluginJsonPath = join(PKG_ROOT, 'openclaw.plugin.json');
697
+ const skillsDir = join(PKG_ROOT, 'skills');
698
+
699
+ if (!existsSync(extensionsDir)) {
700
+ mkdirSync(extensionsDir, { recursive: true });
701
+ }
702
+
703
+ if (!existsSync(pluginJsonPath)) {
704
+ console.log(red(' ❌ 包结构异常: 缺少 openclaw.plugin.json'));
705
+ contextResult(context, 'extension', 'failed (missing manifest)');
706
+ return;
707
+ }
708
+
709
+ if (!existsSync(skillsDir)) {
710
+ console.log(red(' ❌ 包结构异常: 缺少 skills/ 目录'));
711
+ contextResult(context, 'extension', 'failed (missing skills)');
712
+ return;
713
+ }
714
+
715
+ try {
716
+ if (existsSync(extensionTarget)) {
717
+ const stat = lstatSync(extensionTarget);
718
+ if (stat.isSymbolicLink()) {
719
+ unlinkSync(extensionTarget);
720
+ } else {
721
+ rmSync(extensionTarget, { recursive: true, force: true });
722
+ }
723
+ }
724
+ } catch {
725
+ // ignore cleanup errors and rely on copy failure if target remains invalid
726
+ }
91
727
 
92
- // ─── 步骤 3: 安装飞书 OpenClaw 插件 ───
93
- console.log(bold('📦 步骤 2/2: 安装飞书 OpenClaw 插件...'));
94
- console.log('');
728
+ if (DRY_RUN) {
729
+ console.log(dim(` [dry-run] 将复制 ${PKG_ROOT} ${extensionTarget}`));
730
+ contextResult(context, 'extension', 'dry-run');
731
+ console.log('');
732
+ console.log(dim(' Skills 将由 OpenClaw 自动从扩展目录加载:'));
733
+ for (const skill of SKILL_SUMMARIES) {
734
+ console.log(dim(` • ${skill}`));
735
+ }
736
+ return;
737
+ }
95
738
 
96
- const exitCode = await runCommand(NPX, ['-y', '@larksuite/openclaw-lark', 'install']);
97
- const larkInstallSuccess = exitCode === 0;
739
+ try {
740
+ cpSync(PKG_ROOT, extensionTarget, {
741
+ recursive: true,
742
+ filter: (src) => {
743
+ const base = path.basename(src);
744
+ return base !== 'node_modules'
745
+ && base !== '.git'
746
+ && base !== '.DS_Store'
747
+ && base !== '__MACOSX';
748
+ },
749
+ });
750
+ console.log(green(' ✅ OpenClaw 扩展安装成功'));
751
+ console.log(dim(` 路径: ${extensionTarget}`));
752
+ contextResult(context, 'extension', 'ok');
753
+ } catch (err) {
754
+ console.log(red(` ❌ 复制失败: ${err.message}`));
755
+ contextResult(context, 'extension', 'failed');
756
+ }
98
757
 
99
- if (larkInstallSuccess) {
100
758
  console.log('');
101
- console.log(green(' 飞书插件安装完成'));
102
- } else {
759
+ console.log(dim(' Skills 将由 OpenClaw 自动从扩展目录加载:'));
760
+ for (const skill of SKILL_SUMMARIES) {
761
+ console.log(dim(` • ${skill}`));
762
+ }
763
+ }
764
+
765
+ async function runPostflight(context) {
766
+ if (DRY_RUN) {
767
+ contextResult(context, 'gateway-restart', 'dry-run');
768
+ console.log(dim(' [dry-run] 跳过 gateway restart 与 postflight check 执行'));
769
+ return;
770
+ }
771
+
772
+ if (!(await commandExists('openclaw'))) {
773
+ console.log(yellow(' ⚠️ openclaw 命令未找到,请手动重启'));
774
+ contextResult(context, 'gateway-restart', 'skipped (no openclaw)');
775
+ } else {
776
+ const code = await run('openclaw', ['gateway', 'restart']);
777
+ contextResult(context, 'gateway-restart', code === 0 ? 'ok' : 'skipped');
778
+ }
779
+
780
+ const checkResult = await runCapture(process.execPath, [join(PKG_ROOT, 'bin', 'check.mjs'), '--json']);
781
+ if (checkResult.stdout) {
782
+ try {
783
+ context.postflight = JSON.parse(checkResult.stdout);
784
+ console.log(dim(` postflight: ${context.postflight.summary.ok}/${context.postflight.summary.total} 个 Skill 就绪`));
785
+ } catch {
786
+ console.log(yellow(' ⚠️ postflight 输出无法解析为 JSON'));
787
+ }
788
+ }
789
+ }
790
+
791
+ async function main() {
792
+ const context = createInstallContext(process.platform);
793
+
794
+ console.log('');
795
+ console.log(bold('🦀 网易智企 CodeWave OpenClaw 扩展安装器 v3.0'));
103
796
  console.log('');
104
- console.log(yellow('⚠️ 飞书插件安装未成功(可能已安装过,或手动取消)'));
105
- }
106
-
107
- // ─── 步骤 4: 完成提示 ───
108
- console.log('');
109
- console.log('─'.repeat(50));
110
- console.log('');
111
- console.log(bold(green('🦀 安装完成!')));
112
- console.log('');
113
- console.log(` - 寄居蟹智能客服 Skill: ${skillInstallSuccess ? green('已安装到 ~/.openclaw/skills/smart-customer-service/') : red('安装失败')}`);
114
- console.log(` - 飞书插件: ${larkInstallSuccess ? green('已安装') : yellow('跳过(请手动安装)')}`);
115
- console.log('');
116
- console.log(' 请在飞书中与机器人对话测试!');
117
- console.log('');
797
+ console.log('将自动完成以下阶段:');
798
+ for (let i = 0; i < context.phases.length; i++) {
799
+ console.log(cyan(` ${i + 1}. ${context.phases[i]}`));
800
+ }
801
+ console.log('');
802
+ console.log('─'.repeat(55));
803
+
804
+ step(1, context.phases.length, context.phases[0]);
805
+ await runPreflight(context);
806
+
807
+ step(2, context.phases.length, context.phases[1]);
808
+ await runCoreInstall(context);
809
+
810
+ step(3, context.phases.length, context.phases[2]);
811
+ await bootstrapChannel('lark', context);
812
+ await bootstrapChannel('dingtalk', context);
813
+ await bootstrapChannel('wecom', context);
814
+
815
+ step(4, context.phases.length, context.phases[3]);
816
+ await runExtensionInstall(context);
817
+
818
+ step(5, context.phases.length, context.phases[4]);
819
+ await runPostflight(context);
820
+
821
+ step(6, context.phases.length, context.phases[5]);
822
+ await runConfigBootstrap(context);
823
+
824
+ console.log('');
825
+ console.log('─'.repeat(55));
826
+ console.log('');
827
+ console.log(bold(green('🦀 安装完成!')));
828
+ console.log('');
829
+ console.log(' 安装结果:');
830
+ for (const [key, value] of Object.entries(context.results)) {
831
+ console.log(` ${key.padEnd(20, ' ')} : ${value}`);
832
+ }
833
+ console.log('');
834
+ console.log(' 渠道状态:');
835
+ console.log(` 飞书 : ${context.channels.lark.status} (${context.channels.lark.message})`);
836
+ console.log(` 钉钉 : ${context.channels.dingtalk.status} (${context.channels.dingtalk.message})`);
837
+ console.log(` 企业微信 : ${context.channels.wecom.status} (${context.channels.wecom.message})`);
838
+ console.log('');
839
+ if (context.configGuidance?.length) {
840
+ console.log(' 待补配置:');
841
+ for (const item of context.configGuidance) {
842
+ console.log(` ${item.group.padEnd(20, ' ')} : ${item.title}`);
843
+ }
844
+ console.log('');
845
+ }
846
+ if (context.postflight) {
847
+ console.log(` Skill 就绪情况: ${context.postflight.summary.ok} ok / ${context.postflight.summary.warn} warn / ${context.postflight.summary.fail} fail`);
848
+ console.log('');
849
+ }
850
+ console.log(' 使用方式:');
851
+ console.log(cyan(' razel-py-cli --help'));
852
+ console.log(cyan(' razel-cli --help'));
853
+ console.log('');
854
+ }
855
+
856
+ main().catch((err) => {
857
+ console.error(red(`Fatal: ${err.message}`));
858
+ process.exit(2);
859
+ });