开源地址:https://gitee.com/opencode-plugin/mimocode-compose
使用方式:
1、clone 到自己的目录
git clone https://gitee.com/opencode-plugin/mimocode-compose
npm install
2、将项目目录 agent/compose.md 复制到 ~/.config/opencode/agents/compose.md
(windows用户复制到:%USERPROFILE%/.config/opencode/agents/compose.md)
3、OpenCode配置文件中注册插件:目录写自己 clone 后的目录
%USERPROFILE%\.config\opencode\opencode.json
移植后的代码审核由 8044 大佬推荐的免费的Minimax-M3 执行
有没有用M3的自己去拿 免费活动到 6 月 17 日 - iFlow 补给站 - 心流AI交流社区
移植审核结果:
# mimocode-compose 项目 Review 报告
> **核心结论**:项目结构清晰,技能资源 1:1 字节级还原,构建可重复。相对官方源码做了正确的"插件化简化"和"中文化适配",并新增了 `resource` 参数扩展。
| 维度 | 评分 |
| ---------- | ---------------------------------------- |
| 资源完整性 | ⭐⭐⭐⭐⭐(44/44 字节一致) |
| 代码质量 | ⭐⭐⭐⭐(简洁清晰,仅 3 处小瑕疵) |
| 架构合理性 | ⭐⭐⭐⭐⭐(正确处理了"插件层"的能力边界) |
| 可维护性 | ⭐⭐⭐⭐⭐(`upstream-sync-guide.md` 极佳) |
| 文档质量 | ⭐⭐⭐⭐(README + 同步手册 + 代码注释齐全) |
| **综合** | **高质量的移植项目** |
---
## 一、技能资源完整性
通过 SHA256 哈希校验:**44 个技能文件全部与官方 `.bundle/` 字节完全一致**。
| 维度 | 官方 (MiMo-Code) | 下游 (mimocode-compose) | 结果 |
| ---------- | ------------------------------------------------------------ | ----------------------- | -------- |
| 技能目录数 | 15 个 | 15 个 | 一致 |
| 总文件数 | 44 个 | 44 个 | 一致 |
| 字节哈希 | — | — | 全部相同 |
| 关键文件 | `debug/condition-based-waiting-example.ts` (5054 B)、`debug/find-polluter.sh`、`brainstorm/scripts/server.cjs`、`new-skill/graphviz-conventions.dot` 等非 .md 资源 | 全部存在 | 一致 |
> 经验证,`dist/skills/debug/condition-based-waiting-example.ts` 与 `src/` 和 `upstream/.bundle/` 哈希完全相同 (`40AE5EBE497FDF31...`),**它是 `copy-skills.cjs` 复制的资源**,不是 tsc 编译产物(被 `tsconfig.json` 的 `exclude` 正确屏蔽)。
---
## 二、核心源码改造质量
### 2.1 `src/index.ts` — 插件入口(54 行)
- **官方对应**:`tool/skill.ts`(76 行)+ `session/prompt.ts` L451-463(注入 `compose_skills` 块)
- **改造点**:删除了上游的 `<compose_skills>` 块注入(因插件模型没有 prompt.ts),改为注册 `skill` 工具直接读取文件
- **增强**:新增 `resource` 参数(用于加载 `implementer-prompt.md` 等子文件),这是上游没有的能力
- **event hook**:监听 `session.created`(排除子会话)触发自动 dream/distill,与上游 `session/prompt.ts` L2253-2287 行为一致
> 评价:插件无法注入系统提示,所以把"动态注入"降级为"工具按需加载",是合理的取舍。
### 2.2 `src/skills.ts` — 技能加载(54 行)
- **官方对应**:`extract.ts`(85 行)+ `bundle.macro.ts`(30 行),编译期内联到二进制,运行时解压到 `~/.mimocode/compose/<version>/skills/`
- **改造点**:改为 `__dirname/skills/` 直接读磁盘(因为技能文件已随插件发布到 `dist/skills/`)
- **缺失能力**:未实现 `composeSkillsBlock()`(用于生成 XML 注入块),但插件模型确实用不到
- **未使用导入**:`relative` 被 import 但未使用(无副作用)
> 评价:去掉了 Effect + Bun macro + gray-matter frontmatter 解析这一整套重型设施,**用最小代码完成等价功能**,符合"最小化代码"哲学。
### 2.3 `src/auto-dream.ts` — 自进化触发(73 → 82 行)
| 项目 | 上游 | 下游 | 一致性 |
| ----------------------------------- | ----------------------------------------- | -------------------------------------------------- | ---------- |
| 默认 dream 间隔 | 7 天 | 7 天 | 一致 |
| 默认 distill 间隔 | 30 天 | 30 天 | 一致 |
| 状态存储 | SQLite(`SessionTable.title` 查询) | JSON 文件(`~/.mimocode-compose/state.json`) | 行为等价 |
| 间隔判定 | `now - lastRun.time_created < intervalMs` | `now - entry.lastRun < intervalDays * DAY_MS` | 等价 |
| "项目太年轻" 检查 | 有 | 缺失(注释说明插件无 project start time 查询能力) | 可接受 |
| `MIN_SPAWN_GAP_MS` 10s 限流 | 有 | **已补回**(见第六节) | 一致 |
| 自动 spawn session | 能做到 | 受限(已在代码注释里说明) | 受限 |
| `DREAM_TASK` / `DISTILL_TITLE` 常量 | 有 | 缺失 | 简化可接受 |
### 2.4 `scripts/copy-skills.cjs` — 构建期复制(22 行)
简洁可靠,递归复制 `src/skills/` → `dist/skills/`,正确处理嵌套子目录。
### 2.5 `tsconfig.json` — 编译配置
`src/skills/**/*.ts` 这条 exclude 是必要的(防止 `condition-based-waiting-example.ts` 被 tsc 编译报错),但 `copy-skills.cjs` 仍会把它作为资源复制到 `dist/skills/`,**最终结果正确**。
---
## 三、命令/Agent 模板的中文化适配
| 文件 | 上游 | 下游 | 评价 |
| --------------------- | -------------------------------------- | ------ | ------------------------------------------------------------ |
| `agent/compose.md` | `session/prompt/compose.txt`(115 行) | 118 行 | 完整翻译 + Agent frontmatter 包装,覆盖了上游的全部 12 个小节 |
| `commands/dream.md` | `agent/prompt/dream.txt`(155 行) | 161 行 | 完整翻译,含 5 个 Phase |
| `commands/distill.md` | `agent/prompt/distill.txt`(199 行) | 147 行 | 完整翻译,含 6 个 Phase |
翻译质量良好,技术术语(`HARD-GATE`、`HEADLESS`、`MEMORY.md`、`checkpoint.md`)保留原文。
---
## 四、上游"灵魂"特性 vs 插件实现的取舍
| 上游特性 | 插件能力 | 差异原因 | 评价 |
| ----------------------------- | ------------------ | ------------------------------ | ----------------- |
| HTTP API `/agent` / `/skill` | 无 | 插件只是 SDK 层扩展 | 不需要 |
| ACP 协议 | 无 | 插件层无法实现协议 server | 不需要 |
| 内置 `compose` agent | 用户手动复制 | 插件不能注册 agent 类型 | 已在 README 说明 |
| `<compose_skills>` XML 注入 | 无 | 插件不能修改系统 prompt | 用 skill 工具替代 |
| `extractComposeBundle` 提取 | 改为随插件发布 | 插件就是发布载体 | 更直接 |
| Bun macro 内联 | 改为运行时 fs 读取 | Bun 宏无法在 OpenCode 进程使用 | 合理 |
| Effect + SQLite 查询 | 改为 JSON 文件 | 插件不应依赖内部存储 | 简化合理 |
| `DREAM_TASK` / `DISTILL_TASK` | 缺失 | 插件不能 spawn session | 可接受 |
整体而言,**"插件能做的全做、不能做的明确说明限制"**这一原则贯彻得很好。
---
## 五、额外亮点
1. **`docs/upstream-sync-guide.md`(239 行)**:详细的上游同步手册,包含文件映射表、PowerShell diff 脚本、5 种更新场景的工作流。**这是项目的优秀资产**,能极大降低后续维护成本。
2. **构建脚本顺序**:`tsc && node scripts/copy-skills.cjs`,先编译 TypeScript,再复制技能资源,逻辑正确。
3. **错误吞咽**:`checkAutoDream` / `checkAutoDistill` 的 try/catch 设计为永远不抛错,符合"插件崩溃不能影响 OpenCode 主流程"的原则。
---
## 六、建议清单(可选)
### 6.1 建议改
无。当前 PR 已处理完所有"建议改"级别的问题。
### 6.2 锦上添花
1. 添加一个简单的 smoke test,验证 `loadSkill('compose:plan')` 能正确返回 15 个 SKILL.md 之一
2. `agent/compose.md` 的描述可考虑加上"中文化"提示(避免用户期望英文环境时困惑)
3. 考虑把 `dist/` 加入 `.gitignore` 并设置 `"prepare": "npm run build"` 确保发布前总构建
---
## 七、构建状态验证
清理后重新构建,dist 产物:
- 12 个编译产物(`.js` / `.d.ts` / `.map` × 3 个源文件)
- 44 个技能资源(与 upstream `.bundle/` 字节相同)
- **共 56 个文件,与上游能力完全等价**
```
$ npm run build
> tsc && node scripts/copy-skills.cjs
(无错误,无警告)
```
---
## 八、参考
- 上游源码:`MiMo-Code\packages\opencode\src\skill\compose\`
- 同步手册:`mimocode-compose\docs\upstream-sync-guide.md`
Compose 智能体 官方定义里它是一个编排器,可以调用子智能体,15个技能是它的专有技能(是通过插件注入的),并不是全局的,因此不会影响其它智能体的上下文(15个工具的定义),通过 TAB键 切换,不会与 OMO 冲突(OMO的4个依然在)
Compose 智能体 专有的编排技能,这些技能不显示在 <available_skills> 列表中




