@ww_nero/skills 2.2.7 → 2.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +53 -9
- package/package.json +1 -1
package/index.js
CHANGED
|
@@ -77,6 +77,53 @@ const SNIPPETS = {
|
|
|
77
77
|
};
|
|
78
78
|
|
|
79
79
|
const GUIDES = {
|
|
80
|
+
convert_doc_types: {
|
|
81
|
+
title: '转化文档类型',
|
|
82
|
+
content: `执行文档类型转化任务(如 PPTX、PDF、DOCX、HTML、PNG 等格式互转)时,可参考以下方法:
|
|
83
|
+
|
|
84
|
+
## 方法一:使用命令行工具(推荐用于简单场景)
|
|
85
|
+
|
|
86
|
+
以下工具均已安装,可直接在终端调用:
|
|
87
|
+
|
|
88
|
+
- **LibreOffice (soffice)**:支持 Office 文档互转
|
|
89
|
+
- PPTX → PDF: \`soffice --headless --convert-to pdf input.pptx --outdir ./output\`
|
|
90
|
+
- DOCX → PDF: \`soffice --headless --convert-to pdf input.docx --outdir ./output\`
|
|
91
|
+
- XLSX → PDF: \`soffice --headless --convert-to pdf input.xlsx --outdir ./output\`
|
|
92
|
+
|
|
93
|
+
- **Pandoc**:支持多种文档格式转换
|
|
94
|
+
- Markdown → DOCX: \`pandoc input.md -o output.docx\`
|
|
95
|
+
- Markdown → PDF(中文): \`pandoc input.md -o output.pdf --pdf-engine=xelatex -V CJKmainfont="Microsoft YaHei"\`
|
|
96
|
+
- HTML → Markdown: \`pandoc input.html -o output.md\`
|
|
97
|
+
|
|
98
|
+
- **LaTeX (pdflatex/xelatex)**:用于高质量 PDF 生成
|
|
99
|
+
- TEX → PDF: \`xelatex input.tex\`
|
|
100
|
+
|
|
101
|
+
## 方法二:编写临时 Python 脚本(推荐用于复杂场景)
|
|
102
|
+
|
|
103
|
+
参考 \`snippet\` 工具中提供的转化脚本示例(已验证正确性),编写临时 Python 脚本:
|
|
104
|
+
|
|
105
|
+
| 转化类型 | snippet 名称 | 说明 |
|
|
106
|
+
|---------|-------------|------|
|
|
107
|
+
| HTML → PNG | \`html_to_png\` | 使用 Playwright 渲染并截图 |
|
|
108
|
+
| PDF → PNG | \`pdf_to_png\` | 使用 pdf2image 分页转换 |
|
|
109
|
+
| PPTX → PDF | \`pptx_to_pdf\` | 使用 LibreOffice 无头模式 |
|
|
110
|
+
| SVG → PPTX | \`svg_to_pptx\` | 转化为可编辑的 PPTX 元素 |
|
|
111
|
+
|
|
112
|
+
调用示例:使用 \`snippet\` 工具获取参考代码,如 \`snippet({ title: "pdf_to_png" })\`
|
|
113
|
+
|
|
114
|
+
## 解读 PPTX 或 PDF 文档
|
|
115
|
+
|
|
116
|
+
当用户需要解读 PPTX 或 PDF 文档内容时:
|
|
117
|
+
1. 编写临时 Python 脚本,将 PPTX/PDF 转化为 PNG 图片
|
|
118
|
+
2. 对生成的图片进行视觉分析或内容解读
|
|
119
|
+
3. 完成后删除临时脚本和中间文件
|
|
120
|
+
|
|
121
|
+
## 注意事项
|
|
122
|
+
|
|
123
|
+
- 临时脚本执行完成后应删除,除非用户明确要求保留
|
|
124
|
+
- Python 环境已全局安装 \`playwright\`、\`pdf2image\`、\`python-pptx\`、\`Pillow\` 等常用库
|
|
125
|
+
- 如需其他库,可使用 \`pip install\` 安装`
|
|
126
|
+
},
|
|
80
127
|
make_ppt: {
|
|
81
128
|
title: '制作PPT',
|
|
82
129
|
content: `制作PPT的完整步骤如下(可根据当前实际状态,跳过部分已经完成的环节):
|
|
@@ -86,22 +133,19 @@ const GUIDES = {
|
|
|
86
133
|
- 不同页面应尽可能使用不同的布局方式,避免过于单调,可适当使用图表来呈现信息,例如折线图、柱状图、饼状图等,但背景颜色保持一致
|
|
87
134
|
- 如果用户未明确提出要求,则页面默认比例为宽1280px、高720px,默认背景为深邃蓝色、科技感、弱渐变、简约风格
|
|
88
135
|
- 如果需要插入图片,则按照以下方式:
|
|
89
|
-
-
|
|
90
|
-
- 将图片素材保存到\`images\`文件夹中,通过python
|
|
91
|
-
- 完成规划后,需要先让用户进行确认规划内容,然后再进行下一步
|
|
136
|
+
- 只能使用用户提供的图片作为图片素材;如果用户未提供相应的图片,则使用临时python脚本生成'纯色+文字描述'的图片,后期由用户手动进行更换
|
|
137
|
+
- 将图片素材保存到\`images\`文件夹中,通过python脚本获取每个图片的宽高比例,然后对每张图片进行重命名,通过名称标识图片的内容及宽高比例,例如\`main_background_16_9.png\`表示该图片是主背景图,宽高比为16:9;对于用户提供的图片素材,可调用工具解读图片内容。
|
|
92
138
|
|
|
93
139
|
2. **逐页生成SVG代码**:
|
|
94
|
-
- 对于插图,统一使用\`rect\`或\`circle
|
|
95
|
-
- 如果当前系统配置了专门的\`svg\`工具或MCP,则优先使用工具生成高质量的svg代码;若未配置,则直接自行生成svg代码即可
|
|
140
|
+
- 对于插图,统一使用\`rect\`或\`circle\`元素进行占位(必须符合图片宽高比例)
|
|
96
141
|
- 每一页的svg代码都保存在独立的html文件中
|
|
97
|
-
- 完成全部页面的html创建后,需要先让用户主动查看并确认布局效果,然后再进行下一步
|
|
98
142
|
|
|
99
143
|
3. **把SVG转成PPTX文件**:
|
|
100
144
|
- 参考snippet工具中提供的\`svg_to_pptx\`代码示例,编写临时的python脚本,把svg转化成可编辑的pptx文件,不要遗漏任何元素(例如线条、装饰等)
|
|
101
145
|
- 转化的方法是把svg代码转化成使用python创建pptx中可操作元素的代码,示例中的创建元素的工具函数均可以使用
|
|
102
146
|
- 同时对于每个slide务必创建单独的create_slide函数,例如\`create_slide1\`、\`create_slide2\`等
|
|
103
147
|
- **不要使用\`BeautifulSoup\`这种通用的解析元素的方式,而是逐个元素从svg代码转化为python创建元素的代码**
|
|
104
|
-
-
|
|
148
|
+
- 转换过程中,需要把图片占位元素替换成前面准备的图片素材
|
|
105
149
|
|
|
106
150
|
4. **保留工作文件**:
|
|
107
151
|
- 完成后**需要保留**规划文档、html页面文件和python转化脚本,方便进一步根据反馈进行修改`
|
|
@@ -183,7 +227,7 @@ const listTools = () => ({
|
|
|
183
227
|
properties: {
|
|
184
228
|
title: {
|
|
185
229
|
type: 'string',
|
|
186
|
-
description: '技能类型,可选: make_ppt',
|
|
230
|
+
description: '技能类型,可选: convert_doc_types | make_ppt',
|
|
187
231
|
enum: Object.keys(GUIDES)
|
|
188
232
|
}
|
|
189
233
|
},
|
|
@@ -193,7 +237,7 @@ const listTools = () => ({
|
|
|
193
237
|
]
|
|
194
238
|
});
|
|
195
239
|
|
|
196
|
-
const server = new Server({ name: 'skills', version: '2.2.
|
|
240
|
+
const server = new Server({ name: 'skills', version: '2.2.9' }, { capabilities: { tools: {} } });
|
|
197
241
|
|
|
198
242
|
server.setRequestHandler(ListToolsRequestSchema, async () => listTools());
|
|
199
243
|
|