acplugin 是一个 CLI 工具,将 Claude Code 插件(Skills、Instructions、MCP、Agents、Commands、Hooks)转换为 Codex CLI、OpenCode 和 Cursor 格式。
- TypeScript + Node.js (CommonJS)
- Commander.js (CLI)
- @inquirer/prompts + chalk (TUI)
- gray-matter (YAML frontmatter)
- @iarna/toml (TOML 序列化)
- vitest (测试)
src/
├── index.ts # CLI 入口 + 交互式 wizard
├── types.ts # 所有类型定义
├── github.ts # GitHub 仓库下载
├── tui.ts # TUI 交互(wizard、checkbox、彩色输出)
├── scanner/
│ ├── claude.ts # .claude/ 项目结构扫描(导出可复用函数)
│ └── plugin.ts # .claude-plugin/ 插件格式扫描
├── converter/
│ ├── skill.ts # SKILL.md 转换
│ ├── instructions.ts # CLAUDE.md → AGENTS.md / .mdc
│ ├── mcp.ts # .mcp.json → TOML / JSON
│ ├── agent.ts # Agent 定义转换(含降级策略)
│ ├── command.ts # Command 转换
│ └── hooks.ts # Hooks 转换(含兼容性报告)
├── writer/
│ ├── codex.ts # Codex 输出编排
│ ├── opencode.ts # OpenCode 输出编排
│ └── cursor.ts # Cursor 输出编排
└── utils/
├── frontmatter.ts # YAML frontmatter 解析/序列化
├── toml.ts # TOML 工具
└── fs.ts # 文件系统工具
- 三阶段 Pipeline: Scanner → Converter → Writer
- Scanner 提取可复用函数:
scanSkillsDir(),scanAgentsDir()等被 claude.ts 和 plugin.ts 共用 - Converter 无副作用: 接收数据,返回
ConvertedFile,不直接写文件 - Writer 负责编排: 调用多个 converter,处理合并逻辑(如多个 instruction 合并为一个 AGENTS.md)
- 降级策略: 目标平台不支持的功能降级为文档/规则,并输出 warning
- 在
types.ts添加类型定义 - 在
scanner/claude.ts添加扫描函数(导出为可复用) - 在
scanner/plugin.ts集成 - 创建
converter/xxx.ts,实现三个平台的转换 - 在三个
writer/*.ts中调用 converter - 添加测试
- 在
types.ts的Platform联合类型添加新值 - 每个
converter/*.ts添加新平台的转换逻辑 - 创建
writer/newplatform.ts - 在
index.ts注册 - 在
tui.ts的selectPlatforms()添加选项 - 添加测试
- 社区插件的 YAML frontmatter 可能格式不规范
scanSkillsDir()和scanAgentsDir()已加 try-catch- 解析失败时保留原始内容,frontmatter 设为空对象
- 测试文件在
src/__tests__/ - test-fixture/ 目录提供完整的 Claude Code 项目示例
- 运行:
npm test或npx vitest run - 每个 converter 模块有独立测试文件
- 包名:
@disdjj/acplugin - 账号有 2FA,发布需要 OTP:
npm publish --access=public prepublishOnly自动编译files字段排除了dist/__tests__/
- commit message 使用 conventional commits 格式
- 仓库: https://github.com/TokenRollAI/acplugin
- 主分支: main