diff --git a/builtin-skills.json b/builtin-skills.json
index b5df2df..7587fa3 100644
--- a/builtin-skills.json
+++ b/builtin-skills.json
@@ -1,6 +1,7 @@
{
"skills": [
"create-agent",
+ "dashscope-image-gen",
"delete-agent",
"dev-environment-setup",
"discover-agent",
@@ -21,6 +22,7 @@
"update-agent",
"web-access",
"workflow",
+ "xiaomi-tts",
"xlsx"
]
}
diff --git a/skills/dashscope-image-gen/SKILL.md b/skills/dashscope-image-gen/SKILL.md
new file mode 100644
index 0000000..f4fdec4
--- /dev/null
+++ b/skills/dashscope-image-gen/SKILL.md
@@ -0,0 +1,204 @@
+---
+name: 阿里云 文生图
+description: >-
+ Use this skill when the user wants to generate images using Alibaba Cloud
+ DashScope's Wan (通义万相) series models. Supports text-to-image with multiple
+ model tiers (wan2.7-image-pro, wan2.7-image). Uses OpenAI-compatible
+ chat/completions API for synchronous image generation.
+ Use when 用户提到 生成图片、画图、文生图、创建图片、AI 绘画、
+ 生成插图、画一张、帮我画、设计图片、通义万相、万相、阿里云画图、dashscope 画图。
+license: Complete terms in LICENSE.txt
+version: 1.1.0
+type: procedural
+risk_level: low
+status: enabled
+disable-model-invocation: false
+provider: dashscope
+tags:
+ - media
+ - image
+ - generation
+ - dashscope
+ - alibaba
+requires:
+ tools:
+ - Bash
+metadata:
+ author: desirecore
+ updated_at: '2026-05-08'
+market:
+ icon: >-
+
+ short_desc: 基于阿里云通义万相的文本生成图片技能
+ category: media
+ maintainer:
+ name: DesireCore Official
+ verified: true
+ channel: latest
+---
+
+# dashscope-image-gen 技能
+
+## 强制规则(违反将导致功能失败)
+
+1. **必须用 HTTPS 访问 agent-service** — `https://127.0.0.1:${PORT}` 加 `-k` 跳过证书验证
+2. **必须通过 `/api/media/upload` 上传到 media-store** — 禁止保存到本地路径
+3. **必须使用 `dc-media://` 协议展示图片** — 唯一能让前端正确渲染的方式
+4. **全程使用 Bash curl** — 不要使用 HttpRequest 工具或 Python
+5. **使用 compatible-mode(/chat/completions)** — 同步调用,响应直接包含图片 URL
+
+## 模型选择指南
+
+| 模型 | 特点 | 适用场景 |
+|------|------|---------|
+| wan2.7-image-pro | 旗舰,4K 分辨率,thinking_mode | 用户要求最高画质、4K、细节丰富 |
+| wan2.7-image | 标准高画质,thinking_mode | **默认首选**,无特殊要求时使用 |
+
+**默认规则**:用户未指定模型时,使用 `wan2.7-image`。
+
+## 完整执行流程(严格按此两步执行)
+
+### 前置条件
+
+- 用户已在资源管理器-算力中配置阿里云 DashScope Provider 并填写 API Key
+- agent-service 正在运行
+
+### 第一步:调用文生图 API(同步)
+
+通过 media-proxy 的 compatible-mode 端点生成图片,响应直接包含图片 URL:
+
+```bash
+PORT=$(cat ~/.desirecore/agent-service.port)
+curl -sk -X POST "https://127.0.0.1:${PORT}/api/media-proxy" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "provider": "dashscope",
+ "serviceType": "image_gen",
+ "endpoint": "/chat/completions",
+ "body": {
+ "model": "wan2.7-image",
+ "messages": [
+ {
+ "role": "user",
+ "content": [
+ {"type": "text", "text": "这里替换为图片描述(建议英文效果更好)"}
+ ]
+ }
+ ]
+ },
+ "responseType": "json"
+ }'
+```
+
+**响应示例**:
+```json
+{
+ "success": true,
+ "data": {
+ "request_id": "...",
+ "output": {
+ "choices": [
+ {
+ "message": {
+ "role": "assistant",
+ "content": [
+ {
+ "type": "image",
+ "image": "https://dashscope-result.oss.aliyuncs.com/..."
+ }
+ ]
+ },
+ "finish_reason": "stop"
+ }
+ ]
+ }
+ },
+ "statusCode": 200
+}
+```
+
+从 `data.output.choices[0].message.content` 中找到 `type: "image"` 的项,提取其 `image` URL。
+
+### 第二步:下载并上传到 media-store
+
+图片 URL 有时效,必须立即下载并保存到本地 media-store:
+
+```bash
+PORT=$(cat ~/.desirecore/agent-service.port)
+IMAGE_URL="第一步响应中的 image URL"
+curl -sL "$IMAGE_URL" -o /tmp/dashscope-gen.png && \
+curl -sk -X POST "https://127.0.0.1:${PORT}/api/media/upload" \
+ -F "file=@/tmp/dashscope-gen.png;type=image/png"
+```
+
+从 JSON 响应中提取 `mediaId` 字段(格式如 `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.png`)。
+
+### 第三步:用 dc-media 协议展示图片
+
+在你的回复文本中直接写 Markdown 图片语法:
+
+```
+
+```
+
+例如:``
+
+前端会自动将 `dc-media://` 转为可访问的图片 URL 并渲染出来。
+
+## 参数映射
+
+### 尺寸选择
+
+通义万相通过 compatible-mode 调用时,尺寸通过 `size` 参数传入(放在请求体顶层):
+
+```json
+{
+ "model": "wan2.7-image",
+ "size": "1024x1024",
+ "messages": [...]
+}
+```
+
+| 用户意图 | size 参数 |
+|---------|-----------|
+| 正方形/头像/默认 | "1024x1024" |
+| 横版/风景/壁纸 | "1792x1024" |
+| 竖版/手机/海报 | "1024x1792" |
+
+### 可选参数(加入请求体顶层)
+
+| 参数 | 说明 |
+|------|------|
+| `n` | 生成数量 1-4,默认 1 |
+| `size` | 图片尺寸,如 "1024x1024" |
+
+## 多图生成
+
+当 `n > 1` 时,`choices` 数组会有多个元素,每个 `message.content` 中都有一张图片。需要为每张图片执行下载+上传,然后逐一展示:
+
+```
+
+
+```
+
+## 错误处理
+
+- `success: false` + `error: "未找到匹配的供应商"`:未配置 DashScope Provider 或未启用
+- `success: false` + `error: "未配置 API Key"`:未填写 API Key
+- `statusCode: 401`:API Key 无效或已过期
+- `statusCode: 429`:频率限制,稍后重试
+- `statusCode: 400` + `InvalidParameter`:参数错误(如尺寸不支持)
+- `statusCode: 403` + `AccessDenied.Unpurchased`:模型未开通,需要在阿里云控制台开通
+
+## 注意事项
+
+- 通过 compatible-mode 调用是同步的,通常 10-60 秒返回(wan2.7-image-pro 可能更长)
+- 结果图片 URL 有时效,必须及时下载
+- 提示词建议用英文以获得最佳效果,中文也支持
+- 如果用户未明确要求模型/尺寸,默认使用 `wan2.7-image` + `1024x1024`
diff --git a/skills/xiaomi-tts/SKILL.md b/skills/xiaomi-tts/SKILL.md
new file mode 100644
index 0000000..a348f8c
--- /dev/null
+++ b/skills/xiaomi-tts/SKILL.md
@@ -0,0 +1,235 @@
+---
+name: 小米 MiMo 语音合成
+description: >-
+ Use this skill when the user wants to convert text to speech using Xiaomi
+ MiMo's TTS models (mimo-v2.5-tts). Uses OpenAI-compatible chat/completions
+ API with audio response. Supports multiple preset voices and custom voice
+ design.
+ Use when 用户提到 语音合成、文字转语音、TTS、朗读、读出来、生成语音、
+ 生成音频、文本转音频、配音、念出来、小米语音、MiMo 语音、小米 TTS。
+license: Complete terms in LICENSE.txt
+version: 1.0.0
+type: procedural
+risk_level: low
+status: enabled
+disable-model-invocation: false
+provider: xiaomi
+tags:
+ - media
+ - audio
+ - tts
+ - speech
+ - xiaomi
+ - mimo
+requires:
+ tools:
+ - Bash
+metadata:
+ author: desirecore
+ updated_at: '2026-05-08'
+market:
+ icon: >-
+
+ short_desc: 基于小米 MiMo 的文本转语音技能
+ category: media
+ maintainer:
+ name: DesireCore Official
+ verified: true
+ channel: latest
+---
+
+# xiaomi-tts 技能
+
+## 强制规则(违反将导致功能失败)
+
+1. **必须用 HTTPS 访问 agent-service** — `https://127.0.0.1:${PORT}` 加 `-k` 跳过证书验证
+2. **必须通过 `/api/media/upload` 上传到 media-store** — 禁止保存到本地路径
+3. **必须使用 `dc-media://` 协议展示音频** — 唯一能让前端正确渲染的方式
+4. **全程使用 Bash curl** — 不要使用 HttpRequest 工具或 Python
+5. **使用 /chat/completions 端点** — 小米 MiMo TTS 使用 OpenAI 兼容格式
+
+## 模型选择指南
+
+| 模型 | 特点 | 适用场景 |
+|------|------|---------|
+| mimo-v2.5-tts | 标准 TTS,多种预置音色 | **默认首选**,常规语音合成 |
+| mimo-v2.5-tts-voicedesign | 自定义音色设计 | 需要特定音色描述生成 |
+| mimo-v2.5-tts-voiceclone | 声音克隆 | 需要克隆特定人声(需上传参考音频) |
+
+**默认规则**:用户未指定模型时,使用 `mimo-v2.5-tts`。
+
+## 音色选择指南
+
+### 预置音色
+
+| voice_id | 名称 | 特点 |
+|----------|------|------|
+| default_zh | 默认中文 | 中文通用女声 |
+| default_en | 默认英文 | 英文通用女声 |
+| mimo_default | MiMo 默认 | MiMo 特色音色 |
+| Bingtang | 冰糖 | 甜美女声 |
+| Moli | 茉莉 | 温柔女声 |
+| Suda | 苏打 | 年轻男声 |
+| Baihua | 白桦 | 成熟男声 |
+| Mia | Mia | 英文女声 |
+| Chloe | Chloe | 英文女声 |
+| Milo | Milo | 英文男声 |
+| Dean | Dean | 英文男声 |
+
+**默认规则**:中文内容用 `Bingtang`,英文内容用 `Mia`,用户未指定时按内容语言自动选择。
+
+## 完整执行流程(严格按此三步执行)
+
+### 前置条件
+
+- 用户已在资源管理器-算力中配置小米 MiMo Provider 并填写 API Key
+- agent-service 正在运行
+
+### 第一步:调用 TTS API
+
+通过 media-proxy 的 /chat/completions 端点生成语音。
+
+**重要**:messages 必须使用 `assistant` role(不是 user),要合成的文本放在 assistant 消息的 content 中。
+
+```bash
+PORT=$(cat ~/.desirecore/agent-service.port)
+curl -sk -X POST "https://127.0.0.1:${PORT}/api/media-proxy" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "provider": "xiaomi",
+ "serviceType": "tts",
+ "endpoint": "/chat/completions",
+ "body": {
+ "model": "mimo-v2.5-tts",
+ "messages": [
+ {
+ "role": "assistant",
+ "content": "这里替换为要合成的文本内容"
+ }
+ ],
+ "voice": "Bingtang",
+ "audio": {"format": "mp3"}
+ },
+ "responseType": "json"
+ }'
+```
+
+**响应示例**:
+```json
+{
+ "success": true,
+ "data": {
+ "id": "chatcmpl-...",
+ "choices": [
+ {
+ "index": 0,
+ "message": {
+ "role": "assistant",
+ "audio": {
+ "data": "base64编码的音频数据...",
+ "format": "mp3"
+ }
+ },
+ "finish_reason": "stop"
+ }
+ ]
+ },
+ "statusCode": 200
+}
+```
+
+从 `data.choices[0].message.audio.data` 提取 base64 编码的音频数据。
+
+### 第二步:解码并上传到 media-store
+
+音频以 base64 返回,需要解码后保存到本地 media-store。
+
+**推荐方式**(先保存完整响应到文件,避免 shell 参数过长):
+
+```bash
+PORT=$(cat ~/.desirecore/agent-service.port)
+# 将完整请求和响应保存到文件
+curl -sk -X POST "https://127.0.0.1:${PORT}/api/media-proxy" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "provider": "xiaomi",
+ "serviceType": "tts",
+ "endpoint": "/chat/completions",
+ "body": {
+ "model": "mimo-v2.5-tts",
+ "messages": [{"role": "assistant", "content": "要合成的文本"}],
+ "voice": "Bingtang",
+ "audio": {"format": "mp3"}
+ },
+ "responseType": "json"
+ }' > /tmp/xiaomi-tts-response.json
+
+# 提取 base64 音频数据并解码
+cat /tmp/xiaomi-tts-response.json | jq -r '.data.choices[0].message.audio.data' | base64 -d > /tmp/xiaomi-tts.mp3
+
+# 上传到 media-store
+curl -sk -X POST "https://127.0.0.1:${PORT}/api/media/upload" \
+ -F "file=@/tmp/xiaomi-tts.mp3;type=audio/mpeg"
+```
+
+从 JSON 响应中提取 `mediaId` 字段(格式如 `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.mp3`)。
+
+### 第三步:用 dc-media 协议展示音频
+
+在你的回复文本中直接写 Markdown 语法:
+
+```
+
+```
+
+例如:``
+
+前端会自动检测 `.mp3` 扩展名并渲染为音频播放器。
+
+## 参数映射
+
+### 请求体参数(放在 body 中)
+
+| 参数 | 说明 | 默认值 |
+|------|------|--------|
+| `model` | 模型名称 | "mimo-v2.5-tts" |
+| `messages[0].role` | **必须为 "assistant"** | "assistant"(固定) |
+| `messages[0].content` | 要合成的文本 | 必填 |
+| `voice` | 音色 ID | "Bingtang"(中文)/ "Mia"(英文) |
+| `audio.format` | 音频格式 | "mp3"(可选 "wav") |
+
+### 用户意图映射
+
+| 用户意图 | 参数选择 |
+|---------|---------|
+| 甜美/可爱 | voice: "Bingtang" |
+| 温柔/知性 | voice: "Moli" |
+| 年轻男声 | voice: "Suda" |
+| 成熟男声 | voice: "Baihua" |
+| 英文女声 | voice: "Mia" 或 "Chloe" |
+| 英文男声 | voice: "Milo" 或 "Dean" |
+| 高音质/无损 | response_format: "wav" |
+
+## 错误处理
+
+- `success: false` + `error: "未找到匹配的供应商"`:未配置小米 MiMo Provider 或未启用
+- `success: false` + `error: "未配置 API Key"`:未填写 API Key
+- `statusCode: 401`:API Key 无效或已过期
+- `statusCode: 429`:频率限制,稍后重试
+- `statusCode: 400`:参数错误(如 voice 不存在、文本为空)
+- `statusCode: 403`:模型未开通或权限不足
+
+## 注意事项
+
+- 调用是同步的,通常 3-15 秒返回(视文本长度而定)
+- 音频以 base64 返回,无外部 URL 时效问题,但数据量较大时注意 shell 参数长度限制
+- 长文本建议分段合成(每段不超过 500 字),然后逐段上传展示
+- 如果用户未明确要求音色/格式,默认使用 `mimo-v2.5-tts` + 按语言选音色 + `mp3`
+- Token Plan 密钥(tp- 前缀)使用 `https://token-plan-cn.xiaomimimo.com/v1` 端点
+- 按量付费密钥使用 `https://api.xiaomimimo.com/v1` 端点
+- media-proxy 会自动根据配置选择正确的端点,技能无需区分