@ranger1/dx 0.1.98 → 0.1.99
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/lib/validate-env.js
CHANGED
|
@@ -245,15 +245,31 @@ function isAllowedBySimpleGlob(path, globs) {
|
|
|
245
245
|
if (glob === path) return true
|
|
246
246
|
continue
|
|
247
247
|
}
|
|
248
|
-
|
|
249
|
-
if (glob.endsWith('*')) {
|
|
250
|
-
const prefix = glob.slice(0, -1)
|
|
251
|
-
if (path.startsWith(prefix)) return true
|
|
252
|
-
}
|
|
248
|
+
if (globToRegex(glob).test(path)) return true
|
|
253
249
|
}
|
|
254
250
|
return false
|
|
255
251
|
}
|
|
256
252
|
|
|
253
|
+
function globToRegex(glob) {
|
|
254
|
+
let pattern = ''
|
|
255
|
+
for (let i = 0; i < glob.length; i++) {
|
|
256
|
+
const ch = glob[i]
|
|
257
|
+
if (ch === '*') {
|
|
258
|
+
if (glob[i + 1] === '*') {
|
|
259
|
+
pattern += '.*'
|
|
260
|
+
i += 1
|
|
261
|
+
} else {
|
|
262
|
+
pattern += '[^/]*'
|
|
263
|
+
}
|
|
264
|
+
} else if ('\\^$+?.()|[]{}'.includes(ch)) {
|
|
265
|
+
pattern += `\\${ch}`
|
|
266
|
+
} else {
|
|
267
|
+
pattern += ch
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return new RegExp(`^${pattern}$`)
|
|
271
|
+
}
|
|
272
|
+
|
|
257
273
|
function findOverlaps(namedSets) {
|
|
258
274
|
const seen = new Map()
|
|
259
275
|
const overlaps = []
|
package/package.json
CHANGED
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: autospec
|
|
3
|
+
description: 设计文档到实施计划的全自动流水线。仅在用户显式调用时触发(如 /autospec),不通过关键词自动触发。将已讨论好的设计方案依次执行:写设计文档 → critic 审核修复 → 写实施计划 → critic 审核修复 → 自动开始 subagent-driven 执行 → git-pr-ship 交付 PR。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# spec-to-plan:设计文档 → 审核 → 实施计划 → 审核 → 执行 → 交付 PR
|
|
7
|
+
|
|
8
|
+
六步全自动流水线。用户在 brainstorming 阶段讨论好目标和方案后显式调用,后续全部自动完成,无需人工干预。
|
|
9
|
+
|
|
10
|
+
## 输入
|
|
11
|
+
|
|
12
|
+
`/spec-to-plan <topic-slug>`
|
|
13
|
+
|
|
14
|
+
- `topic-slug`:文件命名用,如 `chat-instruction-admin`
|
|
15
|
+
- 当前对话中必须已包含充分的设计上下文(目标、方案、数据模型、API、技术决策等)
|
|
16
|
+
|
|
17
|
+
## 输出
|
|
18
|
+
|
|
19
|
+
- 审核后的设计文档:`docs/superpowers/specs/YYYY-MM-DD-<topic-slug>-design.md`
|
|
20
|
+
- 审核后的实施计划:`docs/superpowers/plans/YYYY-MM-DD-<topic-slug>.md`
|
|
21
|
+
- 自动进入 subagent-driven 执行模式
|
|
22
|
+
|
|
23
|
+
## 执行流程
|
|
24
|
+
|
|
25
|
+
严格按顺序执行五步,中间不暂停、不询问用户。
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
### Step 1:撰写设计文档
|
|
30
|
+
|
|
31
|
+
从当前对话上下文中提取所有已确认的设计决策,写入设计文档。不臆造未讨论过的需求。
|
|
32
|
+
|
|
33
|
+
**路径**:`docs/superpowers/specs/YYYY-MM-DD-<topic-slug>-design.md`
|
|
34
|
+
|
|
35
|
+
**结构**(按需裁剪,无内容的章节不写):
|
|
36
|
+
|
|
37
|
+
```markdown
|
|
38
|
+
# <功能名称>
|
|
39
|
+
|
|
40
|
+
## 背景
|
|
41
|
+
## 数据模型
|
|
42
|
+
## API 设计
|
|
43
|
+
## 缓存策略
|
|
44
|
+
## 前端改造
|
|
45
|
+
## 必要的集成步骤
|
|
46
|
+
## Seed 数据
|
|
47
|
+
## 模块结构
|
|
48
|
+
## 不做的事
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**自检**:写完后扫描——无 TBD/TODO、章节不矛盾、范围聚焦、无歧义。发现问题直接修。
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
### Step 2:审核设计文档
|
|
56
|
+
|
|
57
|
+
派出 `oh-my-claudecode:critic` subagent 审核。
|
|
58
|
+
|
|
59
|
+
**Prompt**:
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
请以挑刺的角度审核这份设计文档,结合项目实际代码验证每一个设计决策。
|
|
63
|
+
|
|
64
|
+
文档路径:<spec-path>
|
|
65
|
+
|
|
66
|
+
审核要点:
|
|
67
|
+
1. 数据模型:字段命名、ID 策略、@map/@@map 是否匹配项目惯例
|
|
68
|
+
2. 模块结构:目录组织是否与现有模块一致
|
|
69
|
+
3. API 设计:路由前缀、鉴权、分页 DTO 继承是否符合惯例
|
|
70
|
+
4. 缓存:CacheService 方法签名是否正确
|
|
71
|
+
5. 前端:store 组织、API 调用模式、组件层级是否匹配实际代码
|
|
72
|
+
6. 集成步骤:是否遗漏 ErrorCode、Swagger、RBAC、api-contracts、菜单注册等
|
|
73
|
+
7. Seed:入口注册、幂等策略是否正确
|
|
74
|
+
|
|
75
|
+
每个发现给出具体文件路径和代码证据。
|
|
76
|
+
分为:错误(必须修复)、遗漏(建议补充)、建议(可选优化)。
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
**处理结果**:读取 critic 返回,逐一修复设计文档。错误和遗漏全部修复,建议类酌情采纳。不改变已与用户确认的设计决策,只修事实性错误和惯例偏差。
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
### Step 3:撰写实施计划
|
|
84
|
+
|
|
85
|
+
基于审核后的设计文档写实施计划。
|
|
86
|
+
|
|
87
|
+
**路径**:`docs/superpowers/plans/YYYY-MM-DD-<topic-slug>.md`
|
|
88
|
+
|
|
89
|
+
**头部**(固定格式):
|
|
90
|
+
|
|
91
|
+
```markdown
|
|
92
|
+
# <功能名称> Implementation Plan
|
|
93
|
+
|
|
94
|
+
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development to implement this plan task-by-task.
|
|
95
|
+
|
|
96
|
+
**Goal:** 一句话
|
|
97
|
+
**Architecture:** 2-3 句
|
|
98
|
+
**Tech Stack:** 关键技术
|
|
99
|
+
**Spec:** <spec-path>
|
|
100
|
+
|
|
101
|
+
---
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**Task 结构**:
|
|
105
|
+
|
|
106
|
+
```markdown
|
|
107
|
+
### Task N: <组件名>
|
|
108
|
+
|
|
109
|
+
**Files:**
|
|
110
|
+
- Create: `exact/path`
|
|
111
|
+
- Modify: `exact/path`
|
|
112
|
+
|
|
113
|
+
- [ ] **Step 1: 描述**
|
|
114
|
+
(完整代码块)
|
|
115
|
+
|
|
116
|
+
- [ ] **Step 2: 验证**
|
|
117
|
+
Run: `命令`
|
|
118
|
+
Expected: 预期
|
|
119
|
+
|
|
120
|
+
- [ ] **Step 3: Commit**
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**要求**:
|
|
124
|
+
- 每步完整代码,禁止 TBD/TODO/"类似 Task N"
|
|
125
|
+
- import 路径准确(基于 Step 2 审核已验证的惯例)
|
|
126
|
+
- Task 按依赖顺序排列
|
|
127
|
+
- 粒度 2-5 分钟每 Task
|
|
128
|
+
|
|
129
|
+
**自检**:spec 每个章节有对应 Task、无占位符、类型和方法名前后一致。
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
### Step 4:审核实施计划
|
|
134
|
+
|
|
135
|
+
派出 `oh-my-claudecode:critic` subagent 审核。
|
|
136
|
+
|
|
137
|
+
**Prompt**:
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
请以挑刺的角度审核这份实施计划,结合项目实际代码验证每一个代码片段。
|
|
141
|
+
|
|
142
|
+
计划路径:<plan-path>
|
|
143
|
+
设计文档:<spec-path>
|
|
144
|
+
|
|
145
|
+
审核要点:
|
|
146
|
+
1. Import 路径:每个 import 在项目中是否真实存在
|
|
147
|
+
2. 路由冲突:参数路由 (:id) 和固定路由的顺序
|
|
148
|
+
3. API 方法名:Zodios 等生成的方法命名是否匹配惯例
|
|
149
|
+
4. 测试基建:E2E setup 是否匹配项目 fixtures
|
|
150
|
+
5. Seed 入口:注册方式是否匹配项目结构
|
|
151
|
+
6. Store 注册:前端 store 根注册方式是否正确
|
|
152
|
+
7. 页面路由:文件路径能否自动注册路由
|
|
153
|
+
8. DTO/Exception:构造函数签名、方法名是否匹配实际 API
|
|
154
|
+
9. 遗漏:spec 中的需求是否全部覆盖
|
|
155
|
+
|
|
156
|
+
每个发现给出具体文件路径和代码证据。
|
|
157
|
+
分为:错误(必须修复)、遗漏(建议补充)、建议(可选优化)。
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
**处理结果**:读取 critic 返回,逐一修复实施计划。错误和遗漏全部修复。
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
### Step 5:自动开始执行
|
|
165
|
+
|
|
166
|
+
四步文档工作完成后,直接调用 `superpowers:subagent-driven-development` skill,传入实施计划路径,开始 Task-by-Task 的 subagent 执行。
|
|
167
|
+
|
|
168
|
+
不询问用户选择执行方式,直接以 subagent-driven 模式启动。
|
|
169
|
+
|
|
170
|
+
输出简短状态通知:
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
设计文档:<spec-path>(已审核修复)
|
|
174
|
+
实施计划:<plan-path>(已审核修复,共 N 个 Task)
|
|
175
|
+
正在以 subagent-driven 模式开始执行...
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
### Step 6:调用 git-pr-ship 交付 PR
|
|
181
|
+
|
|
182
|
+
subagent-driven 执行全部 Task 完成并通过验证后,直接调用 `git-pr-ship` skill,进入 PR 交付流程。
|
|
183
|
+
|
|
184
|
+
前置条件(执行阶段应已满足,若未满足先补齐):
|
|
185
|
+
- 全部 Task 已完成并勾选
|
|
186
|
+
- 代码变更已提交到当前功能分支
|
|
187
|
+
- lint、构建、相关测试已通过
|
|
188
|
+
|
|
189
|
+
不询问用户,直接以 `git-pr-ship` 流程收口:整理提交、推送分支、创建 PR。
|
|
190
|
+
|
|
191
|
+
输出简短状态通知:
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
实施已全部完成并验证通过。
|
|
195
|
+
正在调用 git-pr-ship 交付 PR...
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## 注意事项
|
|
199
|
+
|
|
200
|
+
- 设计文档内容完全来自对话上下文,不臆造未讨论过的需求
|
|
201
|
+
- critic 修复只改事实错误和惯例偏差,不改变用户已确认的设计决策
|
|
202
|
+
- 如果 critic 发现的问题数量极多(>10 个错误级),在修复后可考虑再跑一轮 critic 确认
|
|
203
|
+
- 整个流程对用户透明——每步开始时输出一行状态(如"正在撰写设计文档..."),但不等待确认
|
|
@@ -15,6 +15,7 @@ description: PR 交付流程(仅限显式调用)
|
|
|
15
15
|
- 禁止在 `main/master` 直接提交。
|
|
16
16
|
- 每修复一个问题立即 commit 一次,禁止攒到最后一次性提交。
|
|
17
17
|
- AI 自主判断是否拒绝修复某个问题,拒绝必须写明理由。
|
|
18
|
+
- 扫描范围内顺便发现的历史遗留问题(非本次 PR 引入),视同本次问题一并修复,不以"历史遗留"或"超出本 PR 范围"为由跳过。但不主动扩大扫描范围去寻找无关问题。
|
|
18
19
|
- 上次跑完测试/Lint 后如果改过代码,必须重跑验证。
|
|
19
20
|
- 使用 heredoc 写 commit message 和 gh 命令的 body(禁止 `\n`)。
|
|
20
21
|
- 零参数设计:所有信息从仓库状态、当前分支、gh CLI 自动获取,不接受手动参数。
|
|
@@ -281,10 +282,12 @@ Step 3: 运行关联测试(根据以下改动范围判断需要跑哪些)
|
|
|
281
282
|
|
|
282
283
|
审查者 A — 代码质量与架构(派独立 subagent):
|
|
283
284
|
- 关注:架构合理性、SOLID 原则、错误处理、性能、安全
|
|
285
|
+
- 审查 PR diff 涉及的文件时,如果顺便发现同一文件中的历史遗留问题,也一并报告(不主动扩大到 diff 之外的文件)
|
|
284
286
|
- 输入:PR diff
|
|
285
287
|
|
|
286
288
|
审查者 B — 逻辑缺陷与规范(派独立 subagent):
|
|
287
289
|
- 关注:逻辑缺陷、边界条件、命名规范、类型安全、测试覆盖
|
|
290
|
+
- 审查 PR diff 涉及的文件时,如果顺便发现同一文件中的历史遗留问题,也一并报告(不主动扩大到 diff 之外的文件)
|
|
288
291
|
- 输入:PR diff
|
|
289
292
|
|
|
290
293
|
> **禁止使用 `code-review` 技能或 `oh-my-claudecode:code-reviewer` agent 来执行审查。** 这些工具内置了自动发 PR 评论的行为,会导致 PR 上出现多条重复审核报告。必须派独立 subagent,并在 prompt 中明确要求"只返回审查结果文本,禁止调用 gh pr comment 或以任何方式发布 PR 评论"。
|
|
@@ -292,12 +295,14 @@ Step 3: 运行关联测试(根据以下改动范围判断需要跑哪些)
|
|
|
292
295
|
Subagent A prompt:
|
|
293
296
|
```
|
|
294
297
|
作为资深架构师审查此 PR diff,关注架构、性能、安全问题。
|
|
298
|
+
审查 diff 涉及的文件时,如果顺便发现同一文件中已有的历史遗留问题(非本次 diff 引入),也一并报告——不要因为是历史代码就忽略。但不要主动扩大到 diff 未涉及的文件。
|
|
295
299
|
【重要】只返回审查结果文本给调用者。禁止调用 gh pr comment 或以任何方式直接往 PR 发评论——评论由主 agent 统一发布。
|
|
296
300
|
```
|
|
297
301
|
|
|
298
302
|
Subagent B prompt:
|
|
299
303
|
```
|
|
300
304
|
作为质量工程师审查此 PR diff,关注逻辑缺陷、边界条件、规范遵从。
|
|
305
|
+
审查 diff 涉及的文件时,如果顺便发现同一文件中已有的历史遗留问题(非本次 diff 引入),也一并报告——不要因为是历史代码就忽略。但不要主动扩大到 diff 未涉及的文件。
|
|
301
306
|
【重要】只返回审查结果文本给调用者。禁止调用 gh pr comment 或以任何方式直接往 PR 发评论——评论由主 agent 统一发布。
|
|
302
307
|
```
|
|
303
308
|
|
|
@@ -379,8 +384,8 @@ MSG
|
|
|
379
384
|
对每个问题:
|
|
380
385
|
|
|
381
386
|
1. **判断是否修复**:
|
|
382
|
-
-
|
|
383
|
-
-
|
|
387
|
+
- 修复:执行修改(包括扫描过程中顺便发现的历史遗留问题,不以"非本次引入"为由跳过)
|
|
388
|
+
- 拒绝:记录理由(如:误报、设计意图如此)。"历史遗留"或"超出本 PR 范围"不是合法的拒绝理由
|
|
384
389
|
|
|
385
390
|
2. **修复后立即 commit**(一个问题一个 commit):
|
|
386
391
|
|
|
@@ -33,7 +33,7 @@ description: 在 Git 仓库中执行标准化版本发布流程并自动生成
|
|
|
33
33
|
- `release/v1.2.3` -> `v1.2.3` -> `1.2.3`
|
|
34
34
|
- `release/v1.2.3-beta.2` -> `v1.2.3-beta.2` -> `1.2.3-beta.2`
|
|
35
35
|
7. 检查目标 tag 是否已存在:`git tag -l "v<VERSION>"`。
|
|
36
|
-
8.
|
|
36
|
+
8. 输出推断出的版本号,直接使用该版本号继续执行,无需等待用户确认。
|
|
37
37
|
|
|
38
38
|
### 二、更新版本号
|
|
39
39
|
|