feat: 市场转型为元数据注册表(pointer entry + 许可署名) (#33)

## 概述 / Summary

把 market 从「内容仓库」转型为「元数据注册表」的仓库侧改动,配合客户端 PR

[desirecore/desirecore#919](https://github.com/desirecore/desirecore/pull/919)
与

[ADR-038](https://github.com/desirecore/desirecore-docs/blob/main/技术/决策/ADR-038-市场元数据注册表与两层技能模型.md)。

原则:market 只放元数据、不放第三方内容;内置技能仍 bundled(有界例外)。每条第三方条目用
`entry.json`(元数据 + `source` 指针),正文放各自源仓库、安装时按需获取。

## 改动 / Changes

### S10 — minimax 迁出为官方独立仓库
- `minimax-image-gen` / `minimax-tts`(均 `author=desirecore`)迁至新建的官方开源仓库

**[desirecore/skills-minimax](https://github.com/desirecore/skills-minimax)**(MIT,monorepo,
  一仓多技能)。
- market 改用 `skills/<id>/entry.json` 的 pointer 引用(`source.path`
指入子目录,`ref` 锁定
  commit `6e39eee`),删除内联 `SKILL.md`。

### S11 — 许可署名合规
- 新增根 `LICENSE`(MIT)与 `THIRD_PARTY_NOTICES.md`。
- 标注 Anthropic **docx/pdf/pptx/xlsx 为 source-available(非开源、仅供演示参考)**、
frontend-design 等为 Apache-2.0;每条 entry 的 `license`/`redistribution`
为单条真相源。

### S12 — 外部技能改为纯 pointer(取代 #32 的 vendoring)
- 把 [#32](https://github.com/desirecore/market/pull/32) 的 10 个外部技能写成
`entry.json`
  pointer(**不再 vendor 上游源码**):
  - MIT/MIT-0 → `partner`/`community` + `allowed`
  - 无声明许可(meituan / netease)→ `pointer` + `source-pointer-only`
  - luckin 打包产物 → `pointer` + `verify-package-terms`(`source.kind=zip`)

## 说明 / Notes

- 外部条目的 `name`/`category` 为基于上游 URL 的合理初值,后续可随上游元数据完善。
- 客户端(#919)已支持 `entry.json` 读/装与体积守护栏;本 PR 合并后,主仓库需重新
  `npm run sync-market` 重打包 `defaults/market.zip`。

> 注:`follow-builders`(zarazhangrui/follow-builders, MIT)是 #32
`external-skills.json` 外部技能集合中的一员,属本次迁移范畴,非额外引入。

Co-authored-by: yi-ge <jackyoncode@gmail.com>
This commit is contained in:
2026-06-28 21:06:20 +08:00
committed by GitHub
parent 2bcbcbc9e2
commit 5b7708a612
18 changed files with 347 additions and 624 deletions

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 DesireCore
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

32
THIRD_PARTY_NOTICES.md Normal file
View File

@@ -0,0 +1,32 @@
# Third-Party Notices
This repository's own content (DesireCore-authored skills and metadata) is licensed
under the MIT License (see `LICENSE`). Some bundled skills are derived from or
authored by third parties and are governed by their own terms, noted below. The
`license` / `redistribution` fields on each entry are the source of truth per skill.
## Anthropic skills (`anthropics/skills`)
The following skills are **source-available, NOT open source**. Per Anthropic's
`anthropics/skills` README they are provided for demonstration and educational
purposes only. They are included here as reference implementations; verify
Anthropic's terms before redistribution or production use.
- `skills/docx`
- `skills/pdf`
- `skills/pptx`
- `skills/xlsx`
Other Anthropic-authored skills in this repository are licensed under
**Apache-2.0** (e.g. `skills/frontend-design`); the Apache-2.0 license and any
required NOTICE attribution apply to those skills.
Upstream: https://github.com/anthropics/skills
## External / pointer skills
Skills described only by an `entry.json` pointer (no vendored source) are
maintained by their respective upstreams and governed by each upstream's license.
See the `license` and `redistribution` fields in each `skills/<id>/entry.json`.
Entries with `redistribution: source-pointer-only` or `verify-package-terms` are
not redistributed here; their content is fetched from the upstream at install time.

View File

@@ -0,0 +1,21 @@
{
"id": "amap-jsapi-skill",
"name": "AMap JSAPI Skill",
"category": "development",
"tags": [
"lbs-amap"
],
"maintainer": {
"name": "lbs-amap",
"verified": false,
"account": "lbs-amap",
"url": "https://clawhub.ai/lbs-amap/skills/amap-jsapi-skill"
},
"stewardship": "community",
"license": "MIT-0",
"redistribution": "allowed",
"source": {
"kind": "web",
"repoUrl": "https://clawhub.ai/lbs-amap/skills/amap-jsapi-skill"
}
}

View File

@@ -0,0 +1,21 @@
{
"id": "dingtalk-api",
"name": "DingTalk API Skill",
"category": "communication",
"tags": [
"ogenes"
],
"maintainer": {
"name": "ogenes",
"verified": false,
"account": "ogenes",
"url": "https://clawhub.ai/ogenes/skills/dingtalk-api"
},
"stewardship": "community",
"license": "MIT-0",
"redistribution": "allowed",
"source": {
"kind": "web",
"repoUrl": "https://clawhub.ai/ogenes/skills/dingtalk-api"
}
}

View File

@@ -0,0 +1,23 @@
{
"id": "flyai-skill",
"name": "FlyAI",
"category": "productivity",
"tags": [
"alibaba-flyai"
],
"maintainer": {
"name": "alibaba-flyai",
"verified": false,
"account": "alibaba-flyai",
"url": "https://github.com/alibaba-flyai/flyai-skill"
},
"stewardship": "partner",
"license": "MIT",
"redistribution": "allowed",
"source": {
"kind": "git",
"repoUrl": "https://github.com/alibaba-flyai/flyai-skill.git",
"repoBranch": "main",
"ref": "54277b27b68e53741954c08541faedba1d45cc7b"
}
}

View File

@@ -0,0 +1,22 @@
{
"id": "follow-builders",
"name": "Follow Builders",
"category": "productivity",
"tags": [
"zarazhangrui"
],
"maintainer": {
"name": "zarazhangrui",
"verified": false,
"account": "zarazhangrui",
"url": "https://github.com/zarazhangrui/follow-builders"
},
"stewardship": "community",
"license": "MIT",
"redistribution": "allowed",
"source": {
"kind": "git",
"repoUrl": "https://github.com/zarazhangrui/follow-builders.git",
"repoBranch": "main"
}
}

View File

@@ -0,0 +1,23 @@
{
"id": "larksuite-cli",
"name": "Lark Suite CLI",
"category": "communication",
"tags": [
"larksuite"
],
"maintainer": {
"name": "larksuite",
"verified": false,
"account": "larksuite",
"url": "https://github.com/larksuite/cli"
},
"stewardship": "partner",
"license": "MIT",
"redistribution": "allowed",
"source": {
"kind": "git",
"repoUrl": "https://github.com/larksuite/cli.git",
"repoBranch": "main",
"ref": "4c31323de1ca878b2070c05f7c3cb66c0de4c767"
}
}

View File

@@ -0,0 +1,21 @@
{
"id": "luckin-my-coffee",
"name": "Luckin My Coffee",
"category": "business",
"tags": [
"luckin"
],
"maintainer": {
"name": "luckin",
"verified": false,
"account": "luckin",
"url": "https://unpkg.luckincoffeecdn.com/@luckin/my-coffee-skill@latest/dist/my-coffee-skill.zip"
},
"stewardship": "pointer",
"license": "packaged-distribution",
"redistribution": "verify-package-terms",
"source": {
"kind": "zip",
"repoUrl": "https://unpkg.luckincoffeecdn.com/@luckin/my-coffee-skill@latest/dist/my-coffee-skill.zip"
}
}

View File

@@ -1,148 +0,0 @@
---
name: minimax-image-gen
description: >-
Use this skill when the user wants to generate images using MiniMax's
image-01 model. Supports text-to-image and subject reference for character
consistency. Use when 用户提到 生成图片、画图、文生图、创建图片、
AI 绘画、生成插图、画一张、帮我画、设计图片、MiniMax 画图。
license: Complete terms in LICENSE.txt
version: 1.3.1
type: procedural
risk_level: low
status: enabled
disable-model-invocation: true
provider: minimax
tags:
- media
- image
- generation
- minimax
requires:
tools:
- Bash
metadata:
author: desirecore
updated_at: '2026-04-25'
i18n:
default_locale: en-US
source_locale: zh-CN
locales:
- zh-CN
- en-US
zh-CN:
name: MiniMax 文生图
short_desc: 基于 MiniMax image-01 的文本生成图片技能
description: >-
Use this skill when the user wants to generate images using MiniMax's image-01 model. Supports text-to-image and subject reference for character consistency. Use when 用户提到 生成图片、画图、文生图、创建图片、 AI 绘画、生成插图、画一张、帮我画、设计图片、MiniMax 画图。
body: ./SKILL.zh-CN.md
source_hash: sha256:4630268ef3bd4e23
translated_by: human
en-US:
name: MiniMax Image Generation
short_desc: Text-to-image generation skill powered by MiniMax image-01
description: >-
Use this skill when the user wants to generate images using MiniMax's image-01 model. Supports text-to-image and subject reference for character consistency. Use when the user mentions generate images, draw a picture, text-to-image, create an image, AI painting, generate illustration, draw one for me, help me draw, design an image, MiniMax drawing.
body: ./SKILL.md
source_hash: sha256:4630268ef3bd4e23
translated_by: human
translated_at: '2026-05-03'
market:
icon: >-
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0
24 24" fill="none"><rect x="3" y="3" width="18" height="18" rx="3"
stroke="#34C759" stroke-width="1.5" fill="#34C759"
fill-opacity="0.1"/><circle cx="8.5" cy="8.5" r="2" stroke="#34C759"
stroke-width="1.2"/><path d="M3 16l5-5 4 4 3-3 6 6" stroke="#34C759"
stroke-width="1.5" stroke-linecap="round"
stroke-linejoin="round"/></svg>
category: media
maintainer:
name: DesireCore Official
verified: true
channel: latest
listed: false
---
# minimax-image-gen Skill
## Mandatory Rules (violations will cause feature failure)
1. **Must use `"response_format": "url"`**`"base64"` is forbidden, base64 will cause output truncation
2. **Must access agent-service over HTTPS**`https://127.0.0.1:${PORT}` with `-k` to skip certificate verification
3. **Must upload to media-store via `/api/media/upload`** — saving to local paths is forbidden
4. **Must use the `dc-media://` protocol to display images** — the only way the frontend can render correctly
5. **Use Bash curl throughout** — do not use the HttpRequest tool or Python
## Complete Execution Flow (strictly follow these three steps)
### Step 1: Call the API to generate the image
```bash
PORT=$(cat ${DESIRECORE_ROOT}/agent-service.port)
curl -sk -X POST "https://127.0.0.1:${PORT}/api/media-proxy" \
-H "Content-Type: application/json" \
-d '{
"providerId": "provider-minimax-media-001",
"endpoint": "/image_generation",
"body": {
"model": "image-01",
"prompt": "这里替换为英文图片描述",
"aspect_ratio": "1:1",
"response_format": "url",
"n": 1
},
"responseType": "json"
}'
```
Extract `data.data.image_urls[0]` from the JSON response to obtain the image URL.
### Step 2: Download and upload to media-store
```bash
PORT=$(cat ${DESIRECORE_ROOT}/agent-service.port)
IMAGE_URL="第一步拿到的图片URL"
curl -sL "$IMAGE_URL" -o /tmp/minimax-gen.png && \
curl -sk -X POST "https://127.0.0.1:${PORT}/api/media/upload" \
-F "file=@/tmp/minimax-gen.png;type=image/png"
```
Extract the `mediaId` field from the JSON response (format like `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.png`).
### Step 3: Display the image with the dc-media protocol
Write Markdown image syntax directly in your reply text:
```
![图片描述](dc-media://这里替换为mediaId)
```
For example: `![白色的猫坐在书桌上](dc-media://a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6.png)`
The frontend will automatically convert `dc-media://` into an accessible image URL and render it.
## Parameter Mapping
| User Intent | aspect_ratio |
|---------|-------------|
| Square / avatar | "1:1" |
| Landscape / scenery / wallpaper | "16:9" |
| Portrait / phone / poster | "9:16" |
| Standard photo | "4:3" |
| Portrait photo | "3:4" |
## Subject Reference (character consistency)
Add `subject_reference` in the body:
```json
"subject_reference": [
{ "type": "character", "image_file": { "url": "参考图片URL" } }
]
```
## Error Handling
- `"error": "未找到匹配的供应商"`: MiniMax Media Provider not configured
- `statusCode: 401`: Invalid API Key
- `statusCode: 429`: Rate limited, retry later

View File

@@ -1,85 +0,0 @@
<!-- locale: zh-CN -->
# minimax-image-gen 技能
## 强制规则(违反将导致功能失败)
1. **必须使用 `"response_format": "url"`** — 禁止 `"base64"`base64 会导致输出截断
2. **必须用 HTTPS 访问 agent-service**`https://127.0.0.1:${PORT}``-k` 跳过证书验证
3. **必须通过 `/api/media/upload` 上传到 media-store** — 禁止保存到本地路径
4. **必须使用 `dc-media://` 协议展示图片** — 唯一能让前端正确渲染的方式
5. **全程使用 Bash curl** — 不要使用 HttpRequest 工具或 Python
## 完整执行流程(严格按此三步执行)
### 第一步:调用 API 生成图片
```bash
PORT=$(cat ${DESIRECORE_ROOT}/agent-service.port)
curl -sk -X POST "https://127.0.0.1:${PORT}/api/media-proxy" \
-H "Content-Type: application/json" \
-d '{
"providerId": "provider-minimax-media-001",
"endpoint": "/image_generation",
"body": {
"model": "image-01",
"prompt": "这里替换为英文图片描述",
"aspect_ratio": "1:1",
"response_format": "url",
"n": 1
},
"responseType": "json"
}'
```
从 JSON 响应中提取 `data.data.image_urls[0]` 得到图片 URL。
### 第二步:下载并上传到 media-store
```bash
PORT=$(cat ${DESIRECORE_ROOT}/agent-service.port)
IMAGE_URL="第一步拿到的图片URL"
curl -sL "$IMAGE_URL" -o /tmp/minimax-gen.png && \
curl -sk -X POST "https://127.0.0.1:${PORT}/api/media/upload" \
-F "file=@/tmp/minimax-gen.png;type=image/png"
```
从 JSON 响应中提取 `mediaId` 字段(格式如 `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.png`)。
### 第三步:用 dc-media 协议展示图片
在你的回复文本中直接写 Markdown 图片语法:
```
![图片描述](dc-media://这里替换为mediaId)
```
例如:`![白色的猫坐在书桌上](dc-media://a1b2c3d4-e5f6-47a8-b9c0-d1e2f3a4b5c6.png)`
前端会自动将 `dc-media://` 转为可访问的图片 URL 并渲染出来。
## 参数映射
| 用户意图 | aspect_ratio |
|---------|-------------|
| 正方形/头像 | "1:1" |
| 横版/风景/壁纸 | "16:9" |
| 竖版/手机/海报 | "9:16" |
| 标准照片 | "4:3" |
| 竖版照片 | "3:4" |
## 主体参考(角色一致性)
在 body 中添加 `subject_reference`
```json
"subject_reference": [
{ "type": "character", "image_file": { "url": "参考图片URL" } }
]
```
## 错误处理
- `"error": "未找到匹配的供应商"`:未配置 MiniMax Media Provider
- `statusCode: 401`API Key 无效
- `statusCode: 429`:频率限制,稍后重试

View File

@@ -0,0 +1,36 @@
{
"id": "minimax-image-gen",
"name": "MiniMax 图像生成",
"category": "media",
"tags": [
"minimax",
"media"
],
"latestVersion": "1.3.1",
"i18n": {
"zh-CN": {
"name": "MiniMax 图像生成",
"shortDesc": "MiniMax 图像生成"
},
"en-US": {
"name": "MiniMax Image Generation",
"shortDesc": "MiniMax Image Generation"
}
},
"maintainer": {
"name": "DesireCore",
"verified": true,
"account": "desirecore",
"url": "https://github.com/desirecore"
},
"stewardship": "official",
"license": "MIT",
"redistribution": "allowed",
"source": {
"kind": "git",
"repoUrl": "https://github.com/desirecore/skills-minimax.git",
"repoBranch": "main",
"path": "minimax-image-gen",
"ref": "6e39eee2ad39632a21f43ed997983e70594b2b8a"
}
}

View File

@@ -1,227 +0,0 @@
---
name: minimax-tts
description: >-
Use this skill when the user wants to convert text to speech using MiniMax's
T2A (Text-to-Audio) API. Supports multiple voice styles, emotional control,
and voice cloning. Use when 用户提到 语音合成、文字转语音、TTS、朗读、
读出来、生成语音、生成音频、文本转音频、配音、念出来、MiniMax 语音。
license: Complete terms in LICENSE.txt
version: 1.2.1
type: procedural
risk_level: low
status: enabled
disable-model-invocation: true
provider: minimax
tags:
- media
- audio
- tts
- speech
- minimax
requires:
tools:
- Bash
metadata:
author: desirecore
updated_at: '2026-04-25'
i18n:
default_locale: en-US
source_locale: zh-CN
locales:
- zh-CN
- en-US
zh-CN:
name: MiniMax 语音合成
short_desc: 基于 MiniMax Speech-02 的文本转语音技能
description: >-
Use this skill when the user wants to convert text to speech using MiniMax's T2A (Text-to-Audio) API. Supports multiple voice styles, emotional control, and voice cloning. Use when 用户提到 语音合成、文字转语音、TTS、朗读、 读出来、生成语音、生成音频、文本转音频、配音、念出来、MiniMax 语音。
body: ./SKILL.zh-CN.md
source_hash: sha256:455a2ee6365958c2
translated_by: human
en-US:
name: MiniMax Text-to-Speech
short_desc: Text-to-speech skill powered by MiniMax Speech-02
description: >-
Use this skill when the user wants to convert text to speech using MiniMax's T2A (Text-to-Audio) API. Supports multiple voice styles, emotional control, and voice cloning. Use when the user mentions text-to-speech, TTS, read aloud, read it out, generate speech, generate audio, text-to-audio, voiceover, narrate it, MiniMax voice.
body: ./SKILL.md
source_hash: sha256:455a2ee6365958c2
translated_by: human
translated_at: '2026-05-03'
market:
icon: >-
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0
24 24" fill="none"><rect x="3" y="3" width="18" height="18" rx="3"
stroke="#007AFF" stroke-width="1.5" fill="#007AFF"
fill-opacity="0.1"/><path d="M8 9v6M11 7v10M14 10v4M17 8v8"
stroke="#007AFF" stroke-width="2"
stroke-linecap="round"/></svg>
category: media
maintainer:
name: DesireCore Official
verified: true
channel: latest
listed: false
---
# minimax-tts Skill
## Mandatory Rules (violations will cause feature failure)
1. **Must access agent-service over HTTPS**`https://127.0.0.1:${PORT}` with `-k` to skip certificate verification
2. **Use Bash curl throughout** — do not use the HttpRequest tool or Python
## Complete Execution Flow
### Prerequisites
- The user has configured a MiniMax Media Provider with an API Key under Resources → Compute
- agent-service is running
### Voice Selection Guide
| voice_id | Characteristics | Use Cases |
|----------|------|---------|
| male-qn-qingse | Young male voice | Narration, podcasts |
| female-shaonv | Young female voice | Audiobooks, dialogue |
| female-yujie | Mature female voice | Professional broadcasting |
| presenter_male | Male anchor voice | News, formal occasions |
| presenter_female | Female anchor voice | News, formal occasions |
### Generate Speech
MiniMax TTS returns JSON (containing an audio URL or hex data); use `"json"` for `responseType`.
```bash
PORT=$(cat ${DESIRECORE_ROOT}/agent-service.port)
curl -sk -X POST "https://127.0.0.1:${PORT}/api/media-proxy" \
-H "Content-Type: application/json" \
-d '{
"providerId": "provider-minimax-media-001",
"endpoint": "/t2a_v2",
"body": {
"model": "speech-02-hd",
"text": "要转换为语音的文本内容",
"voice_setting": {
"voice_id": "male-qn-qingse",
"speed": 1.0,
"vol": 1.0,
"pitch": 0
},
"audio_setting": {
"format": "mp3",
"sample_rate": 32000
}
},
"responseType": "json"
}'
```
### Response Handling
MiniMax TTS returns JSON which, depending on the request parameters, may contain a URL or hex format:
**URL format response** (recommended, requires `"format": "url"` in audio_setting):
```json
{
"success": true,
"data": {
"data": {
"audio": {
"audio_url": "https://...",
"status": 1
}
},
"base_resp": { "status_code": 0, "status_msg": "success" }
},
"statusCode": 200
}
```
**Hex format response** (default):
```json
{
"success": true,
"data": {
"data": {
"audio": {
"data": "hex编码的音频数据...",
"status": 1
}
},
"extra_info": {
"audio_length": 12345,
"audio_sample_rate": 32000,
"audio_size": 67890
}
},
"statusCode": 200
}
```
### Download and Upload to media-store
Audio URLs have a time limit, so they must be downloaded immediately and saved to the local media-store.
**URL format**:
```bash
PORT=$(cat ${DESIRECORE_ROOT}/agent-service.port)
AUDIO_URL="响应中的audio_url"
curl -sL "$AUDIO_URL" -o /tmp/minimax-tts.mp3 && \
curl -sk -X POST "https://127.0.0.1:${PORT}/api/media/upload" \
-F "file=@/tmp/minimax-tts.mp3;type=audio/mpeg"
```
**Hex format**:
```bash
PORT=$(cat ${DESIRECORE_ROOT}/agent-service.port)
HEX_DATA="响应中的hex数据"
echo -n "$HEX_DATA" | xxd -r -p > /tmp/minimax-tts.mp3 && \
curl -sk -X POST "https://127.0.0.1:${PORT}/api/media/upload" \
-F "file=@/tmp/minimax-tts.mp3;type=audio/mpeg"
```
Extract the `mediaId` field from the JSON response.
### Display the Result
Reference it in your reply using the dc-media protocol (the frontend will automatically detect the audio extension and render a player):
```
![语音合成结果](dc-media://这里替换为mediaId)
```
### Parameter Reference
| Parameter | Description | Default |
|------|------|--------|
| model | Model | "speech-02-hd" (HD) or "speech-02-turbo" (fast) |
| text | Text to convert | Max 10000 characters |
| voice_setting.voice_id | Voice persona | "male-qn-qingse" |
| voice_setting.speed | Speaking speed | 1.0 |
| voice_setting.vol | Volume | 1.0 |
| voice_setting.pitch | Pitch | 0 |
| audio_setting.format | Audio format | "mp3" |
| audio_setting.sample_rate | Sample rate | 32000 |
### Special Syntax
MiniMax TTS supports inserting pause markers in the text:
- `<#0.5#>` — pause for 0.5 seconds
- `<#2#>` — pause for 2 seconds
- Valid range: 0.01 ~ 99.99 seconds
Example: `"你好<#1#>欢迎来到 DesireCore"`
### Error Handling
- `success: false` + `statusCode: 400`: empty text or malformed parameters
- `success: false` + `statusCode: 401`: invalid API Key
- `success: false` + `statusCode: 429`: rate limited
- `success: false` + `error: "未找到匹配的供应商"`: MiniMax Media Provider not configured
### Notes
- For text exceeding 3000 characters, streaming output is recommended (proxy mode does not yet support streaming)
- Returned audio_url is valid for 24 hours
- Unless the user specifies otherwise, default to `speech-02-hd` + `male-qn-qingse` + 1.0x speed
- For long text, split it into segments of no more than 3000 characters each

View File

@@ -1,164 +0,0 @@
<!-- locale: zh-CN -->
# minimax-tts 技能
## 强制规则(违反将导致功能失败)
1. **必须用 HTTPS 访问 agent-service**`https://127.0.0.1:${PORT}``-k` 跳过证书验证
2. **全程使用 Bash curl** — 不要使用 HttpRequest 工具或 Python
## 完整执行流程
### 前置条件
- 用户已在资源管理器-算力中配置 MiniMax Media Provider 并填写 API Key
- agent-service 正在运行
### 语音选择指南
| voice_id | 特点 | 适用场景 |
|----------|------|---------|
| male-qn-qingse | 青涩男声 | 旁白、播客 |
| female-shaonv | 少女女声 | 有声书、对话 |
| female-yujie | 御姐女声 | 专业播报 |
| presenter_male | 主持人男声 | 新闻、正式场合 |
| presenter_female | 主持人女声 | 新闻、正式场合 |
### 生成语音
MiniMax TTS 返回 JSON包含音频 URL 或 hex 数据),`responseType` 使用 `"json"`
```bash
PORT=$(cat ${DESIRECORE_ROOT}/agent-service.port)
curl -sk -X POST "https://127.0.0.1:${PORT}/api/media-proxy" \
-H "Content-Type: application/json" \
-d '{
"providerId": "provider-minimax-media-001",
"endpoint": "/t2a_v2",
"body": {
"model": "speech-02-hd",
"text": "要转换为语音的文本内容",
"voice_setting": {
"voice_id": "male-qn-qingse",
"speed": 1.0,
"vol": 1.0,
"pitch": 0
},
"audio_setting": {
"format": "mp3",
"sample_rate": 32000
}
},
"responseType": "json"
}'
```
### 响应处理
MiniMax TTS 返回 JSON根据请求参数可能返回 URL 或 hex 格式:
**URL 格式响应**(推荐,需在 audio_setting 中设置 `"format": "url"`
```json
{
"success": true,
"data": {
"data": {
"audio": {
"audio_url": "https://...",
"status": 1
}
},
"base_resp": { "status_code": 0, "status_msg": "success" }
},
"statusCode": 200
}
```
**Hex 格式响应**(默认):
```json
{
"success": true,
"data": {
"data": {
"audio": {
"data": "hex编码的音频数据...",
"status": 1
}
},
"extra_info": {
"audio_length": 12345,
"audio_sample_rate": 32000,
"audio_size": 67890
}
},
"statusCode": 200
}
```
### 下载并上传到 media-store
音频 URL 有时效限制,必须立即下载并保存到本地 media-store。
**URL 格式**
```bash
PORT=$(cat ${DESIRECORE_ROOT}/agent-service.port)
AUDIO_URL="响应中的audio_url"
curl -sL "$AUDIO_URL" -o /tmp/minimax-tts.mp3 && \
curl -sk -X POST "https://127.0.0.1:${PORT}/api/media/upload" \
-F "file=@/tmp/minimax-tts.mp3;type=audio/mpeg"
```
**Hex 格式**
```bash
PORT=$(cat ${DESIRECORE_ROOT}/agent-service.port)
HEX_DATA="响应中的hex数据"
echo -n "$HEX_DATA" | xxd -r -p > /tmp/minimax-tts.mp3 && \
curl -sk -X POST "https://127.0.0.1:${PORT}/api/media/upload" \
-F "file=@/tmp/minimax-tts.mp3;type=audio/mpeg"
```
从 JSON 响应中提取 `mediaId` 字段。
### 展示结果
在回复中使用 dc-media 协议引用(前端会自动识别音频扩展名并渲染播放器):
```
![语音合成结果](dc-media://这里替换为mediaId)
```
### 参数说明
| 参数 | 说明 | 默认值 |
|------|------|--------|
| model | 模型 | "speech-02-hd"(高清)或 "speech-02-turbo"(快速) |
| text | 要转换的文本 | 最大 10000 字符 |
| voice_setting.voice_id | 语音角色 | "male-qn-qingse" |
| voice_setting.speed | 语速 | 1.0 |
| voice_setting.vol | 音量 | 1.0 |
| voice_setting.pitch | 音调 | 0 |
| audio_setting.format | 音频格式 | "mp3" |
| audio_setting.sample_rate | 采样率 | 32000 |
### 特殊语法
MiniMax TTS 支持在文本中插入停顿标记:
- `<#0.5#>` — 停顿 0.5 秒
- `<#2#>` — 停顿 2 秒
- 有效范围0.01 ~ 99.99 秒
示例:`"你好<#1#>欢迎来到 DesireCore"`
### 错误处理
- `success: false` + `statusCode: 400`:文本为空或参数格式错误
- `success: false` + `statusCode: 401`API Key 无效
- `success: false` + `statusCode: 429`:频率限制
- `success: false` + `error: "未找到匹配的供应商"`:未配置 MiniMax Media Provider
### 注意事项
- 文本超过 3000 字符时建议使用流式输出(但代理模式暂不支持流式)
- 返回的 audio_url 有 24 小时时效
- 如果用户未明确要求,默认使用 `speech-02-hd` + `male-qn-qingse` + 1.0 倍速
- 长文本建议分段调用,每段不超过 3000 字符

View File

@@ -0,0 +1,36 @@
{
"id": "minimax-tts",
"name": "MiniMax 语音合成",
"category": "media",
"tags": [
"minimax",
"media"
],
"latestVersion": "1.2.1",
"i18n": {
"zh-CN": {
"name": "MiniMax 语音合成",
"shortDesc": "MiniMax 语音合成"
},
"en-US": {
"name": "MiniMax Text-to-Speech",
"shortDesc": "MiniMax Text-to-Speech"
}
},
"maintainer": {
"name": "DesireCore",
"verified": true,
"account": "desirecore",
"url": "https://github.com/desirecore"
},
"stewardship": "official",
"license": "MIT",
"redistribution": "allowed",
"source": {
"kind": "git",
"repoUrl": "https://github.com/desirecore/skills-minimax.git",
"repoBranch": "main",
"path": "minimax-tts",
"ref": "6e39eee2ad39632a21f43ed997983e70594b2b8a"
}
}

View File

@@ -0,0 +1,23 @@
{
"id": "mt-paotui-for-client",
"name": "Meituan Paotui Client",
"category": "business",
"tags": [
"meituan"
],
"maintainer": {
"name": "meituan",
"verified": false,
"account": "meituan",
"url": "https://github.com/meituan/MT-Paotui-For-Client"
},
"stewardship": "pointer",
"license": "not-declared",
"redistribution": "source-pointer-only",
"source": {
"kind": "git",
"repoUrl": "https://github.com/meituan/MT-Paotui-For-Client.git",
"repoBranch": "main",
"ref": "dc5cc223a010c2fe4377088affc2fbe4c6c6473d"
}
}

View File

@@ -0,0 +1,22 @@
{
"id": "netease-skills",
"name": "NetEase Skills",
"category": "productivity",
"tags": [
"NetEase"
],
"maintainer": {
"name": "NetEase",
"verified": false,
"account": "NetEase",
"url": "https://github.com/NetEase/skills"
},
"stewardship": "pointer",
"license": "not-declared",
"redistribution": "source-pointer-only",
"source": {
"kind": "git",
"repoUrl": "https://github.com/NetEase/skills.git",
"repoBranch": "main"
}
}

View File

@@ -0,0 +1,23 @@
{
"id": "wechatpay-skills",
"name": "WeChat Pay Skills",
"category": "business",
"tags": [
"wechatpay-apiv3"
],
"maintainer": {
"name": "wechatpay-apiv3",
"verified": false,
"account": "wechatpay-apiv3",
"url": "https://github.com/wechatpay-apiv3/wechatpay-skills"
},
"stewardship": "partner",
"license": "MIT",
"redistribution": "allowed",
"source": {
"kind": "git",
"repoUrl": "https://github.com/wechatpay-apiv3/wechatpay-skills.git",
"repoBranch": "main",
"ref": "8573bdc38b86fa67a42acfc422d6b4dbca4ada21"
}
}

View File

@@ -0,0 +1,23 @@
{
"id": "wecom-cli",
"name": "WeCom CLI",
"category": "communication",
"tags": [
"WecomTeam"
],
"maintainer": {
"name": "WecomTeam",
"verified": false,
"account": "WecomTeam",
"url": "https://github.com/WecomTeam/wecom-cli"
},
"stewardship": "community",
"license": "MIT",
"redistribution": "allowed",
"source": {
"kind": "git",
"repoUrl": "https://github.com/WecomTeam/wecom-cli.git",
"repoBranch": "main",
"ref": "72e14f7695f34d28f1ff23ea504ddd2210a87c13"
}
}