@ranger1/dx 0.1.77 → 0.1.78
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 +92 -31
- package/bin/dx.js +3 -3
- package/lib/cli/commands/stack.js +198 -237
- package/lib/cli/commands/start.js +0 -6
- package/lib/cli/dx-cli.js +10 -1
- package/lib/cli/help.js +4 -4
- package/lib/{opencode-initial.js → codex-initial.js} +3 -82
- package/package.json +1 -2
- package/@opencode/agents/__pycache__/gh_review_harvest.cpython-314.pyc +0 -0
- package/@opencode/agents/__pycache__/pr_context.cpython-314.pyc +0 -0
- package/@opencode/agents/__pycache__/pr_precheck.cpython-314.pyc +0 -0
- package/@opencode/agents/__pycache__/pr_review_aggregate.cpython-314.pyc +0 -0
- package/@opencode/agents/__pycache__/test_pr_review_aggregate.cpython-314-pytest-9.0.2.pyc +0 -0
- package/@opencode/agents/__pycache__/test_pr_review_aggregate.cpython-314.pyc +0 -0
- package/@opencode/agents/claude-reviewer.md +0 -82
- package/@opencode/agents/codex-reviewer.md +0 -83
- package/@opencode/agents/gemini-reviewer.md +0 -82
- package/@opencode/agents/gh-thread-reviewer.md +0 -122
- package/@opencode/agents/gh_review_harvest.py +0 -292
- package/@opencode/agents/pr-context.md +0 -82
- package/@opencode/agents/pr-fix.md +0 -243
- package/@opencode/agents/pr-precheck.md +0 -89
- package/@opencode/agents/pr-review-aggregate.md +0 -151
- package/@opencode/agents/pr_context.py +0 -351
- package/@opencode/agents/pr_precheck.py +0 -505
- package/@opencode/agents/pr_review_aggregate.py +0 -868
- package/@opencode/agents/test_pr_review_aggregate.py +0 -701
- package/@opencode/commands/doctor.md +0 -271
- package/@opencode/commands/git-commit-and-pr.md +0 -282
- package/@opencode/commands/git-release.md +0 -642
- package/@opencode/commands/oh_attach.json +0 -92
- package/@opencode/commands/opencode_attach.json +0 -29
- package/@opencode/commands/opencode_attach.py +0 -142
- package/@opencode/commands/pr-review-loop.md +0 -211
package/README.md
CHANGED
|
@@ -130,60 +130,50 @@ target(端)不写死,由 `env-policy.jsonc.targets` 定义;`commands.jso
|
|
|
130
130
|
|
|
131
131
|
## PR Review Loop(自动评审-修复闭环)
|
|
132
132
|
|
|
133
|
-
|
|
133
|
+
仓库内提供了基于 Codex Skill 的 PR 评审自动化工作流:并行评审 -> 聚合结论 -> 生成修复清单 -> 自动修复 -> 再评审,最多循环 3 轮,用于让 PR 更快收敛。
|
|
134
134
|
|
|
135
135
|
### 什么时候用
|
|
136
136
|
|
|
137
137
|
- PR 变更较大、想要更系统地覆盖安全/性能/可维护性问题
|
|
138
|
-
- 希望在 CI
|
|
139
|
-
-
|
|
138
|
+
- 希望在 CI 通过前提下,把评审建议落成可执行修复清单(fixFile)
|
|
139
|
+
- 希望避免同一个问题在不同轮次被反复提出(Decision Log)
|
|
140
140
|
|
|
141
141
|
### 如何运行
|
|
142
142
|
|
|
143
|
-
|
|
143
|
+
在 Codex 会话中触发该技能:
|
|
144
144
|
|
|
145
|
-
```
|
|
146
|
-
|
|
145
|
+
```text
|
|
146
|
+
使用 $pr-review-loop 对 PR #<PR_NUMBER> 执行审核闭环
|
|
147
147
|
```
|
|
148
148
|
|
|
149
|
-
|
|
149
|
+
技能入口与说明见:
|
|
150
150
|
|
|
151
|
-
|
|
151
|
+
- `codex/skills/pr-review-loop/SKILL.md`
|
|
152
|
+
- `codex/skills/pr-review-loop/references/agents/*.md`
|
|
152
153
|
|
|
153
154
|
### 工作流概览
|
|
154
155
|
|
|
155
|
-
- 预检(`pr-precheck
|
|
156
|
-
- 获取上下文(`pr-context`):生成本轮上下文缓存 `contextFile`
|
|
157
|
-
- 并行评审(
|
|
158
|
-
- 聚合(`pr-review-aggregate
|
|
159
|
-
- 修复(`
|
|
160
|
-
- 发布修复报告(`pr-review-aggregate` 模式 B
|
|
161
|
-
|
|
162
|
-
备注:每轮发布到 PR 的评论都会带 `<!-- pr-review-loop-marker -->`,用于幂等与避免反复采集机器人评论。
|
|
156
|
+
- 预检(`pr-precheck`):先做编译/基础 gate,不通过则终止流程
|
|
157
|
+
- 获取上下文(`pr-context`):生成本轮上下文缓存 `contextFile` 与 `runId`
|
|
158
|
+
- 并行评审(reviewers):按 `./reviewer/*-reviewer.md` 并行审查并产出 reviewFile
|
|
159
|
+
- 聚合(`pr-review-aggregate` 模式 A):合并评审结果、去重、发布 Review Summary、生成 `fixFile`
|
|
160
|
+
- 修复(`fixer`):按 `fixFile` 执行修复并产出 `fixReportFile`
|
|
161
|
+
- 发布修复报告(`pr-review-aggregate` 模式 B)
|
|
163
162
|
|
|
164
|
-
### 缓存文件(项目内
|
|
163
|
+
### 缓存文件(项目内 `./.cache/`)
|
|
165
164
|
|
|
166
|
-
|
|
165
|
+
该流程中间产物写入 `./.cache/`,并在各阶段传递相对路径:
|
|
167
166
|
|
|
168
167
|
- `./.cache/pr-context-pr<PR>-r<ROUND>-<RUN_ID>.md`(contextFile)
|
|
169
|
-
- `./.cache/review-<
|
|
168
|
+
- `./.cache/review-<ROLE_CODE>-pr<PR>-r<ROUND>-<RUN_ID>.md`(reviewFile)
|
|
170
169
|
- `./.cache/fix-pr<PR>-r<ROUND>-<RUN_ID>.md`(fixFile)
|
|
171
170
|
- `./.cache/fix-report-pr<PR>-r<ROUND>-<RUN_ID>.md`(fixReportFile)
|
|
172
171
|
|
|
173
|
-
### Decision Log
|
|
174
|
-
|
|
175
|
-
为了解决“第一轮拒绝的问题在后续轮次反复出现”的问题,PR Review Loop 使用 Decision Log 持久化每轮的决策:
|
|
172
|
+
### Decision Log(跨轮次决策日志)
|
|
176
173
|
|
|
177
174
|
- 文件:`./.cache/decision-log-pr<PR_NUMBER>.md`
|
|
178
|
-
-
|
|
179
|
-
-
|
|
180
|
-
|
|
181
|
-
在后续轮次:
|
|
182
|
-
|
|
183
|
-
- reviewers 若收到 `decisionLogFile`,必须读取并遵守:已修复不再提、已拒绝不再提(除非严重性升级)
|
|
184
|
-
- aggregate 在模式 A 中基于 LLM 对比 `essence` 做“问题本质相同”的判断,并生成 `escalation_groups` 入参给脚本
|
|
185
|
-
|
|
186
|
-
升级质疑规则:只有当新 finding 的优先级比历史 rejected 高 ≥2 级(例如 P3→P1、P2→P0)时,才允许重新打开。
|
|
175
|
+
- 作用:记录每轮 Fixed/Rejected 结论,后续轮次用于过滤重复问题
|
|
176
|
+
- 规则:默认 append-only,保留历史决策用于收敛
|
|
187
177
|
|
|
188
178
|
## 命令
|
|
189
179
|
|
|
@@ -192,6 +182,7 @@ dx 的命令由 `dx/config/commands.json` 驱动,并且内置了一些 interna
|
|
|
192
182
|
- `internal: sdk-build`:SDK 生成/构建
|
|
193
183
|
- `internal: backend-package`:后端打包
|
|
194
184
|
- `internal: start-dev`:开发环境一键启动
|
|
185
|
+
- `internal: pm2-stack`:PM2 交互式服务栈(支持端口清理/缓存清理配置)
|
|
195
186
|
|
|
196
187
|
常用示例:
|
|
197
188
|
|
|
@@ -208,6 +199,76 @@ dx lint
|
|
|
208
199
|
dx test e2e backend
|
|
209
200
|
```
|
|
210
201
|
|
|
202
|
+
### `dx start stack` 配置详解(PM2 交互式服务栈)
|
|
203
|
+
|
|
204
|
+
从 `0.1.78` 起,`dx start stack` 推荐完全由 `dx/config/commands.json` 配置驱动,不再依赖硬编码服务列表。
|
|
205
|
+
|
|
206
|
+
最小可用配置:
|
|
207
|
+
|
|
208
|
+
```json
|
|
209
|
+
{
|
|
210
|
+
"start": {
|
|
211
|
+
"stack": {
|
|
212
|
+
"internal": "pm2-stack",
|
|
213
|
+
"interactive": true,
|
|
214
|
+
"description": "PM2 交互式服务栈",
|
|
215
|
+
"stack": {
|
|
216
|
+
"ecosystemConfig": "ecosystem.config.cjs",
|
|
217
|
+
"services": ["backend", "front", "admin"],
|
|
218
|
+
"preflight": {
|
|
219
|
+
"killPorts": [3000, 3001, 3500],
|
|
220
|
+
"pm2Reset": true
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
完整字段说明:
|
|
229
|
+
|
|
230
|
+
- `start.stack.internal`
|
|
231
|
+
- 固定为 `pm2-stack`,表示启用内置 PM2 交互式 runner。
|
|
232
|
+
- `start.stack.interactive`
|
|
233
|
+
- 建议设为 `true`,用于标记这是交互式命令(便于团队识别)。
|
|
234
|
+
- `start.stack.stack.ecosystemConfig`
|
|
235
|
+
- PM2 配置文件路径;支持相对路径(相对项目根目录)或绝对路径。
|
|
236
|
+
- 默认值:`ecosystem.config.cjs`。
|
|
237
|
+
- `start.stack.stack.pm2Bin`
|
|
238
|
+
- PM2 命令前缀,默认 `pnpm pm2`。如果团队使用全局 pm2,可改为 `pm2`。
|
|
239
|
+
- `start.stack.stack.services`
|
|
240
|
+
- 交互命令(`r/l/s`)可操作的服务名单。
|
|
241
|
+
- 示例:`["backend", "front", "admin"]`。
|
|
242
|
+
- `start.stack.stack.preflight.killPorts`
|
|
243
|
+
- 启动前自动清理占用端口列表。
|
|
244
|
+
- 这就是“某些端口被占用时自动处理”的核心配置。
|
|
245
|
+
- `start.stack.stack.preflight.forcePortCleanup`
|
|
246
|
+
- 是否强制清理端口占用,默认 `true`。
|
|
247
|
+
- `start.stack.stack.preflight.pm2Reset`
|
|
248
|
+
- 启动前是否执行 PM2 状态重置(`delete all` / `kill` / 状态文件清理),默认 `true`。
|
|
249
|
+
- `start.stack.stack.preflight.cleanPaths`
|
|
250
|
+
- 启动前需要删除的缓存路径列表(相对项目根目录)。
|
|
251
|
+
- 适合清理 `.next`、`dist`、`.vite` 等缓存,避免脏状态。
|
|
252
|
+
- `start.stack.stack.preflight.cleanTsBuildInfo`
|
|
253
|
+
- 是否清理 `*.tsbuildinfo`,默认 `true`。
|
|
254
|
+
- `start.stack.stack.preflight.cleanTsBuildInfoDirs`
|
|
255
|
+
- 扫描 `*.tsbuildinfo` 的目录列表。
|
|
256
|
+
|
|
257
|
+
交互命令保持不变:
|
|
258
|
+
|
|
259
|
+
- `r <service>` 重启服务
|
|
260
|
+
- `l <service>` 查看日志
|
|
261
|
+
- `s <service>` 停止服务
|
|
262
|
+
- `list` 查看状态
|
|
263
|
+
- `monit` 打开 PM2 监控
|
|
264
|
+
- `q` 停止所有服务并退出
|
|
265
|
+
|
|
266
|
+
推荐实践:
|
|
267
|
+
|
|
268
|
+
- 将 `services` 与 `ecosystem.config.cjs` 里的 app 名保持一致,避免交互命令找不到服务。
|
|
269
|
+
- `killPorts` 只配置开发态常驻端口,避免误杀不相关进程。
|
|
270
|
+
- 如果项目不是 `apps/front` / `apps/admin-front` 结构,请按实际目录改 `cleanPaths` 与 `cleanTsBuildInfoDirs`。
|
|
271
|
+
|
|
211
272
|
## deploy 行为说明
|
|
212
273
|
|
|
213
274
|
从 `0.1.9` 起,`dx deploy <target>` 不再在 dx 内部硬编码执行任何 `nx build`/`sdk build` 等前置步骤。
|
package/bin/dx.js
CHANGED
|
@@ -117,13 +117,13 @@ async function main() {
|
|
|
117
117
|
|
|
118
118
|
if (isInitialInvocation(rawArgs)) {
|
|
119
119
|
const packageRoot = resolve(dirname(fileURLToPath(import.meta.url)), '..')
|
|
120
|
-
const [{ logger }, {
|
|
120
|
+
const [{ logger }, { runCodexInitial }] = await Promise.all([
|
|
121
121
|
import('../lib/logger.js'),
|
|
122
|
-
import('../lib/
|
|
122
|
+
import('../lib/codex-initial.js'),
|
|
123
123
|
])
|
|
124
124
|
|
|
125
125
|
try {
|
|
126
|
-
await
|
|
126
|
+
await runCodexInitial({ packageRoot })
|
|
127
127
|
return
|
|
128
128
|
} catch (error) {
|
|
129
129
|
logger.error('initial 执行失败')
|