@ww_nero/skills 2.2.4 → 2.2.6

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.
@@ -517,16 +517,6 @@ def add_image(slide, image_path, x, y, width, height):
517
517
  def add_icon(slide, svg_content, x, y, width, height, scale=2):
518
518
  """
519
519
  添加图标(先将SVG转为PNG再插入)
520
-
521
- 对于 icon 元素,会先将其独立保存为小的 PNG 图片,然后再插入到 PPTX 中。
522
- 这样可以保证矢量图标(如路径、复杂形状)在 PowerPoint 中正确显示。
523
-
524
- 参数:
525
- slide: 幻灯片对象
526
- svg_content: SVG 内容字符串(完整的 SVG 标签或 <g> 元素内容)
527
- x, y: 图标在幻灯片上的位置
528
- width, height: 图标的显示尺寸
529
- scale: 渲染时的放大倍数(提高清晰度,默认2倍)
530
520
  """
531
521
  try:
532
522
  from playwright.sync_api import sync_playwright
package/index.js CHANGED
@@ -61,7 +61,7 @@ const SNIPPETS = {
61
61
  { label: '示例 HTML(ppt_slide.html)', file: 'ppt_slide.html', language: 'html' }
62
62
  ],
63
63
  notes: [
64
- '【Icon 元素处理】对于复杂的 SVG 图标(如 <g id="icon-*"> 元素或包含 path 的小图标),应先将其独立保存为小的 PNG 图片,再插入到 PPTX 中。使用 add_icon(slide, svg_content, x, y, width, height) 函数,它会通过 Playwright 渲染 SVG 并以 2 倍分辨率截图,确保图标在 PowerPoint 中清晰显示。',
64
+ '【Icon 元素处理】对于复杂的 SVG 图标(如 <g id="icon-*"> 元素或包含 path 的小图标),应先将其独立保存为小的 PNG 图片,再插入到 PPTX 中。**不能遗漏任何图标**。',
65
65
  '【文本颜色丢失】python-pptx 设置字体名称时会添加 a:latin/a:ea 等元素,如果颜色填充放在 rPr 末尾会被 PowerPoint 忽略。解决:用 rPr.insert(0, solidFill/gradFill) 将颜色填充插入到 rPr 开头,确保优先级最高。',
66
66
  '【渐变文本失效】设置渐变前必须先清理 a:solidFill、a:gradFill、a:noFill 三种标签,否则会冲突。同时添加 rotWithShape="1" 和 scaled="1" 属性确保渐变方向正确。',
67
67
  '【背景渐变被覆盖】直接操作 slide._element 时,若 p:bg 已存在需先 clear() 再重建,否则新旧元素混杂导致渲染异常。用 cSld.insert(0, bg) 确保背景节点在正确位置。',
@@ -89,11 +89,13 @@ const GUIDES = {
89
89
  - 收集全部图片素材,优先使用用户提供的图片;若未提供,则优先使用网络搜索合适的图片或图标并保存到本地;仍无合适的,则使用图像生成工具生成图片
90
90
  - 将图片素材保存到\`images\`文件夹中,并使用临时python脚本获取每个图片的宽高比例
91
91
  - 对图片素材进行重命名来编号,通过名称标识每个图片用于哪个slide及其宽高比例,例如\`slide_1_1_16_9.png\`表示该图片为第1张Slide中的第1张图,宽高比为16:9
92
+ - 完成后,需要先让用户进行确认规划内容,然后再进行下一步
92
93
 
93
94
  2. **逐页生成SVG代码**:
94
95
  - 对于插图,统一使用\`rect\`或\`circle\`元素进行占位(必须符合图片宽高比例),之后转化成pptx时,在python脚本中换成真实的本地图片
95
96
  - 如果当前系统配置了专门的\`svg\`工具或MCP,则优先使用工具生成高质量的svg代码;若未配置,则直接自行生成svg代码即可
96
97
  - 每一页的svg代码都保存在独立的html文件中
98
+ - 完成后,需要先让用户主动查看并确认布局效果,然后再进行下一步
97
99
 
98
100
  3. **把SVG转成PPTX文件**:
99
101
  - 参考snippet工具中提供的\`svg_to_pptx\`代码示例,编写临时的python脚本,把svg转化成可编辑的pptx文件,不要遗漏任何元素(例如线条、装饰等)
@@ -102,12 +104,7 @@ const GUIDES = {
102
104
  - **不要使用\`BeautifulSoup\`这种通用的解析元素的方式,而是逐个元素从svg代码转化为python创建元素的代码**
103
105
  - 转换过程中,需要把图片占位元素替换成前面准备好的图片素材
104
106
 
105
- 4. **验证转换结果**:
106
- - 转换完成后,需要把svg和pptx转化为图片,然后**逐页**对图片进行对比分析
107
- - 判断两者**背景、容器、线条、文字、装饰的颜色、透明度和渐变效果**是否基本一致
108
- - 如果差异较大,则需要进一步调整转化脚本
109
-
110
- 5. **保留工作文件**:
107
+ 4. **保留工作文件**:
111
108
  - 完成后**需要保留**规划文档、html页面文件和python转化脚本,方便进一步根据反馈进行修改`
112
109
  }
113
110
  };
@@ -197,7 +194,7 @@ const listTools = () => ({
197
194
  ]
198
195
  });
199
196
 
200
- const server = new Server({ name: 'skills', version: '2.2.4' }, { capabilities: { tools: {} } });
197
+ const server = new Server({ name: 'skills', version: '2.2.6' }, { capabilities: { tools: {} } });
201
198
 
202
199
  server.setRequestHandler(ListToolsRequestSchema, async () => listTools());
203
200
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ww_nero/skills",
3
- "version": "2.2.4",
3
+ "version": "2.2.6",
4
4
  "description": "MCP server that returns Python reference snippets and skill guides",
5
5
  "main": "index.js",
6
6
  "bin": {