Use this skill when the user provides a Tushare API documentation URL and requests generation of a full plugin in this codebase, including extractor, schema, config, query service, and agent/MCP/http usage with testable curl examples.
将 Tushare 文档 URL 转换为本仓库的生产级插件,包含数据抽取、ClickHouse 表结构、查询服务,以及可测试的 curl 示例。
tushare_* 插件保持一致。pct_change vs pct_chg)及所需转换。references/plugin_conventions.md)src/stock_datasource/plugins/<plugin_name>/__init__.py、plugin.py、extractor.py、service.py、schema.json、config.json、<plugin_name>.mdtushare_* 插件为模板。tushare SDK,API 调用需用 proxy_context() 包裹。trade_date 或 start_date/end_date。extract_data、validate_data、transform_data、load_data。version 和 _ingested_at 列。trade_date 转为 Date。必须实现以下方法指定插件的分类和角色:
from stock_datasource.core.base_plugin import PluginCategory, PluginRole
def get_category(self) -> PluginCategory:
"""插件分类 - 按市场划分"""
return PluginCategory.CN_STOCK # 或 HK_STOCK, INDEX, ETF_FUND, SYSTEM
def get_role(self) -> PluginRole:
"""插件角色"""
return PluginRole.PRIMARY # 或 BASIC, DERIVED, AUXILIARY
分类说明:
CN_STOCK: A股相关数据HK_STOCK: 港股相关数据INDEX: 指数相关数据ETF_FUND: ETF/基金相关数据SYSTEM: 系统数据(如交易日历)角色说明:
PRIMARY: 主数据(如 daily 行情)BASIC: 基础数据(如 stock_basic)DERIVED: 衍生数据(如复权因子)AUXILIARY: 辅助数据(如指数权重)在 plugin.py 中实现依赖方法(不是在 config.json 中配置):
def get_dependencies(self) -> List[str]:
"""必须依赖 - 这些插件的数据必须存在才能运行当前插件。
例如:tushare_daily 依赖 tushare_stock_basic 提供股票代码列表。
"""
return ["tushare_stock_basic"]
def get_optional_dependencies(self) -> List[str]:
"""可选依赖 - 同步主插件时默认会同步这些依赖,用户可选择禁用。
例如:tushare_daily 可选同步 tushare_adj_factor 复权因子。
"""
return ["tushare_adj_factor"]
依赖规则:
schema.json:使用 ReplacingMergeTree,partition_by 为 toYYYYMM(trade_date),order_by 为主键。config.json:包含完整的插件配置。{
"enabled": true,
"rate_limit": 120,
"timeout": 30,
"retry_attempts": 3,
"description": "插件描述",
"schedule": {
"frequency": "daily",
"time": "18:00",
"day_of_week": "monday"
},
"parameters": {
"max_empty_days": 5,
"validate_prices": true
},
"parameters_schema": {
"trade_date": {
"type": "string",
"format": "date",
"required": true,
"description": "Trade date in YYYYMMDD format"
}
}
}
字段说明:
| 字段 | 必需 | 说明 |
|------|------|------|
| enabled | 是 | 是否启用插件 |
| rate_limit | 是 | API 调用频率限制(次/分钟) |
| timeout | 是 | 请求超时时间(秒) |
| retry_attempts | 是 | 重试次数 |
| description | 是 | 插件描述 |
| schedule | 否 | 调度配置 |
| schedule.frequency | 否 | 调度频率:daily 或 weekly,默认 daily |
| schedule.time | 否 | 执行时间,格式 HH:MM,默认 18:00 |
| schedule.day_of_week | 否 | 仅 weekly 时有效,如 monday |
| parameters | 否 | 插件特定参数 |
| parameters_schema | 是 | 参数 schema,用于验证和前端展示 |
注意:依赖配置(dependencies、optional_dependencies)不在 config.json 中定义,而是通过 plugin.py 中的 get_dependencies() 和 get_optional_dependencies() 方法实现。
schema.json 生成 CREATE TABLE SQL。# 仅生成 SQL
python .codebuddy/skills/tushare-plugin-builder/scripts/generate_create_table_sql.py \
src/stock_datasource/plugins/<plugin_name>/schema.json
# 生成并执行
python .codebuddy/skills/tushare-plugin-builder/scripts/generate_create_table_sql.py \
src/stock_datasource/plugins/<plugin_name>/schema.json --execute
# 测试连接
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_clickhouse_connection.py
# 列出所有表
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_clickhouse_connection.py --list
# 验证指定表是否存在
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_clickhouse_connection.py --table <table_name>
runtime_config.json 中代理设置正确。# 运行插件并验证
python .codebuddy/skills/tushare-plugin-builder/scripts/run_plugin_test.py \
<plugin_name> --date 20250110 --verify
python -m stock_datasource.plugins.<plugin_name>.plugin --date 20250110
# 使用脚本验证
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_clickhouse_connection.py \
--table <table_name> --date 20250110
SELECT count(*), min(trade_date), max(trade_date)
FROM <table_name>
WHERE trade_date = '2025-01-10';
python -m stock_datasource.services.http_server# 列出所有 API 路由
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_service_http.py --list
# 测试指定服务方法
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_service_http.py \
--service <service_name> \
--method get_by_date_range \
--params '{"ts_code":"XXX","start_date":"20250101","end_date":"20250110"}'
# 仅生成 curl 命令
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_service_http.py \
--service <service_name> --method get_latest --params '{}' --curl
python -m stock_datasource.services.mcp_server# 列出所有 MCP 工具
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_mcp_tool.py --list
# 搜索相关工具
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_mcp_tool.py --pattern <service_name>
# 验证指定工具
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_mcp_tool.py --tool <tool_name>
本 skill 提供以下验证脚本(位于 scripts/ 目录):
| 脚本 | 用途 |
|------|------|
| validate_plugin.py | 综合验证插件是否符合规范 |
| verify_clickhouse_connection.py | 测试数据库连接、列出表、验证数据 |
| generate_create_table_sql.py | 根据 schema.json 生成建表 SQL |
| run_plugin_test.py | 运行插件 ETL 并验证入库 |
| verify_service_http.py | 测试 HTTP 服务端点 |
| verify_mcp_tool.py | 验证 MCP 工具注册状态 |
当用户要求验证已有插件(无论是自己编写还是生成的),执行以下步骤:
# 验证单个插件
python .codebuddy/skills/tushare-plugin-builder/scripts/validate_plugin.py <plugin_name>
# 显示所有检查详情
python .codebuddy/skills/tushare-plugin-builder/scripts/validate_plugin.py <plugin_name> --verbose
# 列出所有可用插件
python .codebuddy/skills/tushare-plugin-builder/scripts/validate_plugin.py --list
# 验证所有插件
python .codebuddy/skills/tushare-plugin-builder/scripts/validate_plugin.py --all
validate_plugin.py 会自动检查以下内容:
文件结构检查:
__init__.py 存在且导出 Plugin/Service 类plugin.py 存在且继承 BasePluginextractor.py 存在且使用 proxy_contextservice.py 存在且继承 BaseServiceschema.json 存在且包含必需字段config.json 存在且包含必需配置代码规范检查:
Schema 规范检查:
运行时检查:
根据验证结果采取行动:
✅ 通过:插件符合规范,可进行下一步测试。
⚠️ 警告:插件可运行但存在潜在问题,建议修复:
%(param)s❌ 失败:插件存在严重问题,必须修复:
通过基础检查后,执行完整测试流程:
# 1. 验证数据库连接
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_clickhouse_connection.py
# 2. 建表(如果表不存在)
python .codebuddy/skills/tushare-plugin-builder/scripts/generate_create_table_sql.py \
src/stock_datasource/plugins/<plugin_name>/schema.json --execute
# 3. 运行 ETL 并验证入库
python .codebuddy/skills/tushare-plugin-builder/scripts/run_plugin_test.py \
<plugin_name> --date 20250110 --verify
# 4. 测试 HTTP 服务
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_service_http.py \
--service <service_name> --method get_latest --params '{}'
# 5. 测试 MCP 工具
python .codebuddy/skills/tushare-plugin-builder/scripts/verify_mcp_tool.py \
--pattern <service_name>
proxy_context() 和 tushare SDK。get_category() 和 get_role() 方法。get_dependencies() 和 get_optional_dependencies() 方法。npx skills add Yourdaylight/tushare-plugin-builder下载完整 Skill 目录,包含 SKILL.md 及所有相关文件
Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer