sumulige-claude 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PROJECT_STRUCTURE.md +220 -0
- package/Q&A.md +124 -0
- package/cli.js +132 -84
- package/package.json +1 -1
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
# Sumulige Claude 项目详解
|
|
2
|
+
|
|
3
|
+
> **Claude Code 多 Agent 编排框架** - 专为 AI 理解优化
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 📌 项目定位
|
|
8
|
+
|
|
9
|
+
**Sumulige Claude** 是一个 **Claude Code 多 Agent 编排框架**,核心目标是让 AI 辅助开发更智能、更高效。
|
|
10
|
+
|
|
11
|
+
基于 CLI 的 AI 辅助开发与管理系统(包含技能库、RAG 索引、任务追踪等)。
|
|
12
|
+
|
|
13
|
+
### 核心功能
|
|
14
|
+
|
|
15
|
+
| 功能 | 描述 |
|
|
16
|
+
|------|------|
|
|
17
|
+
| **多 Agent 协作** | 5个专业化 Agent(Conductor/Architect/Builder/Reviewer/Librarian)分工协作 |
|
|
18
|
+
| **技能系统** | 可复用的 Claude Skills 管理(安装/创建/依赖检查) |
|
|
19
|
+
| **项目模板** | 一键部署完整的 Claude Code 项目配置 |
|
|
20
|
+
| **TODO 管理** | 按优先级分组的 AI 自动维护任务系统 |
|
|
21
|
+
| **ThinkingLens** | 对话追踪和增量记忆系统 |
|
|
22
|
+
|
|
23
|
+
### Agent 角色说明
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
27
|
+
│ Agent 团队架构 │
|
|
28
|
+
├─────────────────────────────────────────────────────────────┤
|
|
29
|
+
│ Conductor → 任务分解和协调(项目经理) │
|
|
30
|
+
│ Architect → 架构设计和技术决策(架构师) │
|
|
31
|
+
│ Builder → 代码实现和测试(工程师) │
|
|
32
|
+
│ Reviewer → 代码审查和质量检查(审查员) │
|
|
33
|
+
│ Librarian → 文档编写和知识整理(文档员) │
|
|
34
|
+
└─────────────────────────────────────────────────────────────┘
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 📁 项目结构 ASCII 树
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
sumulige-claude/
|
|
43
|
+
├── .claude/ # CLI 工具自身的 Claude Code 配置
|
|
44
|
+
│ ├── rag/ # RAG 技能索引
|
|
45
|
+
│ ├── sessions/ # 会话追踪
|
|
46
|
+
│ ├── skills/ # 内置技能
|
|
47
|
+
│ │ └── api-tester/ # API 测试技能示例
|
|
48
|
+
│ ├── AGENTS.md # Agent 配置
|
|
49
|
+
│ ├── README.md # Claude 项目说明
|
|
50
|
+
│ └── settings.local.json # 本地配置
|
|
51
|
+
│
|
|
52
|
+
├── development/ # 开发任务管理
|
|
53
|
+
│ └── todos/ # TODO 任务系统(GTD 风格)
|
|
54
|
+
│ ├── active/ # 🚧 进行中任务
|
|
55
|
+
│ ├── backlog/ # 📋 待办任务
|
|
56
|
+
│ ├── completed/ # ✅ 已完成任务
|
|
57
|
+
│ ├── archived/ # 📦 已归档任务
|
|
58
|
+
│ └── INDEX.md # 任务总览(可点击跳转)
|
|
59
|
+
│
|
|
60
|
+
├── template/ # ⭐ 项目模板(smc template 部署)
|
|
61
|
+
│ ├── .claude/ # Claude Code 完整配置
|
|
62
|
+
│ │ ├── commands/ # Slash 命令(9个)
|
|
63
|
+
│ │ │ ├── commit-push-pr.md # /commit-push-pr
|
|
64
|
+
│ │ │ ├── commit.md # /commit
|
|
65
|
+
│ │ │ ├── pr.md # /pr
|
|
66
|
+
│ │ │ ├── review.md # /review
|
|
67
|
+
│ │ │ ├── sessions.md # /sessions
|
|
68
|
+
│ │ │ ├── skill-create.md # /skill-create
|
|
69
|
+
│ │ │ ├── test.md # /test
|
|
70
|
+
│ │ │ ├── todos.md # /todos
|
|
71
|
+
│ │ │ └── verify-work.md # /verify-work
|
|
72
|
+
│ │ │
|
|
73
|
+
│ │ ├── hooks/ # 自动化 Hook 脚本
|
|
74
|
+
│ │ │
|
|
75
|
+
│ │ ├── rag/ # RAG 技能索引
|
|
76
|
+
│ │ │ └── skill-index.json # 20+ 技能索引(支持关键词匹配)
|
|
77
|
+
│ │ │
|
|
78
|
+
│ │ ├── skills/ # 项目技能库
|
|
79
|
+
│ │ │ ├── examples/ # 示例技能
|
|
80
|
+
│ │ │ ├── manus-kickoff/ # Manus 风格项目启动技能
|
|
81
|
+
│ │ │ ├── template/ # 技能创建模板
|
|
82
|
+
│ │ │ └── SKILLS.md # 技能索引说明
|
|
83
|
+
│ │ │
|
|
84
|
+
│ │ ├── templates/ # 项目文档模板
|
|
85
|
+
│ │ │ ├── PROJECT_KICKOFF.md # 项目启动清单
|
|
86
|
+
│ │ │ ├── PROJECT_PROPOSAL.md # 项目计划书模板
|
|
87
|
+
│ │ │ └── TASK_PLAN.md # 任务执行计划模板
|
|
88
|
+
│ │ │
|
|
89
|
+
│ │ ├── thinking-routes/ # 思维轨迹系统
|
|
90
|
+
│ │ │
|
|
91
|
+
│ │ ├── CLAUDE-template.md # CLAUDE.md 模板
|
|
92
|
+
│ │ ├── README.md # 项目说明(AI 首先读取)
|
|
93
|
+
│ │ ├── boris-optimizations.md # Boris 最佳实践
|
|
94
|
+
│ │ └── settings.json # Claude Code 设置
|
|
95
|
+
│ │
|
|
96
|
+
│ ├── development/ # 开发任务管理模板
|
|
97
|
+
│ │ └── todos/ # TODO 系统模板
|
|
98
|
+
│ │
|
|
99
|
+
│ ├── prompts/ # 教学资源
|
|
100
|
+
│ │ └── how-to-find.md # 对话查找指南
|
|
101
|
+
│ │
|
|
102
|
+
│ ├── CLAUDE-template.md # CLAUDE.md 模板
|
|
103
|
+
│ ├── README.md # 模板说明
|
|
104
|
+
│ ├── init.sh # 初始化脚本
|
|
105
|
+
│ ├── project-paradigm.md # 项目开发范式
|
|
106
|
+
│ └── thinkinglens-silent.md # ThinkingLens 静默指令
|
|
107
|
+
│
|
|
108
|
+
├── cli.js # ⭐ CLI 核心入口(Node.js)
|
|
109
|
+
├── package.json # npm 包配置
|
|
110
|
+
├── package-lock.json # 依赖锁定
|
|
111
|
+
├── AGENTS.md # Agent 配置说明
|
|
112
|
+
├── README.md # 项目文档(858 行)
|
|
113
|
+
├── PROJECT_STRUCTURE.md # 本文件
|
|
114
|
+
└── .gitignore # Git 忽略规则
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## 🔧 CLI 命令速查
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
smc (sumulige-claude 简写)
|
|
123
|
+
├── init # 初始化配置 (~/.claude/config.json)
|
|
124
|
+
├── status # 查看状态(Agents/Skills/Tasks)
|
|
125
|
+
├── sync # 同步配置到项目
|
|
126
|
+
├── template [path] # 部署项目模板
|
|
127
|
+
├── kickoff # Manus 风格项目规划启动
|
|
128
|
+
│
|
|
129
|
+
├── skill:list # 列出所有技能
|
|
130
|
+
├── skill:create <name> # 创建新技能
|
|
131
|
+
├── skill:check [name] # 检查技能依赖
|
|
132
|
+
├── skill:install <src> # 安装外部技能
|
|
133
|
+
│
|
|
134
|
+
└── agent <task> # 启动 Agent 编排
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 📊 关键数据结构
|
|
140
|
+
|
|
141
|
+
### 配置文件结构 (`~/.claude/config.json`)
|
|
142
|
+
|
|
143
|
+
```json
|
|
144
|
+
{
|
|
145
|
+
"version": "1.0.0",
|
|
146
|
+
"agents": {
|
|
147
|
+
"conductor": { "model": "claude-opus-4.5", "role": "Task coordination" },
|
|
148
|
+
"architect": { "model": "claude-opus-4.5", "role": "Architecture design" },
|
|
149
|
+
"builder": { "model": "claude-opus-4.5", "role": "Code implementation" },
|
|
150
|
+
"reviewer": { "model": "claude-opus-4.5", "role": "Code review" },
|
|
151
|
+
"librarian": { "model": "claude-opus-4.5", "role": "Documentation" }
|
|
152
|
+
},
|
|
153
|
+
"skills": ["anthropics/skills", "numman-ali/n-skills"],
|
|
154
|
+
"thinkingLens": { "enabled": true, "autoSync": true, "syncInterval": 20 }
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### RAG 技能索引结构 (`skill-index.json`)
|
|
159
|
+
|
|
160
|
+
```json
|
|
161
|
+
{
|
|
162
|
+
"skills": [
|
|
163
|
+
{
|
|
164
|
+
"name": "frontend-design",
|
|
165
|
+
"keywords": ["frontend", "ui", "react"],
|
|
166
|
+
"description": "前端界面设计"
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"name": "mcp-builder",
|
|
170
|
+
"keywords": ["api", "mcp", "server"],
|
|
171
|
+
"description": "MCP 服务器构建"
|
|
172
|
+
}
|
|
173
|
+
]
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## 🔄 工作流程图
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
183
|
+
│ Manus 风格工作流 │
|
|
184
|
+
├─────────────────────────────────────────────────────────────┤
|
|
185
|
+
│ │
|
|
186
|
+
│ 1. smc template → 部署项目模板 │
|
|
187
|
+
│ ↓ │
|
|
188
|
+
│ 2. smc kickoff → AI 生成 TASK_PLAN.md │
|
|
189
|
+
│ ↓ │
|
|
190
|
+
│ 3. Human 确认 → 审批项目计划 │
|
|
191
|
+
│ ↓ │
|
|
192
|
+
│ 4. Agent 协作执行 → Conductor 分配 → Builder 实现 │
|
|
193
|
+
│ ↓ │
|
|
194
|
+
│ 5. ThinkingLens → 自动记录 MEMORY.md + PROJECT_LOG │
|
|
195
|
+
│ │
|
|
196
|
+
└─────────────────────────────────────────────────────────────┘
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## 🎯 AI 理解要点
|
|
202
|
+
|
|
203
|
+
1. **入口文件**: `cli.js` 是 Node.js CLI 工具,通过 npm 全局安装后使用 `smc` 命令
|
|
204
|
+
2. **模板目录**: `template/` 包含完整的 Claude Code 项目配置,通过 `smc template` 复制到目标项目
|
|
205
|
+
3. **技能系统**: 基于 markdown 文件定义,存储在 `.claude/skills/` 目录
|
|
206
|
+
4. **TODO 系统**: 采用文件夹分组(active/backlog/completed/archived)+ INDEX.md 索引
|
|
207
|
+
5. **RAG 索引**: `skill-index.json` 支持关键词自动匹配技能
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## 📦 技术栈
|
|
212
|
+
|
|
213
|
+
- **运行环境**: Node.js
|
|
214
|
+
- **包管理**: npm
|
|
215
|
+
- **发布平台**: [npmjs.com/package/sumulige-claude](https://www.npmjs.com/package/sumulige-claude)
|
|
216
|
+
- **源码仓库**: [github.com/sumulige/sumulige-claude](https://github.com/sumulige/sumulige-claude)
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
*Generated: 2026-01-13*
|
package/Q&A.md
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Sumulige Claude 常见问题
|
|
2
|
+
|
|
3
|
+
> 帮助你快速理解项目的核心设计理念
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Q1: 为什么要把 sumulige-claude 保留在项目中?
|
|
8
|
+
|
|
9
|
+
### 🔑 一句话答案
|
|
10
|
+
**它不是"工具",是"数字合伙人"**——需要跟随项目一起成长。
|
|
11
|
+
|
|
12
|
+
### 📊 对比理解
|
|
13
|
+
|
|
14
|
+
| 普通 CLI 工具 | Sumulige Claude |
|
|
15
|
+
|--------------|-----------------|
|
|
16
|
+
| 全局安装,到处通用 | 嵌入项目,专属定制 |
|
|
17
|
+
| 静态能力,版本固定 | 动态进化,持续学习 |
|
|
18
|
+
| 扳手(用完即走) | 副驾驶(全程陪伴) |
|
|
19
|
+
|
|
20
|
+
### 💡 四大设计深意
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
24
|
+
│ 1️⃣ 共同进化 │
|
|
25
|
+
│ Agent 技能随业务逻辑同步迭代 │
|
|
26
|
+
│ 修改算法 → 同步更新 review 技能 │
|
|
27
|
+
├─────────────────────────────────────────────────────────────┤
|
|
28
|
+
│ 2️⃣ 上下文记忆 │
|
|
29
|
+
│ .claude/rag/ 是 Agent 的"海马体" │
|
|
30
|
+
│ 项目架构决策 → 长期记忆沉淀 │
|
|
31
|
+
├─────────────────────────────────────────────────────────────┤
|
|
32
|
+
│ 3️⃣ 团队一致性 │
|
|
33
|
+
│ 工具链即代码 (Toolchain as Code) │
|
|
34
|
+
│ git clone → pnpm install → 获得一致的 AI 环境 │
|
|
35
|
+
├─────────────────────────────────────────────────────────────┤
|
|
36
|
+
│ 4️⃣ 构建联动 │
|
|
37
|
+
│ 修改共享类型 → 自动触发 Agent 重新构建 │
|
|
38
|
+
│ 确保 AI 永不基于过时定义生成代码 │
|
|
39
|
+
└─────────────────────────────────────────────────────────────┘
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Q2: 根目录 `.claude/` 和 `template/.claude/` 有什么区别?
|
|
45
|
+
|
|
46
|
+
### 🔑 一句话答案
|
|
47
|
+
**`template/` 是"工厂",根目录 `.claude/` 是"产品"。**
|
|
48
|
+
|
|
49
|
+
### � 类比理解
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
template/.claude/ xxx/.claude/
|
|
53
|
+
│ │
|
|
54
|
+
▼ ▼
|
|
55
|
+
🏭 安装光盘 💾 存档文件
|
|
56
|
+
🎓 毕业证书模板 📝 你的毕业证
|
|
57
|
+
🧬 DNA 模板 🧑 具体的人
|
|
58
|
+
📘 类定义 (Class) 📦 实例 (Instance)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 🔍 详细对比
|
|
62
|
+
|
|
63
|
+
| 特性 | **根目录 `.claude/`** | **template/.claude/** |
|
|
64
|
+
|------|----------------------|----------------------|
|
|
65
|
+
| **性质** | 实例 (Instance) | 模板 (Blueprint) |
|
|
66
|
+
| **状态** | ✅ 有状态 | ❌ 无状态 |
|
|
67
|
+
| **内容** | sessions/, 本地配置, 项目 RAG | commands/, skills/, thinking-routes/ |
|
|
68
|
+
| **作用** | 记录"聊过什么" | 定义"能做什么" |
|
|
69
|
+
| **Git** | 部分忽略 (sessions/) | 完整提交 |
|
|
70
|
+
| **生命周期** | 随项目存在 | 发布即固化 |
|
|
71
|
+
|
|
72
|
+
### 🔄 工作流程
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
┌────────────────┐ smc template ┌────────────────┐
|
|
76
|
+
│ │ ─────────────────▶ │ │
|
|
77
|
+
│ template/ │ │ xxx/ │
|
|
78
|
+
│ .claude/ │ 复制模板 │ .claude/ │
|
|
79
|
+
│ ├─commands/ │ ─────────────────▶ │ ├─commands/ │
|
|
80
|
+
│ ├─skills/ │ │ ├─skills/ │
|
|
81
|
+
│ └─... │ │ ├─sessions/ │ ← 新增:对话记忆
|
|
82
|
+
│ │ │ ├─rag/ │ ← 新增:项目知识
|
|
83
|
+
│ │ │ └─... │
|
|
84
|
+
└────────────────┘ └────────────────┘
|
|
85
|
+
工厂 产品
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### 💡 设计优势
|
|
89
|
+
|
|
90
|
+
| 优势 | 说明 |
|
|
91
|
+
|------|------|
|
|
92
|
+
| **升级解耦** | 更新 template/ → 发布新版 → 用户项目历史不丢失 |
|
|
93
|
+
| **标准化** | 每个新项目自动获得最佳实践配置 |
|
|
94
|
+
| **隔离性** | 项目 A 的对话记忆不会污染项目 B |
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 总结:一张图看懂架构
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
102
|
+
│ Sumulige Claude 架构 │
|
|
103
|
+
├─────────────────────────────────────────────────────────────┤
|
|
104
|
+
│ │
|
|
105
|
+
│ ┌──────────────────┐ ┌──────────────────┐ │
|
|
106
|
+
│ │ sumulige-claude │ │ 你的项目 │ │
|
|
107
|
+
│ │ (npm 全局安装) │ │ (xxx/) │ │
|
|
108
|
+
│ ├──────────────────┤ ├──────────────────┤ │
|
|
109
|
+
│ │ cli.js │──smc───▶│ .claude/ │ │
|
|
110
|
+
│ │ template/ │ template │ ├─ commands/ │ │
|
|
111
|
+
│ │ └─.claude/ │──────────│ ├─ skills/ │ │
|
|
112
|
+
│ │ ├─commands/ │ 复制 │ ├─ sessions/ │ 记忆 │
|
|
113
|
+
│ │ ├─skills/ │ │ ├─ rag/ │ 知识 │
|
|
114
|
+
│ │ └─templates/ │ │ └─ settings │ 配置 │
|
|
115
|
+
│ └──────────────────┘ └──────────────────┘ │
|
|
116
|
+
│ 能力定义 运行实例 │
|
|
117
|
+
│ (无状态) (有状态) │
|
|
118
|
+
│ │
|
|
119
|
+
└─────────────────────────────────────────────────────────────┘
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
*更多问题?查看 [README.md](./README.md)*
|
package/cli.js
CHANGED
|
@@ -342,7 +342,7 @@ const commands = {
|
|
|
342
342
|
if (fs.existsSync(ragIndexFile)) {
|
|
343
343
|
try {
|
|
344
344
|
ragIndex = JSON.parse(fs.readFileSync(ragIndexFile, 'utf-8'));
|
|
345
|
-
} catch (e) {}
|
|
345
|
+
} catch (e) { }
|
|
346
346
|
}
|
|
347
347
|
|
|
348
348
|
// 添加新技能到索引
|
|
@@ -445,9 +445,9 @@ const commands = {
|
|
|
445
445
|
// 检查所有技能
|
|
446
446
|
const allSkills = fs.existsSync(skillsDir)
|
|
447
447
|
? fs.readdirSync(skillsDir).filter(f => {
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
448
|
+
const dir = path.join(skillsDir, f);
|
|
449
|
+
return fs.statSync(dir).isDirectory() && f !== 'template' && f !== 'examples';
|
|
450
|
+
})
|
|
451
451
|
: [];
|
|
452
452
|
|
|
453
453
|
console.log(`Found ${allSkills.length} skills\n`);
|
|
@@ -484,14 +484,46 @@ const commands = {
|
|
|
484
484
|
process.exit(1);
|
|
485
485
|
}
|
|
486
486
|
|
|
487
|
+
// 递归复制目录(含子目录和文件)
|
|
488
|
+
const copyRecursive = (src, dest, overwrite = false) => {
|
|
489
|
+
if (!fs.existsSync(src)) return 0;
|
|
490
|
+
|
|
491
|
+
if (!fs.existsSync(dest)) {
|
|
492
|
+
fs.mkdirSync(dest, { recursive: true });
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
let count = 0;
|
|
496
|
+
const entries = fs.readdirSync(src, { withFileTypes: true });
|
|
497
|
+
|
|
498
|
+
for (const entry of entries) {
|
|
499
|
+
const srcPath = path.join(src, entry.name);
|
|
500
|
+
const destPath = path.join(dest, entry.name);
|
|
501
|
+
|
|
502
|
+
if (entry.isDirectory()) {
|
|
503
|
+
count += copyRecursive(srcPath, destPath, overwrite);
|
|
504
|
+
} else {
|
|
505
|
+
if (overwrite || !fs.existsSync(destPath)) {
|
|
506
|
+
fs.copyFileSync(srcPath, destPath);
|
|
507
|
+
// 添加执行权限
|
|
508
|
+
if (entry.name.endsWith('.sh') || entry.name.endsWith('.cjs')) {
|
|
509
|
+
fs.chmodSync(destPath, 0o755);
|
|
510
|
+
}
|
|
511
|
+
count++;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
return count;
|
|
516
|
+
};
|
|
517
|
+
|
|
487
518
|
// 创建目录结构
|
|
488
519
|
console.log('📁 Creating directory structure...');
|
|
489
520
|
const dirs = [
|
|
490
|
-
path.join(targetDir, '.claude
|
|
491
|
-
path.join(targetDir, '
|
|
492
|
-
path.join(targetDir, '
|
|
493
|
-
path.join(targetDir, '
|
|
494
|
-
path.join(targetDir, '
|
|
521
|
+
path.join(targetDir, '.claude'),
|
|
522
|
+
path.join(targetDir, 'prompts'),
|
|
523
|
+
path.join(targetDir, 'development/todos/active'),
|
|
524
|
+
path.join(targetDir, 'development/todos/completed'),
|
|
525
|
+
path.join(targetDir, 'development/todos/backlog'),
|
|
526
|
+
path.join(targetDir, 'development/todos/archived')
|
|
495
527
|
];
|
|
496
528
|
|
|
497
529
|
dirs.forEach(dir => {
|
|
@@ -504,82 +536,96 @@ const commands = {
|
|
|
504
536
|
// 复制文件
|
|
505
537
|
console.log('📋 Copying template files...');
|
|
506
538
|
|
|
507
|
-
// 复制 .claude 文件
|
|
508
539
|
const claudeTemplateDir = path.join(TEMPLATE_DIR, '.claude');
|
|
509
|
-
|
|
510
|
-
// CLAUDE-template.md
|
|
511
|
-
const claudeTemplate = path.join(claudeTemplateDir, 'CLAUDE-template.md');
|
|
512
|
-
if (fs.existsSync(claudeTemplate)) {
|
|
513
|
-
fs.copyFileSync(claudeTemplate, path.join(targetDir, '.claude/CLAUDE.md'));
|
|
514
|
-
console.log(' ✅ .claude/CLAUDE.md');
|
|
515
|
-
}
|
|
540
|
+
const targetClaudeDir = path.join(targetDir, '.claude');
|
|
516
541
|
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
542
|
+
// 1. CLAUDE.md (从 CLAUDE-template.md)
|
|
543
|
+
const claudeTemplate = path.join(claudeTemplateDir, 'CLAUDE-template.md');
|
|
544
|
+
if (fs.existsSync(claudeTemplate)) {
|
|
545
|
+
fs.copyFileSync(claudeTemplate, path.join(targetClaudeDir, 'CLAUDE.md'));
|
|
546
|
+
console.log(' ✅ .claude/CLAUDE.md');
|
|
547
|
+
}
|
|
523
548
|
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
const dest = path.join(targetDir, '.claude/hooks', hook);
|
|
531
|
-
fs.copyFileSync(src, dest);
|
|
532
|
-
// 添加执行权限
|
|
533
|
-
if (hook.endsWith('.js') || hook.endsWith('.sh')) {
|
|
534
|
-
fs.chmodSync(dest, 0o755);
|
|
535
|
-
}
|
|
536
|
-
});
|
|
537
|
-
console.log(' ✅ .claude/hooks/ (' + hooks.length + ' files)');
|
|
538
|
-
}
|
|
549
|
+
// 2. README.md
|
|
550
|
+
const readmeFile = path.join(claudeTemplateDir, 'README.md');
|
|
551
|
+
if (fs.existsSync(readmeFile)) {
|
|
552
|
+
fs.copyFileSync(readmeFile, path.join(targetClaudeDir, 'README.md'));
|
|
553
|
+
console.log(' ✅ .claude/README.md');
|
|
554
|
+
}
|
|
539
555
|
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
path.join(routesDir, file),
|
|
547
|
-
path.join(targetDir, '.claude/thinking-routes', file)
|
|
548
|
-
);
|
|
549
|
-
});
|
|
550
|
-
console.log(' ✅ .claude/thinking-routes/');
|
|
551
|
-
}
|
|
556
|
+
// 3. settings.json
|
|
557
|
+
const settingsFile = path.join(claudeTemplateDir, 'settings.json');
|
|
558
|
+
if (fs.existsSync(settingsFile)) {
|
|
559
|
+
fs.copyFileSync(settingsFile, path.join(targetClaudeDir, 'settings.json'));
|
|
560
|
+
console.log(' ✅ .claude/settings.json');
|
|
561
|
+
}
|
|
552
562
|
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
}
|
|
563
|
+
// 4. boris-optimizations.md
|
|
564
|
+
const borisFile = path.join(claudeTemplateDir, 'boris-optimizations.md');
|
|
565
|
+
if (fs.existsSync(borisFile)) {
|
|
566
|
+
fs.copyFileSync(borisFile, path.join(targetClaudeDir, 'boris-optimizations.md'));
|
|
567
|
+
console.log(' ✅ .claude/boris-optimizations.md');
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
// 5. hooks/ (递归复制)
|
|
571
|
+
const hooksDir = path.join(claudeTemplateDir, 'hooks');
|
|
572
|
+
if (fs.existsSync(hooksDir)) {
|
|
573
|
+
const count = copyRecursive(hooksDir, path.join(targetClaudeDir, 'hooks'), true);
|
|
574
|
+
console.log(` ✅ .claude/hooks/ (${count} files)`);
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
// 6. commands/ (递归复制) ⭐ 新增
|
|
578
|
+
const commandsDir = path.join(claudeTemplateDir, 'commands');
|
|
579
|
+
if (fs.existsSync(commandsDir)) {
|
|
580
|
+
const count = copyRecursive(commandsDir, path.join(targetClaudeDir, 'commands'), true);
|
|
581
|
+
console.log(` ✅ .claude/commands/ (${count} files)`);
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
// 7. skills/ (递归复制) ⭐ 新增
|
|
585
|
+
const skillsDir = path.join(claudeTemplateDir, 'skills');
|
|
586
|
+
if (fs.existsSync(skillsDir)) {
|
|
587
|
+
const count = copyRecursive(skillsDir, path.join(targetClaudeDir, 'skills'), false);
|
|
588
|
+
console.log(` ✅ .claude/skills/ (${count} files)`);
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
// 8. templates/ (递归复制) ⭐ 新增
|
|
592
|
+
const templatesDir = path.join(claudeTemplateDir, 'templates');
|
|
593
|
+
if (fs.existsSync(templatesDir)) {
|
|
594
|
+
const count = copyRecursive(templatesDir, path.join(targetClaudeDir, 'templates'), false);
|
|
595
|
+
console.log(` ✅ .claude/templates/ (${count} files)`);
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
// 9. thinking-routes/
|
|
599
|
+
const routesDir = path.join(claudeTemplateDir, 'thinking-routes');
|
|
600
|
+
if (fs.existsSync(routesDir)) {
|
|
601
|
+
const count = copyRecursive(routesDir, path.join(targetClaudeDir, 'thinking-routes'), false);
|
|
602
|
+
console.log(` ✅ .claude/thinking-routes/ (${count} files)`);
|
|
565
603
|
}
|
|
566
604
|
|
|
567
|
-
//
|
|
605
|
+
// 10. rag/
|
|
606
|
+
const ragDir = path.join(claudeTemplateDir, 'rag');
|
|
607
|
+
if (fs.existsSync(ragDir)) {
|
|
608
|
+
const count = copyRecursive(ragDir, path.join(targetClaudeDir, 'rag'), true);
|
|
609
|
+
console.log(` ✅ .claude/rag/ (${count} files)`);
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
// 11. prompts/
|
|
568
613
|
const promptsDir = path.join(TEMPLATE_DIR, 'prompts');
|
|
569
614
|
if (fs.existsSync(promptsDir)) {
|
|
570
|
-
const
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
615
|
+
const count = copyRecursive(promptsDir, path.join(targetDir, 'prompts'), false);
|
|
616
|
+
console.log(` ✅ prompts/ (${count} files)`);
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
// 12. development/todos/
|
|
620
|
+
const todosDir = path.join(TEMPLATE_DIR, 'development', 'todos');
|
|
621
|
+
if (fs.existsSync(todosDir)) {
|
|
622
|
+
const count = copyRecursive(todosDir, path.join(targetDir, 'development', 'todos'), false);
|
|
623
|
+
console.log(` ✅ development/todos/ (${count} files)`);
|
|
578
624
|
}
|
|
579
625
|
|
|
580
|
-
//
|
|
581
|
-
const
|
|
582
|
-
|
|
626
|
+
// 13. 根目录文件
|
|
627
|
+
const rootFiles = ['project-paradigm.md', 'thinkinglens-silent.md', 'CLAUDE-template.md'];
|
|
628
|
+
rootFiles.forEach(file => {
|
|
583
629
|
const src = path.join(TEMPLATE_DIR, file);
|
|
584
630
|
if (fs.existsSync(src)) {
|
|
585
631
|
fs.copyFileSync(src, path.join(targetDir, file));
|
|
@@ -589,11 +635,11 @@ const commands = {
|
|
|
589
635
|
|
|
590
636
|
// 创建记忆文件
|
|
591
637
|
console.log('📝 Creating memory files...');
|
|
592
|
-
if (!fs.existsSync(path.join(
|
|
593
|
-
fs.writeFileSync(path.join(
|
|
638
|
+
if (!fs.existsSync(path.join(targetClaudeDir, 'MEMORY.md'))) {
|
|
639
|
+
fs.writeFileSync(path.join(targetClaudeDir, 'MEMORY.md'), '# Memory\n\n<!-- Project memory updated by AI -->\n');
|
|
594
640
|
}
|
|
595
|
-
if (!fs.existsSync(path.join(
|
|
596
|
-
fs.writeFileSync(path.join(
|
|
641
|
+
if (!fs.existsSync(path.join(targetClaudeDir, 'PROJECT_LOG.md'))) {
|
|
642
|
+
fs.writeFileSync(path.join(targetClaudeDir, 'PROJECT_LOG.md'), '# Project Log\n\n<!-- Build history and decisions -->\n');
|
|
597
643
|
}
|
|
598
644
|
console.log(' ✅ Memory files created');
|
|
599
645
|
|
|
@@ -637,7 +683,7 @@ const commands = {
|
|
|
637
683
|
## Add Your Anchors Here...
|
|
638
684
|
|
|
639
685
|
`;
|
|
640
|
-
fs.writeFileSync(path.join(
|
|
686
|
+
fs.writeFileSync(path.join(targetClaudeDir, 'ANCHORS.md'), anchorsContent);
|
|
641
687
|
console.log(' ✅ .claude/ANCHORS.md');
|
|
642
688
|
|
|
643
689
|
// 初始化 Sumulige Claude(如果已安装)
|
|
@@ -655,14 +701,16 @@ const commands = {
|
|
|
655
701
|
console.log('');
|
|
656
702
|
console.log('📦 What was included:');
|
|
657
703
|
console.log(' • AI autonomous memory system (ThinkingLens)');
|
|
658
|
-
console.log(' •
|
|
704
|
+
console.log(' • Slash commands (/commit, /test, /review, etc.)');
|
|
705
|
+
console.log(' • Skills system with templates');
|
|
659
706
|
console.log(' • RAG dynamic skill index');
|
|
660
|
-
console.log(' •
|
|
707
|
+
console.log(' • Hooks for automation');
|
|
708
|
+
console.log(' • TODO management system');
|
|
661
709
|
console.log('');
|
|
662
710
|
console.log('Next steps:');
|
|
663
|
-
console.log(' 1.
|
|
664
|
-
console.log(' 2.
|
|
665
|
-
console.log(' 3.
|
|
711
|
+
console.log(' 1. Edit .claude/CLAUDE.md with your project info');
|
|
712
|
+
console.log(' 2. Run: claude # Start Claude Code');
|
|
713
|
+
console.log(' 3. Try: /commit, /test, /review');
|
|
666
714
|
console.log('');
|
|
667
715
|
},
|
|
668
716
|
|