bcoder 0.0.5 → 0.0.6

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/README.md CHANGED
@@ -113,7 +113,7 @@ bcoder update
113
113
  - `--force`: 强制更新模板
114
114
 
115
115
  ## 技术栈
116
- - Node.js >= 18
116
+ - Node.js >= 20
117
117
  - TypeScript
118
118
  - Commander.js (命令行解析)
119
119
  - Inquirer.js (交互式提示)
@@ -0,0 +1,78 @@
1
+ ---
2
+ name: bc-create-project
3
+ description: 当项目没有代码时,使用此技能创建项目。它是一个通用的项目初始化技能,可以根据用户需求创建不同类型的项目。
4
+ ---
5
+
6
+ # 项目初始化
7
+
8
+ **开始时声明:** "我正在使用 项目初始化( bc-create-project ) 技能来创建此项目。"
9
+
10
+ ## 工作流程
11
+
12
+ ### 第一步:确定项目类型
13
+
14
+ 询问用户:
15
+ 1. **项目类型** - 前端、后端还是全栈?
16
+ 2. **技术栈偏好** - 有特定的技术要求吗?
17
+ 3. **项目规模** - 小型原型、中型应用还是大型系统?
18
+ 4. **团队经验** - 团队对哪些技术栈更熟悉?
19
+ 5. **项目目标** - 项目的主要目的和期望是什么?
20
+
21
+ ### 第二步:选择具体技能
22
+
23
+ 根据用户的回答,推荐并使用相应的专业技能:
24
+
25
+ | 项目类型 | 推荐技能 | 适用场景 |
26
+ |---------|---------|---------|
27
+ | **前端** | bc-create-frontend-project | 创建 Vue 3 前端项目 |
28
+ | **后端** | bc-create-backend-project | 创建 Spring Boot 后端项目 |
29
+ | **全栈** | 先使用 bc-create-frontend-project,再使用 bc-create-backend-project | 创建完整的前后端分离项目 |
30
+
31
+ ### 第三步:执行项目创建
32
+
33
+ 1. **前端项目**:使用 bc-create-frontend-project 技能创建 Vue 3 项目
34
+ 2. **后端项目**:使用 bc-create-backend-project 技能创建 Spring Boot 项目
35
+ 3. **全栈项目**:依次执行前端和后端项目创建
36
+
37
+ ### 第四步:验证项目
38
+
39
+ 确保创建的项目能够:
40
+ 1. **前端项目**:通过 `npm install` 和 `npm run dev` 正常运行
41
+ 2. **后端项目**:能够编译和启动服务
42
+ 3. **全栈项目**:前后端能够正常通信
43
+
44
+ ## 项目创建指南
45
+
46
+ ### 前端项目
47
+
48
+ - **技术栈**:Vue 3.x、Vite、Vue Router 4.x
49
+ - **项目结构**:标准 Vue 3 项目结构,包含组件、页面、路由等
50
+ - **配置**:支持子路径部署,使用 hash 模式路由
51
+
52
+ ### 后端项目
53
+
54
+ - **技术栈**:Java 25 + Spring Boot 3.5.8
55
+ - **架构选项**:分层、按模块打包、模块化单体、番茄、DDD+六边形
56
+ - **依赖**:Spring Web MVC、Mybatis、Lombok、Validation 等
57
+
58
+ ### 全栈项目
59
+
60
+ - **前端**:Vue 3 项目,配置 API 调用
61
+ - **后端**:Spring Boot 项目,提供 RESTful API
62
+ - **集成**:确保前后端能够正常通信
63
+
64
+ ## 关键原则
65
+
66
+ - **根据需求选择合适的技术栈** - 不要过度工程化
67
+ - **遵循最佳实践** - 使用行业标准和推荐的架构
68
+ - **确保项目可运行** - 验证项目能够正常构建和运行
69
+ - **保持灵活性** - 根据用户的具体需求调整项目配置
70
+
71
+ ## 与其他技能的协同
72
+
73
+ - **bc-requirements-analysis**:在创建项目前,使用此技能分析需求
74
+ - **bc-write-plans**:为复杂项目创建详细的实施计划
75
+ - **bc-execute-plans**:执行项目实施计划
76
+ - **bc-finish-a-dev**:完成项目开发并进行总结
77
+
78
+
@@ -1,28 +1,34 @@
1
1
  ---
2
2
  name: bc-execute-plans
3
- description: 当你有一个书面的实施计划,并需要在带有审查检查点的单独会话中执行时使用
3
+ description: 已有书面实施计划且需按计划执行时使用。带审查检查点、批量执行、批次间报告。
4
4
  ---
5
5
 
6
6
  # 执行计划
7
7
 
8
8
  ## 概述
9
9
 
10
- 加载计划,批判性地审查,批量执行任务,在批次之间报告以进行审查。
10
+ 加载计划文件,批判性审查后按任务批量执行,每批完成后报告并等待反馈,全部完成后调用 bc-finish-a-dev 收尾。
11
11
 
12
- **核心原则:** 带有架构师审查检查点的批量执行。
12
+ **核心原则:** 带审查检查点的批量执行,不跳过验证、不猜测。
13
13
 
14
- **开始时声明:** "我正在使用执行计划 bc-execute-plans 技能来实施此计划。"
14
+ **开始时声明:** "我正在使用 执行计划 ( bc-execute-plans ) 技能来实施此计划。"
15
+
16
+ ## 何时使用
17
+
18
+ - 用户在选择「立即执行」或「执行计划」后,**调用本技能**,按已有计划逐任务实施。
19
+ - **输入**:通常为 bc-write-plans 产出的 `docs/plans/YYYY-MM-DD-<topic>-plan.md`。
20
+ - **前置**:若需隔离环境,先使用 bc-use-git-worktrees;若用户已在目标分支或明确不隔离,可直接开始。
15
21
 
16
22
  ## 流程
17
23
 
18
24
  ### 步骤 1:加载和审查计划
19
- 1. 阅读计划文件
20
- 2. 批判性地审查 - 识别计划中的任何问题或关注点
21
- 3. 如果有关注点:在开始前与你的人类伙伴提出
22
- 4. 如果没有关注点:创建 TodoWrite 并继续
25
+ 1. 阅读计划文件(通常为 `docs/plans/YYYY-MM-DD-<topic>-plan.md`)
26
+ 2. 批判性审查:识别计划中的问题或关注点
27
+ 3. 若有关注点:在开始前向用户提出,待澄清后再执行
28
+ 4. 若无关注点:为计划中的任务创建 TodoWrite,然后进入步骤 2
23
29
 
24
30
  ### 步骤 2:执行批次
25
- **默认:前 3 个任务**
31
+ **每批默认执行前 3 个任务**(或计划中剩余任务数,取较小者)。
26
32
 
27
33
  对于每个任务:
28
34
  1. 标记为进行中
@@ -45,9 +51,8 @@ description: 当你有一个书面的实施计划,并需要在带有审查检
45
51
  ### 步骤 5:完成开发
46
52
 
47
53
  在所有任务完成并验证后:
48
- - 声明:"我正在使用完成开发分支技能来完成这项工作。"
49
- - **必需的子技能:** 使用 bc-finish-a-dev
50
- - 按照该技能验证测试,提供选项,执行选择
54
+ - 声明:"我正在使用 完成开发分支 ( bc-finish-a-dev ) 技能来完成这项工作。"
55
+ - **必须调用**:**bc-finish-a-dev**(验证测试、提供合并/PR/清理等选项并执行用户选择)
51
56
 
52
57
  ## 何时停止并寻求帮助
53
58
 
@@ -67,18 +72,19 @@ description: 当你有一个书面的实施计划,并需要在带有审查检
67
72
 
68
73
  **不要强行通过阻塞** - 停止并询问。
69
74
 
70
- ## 记住
71
- - 首先批判性地审查计划
72
- - 严格按照计划步骤执行
73
- - 不要跳过验证
74
- - 当计划要求时引用技能
75
- - 在批次之间:只报告并等待
76
- - 被阻塞时停止,不要猜测
77
- - 未经用户明确同意,永远不要在 main/master 分支上开始实施
75
+ ## 关键原则
76
+ - 先批判性审查计划,再执行
77
+ - 严格按计划步骤执行,不跳过验证
78
+ - 批次之间只报告并等待反馈,不自动进入下一批
79
+ - 被阻塞时停止并寻求澄清,不猜测
80
+ - 未经用户明确同意,不在 main/master 上直接实施
81
+ - 计划要求时引用相关技能(如 bc-finish-a-dev)
82
+
83
+ ## 避免
84
+ - 未审查计划就动手;跳过验证步骤;阻塞时强行通过;批次间不等待就继续;在 main/master 上直接改且未经同意。
78
85
 
79
86
  ## 集成
80
87
 
81
- **必需的工作流技能:**
82
- - **bc-use-git-worktrees** - 必需:在开始前设置隔离的工作空间
83
- - **bc-write-plans** - 制定该技能执行的计划
84
- - **bc-finish-a-dev** - 在所有任务后完成开发
88
+ - **bc-write-plans**:产出本技能所执行的计划文档。
89
+ - **bc-use-git-worktrees**:若需隔离(如不在 main/master 上直接改),在开始前调用以创建工作空间;若用户明确在当前分支执行则可跳过。
90
+ - **bc-finish-a-dev**:所有任务完成并验证后,必须调用以完成合并/PR/清理。
@@ -1,17 +1,23 @@
1
1
  ---
2
2
  name: bc-finish-a-dev
3
- description: 当实现完成、所有测试通过且需要决定如何集成工作时使用 - 通过提供合并、PR 或清理的结构化选项来指导完成开发工作
3
+ description: 实现完成且需决定如何集成时使用。验证测试后呈现合并/PR/保持/放弃四选项,执行选择并清理。
4
4
  ---
5
5
 
6
6
  # 完成开发分支
7
7
 
8
8
  ## 概述
9
9
 
10
- 通过呈现清晰的选项并处理选定的工作流,指导完成开发工作。
10
+ 在实现完成、验证通过后,呈现 4 个结构化选项(本地合并、创建 PR、保持原样、放弃),按用户选择执行并做相应清理。
11
11
 
12
- **核心原则:** 验证测试 → 呈现选项 → 执行选择 → 清理。
12
+ **核心原则:** 验证测试 → 呈现选项 → 执行选择 → 按选项清理。
13
13
 
14
- **开始时声明:** "我正在使用完成开发分支 bc-finish-a-dev)技能来完成这项工作。"
14
+ **开始时声明:** "我正在使用 完成开发分支 ( bc-finish-a-dev ) 技能来完成这项工作。"
15
+
16
+ ## 何时使用
17
+
18
+ - **由 bc-execute-plans 在步骤 5 调用**:所有计划任务完成并验证后,必须调用本技能。
19
+ - **或**:用户明确说「完成开发」「合并/PR」「收尾」等,且当前分支工作已就绪时,可直接调用本技能。
20
+ - **输入**:当前分支(或 worktree)上的完成状态;**输出**:按用户选择完成合并/PR/保持/放弃及工作树清理。
15
21
 
16
22
  ## 流程
17
23
 
@@ -37,14 +43,15 @@ npm test / cargo test / pytest / go test ./...
37
43
 
38
44
  **如果测试通过:** 继续到步骤 2。
39
45
 
46
+ **若项目无测试套件**(如仅有占位 `npm test`):可用构建验证(如 `npm run build`)替代,或经用户确认后跳过验证、直接呈现选项。
47
+
40
48
  ### 步骤 2:确定基础分支
41
49
 
42
50
  ```bash
43
- # 尝试常见的基础分支
44
51
  git merge-base HEAD main 2>/dev/null || git merge-base HEAD master 2>/dev/null
45
52
  ```
46
53
 
47
- 或者询问:"这个分支从 main 分支分叉 - 对吗?"
54
+ 若无法自动确定(如无 main/master),询问用户:"这个分支从哪个分支分叉?是 main 吗?"
48
55
 
49
56
  ### 步骤 3:呈现选项
50
57
 
@@ -151,49 +158,29 @@ git worktree remove <worktree-path>
151
158
 
152
159
  ## 快速参考
153
160
 
154
- | 选项 | 合并 | 推送 | 保留工作树 | 清理分支 |
155
- |--------|-------|------|---------------|----------------|
156
- | 1. 本地合并 | ✓ | - | - | ✓ |
157
- | 2. 创建 PR | - | ✓ | | - |
158
- | 3. 保持原样 | - | - | | - |
159
- | 4. 放弃 | - | - | - | ✓ (强制) |
160
-
161
- ## 常见错误
162
-
163
- **跳过测试验证**
164
- - **问题:** 合并损坏的代码,创建失败的 PR
165
- - **修复:** 在提供选项之前始终验证测试
161
+ | 选项 | 合并 | 推送 | 清理 worktree | 清理分支 |
162
+ |--------|-------|------|-----------------|----------|
163
+ | 1. 本地合并 | ✓ | - | ✓(若在 worktree 中) | ✓ |
164
+ | 2. 创建 PR | - | ✓ | ✓(若在 worktree 中) | - |
165
+ | 3. 保持原样 | - | - | 不清理 | - |
166
+ | 4. 放弃 | - | - | ✓(若在 worktree 中) | ✓ (强制) |
166
167
 
167
- **开放式问题**
168
- - **问题:** "接下来我应该做什么?" → 模糊不清
169
- - **修复:** 精确呈现 4 个结构化选项
168
+ 步骤 5:仅对选项 1、2、4 在「当前在 worktree 中」时执行 `git worktree remove`;选项 3 不清理。
170
169
 
171
- **自动清理工作树**
172
- - **问题:** 在可能需要时移除工作树(选项 2、3)
173
- - **修复:** 仅为选项 1 和 4 清理
170
+ ## 常见错误
174
171
 
175
- **放弃时无确认**
176
- - **问题:** 意外删除工作
177
- - **修复:** 要求输入 "discard" 确认
172
+ - **跳过测试验证**:合并/PR 前必须先验证;否则合并损坏代码或创建失败 PR。
173
+ - **开放式问题**:不要问「接下来做什么?」;精确呈现 4 个选项。
174
+ - **错误清理工作树**:仅对选项 1、2、4 在需要时清理 worktree;选项 3 保留工作树。
175
+ - **放弃时无确认**:选项 4 必须要求用户输入 `discard` 确认后再执行。
178
176
 
179
- ## 红旗
177
+ ## 避免
180
178
 
181
- **永远不要:**
182
- - 继续处理失败的测试
183
- - 不验证结果测试就合并
184
- - 未经确认就删除工作
185
- - 未经明确请求就强制推送
179
+ **永远不要:** 测试失败仍继续合并/PR;未验证就合并;未经 `discard` 确认就执行放弃;未经请求就强制推送。
186
180
 
187
- **始终:**
188
- - 在提供选项之前验证测试
189
- - 精确呈现 4 个选项
190
- - 为选项 4 获取输入确认
191
- - 仅为选项 1 和 4 清理工作树
181
+ **始终:** 先验证再呈现选项;精确呈现 4 个选项且不添加解释;选项 4 必须获 `discard` 确认;按快速参考表清理工作树(1、2、4 需时则清理,3 保留)。
192
182
 
193
183
  ## 集成
194
184
 
195
- **被以下技能调用:**
196
- - **bc-execute-plans**(步骤 5)- 在所有批次完成后
197
-
198
- **与以下技能配合:**
199
- - **bc-use-git-worktrees** - 清理由该技能创建的工作树
185
+ - **bc-execute-plans**:在所有计划任务完成后,在步骤 5 必须调用本技能。
186
+ - **bc-use-git-worktrees**:若开发在 worktree 中进行,本技能在选项 1、2、4 执行后会清理该 worktree(步骤 5)。
@@ -1,54 +1,77 @@
1
1
  ---
2
2
  name: bc-requirements-analysis
3
- description: 在进行任何创造性工作之前,你必须使用此技能 - 创建功能、构建组件、添加功能或修改行为。在实现之前探索用户意图、需求和设计。
3
+ description: 创造性工作(新功能、组件、行为修改)前必须使用。在实现前探索用户意图、需求与设计。
4
4
  ---
5
5
 
6
6
  # 将想法转化为设计
7
7
 
8
8
  ## 概述
9
9
 
10
- 通过自然的协作对话,帮助将想法转化为完整的设计和规格。
10
+ 通过自然的协作对话,将想法转化为完整的设计与规格。
11
11
 
12
- 首先了解当前项目的背景,然后一次提出一个问题来完善想法。一旦你理解了要构建的内容,就以小部分(200-300字)呈现设计,在每个部分后检查到目前为止是否正确。
12
+ 先了解当前项目背景,再**一次只提一个问题**完善想法。理解要构建的内容后,将设计拆成小段(约 200300 字)呈现,每段后确认是否合理。
13
13
 
14
- **开始时声明:** "我正在使用 需求分析 ( bc-requirements-analysis ) 技能来创建实施计划。"
14
+ **开始时声明:** "我正在使用 需求分析 ( bc-requirements-analysis ) 技能来探索需求与设计。"
15
+
16
+ ## 何时使用
17
+
18
+ - 用户表达「想做某功能」「加个 XX」「优化 Y」「改一下 Z 的行为」等创造性需求时,**先调用本技能**,再写代码或写计划。
19
+ - 与 **bc-write-plans** 衔接:本技能产出设计文档;用户选择「立即执行」时,再调用 bc-write-plans 产出实施计划。
15
20
 
16
21
  ## 流程
17
22
 
18
- **理解想法:**
19
- - 首先查看当前项目状态(文件、文档、最近的提交)
20
- - 一次提出一个问题来完善想法
21
- - 尽可能使用选择题,但开放式问题也可以
22
- - 每条消息只问一个问题
23
- - 如果一个主题需要更多探索,将其分解为多个问题
24
- - 关注理解:目的、约束、成功标准、风险
23
+ **1. 理解想法:**
24
+ - 先查看当前项目状态(相关文件、文档、近期提交)
25
+ - 一次只提一个问题来完善想法
26
+ - 优先用选择题,必要时用开放式问题
27
+ - 若某主题需深入,拆成多个问题逐条问
28
+ - 重点弄清:**目的、约束、成功标准、风险**
29
+
30
+ **2. 探索方法:**
31
+ - 提出 2–3 种方案,说明各自优缺点
32
+ - 以对话方式呈现选项,给出你的建议与理由
33
+ - 先说明你推荐的方案并解释原因
34
+
35
+ **3. 呈现设计:**
36
+ - 确信理解要构建的内容后,再呈现设计
37
+ - 拆成约 200–300 字的小节
38
+ - 每节后问:「到目前为止是否正确?」
39
+ - 覆盖:架构、组件、数据流、错误处理、测试
40
+ - 若某处不合理,随时回到澄清,**不写文档**
41
+
42
+ **4. 设计之后(仅在设计被用户确认后):**
43
+ - 按本技能 **references/design-doc-template.md** 模板填写,将设计写入 `docs/plans/YYYY-MM-DD-<topic>-design.md`(topic 英文短横线,如 `init-tool-selection`),可按实际需求增删小节
44
+ - 若用户选择「修改设计」:先不写文档,回到澄清与修改;再次确认后再写(或覆盖原文档)
25
45
 
26
- **探索方法:**
27
- - 提出2-3种不同的方法及其权衡
28
- - 以对话方式呈现选项,并提供你的建议和理由
29
- - 先介绍你推荐的选项并解释原因
46
+ **5. 询问下一步:**
47
+ "准备好编写实施计划了吗?可选:立即执行、稍后、修改设计"
30
48
 
31
- **呈现设计:**
32
- - 一旦你相信你理解了要构建的内容,就呈现设计
33
- - 将其分解为200-300字的部分
34
- - 在每个部分后询问到目前为止是否正确
35
- - 涵盖:架构、组件、数据流、错误处理、测试
36
- - 当某些内容不合理时,准备回去澄清
49
+ - **立即执行**:已保存 design 文档 → 调用 **bc-write-plans** 生成实施计划
50
+ - **稍后**:设计已落档,可稍后手动实现或再调用 bc-write-plans
51
+ - **修改设计**:回到澄清与修改设计(不写/不更新文档直至再次确认)
37
52
 
38
- ## 设计之后
53
+ ## 设计文档模板
39
54
 
40
- **文档:**
41
- - 将验证后的设计写入 `docs/plans/YYYY-MM-DD-<topic>-design.md`
55
+ 落档时按此结构填写,必选节保留,可选节按需增删。
42
56
 
43
- **实现(如果继续):**
44
- - 询问:"准备好设置实现了吗?"
45
- - 使用 bc-write-plans 技能创建详细的实施计划
57
+ - **文档模板**:本技能下 `references/design-doc-template.md`(可复制作为起点)
58
+ - **落档路径**:`docs/plans/YYYY-MM-DD-<topic>-design.md`,`<topic>` 英文短横线(如 `init-tool-selection`)
59
+ - **小改动**:可只保留概述、设计目标、设计方案(1 节)、成功标准
60
+
61
+ ## 何时可简化或跳过
62
+
63
+ - 纯 bug 修复、纯文案/配置修改:可跳过完整需求分析。
64
+ - 用户已给出完整规格且无需探索:可简化为「快速确认范围与方案 → 写设计 → 再问是否写计划」。
46
65
 
47
66
  ## 关键原则
48
67
 
49
- - **一次一个问题** - 不要用多个问题压倒用户
50
- - **首选选择题** - 在可能的情况下,比开放式问题更容易回答
51
- - **严格遵循 YAGNI** - 从所有设计中删除不必要的功能
52
- - **探索替代方案** - 在确定之前始终提出2-3种方法
53
- - **增量验证** - 分部分呈现设计,验证每个部分
54
- - **保持灵活性** - 当某些内容不合理时,回去澄清
68
+ - **一次一个问题**:不要一次抛出多个问题
69
+ - **首选选择题**:在可能时用选项降低认知负担
70
+ - **严格 YAGNI**:从设计中去掉不必要的功能
71
+ - **探索替代方案**:在定案前至少给出 23 种方案及权衡
72
+ - **增量验证**:分小节呈现设计,每节都确认
73
+ - **保持灵活**:发现不合理时,回到澄清而非硬推
74
+
75
+ ## 避免
76
+
77
+ - 一次问多个问题;未获用户确认设计就写文档;跳过方案对比直接给单一设计;用户说「要改」仍继续写文档或写计划。
@@ -0,0 +1,53 @@
1
+ # [功能/主题名称] 设计
2
+
3
+ **日期**: YYYY-MM-DD
4
+ **状态**: 已确认 | 草稿
5
+
6
+ ## 概述
7
+
8
+ (1–3 句)本设计要解决什么问题、达成什么结果。
9
+
10
+ ## 需求背景(可选)
11
+
12
+ 当前状况、痛点或触发本需求的原因;若无明显背景可省略。
13
+
14
+ ## 设计目标
15
+
16
+ 1. **目标一**:简短描述
17
+ 2. **目标二**:……
18
+ 3. **约束/非目标**:不做什么、边界条件(可选)
19
+
20
+ ## 设计方案
21
+
22
+ ### 1. [子主题一]
23
+
24
+ (200–300 字为宜)具体方案描述,可含流程、交互、数据结构等。
25
+
26
+ ### 2. [子主题二]
27
+
28
+ ……
29
+
30
+ ### N. [子主题 N]
31
+
32
+ ……
33
+
34
+ ## 技术要点(可选)
35
+
36
+ - 关键依赖、接口、文件/模块
37
+ - 与现有代码的衔接点
38
+ - 实现时需特别注意的点
39
+
40
+ ## 成功标准
41
+
42
+ - [ ] 可验证的验收条件 1
43
+ - [ ] 可验证的验收条件 2
44
+ - [ ] ……
45
+
46
+ ## 风险与注意事项(可选)
47
+
48
+ - 风险或限制;实现/上线时需注意的事项
49
+ - 后续可优化方向(可选)
50
+
51
+ ## 设计之后(可选)
52
+
53
+ - 实现时使用 **bc-write-plans** 生成实施计划;或注明「稍后实现」等。
@@ -1,17 +1,23 @@
1
1
  ---
2
2
  name: bc-use-git-worktrees
3
- description: 当开始需要与当前工作空间隔离的功能工作或在执行实施计划之前使用 - 创建具有智能目录选择和安全验证的隔离 git worktrees
3
+ description: 需要与当前工作空间隔离时使用。创建带目录选择与安全验证的 git worktree,供执行计划或功能开发。
4
4
  ---
5
5
 
6
6
  # 使用 Git Worktrees
7
7
 
8
8
  ## 概述
9
9
 
10
- Git worktrees 创建共享同一存储库的隔离工作空间,允许同时在多个分支上工作而无需切换。
10
+ Git worktree 在同一仓库下创建隔离工作目录,可在多分支并行工作且不切换当前目录。本技能约定:先按优先级选目录,再验证安全(项目本地目录须被 git 忽略),最后创建 worktree 并做基线验证。
11
11
 
12
- **核心原则:** 系统性目录选择 + 安全验证 = 可靠隔离。
12
+ **核心原则:** 目录选择有优先级 + 项目本地目录必须验证被忽略 + 创建后做干净基线验证。
13
13
 
14
- **开始时声明:** "我正在使用 使用 Git Worktrees (bc-use-git-worktrees ) 技能来设置隔离的工作空间。"
14
+ **开始时声明:** "我正在使用 Git Worktrees ( bc-use-git-worktrees ) 技能来设置隔离的工作空间。"
15
+
16
+ ## 何时使用
17
+
18
+ - **由 bc-execute-plans 在开始执行计划前调用**:若需隔离(不在 main/master 上直接改),先调用本技能创建工作空间,再逐任务执行;若用户明确在当前分支执行则可跳过。
19
+ - **或**:用户明确要求「用 worktree」「隔离开发」「新建分支做 XX」时,直接调用本技能。
20
+ - **输出**:worktree 路径、干净基线(依赖安装 + 测试通过),供后续实施计划或开发使用。
15
21
 
16
22
  ## 目录选择流程
17
23
 
@@ -27,17 +33,19 @@ ls -d worktrees 2>/dev/null # 替代
27
33
 
28
34
  **如果找到:** 使用该目录。如果两者都存在,`.worktrees` 获胜。
29
35
 
30
- ### 2. 检查 CLAUDE.md
36
+ ### 2. 检查项目配置(可选)
37
+
38
+ 若项目有约定 worktree 目录(如 `CLAUDE.md`、`README` 中说明),按约定读取:
31
39
 
32
40
  ```bash
33
41
  grep -i "worktree.*director" CLAUDE.md 2>/dev/null
34
42
  ```
35
43
 
36
- **如果指定了首选项:** 使用它而不询问。
44
+ **若找到首选项:** 使用它,不询问。
37
45
 
38
46
  ### 3. 询问用户
39
47
 
40
- 如果不存在目录且没有 CLAUDE.md 首选项:
48
+ 若不存在目录且无项目配置首选项:
41
49
 
42
50
  ```
43
51
  未找到 worktree 目录。我应该在哪里创建 worktrees?
@@ -74,6 +82,8 @@ git check-ignore -q .worktrees 2>/dev/null || git check-ignore -q worktrees 2>/d
74
82
 
75
83
  ## 创建步骤
76
84
 
85
+ **前置**:已完成目录选择流程并得到 `LOCATION`(.worktrees / worktrees / 全局路径);`BRANCH_NAME` 由实施计划中的功能名或用户指定(如 `feature/xxx`)。
86
+
77
87
  ### 1. 检测项目名称
78
88
 
79
89
  ```bash
@@ -129,10 +139,12 @@ pytest
129
139
  go test ./...
130
140
  ```
131
141
 
132
- **如果测试失败:** 报告失败,询问是否继续或调查。
142
+ **如果测试失败:** 报告失败,询问用户是否继续或先调查。
133
143
 
134
144
  **如果测试通过:** 报告就绪。
135
145
 
146
+ **若项目无测试命令**(如仅有占位 `npm test`):可只做构建验证(如 `npm run build`),或经用户确认后跳过基线验证。
147
+
136
148
  ### 5. 报告位置
137
149
 
138
150
  ```
@@ -148,7 +160,7 @@ Worktree 准备就绪在 <full-path>
148
160
  | `.worktrees/` 存在 | 使用它(验证被忽略) |
149
161
  | `worktrees/` 存在 | 使用它(验证被忽略) |
150
162
  | 两者都存在 | 使用 `.worktrees/` |
151
- | 都不存在 | 检查 CLAUDE.md → 询问用户 |
163
+ | 都不存在 | 检查项目配置 → 询问用户 |
152
164
  | 目录未被忽略 | 添加到 .gitignore + 提交 |
153
165
  | 基线期间测试失败 | 报告失败 + 询问 |
154
166
  | 无 package.json/Cargo.toml | 跳过依赖安装 |
@@ -163,7 +175,7 @@ Worktree 准备就绪在 <full-path>
163
175
  ### 假设目录位置
164
176
 
165
177
  - **问题:** 创建不一致,违反项目约定
166
- - **修复:** 遵循优先级:现有 > CLAUDE.md > 询问
178
+ - **修复:** 遵循优先级:现有目录 > 项目配置 > 询问用户
167
179
 
168
180
  ### 在测试失败时继续
169
181
 
@@ -178,7 +190,7 @@ Worktree 准备就绪在 <full-path>
178
190
  ## 示例工作流
179
191
 
180
192
  ```
181
- 你:我正在使用 bc-using-git-worktrees 技能来设置隔离的工作空间。
193
+ 你:我正在使用 Git Worktrees ( bc-use-git-worktrees ) 技能来设置隔离的工作空间。
182
194
 
183
195
  [检查 .worktrees/ - 存在]
184
196
  [验证被忽略 - git check-ignore 确认 .worktrees/ 被忽略]
@@ -191,27 +203,13 @@ Worktree 准备就绪在 /Users/jesse/myproject/.worktrees/auth
191
203
  准备实现 auth 功能
192
204
  ```
193
205
 
194
- ## 红旗
206
+ ## 避免
195
207
 
196
- **永远不要:**
197
- - 创建 worktree 而不验证它被忽略(项目本地)
198
- - 跳过基线测试验证
199
- - 在未询问的情况下继续失败的测试
200
- - 在模棱两可时假没目录位置
201
- - 跳过 CLAUDE.md 检查
208
+ **永远不要:** 在未验证项目本地目录被 git 忽略的情况下创建 worktree;跳过基线测试;测试失败未获用户确认就继续;在目录不明确时假设位置;跳过目录优先级(现有 > 配置 > 询问)。
202
209
 
203
- **始终:**
204
- - 遵循目录优先级:现有 > CLAUDE.md > 询问
205
- - 验证项目本地目录被忽略
206
- - 自动检测并运行项目设置
207
- - 验证干净的测试基线
210
+ **始终:** 按优先级选目录;项目本地目录必须 `git check-ignore` 通过;自动检测并运行项目设置(npm/cargo/pip 等);创建后跑基线测试并报告结果。
208
211
 
209
212
  ## 集成
210
213
 
211
- **被以下技能调用:**
212
- - **bc-requirements-analysis**(第 4 阶段)- 当设计被批准且实施遵循时必需
213
- - **bc-execute-plans** - 在执行任何任务之前必需
214
- - 任何需要隔离工作空间的技能
215
-
216
- **与以下技能配合:**
217
- - **bc-finish-a-dev** - 工作完成后清理必需
214
+ - **bc-execute-plans**:若需隔离,在开始执行计划前调用本技能创建 worktree;执行完成后由 **bc-finish-a-dev** 在选项 1、2、4 时清理该 worktree。
215
+ - **bc-finish-a-dev**:在选项 1、2、4 执行后会检查当前是否在 worktree 中,若是则执行 `git worktree remove` 清理。
@@ -1,17 +1,17 @@
1
1
  ---
2
2
  name: bc-using-bcoder
3
- description: 当开始任何对话时使用 - 确立如何查找和使用技能,需要在任何响应(包括澄清问题)之前调用 Skill 工具
3
+ description: 对话开始时使用。确立如何查找和使用技能;在任何响应(含澄清)之前先调用 Skill 工具。
4
4
  ---
5
5
 
6
- **开始时宣布:** "我正在使用 BCoder ( bc-using-bcoder ) 技能。"
6
+ # 使用 BCoder 技能
7
7
 
8
- <极端重要>
9
- 如果你认为即使只有 1% 的机会技能可能适用于你正在做的事情,你绝对必须调用技能。
8
+ ## 概述
10
9
 
11
- 如果技能适用于你的任务,你没有选择。你必须使用它。
10
+ 本技能规定:**先查技能,再响应**。若你认为有哪怕 1% 可能适用,必须先调用技能检查;若适用则必须使用,不可跳过。
12
11
 
13
- 这是不可协商的。这不是可选的。你无法合理化你的出路。
14
- </极端重要>
12
+ **开始时声明:** "我正在使用 BCoder ( bc-using-bcoder ) 技能。"
13
+
14
+ **极端重要:** 技能可能适用时,必须调用技能。适用则必须使用。不可协商、不可跳过、不可合理化绕过。
15
15
 
16
16
  ## 如何访问技能
17
17
 
@@ -19,11 +19,9 @@ description: 当开始任何对话时使用 - 确立如何查找和使用技能
19
19
 
20
20
  **在其他环境中:** 检查你平台的文档以了解如何加载技能。
21
21
 
22
- # 使用技能
23
-
24
22
  ## 规则
25
23
 
26
- **在任何响应或操作之前调用相关或请求的技能。** 即使只有 1% 的机会技能可能适用,这意味着你应该调用技能来检查。如果调用的技能最终证明不适合该情况,你不需要使用它。
24
+ **先调用技能,再响应或操作。** 1% 可能适用就调用检查;若调用后确认不适用,可不采用。不要用「先澄清/先看代码」等理由延后调用。
27
25
 
28
26
  ```dot
29
27
  digraph skill_flow {
@@ -68,24 +66,23 @@ digraph skill_flow {
68
66
 
69
67
  ## 技能优先级
70
68
 
71
- 当多个技能可能适用时,使用此顺序:
69
+ 当多个技能可能适用时,按此顺序:
72
70
 
73
- 1. **流程技能优先**(bc-requirements-analysisbc-execute-plans)- 这些确定如何处理任务
74
- 2. **实施技能其次**(bc-execute-plans、bc-finish-a-dev)- 这些指导执行
71
+ 1. **流程技能优先**:bc-requirements-analysis(需求与设计)→ bc-write-plans(实施计划)→ bc-execute-plans(逐任务执行)
72
+ 2. **收尾技能**:bc-finish-a-dev(合并/PR/清理)
75
73
 
76
- "让我们增加 X" → 首先 bc-requirements-analysis,然后实施技能。
77
- "让我们创建 Y" 首先 bc-requirements-analysis,然后实施技能。
78
- "我想增加 Z" → 首先 bc-requirements-analysis,然后实施技能。
79
- "实现这个功能" 首先 bc-execute-plans,然后领域特定技能。
74
+ **示例:**
75
+ - 「想做 X」「加个 Y」「优化 Z」→ **bc-requirements-analysis**,设计确认后再 **bc-write-plans**,再 **bc-execute-plans**
76
+ - 「按计划实现」「执行计划」→ **bc-execute-plans**
77
+ - 「完成开发」「合并/PR」→ **bc-finish-a-dev**
80
78
 
81
- ## 技能类型
79
+ **领域/场景技能**(如 bc-create-backend-project、bc-use-git-worktrees)在流程确定后按场景选用,技能内会说明何时适用。
82
80
 
83
- **刚性**(TDD、debugging):完全遵循。不要适应掉纪律。
84
-
85
- **灵活**(模式):将原则适应到上下文。
81
+ ## 技能类型
86
82
 
87
- 技能本身告诉你哪种。
83
+ - **刚性**(如 TDD、execute-plans):完全遵循,不跳过步骤。
84
+ - **灵活**(如模式、建议):将原则适应到上下文。技能内会说明属于哪种。
88
85
 
89
86
  ## 用户指令
90
87
 
91
- 指令说明 WHAT,而不是 HOW。"添加 X"或"修复 Y"并不意味着跳过工作流。
88
+ 用户说 WHAT(「添加 X」「修复 Y」),不说 HOW。**不因「看起来简单」就跳过工作流**——先查技能,再响应。
@@ -1,95 +1,67 @@
1
1
  ---
2
2
  name: bc-write-plans
3
- description: 当你有针对多步骤任务的规格或要求时使用,在接触代码之前
3
+ description: 多步骤任务的规格或设计确定后使用,在接触代码之前产出可执行实施计划。
4
4
  ---
5
5
 
6
6
  # 编写计划
7
7
 
8
8
  ## 概述
9
9
 
10
- 编写全面的实施计划,假设工程师对我们的代码库零上下文且品味可疑。记录他们需要知道的一切:每个任务要接触哪些文件、代码、他们可能需要检查的测试、文档、如何测试它。给他们整个计划作为可咬大小的任务。DRYYAGNI。TDD。频繁提交。
11
-
12
- 假设他们是熟练的开发人员,但几乎不了解我们的工具集或问题域。假设他们不太了解良好的测试设计。
10
+ 编写全面的实施计划,假设执行者对代码库零上下文。记录每个任务要接触的文件、代码、测试与验证方式、如何运行与提交。计划拆成可咬大小(约 2–5 分钟/步)的任务。DRYYAGNI、频繁提交;有测试时优先 TDD
13
11
 
14
12
  **开始时声明:** "我正在使用 编写计划 ( bc-write-plans ) 技能来创建实施计划。"
15
13
 
16
- **将计划保存到:** `docs/plans/YYYY-MM-DD-<feature-name>.md`
17
-
18
- ## 小颗粒度任务
19
-
20
- **每个步骤是一个动作(2-5 分钟):**
21
- - "编写失败测试" - 步骤
22
- - "运行以确保它失败" - 步骤
23
- - "编写最小代码以使测试通过" - 步骤
24
- - "运行测试并确保它们通过" - 步骤
25
- - "提交" - 步骤
26
-
27
- ## 计划文档头
28
-
29
- **每个计划必须以此头开始:**
30
-
31
- ```markdown
32
- # [功能名称] 实施计划
14
+ **计划保存到:** `docs/plans/YYYY-MM-DD-<topic>-plan.md`(`<topic>` 与设计文档一致,英文短横线,如 `init-tool-selection`)
33
15
 
34
- > **对于 AI编程工具 (如 Claude 或 Cursor 等):** 必需子技能:使用 execute-plans 来逐任务实施此计划。
16
+ ## 何时使用
35
17
 
36
- **目标:** [一句话描述这构建什么]
18
+ - 用户在设计确认后选择「立即执行」,或已有设计/规格文档且要求写实施计划时,**调用本技能**。
19
+ - **输入**:通常为 bc-requirements-analysis 产出的 `docs/plans/YYYY-MM-DD-<topic>-design.md`,或等价规格。
20
+ - **输出**:`docs/plans/YYYY-MM-DD-<topic>-plan.md`,供 bc-execute-plans 逐任务执行。
37
21
 
38
- **架构:** [2-3 句话关于方法]
22
+ ## 流程
39
23
 
40
- **技术栈:** [关键技术/库]
24
+ 1. **读设计/规格**:读取 design 文档或等价规格,确认目标、架构、技术栈与成功标准。
25
+ 2. **写计划头**:按本技能 `references/plan-doc-template.md` 中的计划文档头填写,目标/架构/技术栈与设计一致。
26
+ 3. **拆任务**:按设计拆成可咬大小的任务(每任务约 2–5 分钟),每任务对应明确文件与步骤。
27
+ 4. **写每任务步骤**:按模板中的任务结构,写明文件路径、具体代码或命令、运行命令与预期输出。
28
+ 5. **保存**:落档到 `docs/plans/YYYY-MM-DD-<topic>-plan.md`,`<topic>` 与设计文档一致。
29
+ 6. **执行交接**:提供执行选项(检查文档、立即执行、稍后执行)。
41
30
 
42
- ---
43
- ```
44
-
45
- ## 任务结构
46
-
47
- ```markdown
48
- ### 任务 N:[组件名称]
49
-
50
- **文件:**
51
- - 创建:`exact/path/to/file.py`
52
- - 修改:`exact/path/to/existing.py:123-145`
53
- - 测试:`tests/exact/path/to/test.py`
31
+ ## 小颗粒度任务
54
32
 
55
- **步骤 1:编写失败测试**
33
+ **每个步骤是一个动作(约 2–5 分钟):**
34
+ - 有测试时(TDD):编写失败测试 → 运行以验证失败 → 编写最小实现 → 运行以验证通过 → 提交
35
+ - 无测试或仅构建验证时:编写/修改代码 → 运行构建或验证命令 → 提交
36
+ - 始终:**精确文件路径、完整代码片段(非「添加验证」)、带预期输出的命令**
56
37
 
57
- ```python
58
- def test_specific_behavior():
59
- result = function(input)
60
- assert result == expected
61
- ```
38
+ ## 计划文档模板
62
39
 
63
- **步骤 2:运行测试以验证它失败**
40
+ - **模板**:本技能下 `references/plan-doc-template.md`(含计划文档头、任务结构示例与说明);落档时按此填写,任务粒度见上方「小颗粒度任务」。
41
+ - **落档路径**:`docs/plans/YYYY-MM-DD-<topic>-plan.md`,`<topic>` 与设计文档一致,英文短横线(如 `init-tool-selection`)。
64
42
 
65
- 运行:`pytest tests/path/test.py::test_name -v`
66
- 预期:失败并显示"function not defined"
43
+ ## 关键原则
67
44
 
68
- **步骤 3:编写最小实现**
45
+ - **精确路径**:每个任务写明创建/修改/测试的完整路径
46
+ - **完整代码**:计划中写清代码片段或关键逻辑,不用「添加验证」等模糊表述
47
+ - **可验证命令**:每步给出运行命令与预期输出
48
+ - **可咬大小**:单任务 2–5 分钟可完成,DRY、YAGNI、频繁提交
49
+ - **引用技能**:需要时用 @ 语法引用相关技能(如 bc-execute-plans)
69
50
 
70
- ```python
71
- def function(input):
72
- return expected
73
- ```
51
+ ## 避免
74
52
 
75
- **步骤 4:运行测试以验证它通过**
53
+ - 任务过大、缺少文件路径;步骤只有「添加 XX」无具体代码或命令;跳过验证步骤;计划与设计文档 topic 不一致。
76
54
 
77
- 运行:`pytest tests/path/test.py::test_name -v`
78
- 预期:通过
55
+ ## 何时可简化
79
56
 
80
- ## 记住
81
- - 始终精确的文件路径
82
- - 计划中的完整代码(不是"添加验证")
83
- - 带有预期输出的精确命令
84
- - 使用 @ 语法引用相关技能
85
- - DRY、YAGNI、TDD、频繁提交
57
+ - 改动极小(1–2 步可完成):可写简版计划(仅计划头 + 一两项任务),或经用户同意后直接实现。
86
58
 
87
59
  ## 执行交接
88
60
 
89
- 保存计划后,提供执行选择:
90
-
91
- **"计划完成并保存到 `docs/plans/<filename>.md`。两个执行选项:"**
61
+ 保存计划后,提供执行选择(保持选项简洁,不展开解释):
92
62
 
93
- **1. 检查文档** - 查看设计及计划文档,确保它是正确的
63
+ **"计划完成并保存到 `docs/plans/YYYY-MM-DD-<topic>-plan.md`。执行选项:"**
94
64
 
95
- **2. 立即执行** - 在 worktree 中打开新会话,使用 bc-execute-plans 批量执行并带检查点
65
+ 1. **检查文档**:查看设计及计划文档,确认无误后再执行
66
+ 2. **立即执行**:调用 **bc-execute-plans** 逐任务执行
67
+ 3. **稍后执行**:计划已落档,稍后手动按计划实现或再调用 bc-execute-plans
@@ -0,0 +1,58 @@
1
+ # 计划文档模板
2
+
3
+ 每个计划必须以此头开始,任务按下方结构编写。示例为 TDD/Python;其他技术栈替换为对应测试/构建命令(如 `npm run build`、`npm test`);无测试时任务可为:编写/修改 → 验证构建 → 提交。
4
+
5
+ ---
6
+
7
+ ## 计划文档头(必选)
8
+
9
+ ```markdown
10
+ # [功能名称] 实施计划
11
+
12
+ > **对于 AI编程工具 (如 Claude 或 Cursor 等):** 必需子技能:使用 bc-execute-plans 来逐任务实施此计划。
13
+
14
+ **目标:** [一句话描述这构建什么]
15
+
16
+ **架构:** [2-3 句话关于方法]
17
+
18
+ **技术栈:** [关键技术/库]
19
+
20
+ ---
21
+ ```
22
+
23
+ ---
24
+
25
+ ## 任务结构示例(TDD / Python)
26
+
27
+ ```markdown
28
+ ### 任务 N:[组件名称]
29
+
30
+ **文件:**
31
+ - 创建:`exact/path/to/file.py`
32
+ - 修改:`exact/path/to/existing.py:123-145`
33
+ - 测试:`tests/exact/path/to/test.py`
34
+
35
+ **步骤 1:编写失败测试**
36
+
37
+ (此处写完整测试代码,非「添加验证」)
38
+
39
+ **步骤 2:运行测试以验证它失败**
40
+
41
+ 运行:`pytest tests/path/test.py::test_name -v`
42
+ 预期:失败并显示"function not defined"
43
+
44
+ **步骤 3:编写最小实现**
45
+
46
+ (此处写完整实现代码)
47
+
48
+ **步骤 4:运行测试以验证它通过**
49
+
50
+ 运行:`pytest tests/path/test.py::test_name -v`
51
+ 预期:通过
52
+
53
+ **步骤 5:提交**
54
+
55
+ 运行:`git add ... && git commit -m "..."`
56
+ ```
57
+
58
+ 无测试或仅构建验证时,任务可为:**步骤 1:编写/修改代码** → **步骤 2:运行构建或验证命令** → **步骤 3:提交**。每步写明精确路径、完整代码或命令、预期输出。
package/dist/cli/index.js CHANGED
@@ -65,18 +65,18 @@ program
65
65
  try {
66
66
  const stats = await fs_1.promises.stat(resolvedPath);
67
67
  if (!stats.isDirectory()) {
68
- throw new Error(`Path "${targetPath}" is not a directory`);
68
+ throw new Error(`路径 "${targetPath}" 不是目录`);
69
69
  }
70
70
  }
71
71
  catch (error) {
72
72
  if (error.code === 'ENOENT') {
73
- console.log(`Directory "${targetPath}" doesn't exist, it will be created.`);
73
+ console.log(`目录 "${targetPath}" 不存在,将被创建。`);
74
74
  }
75
75
  else if (error.message && error.message.includes('not a directory')) {
76
- throw error;
76
+ throw new Error(`路径 "${targetPath}" 不是目录`);
77
77
  }
78
78
  else {
79
- throw new Error(`Cannot access path "${targetPath}": ${error.message}`);
79
+ throw new Error(`无法访问路径 "${targetPath}":${error.message}`);
80
80
  }
81
81
  }
82
82
  spinner.succeed(chalk_1.default.green("初始化完成,下一步将进行工具选择!")); // 绿色文字
@@ -90,18 +90,22 @@ program
90
90
  }
91
91
  }
92
92
  catch (err) {
93
- spinner.fail(err?.message ?? "Invalid tools");
93
+ spinner.fail(chalk_1.default.red(err?.message ?? "工具选择无效"));
94
94
  process.exit(1);
95
95
  }
96
+ // 允许 toolIds 为空数组(用户选择跳过)
96
97
  if (toolIds.length > 0) {
97
98
  await (0, tools_1.writeToolStructure)(resolvedPath, toolIds);
98
99
  await (0, tools_1.copyBcoderToToolFolders)(resolvedPath, toolIds);
100
+ spinner.succeed(`初始化完成:${resolvedPath}`);
101
+ }
102
+ else {
103
+ spinner.succeed(chalk_1.default.yellow(`初始化完成:${resolvedPath}(未配置工具,可稍后手动配置)`));
99
104
  }
100
- spinner.succeed(`初始化完成:${resolvedPath}`);
101
105
  }
102
106
  catch (error) {
103
107
  console.log();
104
- spinner.fail(`Error: ${error.message}`);
108
+ spinner.fail(chalk_1.default.red(`错误:${error.message}`));
105
109
  process.exit(1);
106
110
  }
107
111
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC,CAAC,0BAA0B;AAC/D,2BAAoC,CAAC,aAAa;AAClD,2CAA6B,CAAC,yBAAyB;AAKvD,8CAAsB;AACtB,kDAA0B;AAC1B,kDAA0B;AAG1B,uCAAiD;AACjD,mCAMiB;AAGjB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAElD,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,qBAAqB,CAAC;KAClC,OAAO,CAAC,OAAO,CAAC,CAAC;AAElB,OAAO;KACN,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,OAAO,CAAC;KACpB,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC;KACjC,MAAM,CAAC,SAAS,EAAE,cAAc,CAAC;KACjC,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,EAAE,OAA6C,EAAE,EAAE;IAChF,IAAI,OAAO,GAAG,IAAA,aAAG,GAAE,CAAC;IACpB,IAAA,eAAK,GAAE,CAAC;IACR,MAAM,IAAA,8BAAoB,GAAE,CAAC;IAC7B,OAAO,GAAG,IAAA,aAAG,EAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,aAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,SAAS,UAAU,sBAAsB,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,sCAAsC,CAAC,CAAC;YAC9E,CAAC;iBAAM,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACtE,MAAM,KAAK,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,uBAAuB,UAAU,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,OAAO;QAC1D,IAAI,OAAO,GAAa,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,IAAI,OAAO,EAAE,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACxE,OAAO,GAAG,IAAA,wBAAgB,EAAC,OAAO,CAAC,KAAe,CAAC,CAAC;YACtD,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,GAAG,MAAM,IAAA,2BAAmB,GAAE,CAAC;YACxC,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,IAAI,eAAe,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAA,0BAAkB,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,IAAA,+BAAuB,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,CAAC,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAC,UAAW,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO;KACJ,OAAO,CAAC,eAAe,CAAC;KACxB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,SAAS,EAAE,iBAAiB,CAAC;KACpC,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,GAAG,EAAE,OAA6B,EAAE,EAAE;IAChE,IAAA,eAAK,GAAE,CAAC;IACR,MAAM,IAAA,8BAAoB,GAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,KAAK,GAAG,MAAM,aAAE,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,OAAO,UAAU,QAAQ,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,IAAA,iCAAyB,EAAC,YAAY,CAAC,CAAC;QAC9C,OAAO,CAAC,OAAO,CAAC,QAAQ,YAAY,EAAE,CAAC,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,IAAI,CAAE,KAAe,CAAC,OAAO,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,UAAU;AACV,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/cli/tools.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,uCAAwC,CAAC;AACjE,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIrD,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAQpE;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAS7D;AAED,uDAAuD;AACvD,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AA6BD,yDAAyD;AACzD,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,kDAAkD;AAClD,wBAAsB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBjF;AAED,8DAA8D;AAC9D,wBAAsB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAenF;AAGD,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAK/F"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/cli/tools.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW,uCAAwC,CAAC;AACjE,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIrD,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CAQpE;AAmDD,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CA2B7D;AAED,uDAAuD;AACvD,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AA6BD,yDAAyD;AACzD,wBAAsB,uBAAuB,CAC3C,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,kDAAkD;AAClD,wBAAsB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBjF;AAED,8DAA8D;AAC9D,wBAAsB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAenF;AAGD,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAK/F"}
package/dist/cli/tools.js CHANGED
@@ -32,6 +32,9 @@ var __importStar = (this && this.__importStar) || (function () {
32
32
  return result;
33
33
  };
34
34
  })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
35
38
  Object.defineProperty(exports, "__esModule", { value: true });
36
39
  exports.TOOL_DISPLAY_NAMES = exports.VALID_TOOLS = void 0;
37
40
  exports.parseToolsOption = parseToolsOption;
@@ -43,6 +46,7 @@ exports.updateBcoderInToolFolders = updateBcoderInToolFolders;
43
46
  exports.writeToolStructure = writeToolStructure;
44
47
  const fs_1 = require("fs");
45
48
  const path = __importStar(require("path"));
49
+ const chalk_1 = __importDefault(require("chalk"));
46
50
  const prompts_1 = require("@inquirer/prompts");
47
51
  exports.VALID_TOOLS = ["cursor", "claude", "trae"];
48
52
  exports.TOOL_DISPLAY_NAMES = {
@@ -56,17 +60,76 @@ function parseToolsOption(value) {
56
60
  const parts = value.split(",").map((s) => s.trim().toLowerCase()).filter(Boolean);
57
61
  const invalid = parts.filter((p) => !exports.VALID_TOOLS.includes(p));
58
62
  if (invalid.length > 0) {
59
- throw new Error(`Invalid tool(s): ${invalid.join(", ")}. Allowed: cursor, claude, trae`);
63
+ throw new Error(`无效的工具:${invalid.join(", ")}。允许的工具:cursor, claude, trae`);
60
64
  }
61
65
  return [...new Set(parts)];
62
66
  }
67
+ /**
68
+ * 格式化已选工具显示名称
69
+ * @param toolIds 工具 ID 数组
70
+ * @returns 格式化的工具名称字符串
71
+ */
72
+ function formatSelectedTools(toolIds) {
73
+ if (toolIds.length === 0)
74
+ return "无";
75
+ return toolIds.map(id => exports.TOOL_DISPLAY_NAMES[id] ?? id).join(",");
76
+ }
77
+ /**
78
+ * 显示选择确认预览
79
+ * @param toolIds 已选择的工具 ID 数组
80
+ * @returns Promise<boolean> 用户是否确认
81
+ */
82
+ async function showConfirmationPreview(toolIds) {
83
+ const toolNames = toolIds.map(id => exports.TOOL_DISPLAY_NAMES[id] ?? id);
84
+ console.log(chalk_1.default.cyan("\n您选择了以下工具:"));
85
+ toolNames.forEach(name => {
86
+ console.log(chalk_1.default.green(` ✓ ${name}`));
87
+ });
88
+ console.log(); // 空行
89
+ return await (0, prompts_1.confirm)({
90
+ message: "确认继续?",
91
+ default: true,
92
+ });
93
+ }
94
+ /**
95
+ * 处理未选择工具的情况
96
+ * @returns Promise<'retry' | 'skip'> 用户选择的操作
97
+ */
98
+ async function handleEmptySelection() {
99
+ console.log(chalk_1.default.yellow("\n⚠ 您还没有选择任何工具"));
100
+ console.log();
101
+ const action = await (0, prompts_1.select)({
102
+ message: "请选择操作:",
103
+ choices: [
104
+ { name: "重新选择工具", value: "retry" },
105
+ { name: "确认跳过(稍后手动配置)", value: "skip" },
106
+ ],
107
+ });
108
+ return action;
109
+ }
63
110
  async function promptToolSelection() {
64
111
  const answers = await (0, prompts_1.checkbox)({
65
- message: "选择 AI 编程工具(可多选)",
112
+ message: "请选择要配置的 AI 编程工具\n" +
113
+ chalk_1.default.gray("提示:使用 ↑↓ 键移动,空格键选择/取消,Enter 确认"),
66
114
  choices: exports.VALID_TOOLS.map((id) => ({ name: exports.TOOL_DISPLAY_NAMES[id] ?? id, value: id })),
67
115
  });
68
116
  if (answers.length === 0) {
69
- throw new Error("至少选择一项");
117
+ // 友好处理未选择情况
118
+ const action = await handleEmptySelection();
119
+ if (action === 'retry') {
120
+ // 重新选择
121
+ return await promptToolSelection();
122
+ }
123
+ else {
124
+ // 跳过,返回空数组
125
+ return [];
126
+ }
127
+ }
128
+ // 显示确认预览
129
+ const confirmed = await showConfirmationPreview(answers);
130
+ if (!confirmed) {
131
+ // 用户选择取消,递归调用重新选择
132
+ return await promptToolSelection();
70
133
  }
71
134
  return [...answers];
72
135
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/cli/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/cli/tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bcoder",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "description": "极轻量级的企业 AI Coding 助手:init 初始化项目与 AI 工具目录,update 同步 bcoder 模板",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -31,7 +31,7 @@
31
31
  "url": ""
32
32
  },
33
33
  "engines": {
34
- "node": ">=18"
34
+ "node": ">=20"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@types/clear": "^0.1.4",