refactor: 合并 claude-marketplace,重构目录结构为单一仓库
- 重命名 plugins/ → skills/,个人插件迁移到 skills-personal/(gitignore) - 更新 generate-marketplace.py 支持 config 读取和 skills-personal 扫描 - 新增 claude-config.yaml(技能启用/禁用 + MCP 配置) - 新增 init.sh(交互式 MCP 初始化,支持 stdio/SSE 模式) - 新增 CLAUDE.md 项目说明 - 重写 README.md 反映新结构 - 删除过时脚本:PUSH.sh、generate-marketplace.sh、convert-skills.sh Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
636
.claude-plugin/marketplace.json
Normal file
636
.claude-plugin/marketplace.json
Normal file
@@ -0,0 +1,636 @@
|
||||
{
|
||||
"name": "coolbuy-claude-plugins",
|
||||
"owner": {
|
||||
"name": "Donglin Lai (qiudl)",
|
||||
"email": "qiudl@zhiyuncai.com"
|
||||
},
|
||||
"metadata": {
|
||||
"description": "Custom Claude Code plugins for development workflows, DevOps, and business operations",
|
||||
"version": "1.0.0",
|
||||
"pluginRoot": "./skills"
|
||||
},
|
||||
"plugins": [
|
||||
{
|
||||
"name": "agent-swarm-plugin",
|
||||
"source": "./skills/agent-swarm-plugin",
|
||||
"description": "Multi-agent orchestration using OpenAI Swarm patterns. Coordinate specialized agents for complex development workflows with handoffs and context sharing.",
|
||||
"version": "1.0.0",
|
||||
"category": "utility",
|
||||
"keywords": [
|
||||
"utility",
|
||||
"tools"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "ai-proj-plugin",
|
||||
"source": "./skills/ai-proj-plugin",
|
||||
"description": "AI project management via REST API. Works out of the box!",
|
||||
"version": "2.0.1",
|
||||
"category": "productivity",
|
||||
"keywords": [
|
||||
"project-management",
|
||||
"tasks",
|
||||
"requirements"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "biz-contract-plugin",
|
||||
"source": "./skills/biz-contract-plugin",
|
||||
"description": "商务合同撰写。支持多种合同类型:软件订阅合同、软件定制开发合同、物流合同、销售服务合同、贸易合同等。当用户提到合同、协议、签约、合作协议相关任务时自动激活。",
|
||||
"version": "1.0.0",
|
||||
"category": "business",
|
||||
"keywords": [
|
||||
"business",
|
||||
"planning",
|
||||
"contracts"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "biz-ops-plugin",
|
||||
"source": "./skills/biz-ops-plugin",
|
||||
"description": "商务运营技能。支持商业计划书(BP)撰写和商务合同起草。当用户提到商业计划书、BP、融资计划、商业模式、合同、协议、签约等相关任务时自动激活。",
|
||||
"version": "1.0.0",
|
||||
"category": "devops",
|
||||
"keywords": [
|
||||
"devops",
|
||||
"deployment",
|
||||
"operations"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "biz-plan-plugin",
|
||||
"source": "./skills/biz-plan-plugin",
|
||||
"description": "Plugin for biz-plan",
|
||||
"version": "1.0.0",
|
||||
"category": "business",
|
||||
"keywords": [
|
||||
"business",
|
||||
"planning",
|
||||
"contracts"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "coolbuy-legacy-plugin",
|
||||
"source": "./skills/coolbuy-legacy-plugin",
|
||||
"description": "酷采2.0团购管理系统测试与维护。用于酷采2.0系统的功能测试、问题排查、需求验证和对比测试。",
|
||||
"version": "1.0.0",
|
||||
"category": "utility",
|
||||
"keywords": [
|
||||
"utility",
|
||||
"tools"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "coolbuy-paas-plugin",
|
||||
"source": "./skills/coolbuy-paas-plugin",
|
||||
"description": "酷采3.0 SaaS 租户端开发与测试。用于商品管理、订单管理等业务模块开发,以及酷采2.0系统对比测试。",
|
||||
"version": "1.3.0",
|
||||
"category": "utility",
|
||||
"keywords": [
|
||||
"utility",
|
||||
"tools"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "coolbuy-platform-plugin",
|
||||
"source": "./skills/coolbuy-platform-plugin",
|
||||
"description": "Coolbuy SaaS 平台管理端开发与部署。用于平台端前后端开发、租户管理、部署发布、翻译检查等任务。",
|
||||
"version": "1.0.9",
|
||||
"category": "utility",
|
||||
"keywords": [
|
||||
"utility",
|
||||
"tools"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "data-excel-plugin",
|
||||
"source": "./skills/data-excel-plugin",
|
||||
"description": "Plugin for data-excel",
|
||||
"version": "1.0.0",
|
||||
"category": "utility",
|
||||
"keywords": [
|
||||
"utility",
|
||||
"tools"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "dev-arch-plugin",
|
||||
"source": "./skills/dev-arch-plugin",
|
||||
"description": "Plugin for dev-arch",
|
||||
"version": "1.0.0",
|
||||
"category": "development",
|
||||
"keywords": [
|
||||
"development",
|
||||
"coding",
|
||||
"workflow"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "dev-coding-plugin",
|
||||
"source": "./skills/dev-coding-plugin",
|
||||
"description": "Plugin for dev-coding",
|
||||
"version": "1.0.0",
|
||||
"category": "development",
|
||||
"keywords": [
|
||||
"development",
|
||||
"coding",
|
||||
"workflow"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "dev-plugin",
|
||||
"source": "./skills/dev-plugin",
|
||||
"description": "Plugin for dev",
|
||||
"version": "1.0.0",
|
||||
"category": "development",
|
||||
"keywords": [
|
||||
"development",
|
||||
"coding",
|
||||
"workflow"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "dev-test-plugin",
|
||||
"source": "./skills/dev-test-plugin",
|
||||
"description": "软件测试技能。用于单元测试、集成测试、E2E测试、测试用例设计。支持 Go、Vue、React、iOS、Android 等多平台测试。",
|
||||
"version": "2.0.0",
|
||||
"category": "development",
|
||||
"keywords": [
|
||||
"development",
|
||||
"coding",
|
||||
"workflow"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "dotfiles-plugin",
|
||||
"source": "./skills/dotfiles-plugin",
|
||||
"description": "macOS 新机快速部署。用于 dotfiles 配置管理、install.sh 脚本维护、Claude Code 插件配置、MCP Server 配置。当用户提到新机部署、dotfiles、环境配置相关任务时自动激活。",
|
||||
"version": "1.0.0",
|
||||
"category": "utility",
|
||||
"keywords": [
|
||||
"utility",
|
||||
"tools"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "doubao-voice-plugin",
|
||||
"source": "./skills/doubao-voice-plugin",
|
||||
"description": "Doubao (豆包) Voice API integration for TTS and ASR",
|
||||
"version": "1.0.0",
|
||||
"category": "utility",
|
||||
"keywords": [
|
||||
"utility",
|
||||
"tools"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "enjoysa-deploy-plugin",
|
||||
"source": "./skills/enjoysa-deploy-plugin",
|
||||
"description": "EnjoySA 项目部署到新加坡服务器",
|
||||
"version": "1.0.0",
|
||||
"category": "devops",
|
||||
"keywords": [
|
||||
"devops",
|
||||
"deployment",
|
||||
"operations"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "enjoysa-plugin",
|
||||
"source": "./skills/enjoysa-plugin",
|
||||
"description": "Plugin for enjoysa",
|
||||
"version": "1.0.0",
|
||||
"category": "utility",
|
||||
"keywords": [
|
||||
"utility",
|
||||
"tools"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "executing-plans-plugin",
|
||||
"source": "./skills/executing-plans-plugin",
|
||||
"description": "Plugin for executing-plans",
|
||||
"version": "1.0.0",
|
||||
"category": "utility",
|
||||
"keywords": [
|
||||
"utility",
|
||||
"tools"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "feishu-bitable-plugin",
|
||||
"source": "./skills/feishu-bitable-plugin",
|
||||
"description": "飞书多维表格操作。用于记录增删改查、批量操作、筛选排序、数据同步。当需要操作飞书多维表格时使用。",
|
||||
"version": "1.0.0",
|
||||
"category": "integration",
|
||||
"keywords": [
|
||||
"integration",
|
||||
"automation",
|
||||
"productivity"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "feishu-docx-plugin",
|
||||
"source": "./skills/feishu-docx-plugin",
|
||||
"description": "飞书云文档操作。用于创建、编辑云文档,插入内容块,会议纪要生成。当需要操作飞书云文档时使用。",
|
||||
"version": "1.0.0",
|
||||
"category": "integration",
|
||||
"keywords": [
|
||||
"integration",
|
||||
"automation",
|
||||
"productivity"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "feishu-plugin",
|
||||
"source": "./skills/feishu-plugin",
|
||||
"description": "飞书多维表格快捷操作。通过自然语言实现多维表格的增删改查、数据同步、批量操作等功能。当用户提到飞书、多维表格、Bitable、飞书表格相关任务时自动激活。",
|
||||
"version": "1.1.0",
|
||||
"category": "integration",
|
||||
"keywords": [
|
||||
"integration",
|
||||
"automation",
|
||||
"productivity"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "finance-plugin",
|
||||
"source": "./skills/finance-plugin",
|
||||
"description": "Plugin for finance",
|
||||
"version": "1.0.0",
|
||||
"category": "utility",
|
||||
"keywords": [
|
||||
"utility",
|
||||
"tools"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "finishing-a-development-branch-plugin",
|
||||
"source": "./skills/finishing-a-development-branch-plugin",
|
||||
"description": "Plugin for finishing-a-development-branch",
|
||||
"version": "1.0.0",
|
||||
"category": "utility",
|
||||
"keywords": [
|
||||
"utility",
|
||||
"tools"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "frontend-design-plugin",
|
||||
"source": "./skills/frontend-design-plugin",
|
||||
"description": "Plugin for frontend-design",
|
||||
"version": "1.0.0",
|
||||
"category": "development",
|
||||
"keywords": [
|
||||
"development",
|
||||
"coding",
|
||||
"workflow"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "gitea-plugin",
|
||||
"source": "./skills/gitea-plugin",
|
||||
"description": "Gitea 代码托管与 CI/CD 管理。用于 Gitea Actions workflow 管理、Runner 管理、PR 操作、仓库配置。",
|
||||
"version": "1.0.0",
|
||||
"category": "utility",
|
||||
"keywords": [
|
||||
"utility",
|
||||
"tools"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "openclaw-ops-plugin",
|
||||
"source": "./skills/openclaw-ops-plugin",
|
||||
"description": "Plugin for openclaw-ops",
|
||||
"version": "1.0.0",
|
||||
"category": "devops",
|
||||
"keywords": [
|
||||
"devops",
|
||||
"deployment",
|
||||
"operations"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "openclaw-plugin",
|
||||
"source": "./skills/openclaw-plugin",
|
||||
"description": "OpenClaw (龙虾) - Remote AI compute orchestration system. Dispatches requirements to Claude Code instances on remote machines, monitors execution, and aggregates results.",
|
||||
"version": "1.0.0",
|
||||
"category": "utility",
|
||||
"keywords": [
|
||||
"utility",
|
||||
"tools"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "ops-servers-plugin",
|
||||
"source": "./skills/ops-servers-plugin",
|
||||
"description": "Plugin for ops-servers",
|
||||
"version": "1.0.0",
|
||||
"category": "devops",
|
||||
"keywords": [
|
||||
"devops",
|
||||
"deployment",
|
||||
"operations"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "ops-tools-plugin",
|
||||
"source": "./skills/ops-tools-plugin",
|
||||
"description": "Plugin for ops-tools",
|
||||
"version": "1.0.0",
|
||||
"category": "devops",
|
||||
"keywords": [
|
||||
"devops",
|
||||
"deployment",
|
||||
"operations"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "pull-request-plugin",
|
||||
"source": "./skills/pull-request-plugin",
|
||||
"description": "Plugin for pr",
|
||||
"version": "1.0.0",
|
||||
"category": "productivity",
|
||||
"keywords": [
|
||||
"project-management",
|
||||
"tasks",
|
||||
"requirements"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "read-session-plugin",
|
||||
"source": "./skills/read-session-plugin",
|
||||
"description": "Plugin for read-session",
|
||||
"version": "1.0.0",
|
||||
"category": "workflow",
|
||||
"keywords": [
|
||||
"session",
|
||||
"workflow",
|
||||
"productivity"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "reload-session-plugin",
|
||||
"source": "./skills/reload-session-plugin",
|
||||
"description": "Plugin for reload-session",
|
||||
"version": "1.0.0",
|
||||
"category": "workflow",
|
||||
"keywords": [
|
||||
"session",
|
||||
"workflow",
|
||||
"productivity"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "req-commands-plugin",
|
||||
"source": "./skills/req-commands-plugin",
|
||||
"description": "需求命令详细参考。含撰写命令(new/draft/edit/check/split/history/compare)和流程命令(submit/review/phase/next/deploy/done)。",
|
||||
"version": "2.0.0",
|
||||
"category": "productivity",
|
||||
"keywords": [
|
||||
"project-management",
|
||||
"tasks",
|
||||
"requirements"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "req-deploy-plugin",
|
||||
"source": "./skills/req-deploy-plugin",
|
||||
"description": "Plugin for req-deploy",
|
||||
"version": "1.0.0",
|
||||
"category": "devops",
|
||||
"keywords": [
|
||||
"devops",
|
||||
"deployment",
|
||||
"operations"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "req-dev-plugin",
|
||||
"source": "./skills/req-dev-plugin",
|
||||
"description": "Plugin for req-dev",
|
||||
"version": "1.0.0",
|
||||
"category": "development",
|
||||
"keywords": [
|
||||
"development",
|
||||
"coding",
|
||||
"workflow"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "req-plugin",
|
||||
"source": "./skills/req-plugin",
|
||||
"description": "需求工作流管理入口。用于 /req 命令使用、需求生命周期管理、需求撰写(含草稿门禁)。",
|
||||
"version": "2.0.0",
|
||||
"category": "productivity",
|
||||
"keywords": [
|
||||
"project-management",
|
||||
"tasks",
|
||||
"requirements"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "req-prd-plugin",
|
||||
"source": "./skills/req-prd-plugin",
|
||||
"description": "Plugin for req-prd",
|
||||
"version": "1.0.0",
|
||||
"category": "productivity",
|
||||
"keywords": [
|
||||
"project-management",
|
||||
"tasks",
|
||||
"requirements"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "req-review-plugin",
|
||||
"source": "./skills/req-review-plugin",
|
||||
"description": "PRD 评审方法论。用于需求评审、PRD 文档审查、评审意见编写。当执行 /req review 或需要评审 PRD 文档时使用。",
|
||||
"version": "1.0.0",
|
||||
"category": "productivity",
|
||||
"keywords": [
|
||||
"project-management",
|
||||
"tasks",
|
||||
"requirements"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "req-test-gate-plugin",
|
||||
"source": "./skills/req-test-gate-plugin",
|
||||
"description": "测试与质量门禁制度。覆盖需求级测试(Gates 1-5,含前后端联调+视觉验证)、部署级验证(Deploy Gates)、持续回归(Regression)。",
|
||||
"version": "1.0.0",
|
||||
"category": "productivity",
|
||||
"keywords": [
|
||||
"project-management",
|
||||
"tasks",
|
||||
"requirements"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "req-workflow-plugin",
|
||||
"source": "./skills/req-workflow-plugin",
|
||||
"description": "需求完整工作流。用于从创建到归档的完整流程、Hook 自动同步、测试环境流程。当需要了解需求完整生命周期或同步策略时使用。",
|
||||
"version": "1.0.0",
|
||||
"category": "productivity",
|
||||
"keywords": [
|
||||
"project-management",
|
||||
"tasks",
|
||||
"requirements"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "requirement-plugin",
|
||||
"source": "./skills/requirement-plugin",
|
||||
"description": "[已废弃] 需求撰写功能已合并到 req-plugin。请使用 /req 命令。",
|
||||
"version": "2.0.0",
|
||||
"category": "productivity",
|
||||
"keywords": [
|
||||
"project-management",
|
||||
"tasks",
|
||||
"requirements"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "save-session-plugin",
|
||||
"source": "./skills/save-session-plugin",
|
||||
"description": "Plugin for save-session",
|
||||
"version": "1.0.0",
|
||||
"category": "workflow",
|
||||
"keywords": [
|
||||
"session",
|
||||
"workflow",
|
||||
"productivity"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "search-sessions-plugin",
|
||||
"source": "./skills/search-sessions-plugin",
|
||||
"description": "Plugin for search-sessions",
|
||||
"version": "1.0.0",
|
||||
"category": "workflow",
|
||||
"keywords": [
|
||||
"session",
|
||||
"workflow",
|
||||
"productivity"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "session-plugin",
|
||||
"source": "./skills/session-plugin",
|
||||
"description": "Manage Claude Code sessions — save, reload, read, and search saved conversations. Triggers on /session commands or when user mentions saving session, reloading session, finding previous conversations, or continuing previous work.",
|
||||
"version": "1.0.0",
|
||||
"category": "workflow",
|
||||
"keywords": [
|
||||
"session",
|
||||
"workflow",
|
||||
"productivity"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "siyuan-plugin",
|
||||
"source": "./skills/siyuan-plugin",
|
||||
"description": "Plugin for siyuan",
|
||||
"version": "1.0.0",
|
||||
"category": "integration",
|
||||
"keywords": [
|
||||
"integration",
|
||||
"automation",
|
||||
"productivity"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "siyuan-to-feishu-plugin",
|
||||
"source": "./skills/siyuan-to-feishu-plugin",
|
||||
"description": "将思源笔记导出为 PDF 并发送到飞书群。当用户提到发送笔记、导出PDF发飞书、/siyuan send、分享到飞书相关任务时自动激活。",
|
||||
"version": "1.0.0",
|
||||
"category": "integration",
|
||||
"keywords": [
|
||||
"integration",
|
||||
"automation",
|
||||
"productivity"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "skill-manager-plugin",
|
||||
"source": "./skills/skill-manager-plugin",
|
||||
"description": "|",
|
||||
"version": "1.0.0",
|
||||
"category": "utility",
|
||||
"keywords": [
|
||||
"utility",
|
||||
"tools"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "wecom-plugin",
|
||||
"source": "./skills/wecom-plugin",
|
||||
"description": "企业微信集成。通过自然语言发送消息、管理群机器人、操作审批流程、管理通讯录。当用户提到企业微信、微信工作、群机器人、企业号、wecom相关任务时自动激活。",
|
||||
"version": "1.0.0",
|
||||
"category": "integration",
|
||||
"keywords": [
|
||||
"integration",
|
||||
"automation",
|
||||
"productivity"
|
||||
],
|
||||
"strict": false
|
||||
},
|
||||
{
|
||||
"name": "qiudl-personal-plugin",
|
||||
"source": "./skills-personal/qiudl-personal-plugin",
|
||||
"description": "Plugin for qiudl-personal",
|
||||
"version": "1.0.0",
|
||||
"category": "utility",
|
||||
"keywords": [
|
||||
"utility",
|
||||
"tools"
|
||||
],
|
||||
"strict": false
|
||||
}
|
||||
]
|
||||
}
|
||||
24
.gitignore
vendored
Normal file
24
.gitignore
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
# Personal skills (not version controlled)
|
||||
skills-personal/
|
||||
|
||||
# Environment and secrets
|
||||
.env
|
||||
.env.*
|
||||
*.token
|
||||
*.key
|
||||
*.pem
|
||||
|
||||
# MCP generated config
|
||||
.mcp.json
|
||||
|
||||
# OS files
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Python
|
||||
__pycache__/
|
||||
*.pyc
|
||||
*.pyo
|
||||
|
||||
# Node
|
||||
node_modules/
|
||||
64
CLAUDE.md
Normal file
64
CLAUDE.md
Normal file
@@ -0,0 +1,64 @@
|
||||
# ai-proj-helper
|
||||
|
||||
Claude Code 技能市场 + MCP 配置管理工具。
|
||||
|
||||
## 快速开始
|
||||
|
||||
```bash
|
||||
./init.sh
|
||||
```
|
||||
|
||||
交互式配置 MCP 连接和生成 marketplace.json。支持命令行参数:
|
||||
|
||||
```bash
|
||||
./init.sh --mode stdio --env prod --token YOUR_TOKEN
|
||||
```
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
ai-proj-helper/
|
||||
├── skills/ # 公共技能(Git 版本控制)
|
||||
│ ├── ai-proj-plugin/
|
||||
│ │ ├── .claude-plugin/plugin.json
|
||||
│ │ └── skills/SKILL.md
|
||||
│ └── ...
|
||||
├── skills-personal/ # 个人技能(.gitignore 排除)
|
||||
│ └── qiudl-personal-plugin/
|
||||
├── claude-config.yaml # 技能启用/禁用 + MCP 配置
|
||||
├── init.sh # MCP + marketplace 初始化
|
||||
├── sync-skills.sh # 从 ~/.claude/skills/ 同步技能
|
||||
└── generate-marketplace.py # marketplace.json 生成器
|
||||
```
|
||||
|
||||
## 添加新技能
|
||||
|
||||
1. 在 `skills/` 下创建 `<name>-plugin/` 目录
|
||||
2. 创建 `.claude-plugin/plugin.json` 和 `skills/SKILL.md`
|
||||
3. 运行 `python3 generate-marketplace.py` 重新生成 marketplace.json
|
||||
|
||||
## 禁用技能
|
||||
|
||||
编辑 `claude-config.yaml`:
|
||||
|
||||
```yaml
|
||||
skills:
|
||||
disabled:
|
||||
- "dotfiles-plugin"
|
||||
- "biz-ops-plugin"
|
||||
```
|
||||
|
||||
重新运行 `./init.sh` 或 `python3 generate-marketplace.py`。
|
||||
|
||||
## MCP 环境
|
||||
|
||||
| 环境 | API 地址 |
|
||||
|------|----------|
|
||||
| dev | http://localhost:8080/api/v1 |
|
||||
| staging | https://ai-staging.pipexerp.com/api/v1 |
|
||||
| prod | https://ai.pipexerp.com/api/v1 |
|
||||
|
||||
## 个人技能
|
||||
|
||||
`skills-personal/` 目录不被 Git 跟踪,用于存放个人配置和工具。
|
||||
个人技能同样会被 `generate-marketplace.py` 扫描并加入 marketplace.json。
|
||||
16
PUSH.sh
16
PUSH.sh
@@ -1,16 +0,0 @@
|
||||
#!/bin/bash
|
||||
echo "🚀 Pushing to Gitea..."
|
||||
echo ""
|
||||
echo "Make sure you've created the repository on Gitea:"
|
||||
echo "https://gitea.pipexerp.com/huangjun/claude-marketplace"
|
||||
echo ""
|
||||
read -p "Press Enter to continue..."
|
||||
|
||||
git push -u origin main
|
||||
|
||||
echo ""
|
||||
echo "✅ Done! Your marketplace is now live at:"
|
||||
echo "https://gitea.pipexerp.com/huangjun/claude-marketplace"
|
||||
echo ""
|
||||
echo "Test it with:"
|
||||
echo "/plugin marketplace add git@gitea.pipexerp.com:huangjun/claude-marketplace.git"
|
||||
251
README.md
251
README.md
@@ -1,179 +1,130 @@
|
||||
# Claude Code Plugin Marketplace
|
||||
# ai-proj-helper
|
||||
|
||||
Custom Claude Code plugins for development workflows, DevOps, and business operations.
|
||||
Claude Code 技能市场 + MCP 配置管理工具。整合公共技能、个人技能、MCP 服务器配置于一体。
|
||||
|
||||
## 🚀 Quick Start
|
||||
> **从 claude-marketplace 迁移?** 本仓库是 claude-marketplace 的超集,已包含所有原有插件。直接使用本仓库即可,无需额外迁移。
|
||||
|
||||
### Add the Marketplace
|
||||
## 快速开始
|
||||
|
||||
```bash
|
||||
/plugin marketplace add git@gitea.pipexerp.com:huangjun/claude-marketplace.git
|
||||
# 1. 克隆仓库
|
||||
git clone https://gitea.pipexerp.com/pipexerp/ai-proj-helper.git
|
||||
cd ai-proj-helper
|
||||
|
||||
# 2. 运行初始化(交互式配置 MCP + 生成 marketplace)
|
||||
./init.sh
|
||||
|
||||
# 3. 添加技能市场
|
||||
/plugin marketplace add /path/to/ai-proj-helper
|
||||
```
|
||||
|
||||
Or using HTTPS (requires credential configuration):
|
||||
```bash
|
||||
/plugin marketplace add https://gitea.pipexerp.com/huangjun/claude-marketplace.git
|
||||
```
|
||||
|
||||
### Install Plugins
|
||||
也可以使用命令行参数跳过交互:
|
||||
|
||||
```bash
|
||||
# Install specific plugin
|
||||
/plugin install ai-proj-plugin@coolbuy-claude-plugins
|
||||
|
||||
# List all available plugins
|
||||
/plugin marketplace list coolbuy-claude-plugins
|
||||
./init.sh --mode stdio --env prod --token YOUR_TOKEN
|
||||
```
|
||||
|
||||
## 📦 Available Plugins (40 Total)
|
||||
## 目录结构
|
||||
|
||||
### 🚀 Development & Coding
|
||||
- **ai-proj-plugin** - AI project management with MCP integration
|
||||
- **dev-plugin** - General development workflows
|
||||
- **dev-arch-plugin** - Software architecture and design
|
||||
- **dev-coding-plugin** - Coding standards and best practices
|
||||
- **dev-test-plugin** - Testing workflows and automation
|
||||
- **frontend-design-plugin** - Frontend design and UI/UX
|
||||
|
||||
### 🔧 DevOps & Operations
|
||||
- **ops-tools-plugin** - DevOps tools for deployment and monitoring
|
||||
- **ops-servers-plugin** - Server management and SSH operations
|
||||
- **enjoysa-deploy-plugin** - Enjoysa deployment automation
|
||||
- **req-deploy-plugin** - Requirement deployment workflows
|
||||
|
||||
### 📋 Project & Requirements Management
|
||||
- **req-plugin** - Requirement management workflows
|
||||
- **req-dev-plugin** - Requirement development processes
|
||||
- **req-prd-plugin** - PRD (Product Requirements Document) creation
|
||||
- **req-commands-plugin** - Detailed command reference for /req
|
||||
- **req-review-plugin** - PRD review methodology
|
||||
- **req-workflow-plugin** - Complete requirement lifecycle workflow
|
||||
- **requirement-plugin** - General requirement handling
|
||||
- **executing-plans-plugin** - Plan execution and tracking
|
||||
|
||||
### 💼 Business Operations
|
||||
- **biz-plan-plugin** - Business planning and proposals
|
||||
- **biz-contract-plugin** - Contract drafting and management
|
||||
- **finance-plugin** - Financial operations and reporting
|
||||
|
||||
### 🔗 Integrations
|
||||
- **feishu-plugin** - Feishu/Lark integration (documents, spreadsheets)
|
||||
- **feishu-bitable-plugin** - Feishu Bitable (multi-dimensional tables)
|
||||
- **feishu-docx-plugin** - Feishu cloud documents
|
||||
- **wecom-plugin** - WeChat Work integration
|
||||
- **siyuan-plugin** - SiYuan note-taking integration
|
||||
- **data-excel-plugin** - Excel data processing
|
||||
- **doubao-voice-plugin** - Doubao Voice API (TTS, ASR, dialogue)
|
||||
|
||||
### 🏢 Project-Specific
|
||||
- **coolbuy-legacy-plugin** - Coolbuy legacy system workflows
|
||||
- **coolbuy-paas-plugin** - Coolbuy PaaS platform operations
|
||||
- **coolbuy-platform-plugin** - Coolbuy platform development
|
||||
- **enjoysa-plugin** - Enjoysa project workflows
|
||||
|
||||
### 🔄 Session Management
|
||||
- **save-session-plugin** - Save Claude Code sessions
|
||||
- **reload-session-plugin** - Reload saved sessions
|
||||
- **read-session-plugin** - Read session data
|
||||
- **search-sessions-plugin** - Search through sessions
|
||||
|
||||
### 🛠️ Utilities
|
||||
- **pr-plugin** - Pull request creation and management
|
||||
- **finishing-a-development-branch-plugin** - Branch finishing workflows
|
||||
- **skill-manager-plugin** - Skill management utilities
|
||||
- **qiudl-personal-plugin** - Personal productivity tools
|
||||
|
||||
## 📖 Usage Examples
|
||||
|
||||
### AI Project Management
|
||||
```bash
|
||||
/ai-proj-plugin:create-task "Implement user authentication"
|
||||
/ai-proj-plugin:start-timer
|
||||
```
|
||||
ai-proj-helper/
|
||||
├── .claude-plugin/marketplace.json # 自动生成
|
||||
├── claude-config.yaml # 技能启用/禁用 + MCP 配置
|
||||
├── init.sh # MCP + marketplace 初始化
|
||||
├── sync-skills.sh # 同步本地技能
|
||||
├── generate-marketplace.py # marketplace 生成器
|
||||
├── skills/ # 公共技能 (48 个,Git 版本控制)
|
||||
│ ├── ai-proj-plugin/
|
||||
│ ├── dev-coding-plugin/
|
||||
│ ├── feishu-plugin/
|
||||
│ └── ...
|
||||
└── skills-personal/ # 个人技能 (.gitignore 排除)
|
||||
└── qiudl-personal-plugin/
|
||||
```
|
||||
|
||||
### DevOps Operations
|
||||
```bash
|
||||
/ops-tools-plugin:deploy production
|
||||
/ops-servers-plugin:check-status
|
||||
## 可用技能 (48 公共)
|
||||
|
||||
### 开发
|
||||
|
||||
ai-proj, dev, dev-arch, dev-coding, dev-test, frontend-design, agent-swarm
|
||||
|
||||
### DevOps
|
||||
|
||||
ops-tools, ops-servers, enjoysa-deploy, req-deploy
|
||||
|
||||
### 需求管理
|
||||
|
||||
req, req-commands, req-dev, req-prd, req-review, req-test-gate, req-workflow, requirement, executing-plans
|
||||
|
||||
### 业务
|
||||
|
||||
biz-plan, biz-contract, biz-ops, finance
|
||||
|
||||
### 集成
|
||||
|
||||
feishu, feishu-bitable, feishu-docx, wecom, siyuan, siyuan-to-feishu, data-excel, doubao-voice
|
||||
|
||||
### 项目
|
||||
|
||||
coolbuy-legacy, coolbuy-paas, coolbuy-platform, enjoysa, openclaw, openclaw-ops
|
||||
|
||||
### 会话管理
|
||||
|
||||
save-session, reload-session, read-session, search-sessions, session
|
||||
|
||||
### 工具
|
||||
|
||||
pull-request, finishing-a-development-branch, skill-manager, dotfiles, gitea
|
||||
|
||||
## 配置管理
|
||||
|
||||
### claude-config.yaml
|
||||
|
||||
```yaml
|
||||
version: "1.0"
|
||||
|
||||
mcp:
|
||||
mode: stdio # stdio | sse
|
||||
env: prod # dev | staging | prod
|
||||
|
||||
skills:
|
||||
disabled: [] # 禁用的技能列表
|
||||
personal_dir: "skills-personal"
|
||||
```
|
||||
|
||||
### Development Workflow
|
||||
```bash
|
||||
/dev-coding-plugin:start-feature "user-profile"
|
||||
/finishing-a-development-branch-plugin:create-pr
|
||||
### 禁用技能
|
||||
|
||||
编辑 `claude-config.yaml` 添加要禁用的技能:
|
||||
|
||||
```yaml
|
||||
skills:
|
||||
disabled:
|
||||
- "dotfiles-plugin"
|
||||
- "biz-ops-plugin"
|
||||
```
|
||||
|
||||
### Business Operations
|
||||
```bash
|
||||
/biz-contract-plugin:draft "Software Subscription Agreement"
|
||||
/biz-plan-plugin:create-proposal
|
||||
```
|
||||
然后重新运行 `./init.sh` 或 `python3 generate-marketplace.py`。
|
||||
|
||||
## 🔐 Private Repository Access
|
||||
## 同步本地技能
|
||||
|
||||
For background auto-updates, set authentication token:
|
||||
将 `~/.claude/skills/` 中的技能同步到仓库:
|
||||
|
||||
```bash
|
||||
# Add to ~/.zshrc or ~/.bashrc
|
||||
export GITEA_TOKEN="your-gitea-token"
|
||||
./sync-skills.sh
|
||||
```
|
||||
|
||||
## 📝 Plugin Naming Convention
|
||||
## MCP 环境
|
||||
|
||||
All plugins use namespaced commands to avoid conflicts:
|
||||
- Format: `/plugin-name:command-name`
|
||||
- Example: `/ai-proj-plugin:create-task`
|
||||
| 环境 | API 地址 | 用途 |
|
||||
|------|----------|------|
|
||||
| dev | http://localhost:8080 | 本地开发 |
|
||||
| staging | https://ai-staging.pipexerp.com | 测试环境 |
|
||||
| prod | https://ai.pipexerp.com | 生产环境 |
|
||||
|
||||
## 🔄 Updates
|
||||
## 作者
|
||||
|
||||
Update the marketplace and plugins:
|
||||
**Donglin Lai (qiudl)** - qiudl@zhiyuncai.com
|
||||
|
||||
```bash
|
||||
# Update marketplace catalog
|
||||
/plugin marketplace update coolbuy-claude-plugins
|
||||
## 仓库
|
||||
|
||||
# Update specific plugin
|
||||
/plugin update ai-proj-plugin@coolbuy-claude-plugins
|
||||
|
||||
# Update all plugins from this marketplace
|
||||
/plugin update-all
|
||||
```
|
||||
|
||||
## 🏗️ Plugin Structure
|
||||
|
||||
Each plugin follows the official Claude Code plugin structure:
|
||||
```
|
||||
plugin-name-plugin/
|
||||
├── .claude-plugin/
|
||||
│ └── plugin.json # Plugin metadata
|
||||
├── skills/
|
||||
│ └── SKILL.md # Agent skills
|
||||
└── [scripts, configs, etc.]
|
||||
```
|
||||
|
||||
## 📚 Documentation
|
||||
|
||||
- [Official Claude Code Plugin Docs](https://code.claude.com/docs/en/plugins)
|
||||
- [Plugin Marketplace Guide](https://code.claude.com/docs/en/plugin-marketplaces)
|
||||
|
||||
## 👤 Author
|
||||
|
||||
**Donglin Lai (qiudl)**
|
||||
- Email: qiudl@zhiyuncai.com
|
||||
- Organization: PipeX ERP
|
||||
|
||||
## 📄 License
|
||||
|
||||
Individual plugins may have their own licenses. Please check each plugin's documentation.
|
||||
|
||||
## 🤝 Contributing
|
||||
|
||||
To add or update plugins:
|
||||
1. Clone this repository
|
||||
2. Add/modify plugins in the `plugins/` directory
|
||||
3. Regenerate `marketplace.json` using the provided scripts
|
||||
4. Submit changes
|
||||
|
||||
---
|
||||
|
||||
**Repository**: git@gitea.pipexerp.com:huangjun/claude-marketplace.git
|
||||
https://gitea.pipexerp.com/pipexerp/ai-proj-helper
|
||||
|
||||
13
claude-config.yaml
Normal file
13
claude-config.yaml
Normal file
@@ -0,0 +1,13 @@
|
||||
version: "1.0"
|
||||
|
||||
mcp:
|
||||
mode: stdio # stdio | sse
|
||||
env: prod # dev | staging | prod
|
||||
# Token 不存储在此文件,由 init.sh 引导配置
|
||||
|
||||
skills:
|
||||
disabled: []
|
||||
# disabled:
|
||||
# - "dotfiles-plugin"
|
||||
# - "biz-ops-plugin"
|
||||
personal_dir: "skills-personal"
|
||||
@@ -1,82 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Convert dotfiles custom skills to official Claude Code plugins
|
||||
|
||||
SOURCE_DIR="/Users/junhuang/coolbuy/new-ai-proj/dotfiles/claude-skills"
|
||||
TARGET_DIR="/Users/junhuang/coolbuy/claude-marketplace/plugins"
|
||||
|
||||
echo "Converting skills to plugins..."
|
||||
|
||||
# Loop through each skill directory
|
||||
for skill_dir in "$SOURCE_DIR"/*; do
|
||||
# Skip non-directories and special files
|
||||
if [ ! -d "$skill_dir" ] || [ "$(basename "$skill_dir")" = ".git" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
skill_name=$(basename "$skill_dir")
|
||||
plugin_name="${skill_name}-plugin"
|
||||
plugin_dir="$TARGET_DIR/$plugin_name"
|
||||
|
||||
echo "Processing: $skill_name -> $plugin_name"
|
||||
|
||||
# Create plugin directory structure
|
||||
mkdir -p "$plugin_dir/.claude-plugin"
|
||||
mkdir -p "$plugin_dir/skills"
|
||||
|
||||
# Copy SKILL.md if exists
|
||||
if [ -f "$skill_dir/SKILL.md" ]; then
|
||||
cp "$skill_dir/SKILL.md" "$plugin_dir/skills/"
|
||||
fi
|
||||
|
||||
# Copy skill.yaml if exists (for reference)
|
||||
if [ -f "$skill_dir/skill.yaml" ]; then
|
||||
cp "$skill_dir/skill.yaml" "$plugin_dir/.skill.yaml.original"
|
||||
fi
|
||||
|
||||
# Copy any Python scripts or other files
|
||||
find "$skill_dir" -type f \( -name "*.py" -o -name "*.sh" -o -name "*.js" -o -name "*.json" -o -name "*.md" \) -not -name "SKILL.md" -not -name "skill.yaml" -exec cp {} "$plugin_dir/" \;
|
||||
|
||||
# Copy subdirectories (like scripts/)
|
||||
for subdir in "$skill_dir"/*; do
|
||||
if [ -d "$subdir" ]; then
|
||||
subdir_name=$(basename "$subdir")
|
||||
cp -r "$subdir" "$plugin_dir/"
|
||||
fi
|
||||
done
|
||||
|
||||
# Read version from skill.yaml if exists, otherwise use 1.0.0
|
||||
version="1.0.0"
|
||||
if [ -f "$skill_dir/skill.yaml" ]; then
|
||||
yaml_version=$(grep "^version:" "$skill_dir/skill.yaml" | sed 's/version: *//' | tr -d '"' | tr -d "'")
|
||||
if [ ! -z "$yaml_version" ]; then
|
||||
version="$yaml_version"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Read description from skill.yaml
|
||||
description="Plugin for $skill_name"
|
||||
if [ -f "$skill_dir/skill.yaml" ]; then
|
||||
yaml_desc=$(grep "^description:" "$skill_dir/skill.yaml" | sed 's/description: *//' | tr -d '"')
|
||||
if [ ! -z "$yaml_desc" ]; then
|
||||
description="$yaml_desc"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Create plugin.json
|
||||
cat > "$plugin_dir/.claude-plugin/plugin.json" << EOF
|
||||
{
|
||||
"name": "$plugin_name",
|
||||
"description": "$description",
|
||||
"version": "$version",
|
||||
"author": {
|
||||
"name": "qiudl"
|
||||
}
|
||||
}
|
||||
EOF
|
||||
|
||||
echo " ✓ Created $plugin_name"
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "Conversion complete! Created $(ls -1 "$TARGET_DIR" | wc -l) plugins."
|
||||
@@ -1,14 +1,57 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
try:
|
||||
import yaml
|
||||
HAS_YAML = True
|
||||
except ImportError:
|
||||
HAS_YAML = False
|
||||
|
||||
# Paths
|
||||
script_dir = Path(__file__).parent.resolve()
|
||||
plugins_dir = script_dir / "plugins"
|
||||
skills_dir = script_dir / "skills"
|
||||
personal_dir = script_dir / "skills-personal"
|
||||
config_file = script_dir / "claude-config.yaml"
|
||||
marketplace_file = script_dir / ".claude-plugin" / "marketplace.json"
|
||||
|
||||
|
||||
def load_config():
|
||||
"""Load claude-config.yaml and return disabled list + personal_dir."""
|
||||
disabled = []
|
||||
personal = "skills-personal"
|
||||
|
||||
if config_file.exists() and HAS_YAML:
|
||||
with open(config_file) as f:
|
||||
cfg = yaml.safe_load(f) or {}
|
||||
skills_cfg = cfg.get("skills", {})
|
||||
disabled = skills_cfg.get("disabled", []) or []
|
||||
personal = skills_cfg.get("personal_dir", personal)
|
||||
elif config_file.exists():
|
||||
# Fallback: parse disabled list without PyYAML
|
||||
in_disabled = False
|
||||
with open(config_file) as f:
|
||||
for line in f:
|
||||
stripped = line.strip()
|
||||
if stripped.startswith("disabled:"):
|
||||
rest = stripped[len("disabled:"):].strip()
|
||||
if rest == "[]":
|
||||
break
|
||||
in_disabled = True
|
||||
continue
|
||||
if in_disabled:
|
||||
if stripped.startswith("- "):
|
||||
val = stripped[2:].strip().strip('"').strip("'")
|
||||
disabled.append(val)
|
||||
elif stripped and not stripped.startswith("#"):
|
||||
break
|
||||
if stripped.startswith("personal_dir:"):
|
||||
personal = stripped.split(":", 1)[1].strip().strip('"').strip("'")
|
||||
|
||||
return disabled, personal
|
||||
|
||||
|
||||
# Category mapping
|
||||
def get_category_and_keywords(plugin_name):
|
||||
if any(x in plugin_name for x in ['dev-', 'coding', 'frontend']):
|
||||
@@ -26,31 +69,61 @@ def get_category_and_keywords(plugin_name):
|
||||
else:
|
||||
return "utility", ["utility", "tools"]
|
||||
|
||||
# Collect plugins
|
||||
|
||||
def scan_plugins(directory, source_prefix, disabled):
|
||||
"""Scan a directory for plugins, excluding disabled ones."""
|
||||
plugins = []
|
||||
if not directory.is_dir():
|
||||
return plugins
|
||||
|
||||
for plugin_dir in sorted(directory.glob("*-plugin")):
|
||||
if not plugin_dir.is_dir():
|
||||
continue
|
||||
|
||||
plugin_name = plugin_dir.name
|
||||
if plugin_name in disabled:
|
||||
print(f" ⊘ {plugin_name} (disabled)")
|
||||
continue
|
||||
|
||||
manifest_path = plugin_dir / ".claude-plugin" / "plugin.json"
|
||||
if not manifest_path.exists():
|
||||
continue
|
||||
|
||||
with open(manifest_path) as f:
|
||||
manifest = json.load(f)
|
||||
|
||||
category, keywords = get_category_and_keywords(plugin_name)
|
||||
|
||||
plugins.append({
|
||||
"name": plugin_name,
|
||||
"source": f"{source_prefix}/{plugin_name}",
|
||||
"description": manifest.get("description", f"Plugin for {plugin_name}"),
|
||||
"version": manifest.get("version", "1.0.0"),
|
||||
"category": category,
|
||||
"keywords": keywords,
|
||||
"strict": False
|
||||
})
|
||||
|
||||
return plugins
|
||||
|
||||
|
||||
# Load config
|
||||
disabled_skills, personal_dir_name = load_config()
|
||||
personal_skills_dir = script_dir / personal_dir_name
|
||||
|
||||
# Collect plugins from skills/ and skills-personal/
|
||||
plugins = []
|
||||
for plugin_dir in sorted(plugins_dir.glob("*-plugin")):
|
||||
if not plugin_dir.is_dir():
|
||||
continue
|
||||
print("Scanning skills/ ...")
|
||||
plugins.extend(scan_plugins(skills_dir, "./skills", disabled_skills))
|
||||
print(f" Found {len(plugins)} public plugins")
|
||||
|
||||
manifest_path = plugin_dir / ".claude-plugin" / "plugin.json"
|
||||
if not manifest_path.exists():
|
||||
continue
|
||||
|
||||
with open(manifest_path) as f:
|
||||
manifest = json.load(f)
|
||||
|
||||
plugin_name = plugin_dir.name
|
||||
category, keywords = get_category_and_keywords(plugin_name)
|
||||
|
||||
plugins.append({
|
||||
"name": plugin_name,
|
||||
"source": f"./plugins/{plugin_name}",
|
||||
"description": manifest.get("description", f"Plugin for {plugin_name}"),
|
||||
"version": manifest.get("version", "1.0.0"),
|
||||
"category": category,
|
||||
"keywords": keywords,
|
||||
"strict": False
|
||||
})
|
||||
personal_count = 0
|
||||
if personal_skills_dir.is_dir():
|
||||
print(f"Scanning {personal_dir_name}/ ...")
|
||||
personal_plugins = scan_plugins(personal_skills_dir, f"./{personal_dir_name}", disabled_skills)
|
||||
personal_count = len(personal_plugins)
|
||||
plugins.extend(personal_plugins)
|
||||
print(f" Found {personal_count} personal plugins")
|
||||
|
||||
# Create marketplace
|
||||
marketplace = {
|
||||
@@ -62,13 +135,16 @@ marketplace = {
|
||||
"metadata": {
|
||||
"description": "Custom Claude Code plugins for development workflows, DevOps, and business operations",
|
||||
"version": "1.0.0",
|
||||
"pluginRoot": "./plugins"
|
||||
"pluginRoot": "./skills"
|
||||
},
|
||||
"plugins": plugins
|
||||
}
|
||||
|
||||
# Ensure output directory exists
|
||||
marketplace_file.parent.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
# Write marketplace.json
|
||||
with open(marketplace_file, 'w') as f:
|
||||
json.dump(marketplace, f, indent=2, ensure_ascii=False)
|
||||
|
||||
print(f"✓ Generated marketplace.json with {len(plugins)} plugins")
|
||||
print(f"\n✓ Generated marketplace.json with {len(plugins)} plugins ({personal_count} personal)")
|
||||
|
||||
@@ -1,102 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Generate marketplace.json from converted plugins
|
||||
|
||||
TARGET_DIR="/Users/junhuang/coolbuy/claude-marketplace/plugins"
|
||||
MARKETPLACE_FILE="/Users/junhuang/coolbuy/claude-marketplace/.claude-plugin/marketplace.json"
|
||||
|
||||
echo "Generating marketplace.json..."
|
||||
|
||||
# Start JSON
|
||||
cat > "$MARKETPLACE_FILE" << 'EOF'
|
||||
{
|
||||
"name": "coolbuy-claude-plugins",
|
||||
"owner": {
|
||||
"name": "Donglin Lai (qiudl)",
|
||||
"email": "qiudl@zhiyuncai.com"
|
||||
},
|
||||
"metadata": {
|
||||
"description": "Custom Claude Code plugins for development workflows, DevOps, and business operations",
|
||||
"version": "1.0.0",
|
||||
"pluginRoot": "./plugins"
|
||||
},
|
||||
"plugins": [
|
||||
EOF
|
||||
|
||||
# Loop through each plugin and extract info
|
||||
first=true
|
||||
for plugin_dir in "$TARGET_DIR"/*-plugin; do
|
||||
if [ ! -d "$plugin_dir" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
plugin_name=$(basename "$plugin_dir")
|
||||
manifest="$plugin_dir/.claude-plugin/plugin.json"
|
||||
|
||||
if [ ! -f "$manifest" ]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# Extract info from plugin.json using grep and sed
|
||||
description=$(grep '"description"' "$manifest" | head -1 | sed 's/.*"description": *"\([^"]*\)".*/\1/')
|
||||
version=$(grep '"version"' "$manifest" | head -1 | sed 's/.*"version": *"\([^"]*\)".*/\1/')
|
||||
|
||||
# Determine category based on plugin name
|
||||
category="utility"
|
||||
keywords=""
|
||||
|
||||
case "$plugin_name" in
|
||||
*dev-*|*coding*|*frontend*)
|
||||
category="development"
|
||||
keywords='["development", "coding", "workflow"]'
|
||||
;;
|
||||
*ops-*|*deploy*|*server*)
|
||||
category="devops"
|
||||
keywords='["devops", "deployment", "operations"]'
|
||||
;;
|
||||
*ai-proj*|*req*)
|
||||
category="productivity"
|
||||
keywords='["project-management", "tasks", "requirements"]'
|
||||
;;
|
||||
*feishu*|*wecom*|*siyuan*)
|
||||
category="integration"
|
||||
keywords='["integration", "automation", "productivity"]'
|
||||
;;
|
||||
*biz-*)
|
||||
category="business"
|
||||
keywords='["business", "planning", "contracts"]'
|
||||
;;
|
||||
*session*)
|
||||
category="workflow"
|
||||
keywords='["session", "workflow", "productivity"]'
|
||||
;;
|
||||
esac
|
||||
|
||||
# Add comma if not first entry
|
||||
if [ "$first" = true ]; then
|
||||
first=false
|
||||
else
|
||||
echo "," >> "$MARKETPLACE_FILE"
|
||||
fi
|
||||
|
||||
# Write plugin entry
|
||||
cat >> "$MARKETPLACE_FILE" << ENTRY
|
||||
{
|
||||
"name": "$plugin_name",
|
||||
"source": "$plugin_name",
|
||||
"description": "$description",
|
||||
"version": "$version",
|
||||
"category": "$category",
|
||||
"keywords": $keywords,
|
||||
"strict": false
|
||||
}ENTRY
|
||||
done
|
||||
|
||||
# Close JSON
|
||||
cat >> "$MARKETPLACE_FILE" << 'EOF'
|
||||
|
||||
]
|
||||
}
|
||||
EOF
|
||||
|
||||
echo "✓ Generated marketplace.json with $(grep -c '"name"' "$MARKETPLACE_FILE" | awk '{print $1-1}') plugins"
|
||||
189
init.sh
Executable file
189
init.sh
Executable file
@@ -0,0 +1,189 @@
|
||||
#!/bin/bash
|
||||
# ai-proj-helper 初始化脚本
|
||||
# 配置 MCP 服务器 + 生成 marketplace.json
|
||||
|
||||
set -e
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
MCP_CONFIG="$HOME/.claude/.mcp.json"
|
||||
MCP_BRIDGE_DIR="$HOME/coding/qiudl/new-ai-proj/mcp-task-bridge"
|
||||
CONFIG_FILE="$SCRIPT_DIR/claude-config.yaml"
|
||||
|
||||
# Default values
|
||||
MODE=""
|
||||
ENV=""
|
||||
TOKEN=""
|
||||
|
||||
# ── Parse command line arguments ──────────────────────────────────────
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--mode) MODE="$2"; shift 2 ;;
|
||||
--env) ENV="$2"; shift 2 ;;
|
||||
--token) TOKEN="$2"; shift 2 ;;
|
||||
-h|--help)
|
||||
echo "Usage: ./init.sh [--mode stdio|sse] [--env dev|staging|prod] [--token PAT_TOKEN]"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " --mode MCP connection mode: stdio (local) or sse (remote)"
|
||||
echo " --env Environment: dev, staging, or prod"
|
||||
echo " --token Personal Access Token for ai-proj API"
|
||||
echo ""
|
||||
echo "Without arguments, runs in interactive mode."
|
||||
exit 0
|
||||
;;
|
||||
*) echo "Unknown option: $1"; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# ── Read config defaults ─────────────────────────────────────────────
|
||||
read_config_value() {
|
||||
local key="$1"
|
||||
local default="$2"
|
||||
if [ -f "$CONFIG_FILE" ]; then
|
||||
local val
|
||||
val=$(grep "^ ${key}:" "$CONFIG_FILE" 2>/dev/null | head -1 | sed 's/^[^:]*: *//' | sed 's/ *#.*//' | tr -d '"' | tr -d "'")
|
||||
if [ -n "$val" ]; then
|
||||
echo "$val"
|
||||
return
|
||||
fi
|
||||
fi
|
||||
echo "$default"
|
||||
}
|
||||
|
||||
CONFIG_MODE=$(read_config_value "mode" "stdio")
|
||||
CONFIG_ENV=$(read_config_value "env" "prod")
|
||||
|
||||
# ── Interactive mode selection ────────────────────────────────────────
|
||||
if [ -z "$MODE" ]; then
|
||||
echo "┌─────────────────────────────────────┐"
|
||||
echo "│ ai-proj-helper 初始化 │"
|
||||
echo "└─────────────────────────────────────┘"
|
||||
echo ""
|
||||
echo "MCP 连接模式:"
|
||||
echo " 1) stdio - 本地进程 (需要 mcp-task-bridge)"
|
||||
echo " 2) sse - 远程 SSE 连接"
|
||||
echo ""
|
||||
read -p "选择模式 [1/2] (default: $([ "$CONFIG_MODE" = "sse" ] && echo "2" || echo "1")): " mode_choice
|
||||
case "$mode_choice" in
|
||||
2|sse) MODE="sse" ;;
|
||||
*) MODE="stdio" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# ── Interactive environment selection ─────────────────────────────────
|
||||
if [ -z "$ENV" ]; then
|
||||
echo ""
|
||||
echo "环境:"
|
||||
echo " 1) dev - http://localhost:8080"
|
||||
echo " 2) staging - https://ai-staging.pipexerp.com"
|
||||
echo " 3) prod - https://ai.pipexerp.com"
|
||||
echo ""
|
||||
default_num=3
|
||||
[ "$CONFIG_ENV" = "dev" ] && default_num=1
|
||||
[ "$CONFIG_ENV" = "staging" ] && default_num=2
|
||||
read -p "选择环境 [1/2/3] (default: $default_num): " env_choice
|
||||
case "$env_choice" in
|
||||
1|dev) ENV="dev" ;;
|
||||
2|staging) ENV="staging" ;;
|
||||
*) ENV="prod" ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# ── Resolve API base URL ─────────────────────────────────────────────
|
||||
case "$ENV" in
|
||||
dev) API_BASE="http://localhost:8080/api/v1" ;;
|
||||
staging) API_BASE="https://ai-staging.pipexerp.com/api/v1" ;;
|
||||
prod) API_BASE="https://ai.pipexerp.com/api/v1" ;;
|
||||
esac
|
||||
|
||||
# ── Token input ───────────────────────────────────────────────────────
|
||||
if [ -z "$TOKEN" ]; then
|
||||
echo ""
|
||||
echo "请输入 AI-Proj Personal Access Token (PAT):"
|
||||
echo " 获取方式: 登录 AI-Proj → 设置 → API Tokens → 创建"
|
||||
echo ""
|
||||
read -sp "Token: " TOKEN
|
||||
echo ""
|
||||
fi
|
||||
|
||||
if [ -z "$TOKEN" ]; then
|
||||
echo "❌ Token 不能为空"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "配置信息:"
|
||||
echo " 模式: $MODE"
|
||||
echo " 环境: $ENV ($API_BASE)"
|
||||
echo ""
|
||||
|
||||
# ── stdio mode: ensure mcp-task-bridge ────────────────────────────────
|
||||
if [ "$MODE" = "stdio" ]; then
|
||||
if [ ! -d "$MCP_BRIDGE_DIR" ]; then
|
||||
echo "📦 mcp-task-bridge 未找到,正在克隆..."
|
||||
git clone https://gitea.pipexerp.com/pipexerp/mcp-task-bridge.git "$MCP_BRIDGE_DIR"
|
||||
fi
|
||||
|
||||
if [ ! -f "$MCP_BRIDGE_DIR/dist/index.js" ]; then
|
||||
echo "🔨 构建 mcp-task-bridge..."
|
||||
cd "$MCP_BRIDGE_DIR"
|
||||
npm install
|
||||
npm run build
|
||||
cd "$SCRIPT_DIR"
|
||||
fi
|
||||
|
||||
BRIDGE_ENTRY="$MCP_BRIDGE_DIR/dist/index.js"
|
||||
|
||||
# Generate .mcp.json for stdio mode
|
||||
mkdir -p "$(dirname "$MCP_CONFIG")"
|
||||
cat > "$MCP_CONFIG" << EOF
|
||||
{
|
||||
"mcpServers": {
|
||||
"ai-proj": {
|
||||
"command": "node",
|
||||
"args": ["$BRIDGE_ENTRY"],
|
||||
"env": {
|
||||
"NODE_ENV": "production",
|
||||
"TASK_API_BASE": "$API_BASE",
|
||||
"TASK_API_TOKEN": "$TOKEN",
|
||||
"MCP_SERVER_NAME": "ai-proj"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
echo "✅ 已生成 $MCP_CONFIG (stdio 模式)"
|
||||
|
||||
elif [ "$MODE" = "sse" ]; then
|
||||
# Generate .mcp.json for SSE mode
|
||||
SSE_URL="${API_BASE%/api/v1}/mcp/sse"
|
||||
mkdir -p "$(dirname "$MCP_CONFIG")"
|
||||
cat > "$MCP_CONFIG" << EOF
|
||||
{
|
||||
"mcpServers": {
|
||||
"ai-proj": {
|
||||
"type": "sse",
|
||||
"url": "$SSE_URL",
|
||||
"headers": {
|
||||
"Authorization": "Bearer $TOKEN"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
echo "✅ 已生成 $MCP_CONFIG (SSE 模式)"
|
||||
fi
|
||||
|
||||
# ── Generate marketplace.json ─────────────────────────────────────────
|
||||
echo ""
|
||||
echo "🔄 生成 marketplace.json..."
|
||||
cd "$SCRIPT_DIR"
|
||||
python3 generate-marketplace.py
|
||||
|
||||
echo ""
|
||||
echo "┌─────────────────────────────────────┐"
|
||||
echo "│ ✅ 初始化完成! │"
|
||||
echo "└─────────────────────────────────────┘"
|
||||
echo ""
|
||||
echo "下次启动 Claude Code 即可使用 MCP 工具。"
|
||||
echo "如需更新技能配置,编辑 claude-config.yaml 后重新运行 ./init.sh"
|
||||
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"name": "qiudl-personal-plugin",
|
||||
"description": "Plugin for qiudl-personal",
|
||||
"version": "1.0.0",
|
||||
"author": {
|
||||
"name": "qiudl"
|
||||
}
|
||||
}
|
||||
@@ -1,106 +0,0 @@
|
||||
# 邱栋梁个人配置 Skill
|
||||
|
||||
## cn-dev 远程开发机
|
||||
|
||||
| 配置项 | 值 |
|
||||
|--------|-----|
|
||||
| 别名 | cn-dev |
|
||||
| Tailscale IP | 100.92.148.46 |
|
||||
| SSH 用户 | johnqiu |
|
||||
| 主机名 | Yanmeis-MacBook-Pro.local |
|
||||
| SSH 密钥 | ~/.ssh/id_ed25519_cn_dev |
|
||||
| 设备类型 | MacBook Pro (Apple Silicon) |
|
||||
| 系统 | macOS (Darwin 25.1.0) |
|
||||
|
||||
### SSH 快捷连接
|
||||
|
||||
```bash
|
||||
ssh cn-dev # 直接连接
|
||||
ssh cn-dev "command" # 远程执行命令
|
||||
```
|
||||
|
||||
### 项目路径
|
||||
|
||||
| 项目 | 路径 |
|
||||
|------|------|
|
||||
| new-ai-proj | /Users/johnqiu/workspace/new-ai-proj |
|
||||
| AI-Proj-iOS | /Users/johnqiu/workspace/new-ai-proj/AI-Proj-iOS |
|
||||
|
||||
### 已连接设备
|
||||
|
||||
| 设备 | 型号 | UDID | 状态 |
|
||||
|------|------|------|------|
|
||||
| JohnQiu's iPhone | iPhone 17 Pro | 00008150-001E64800AD2401C | 已连接 |
|
||||
|
||||
---
|
||||
|
||||
## au-dev 本机 (Mac mini)
|
||||
|
||||
| 配置项 | 值 |
|
||||
|--------|-----|
|
||||
| 主机名 | DONGLIN's Mac mini |
|
||||
| Tailscale IP | 100.114.124.68 |
|
||||
| 位置 | 澳大利亚 |
|
||||
|
||||
### 项目路径
|
||||
|
||||
| 项目 | 路径 |
|
||||
|------|------|
|
||||
| new-ai-proj | /Users/donglinlai/coding/qiudl/new-ai-proj |
|
||||
|
||||
---
|
||||
|
||||
## iOS 部署流程
|
||||
|
||||
### 方式 1: 通过 cn-dev 部署到 iPhone
|
||||
|
||||
```bash
|
||||
# 1. 同步代码
|
||||
ssh cn-dev "cd /Users/johnqiu/workspace/new-ai-proj && git pull"
|
||||
|
||||
# 2. 打开 Xcode
|
||||
ssh cn-dev "open /Users/johnqiu/workspace/new-ai-proj/AI-Proj-iOS/AI-Proj-iOS.xcodeproj"
|
||||
|
||||
# 3. 在 Xcode 中选择 iPhone 设备,按 Cmd+R 运行
|
||||
```
|
||||
|
||||
### 方式 2: 命令行构建安装
|
||||
|
||||
```bash
|
||||
# 构建并安装 (需要 iPhone 信任并解锁)
|
||||
ssh cn-dev "cd /Users/johnqiu/workspace/new-ai-proj/AI-Proj-iOS && \
|
||||
xcodebuild -project AI-Proj-iOS.xcodeproj \
|
||||
-scheme 'AI-Proj-iOS' \
|
||||
-destination 'id=00008150-001E64800AD2401C' \
|
||||
-configuration Debug \
|
||||
build"
|
||||
```
|
||||
|
||||
### 常见问题
|
||||
|
||||
**DDI 服务不可用 (ddiServicesAvailable: false)**
|
||||
|
||||
需要在 iPhone 上:
|
||||
1. 解锁 iPhone
|
||||
2. 如有弹窗,点击「信任此电脑」
|
||||
3. 输入 iPhone 密码确认
|
||||
|
||||
**检查设备状态**
|
||||
|
||||
```bash
|
||||
ssh cn-dev "xcrun devicectl list devices"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 凭据
|
||||
|
||||
| 服务 | 账号 | 密码 | 备注 |
|
||||
|------|------|------|------|
|
||||
| AI-Proj | qiudl | Admin@2026~ | 管理员账号 |
|
||||
| AI-Proj | lvkai | Lvkai@123 | 测试账号 |
|
||||
|
||||
---
|
||||
|
||||
**创建时间**: 2026-01-31 17:45:00 ACDT
|
||||
**最后更新**: 2026-01-31 17:55:00 ACDT
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user