add-coder 0.3.25-0 → 0.3.25
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.en.md +10 -10
- package/README.md +20 -46
- package/dist/index.js +6 -69
- package/package.json +1 -1
- package/templates/.add-coder-src-hash.json +18 -22
- package/templates/core/scripts/db-ensure.sh +0 -8
- package/templates/core/scripts/mcp-server/shared/db-types.ts +208 -0
- package/templates/core/scripts/mcp-server/shared/response.ts +2 -3
- package/templates/core/scripts/mcp-server/tools/audit.ts +10 -7
- package/templates/core/scripts/mcp-server/tools/context.ts +19 -0
- package/templates/core/scripts/mcp-server/tools/contract.ts +6 -4
- package/templates/core/scripts/mcp-server/tools/gateway/check_rahs.ts +2 -69
- package/templates/core/scripts/mcp-server/tools/gateway/check_spec_sync.ts +1 -1
- package/templates/core/scripts/mcp-server/tools/hitl.ts +116 -34
- package/templates/core/scripts/mcp-server/tools/index.ts +1 -66
- package/templates/core/scripts/mcp-server/tools/plan.ts +33 -16
- package/templates/core/scripts/mcp-server/tools/review.ts +12 -9
- package/templates/core/scripts/mcp-server.ts +1 -2
- package/templates/core/templates/simple-plan-template.md +13 -0
- package/templates/core/templates/simple-plan-template.schema.json +10 -0
- package/templates/core/templates/standard-plan-template.md +13 -0
- package/templates/core/templates/standard-plan-template.schema.json +10 -0
- package/templates/adapters/codex/config.toml.example +0 -20
- package/templates/core/plans/2026-07/08/add-coder-npm-package-add-route-v1.md +0 -331
- package/templates/core/plans/2026-07/08/add-coder-npm-package-handoff-v1.md +0 -686
- package/templates/core/plans/2026-07/08/add-coder-npm-package-plan-v1.md +0 -895
- package/templates/core/scripts/mcp-server/shared/redact.ts +0 -28
|
@@ -1,686 +0,0 @@
|
|
|
1
|
-
# add-coder npm 包 — 6 轮原子事务交接手册
|
|
2
|
-
|
|
3
|
-
> **适用场景**:6 轮原子事务变更,每轮独立收敛。将 ADD 范式从 add-coder 内部工具改造为可发布的 npm 包。
|
|
4
|
-
>
|
|
5
|
-
> **用途**:每个新对话开始时,把对应轮次章节粘贴给 LLM。
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## 全局元信息
|
|
10
|
-
|
|
11
|
-
- **父 Plan**: `add-coder-add-coder-npm-package-plan-v1.md`
|
|
12
|
-
- **原子事务拓扑**: `add-coder-add-coder-npm-package-add-route-v1.md`
|
|
13
|
-
- **目标仓库**: `/home/xmm/ai/add-coder`
|
|
14
|
-
- **总文件数**: 约 90 个独立文件
|
|
15
|
-
- **轮次数**: 6 轮局部闭包
|
|
16
|
-
- **拆分原则**: 以业务原子闭包为主,以对话上下文容量为辅
|
|
17
|
-
|
|
18
|
-
```
|
|
19
|
-
第1轮 ── 基础准备(Prisma 模型 + 清理硬编码,可并行)
|
|
20
|
-
│
|
|
21
|
-
▼
|
|
22
|
-
第2轮 ── 架构搭建(模板目录重组 + 适配器三层骨架)
|
|
23
|
-
│
|
|
24
|
-
▼
|
|
25
|
-
第3轮 ── 适配器实现(Claude → Qoder → VS Code 串行)
|
|
26
|
-
│
|
|
27
|
-
▼
|
|
28
|
-
第4轮 ── 配置 + CLI(Zod schema → CLI 重写)
|
|
29
|
-
│
|
|
30
|
-
▼
|
|
31
|
-
第5轮 ── 测试 + 发布(集成测试 + 文档 + npm pack)
|
|
32
|
-
│
|
|
33
|
-
▼
|
|
34
|
-
第6轮 ── 裁决层(caijue.toml 索引 + 策略 GENERATED+USER CODE + transcribe.ts)
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## 原子事务边界说明
|
|
40
|
-
|
|
41
|
-
- **轮次级闭包**:每轮的文件集合形成独立边界。
|
|
42
|
-
- **独立验证**:每轮完成后可通过 checklist [T] 项独立验证。
|
|
43
|
-
- 第1轮 Task 1.0 和 1.1 可并行(互不依赖文件)。
|
|
44
|
-
- 第3轮三个适配器串行(Claude → Qoder → VS Code)。
|
|
45
|
-
- 第5轮是前 4 轮收敛后的验证合流。
|
|
46
|
-
- 第6轮是架构增强,不修改前 5 轮核心逻辑。
|
|
47
|
-
|
|
48
|
-
### 交接手册与 spec 的优先级
|
|
49
|
-
|
|
50
|
-
- 本 handoff 是新对话的入口索引。具体实现细节以 `{{magicDir}}/specs/add-coder-add-coder-npm-package/spec.md`、`tasks.md`、`checklist.md` 为准。
|
|
51
|
-
- 如果 handoff 摘要与 spec/tasks/checklist 存在颗粒度差异,以 spec/tasks/checklist 为准。
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
## 第1轮:基础准备
|
|
56
|
-
|
|
57
|
-
### 你当前的位置
|
|
58
|
-
|
|
59
|
-
你是第 1 轮。上游无(本轮为起点)。
|
|
60
|
-
|
|
61
|
-
### 上游已完成
|
|
62
|
-
|
|
63
|
-
无。
|
|
64
|
-
|
|
65
|
-
### 恢复上下文审计查询(新 AI Session 首次启动必读)
|
|
66
|
-
|
|
67
|
-
```text
|
|
68
|
-
query_audit_logs({ planKeyword: "add-coder-npm-package" })
|
|
69
|
-
```
|
|
70
|
-
→ 返回 4 条:add.prisma (PRISMA_SCHEMA) / prisma-injector.ts (CLI) / templates (TEMPLATE_REFACTORED) / renderer.ts (RENDERER)。beforeState 均为 {},afterState 含文件结构和关键参数。
|
|
71
|
-
|
|
72
|
-
```text
|
|
73
|
-
query_audit_logs({ targetId: "packages/add-coder/src/core/renderer.ts" })
|
|
74
|
-
```
|
|
75
|
-
→ 返回 1 条:placeholder 替换逻辑 `renderCore()`。
|
|
76
|
-
|
|
77
|
-
```text
|
|
78
|
-
query_audit_logs({ targetId: "packages/add-coder/templates/core/prisma/add.prisma" })
|
|
79
|
-
```
|
|
80
|
-
→ 返回 1 条:DevOperation + AuditLog 模型定义。
|
|
81
|
-
|
|
82
|
-
**恢复顺序建议**:
|
|
83
|
-
```
|
|
84
|
-
1. session-init SKILL
|
|
85
|
-
2. query_audit_logs({ planKeyword: "add-coder-npm-package" }) → 查看本轮 4 条记录
|
|
86
|
-
3. read "{{magicDir}}/specs/add-coder-add-coder-npm-package/spec.md"
|
|
87
|
-
4. read "{{magicDir}}/specs/add-coder-add-coder-npm-package/tasks.md"(第1轮)
|
|
88
|
-
5. read "{{magicDir}}/specs/add-coder-add-coder-npm-package/checklist.md"(一、二、四)
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
### 原子事务目标
|
|
92
|
-
|
|
93
|
-
两个并行 Task:
|
|
94
|
-
- **Task 1.0**:Prisma 模型准备
|
|
95
|
-
- **Task 1.1**:清理硬编码 + 参数化 core 模板
|
|
96
|
-
|
|
97
|
-
### spec 文件
|
|
98
|
-
|
|
99
|
-
- `{{magicDir}}/specs/add-coder-add-coder-npm-package/spec.md`
|
|
100
|
-
- `{{magicDir}}/specs/add-coder-add-coder-npm-package/tasks.md`(第1轮)
|
|
101
|
-
- `{{magicDir}}/specs/add-coder-add-coder-npm-package/checklist.md`(一、二、四)
|
|
102
|
-
|
|
103
|
-
### 你要改的文件(Task 1.0: 2 新建 + Task 1.1: ~70 修改)
|
|
104
|
-
|
|
105
|
-
| 文件 | 操作 | 改什么 |
|
|
106
|
-
|------|------|--------|
|
|
107
|
-
| `packages/add-coder/templates/core/prisma/add.prisma` | 新建 | DevOperation + AuditLog 模型定义 |
|
|
108
|
-
| `packages/add-coder/src/cli/prisma-injector.ts` | 新建 | Prisma 注入器(检测→复制→迁移→generate) |
|
|
109
|
-
| `templates/` 下 15 个 `.md` 模板 | 修改 | `add-coder-*` → `{{projectName}}-*` |
|
|
110
|
-
| `skills/` 下 2 个 SKILL.md | 修改 | `/home/xmm/` → `{{projectRoot}}/` |
|
|
111
|
-
| `scripts/mcp-server.ts` + `add-coder-mcp-server.ts` | 修改 | 数据库密码 → `process.env.DATABASE_URL` |
|
|
112
|
-
| `{{magicDir}}/settings.json` / `{{magicDir}}/mcp.json` | 修改 | 硬编码路径 → 占位符 |
|
|
113
|
-
| `{{magicDir}}/hooks/` 下 14 个 `.sh` + `lib/` | 修改 | 项目名提取逻辑 |
|
|
114
|
-
| `.vscode/` 下 4 个文件 | 修改 | MCP 路径 → `{{projectRoot}}` |
|
|
115
|
-
| `reports/` 下 7 个文件 | 修改 | 硬编码 → `{{projectName}}` |
|
|
116
|
-
| `packages/add-coder/src/core/renderer.ts` | 新建 | 核心渲染器 |
|
|
117
|
-
|
|
118
|
-
### 关键契约
|
|
119
|
-
|
|
120
|
-
- 模板变量语法:`{{projectName}}` 双花括号,禁止 `${var}`
|
|
121
|
-
- Runtime 变量:`process.env.X`,**无兜底值**,缺失时 `throw Error`
|
|
122
|
-
- `prisma-injector.ts`:迁移失败回滚 `add.prisma`
|
|
123
|
-
|
|
124
|
-
### 高风险误区
|
|
125
|
-
|
|
126
|
-
- 禁止在模板代码中保留 `process.env.X || "兜底值"` 反模式
|
|
127
|
-
- 禁止提前实现第2轮的目录迁移
|
|
128
|
-
|
|
129
|
-
### ADD-7 审计记录
|
|
130
|
-
|
|
131
|
-
| action | targetType | targetId | 说明 | 状态 |
|
|
132
|
-
|--------|-----------|----------|------|:--:|
|
|
133
|
-
| `SOURCE_CREATED` | PRISMA_SCHEMA | `templates/core/prisma/add.prisma` | DevOperation + AuditLog 模型定义 | ✅ |
|
|
134
|
-
| `SOURCE_CREATED` | CLI | `src/cli/prisma-injector.ts` | Prisma 注入器实现 | ✅ |
|
|
135
|
-
| `TEMPLATE_REFACTORED` | TEMPLATE | `templates/` 下 ~70 文件 | 硬编码清理 + 参数化 | ✅ |
|
|
136
|
-
| `SOURCE_CREATED` | RENDERER | `src/core/renderer.ts` | 核心渲染器 | ✅ |
|
|
137
|
-
|
|
138
|
-
**恢复关键词**:
|
|
139
|
-
```text
|
|
140
|
-
query_audit_logs({ planKeyword: "add-coder-npm-package" })
|
|
141
|
-
→ 返回全部本轮 ADD-7 审计记录
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
### 验证标准
|
|
145
|
-
|
|
146
|
-
#### 已完成验证
|
|
147
|
-
|
|
148
|
-
- `grep -r "farm.agent\|farm_secure_pass\|大田精准\|/home/xmm" templates/` 返回空 ✅
|
|
149
|
-
- `npx tsc --noEmit` 通过 ✅
|
|
150
|
-
|
|
151
|
-
#### 未执行的端到端验证
|
|
152
|
-
|
|
153
|
-
- [ ] `prisma migrate dev --schema=prisma/` 成功创建 DevOperation + AuditLog 表(原因:需要真实数据库环境)
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## 第2轮:架构搭建
|
|
158
|
-
|
|
159
|
-
### 你当前的位置
|
|
160
|
-
|
|
161
|
-
你是第 2 轮。上游第1轮已完成 Prisma 模型准备 + 模板硬编码清理。
|
|
162
|
-
|
|
163
|
-
### 上游已完成
|
|
164
|
-
|
|
165
|
-
- `templates/core/prisma/add.prisma` 已创建
|
|
166
|
-
- `src/cli/prisma-injector.ts` 已实现
|
|
167
|
-
- `templates/` 下约 70 个文件已清理硬编码
|
|
168
|
-
- `src/core/renderer.ts` 已实现
|
|
169
|
-
|
|
170
|
-
### 恢复上下文审计查询(新 AI Session 首次启动必读)
|
|
171
|
-
|
|
172
|
-
```text
|
|
173
|
-
query_audit_logs({ planKeyword: "add-coder-npm-package" })
|
|
174
|
-
```
|
|
175
|
-
→ 返回 1 条本轮新增:TEMPLATE_REFACTORED(templates 目录重组 ~70 文件)。
|
|
176
|
-
|
|
177
|
-
```text
|
|
178
|
-
query_audit_logs({ targetId: "packages/add-coder/src/adapters/" })
|
|
179
|
-
```
|
|
180
|
-
→ 确认 adapter 骨架已创建。
|
|
181
|
-
|
|
182
|
-
**恢复顺序建议**:
|
|
183
|
-
```
|
|
184
|
-
1. query_audit_logs({ planKeyword: "add-coder-npm-package" })
|
|
185
|
-
2. read "{{magicDir}}/specs/add-coder-add-coder-npm-package/tasks.md"(第2轮)
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
### 原子事务目标
|
|
189
|
-
|
|
190
|
-
将旧的扁平 `templates/` 目录迁移为 `templates/core/` + `templates/adapters/` + `templates/shared/` 三层结构,搭建 `src/adapters/` 骨架。
|
|
191
|
-
|
|
192
|
-
### spec 文件
|
|
193
|
-
|
|
194
|
-
- `{{magicDir}}/specs/add-coder-add-coder-npm-package/tasks.md`(第2轮)
|
|
195
|
-
|
|
196
|
-
### 你要改的文件(22 迁移 + 4 新建)
|
|
197
|
-
|
|
198
|
-
| 旧路径 | 新路径 | 操作 |
|
|
199
|
-
|--------|--------|------|
|
|
200
|
-
| `templates/agents/` | `templates/core/agents/` | 迁移 |
|
|
201
|
-
| `templates/skills/` | `templates/core/skills/` | 迁移 |
|
|
202
|
-
| `templates/templates/*.md` (15) | `templates/core/docs/` | 迁移 |
|
|
203
|
-
| `templates/templates/*.schema.json` (15) | `templates/core/docs-schema/` | 迁移 |
|
|
204
|
-
| `templates/rules/` | `templates/core/rules/` | 迁移 |
|
|
205
|
-
| `templates/vocabulary/` | `templates/core/vocabulary/` | 迁移 |
|
|
206
|
-
| `templates/scripts/` | `templates/core/scripts/` | 迁移 |
|
|
207
|
-
| `templates/reports/` | `templates/core/reports/` | 迁移 |
|
|
208
|
-
| `templates/tools/` | `templates/core/tools/` | 迁移 |
|
|
209
|
-
| `templates/{{magicDir}}/hooks/` | `templates/adapters/qoder/hooks/` | 迁移 |
|
|
210
|
-
| `templates/{{magicDir}}/settings.json` | `templates/adapters/qoder/settings.json` | 迁移 |
|
|
211
|
-
| `templates/{{magicDir}}/mcp.json` | `templates/adapters/qoder/mcp.json` | 迁移 |
|
|
212
|
-
| `templates/.vscode/` (4) | `templates/adapters/vscode/` | 迁移 |
|
|
213
|
-
| — | `templates/adapters/claude/` | 新建空壳 |
|
|
214
|
-
| — | `templates/shared/hooks-lib/common.sh` | 新建 |
|
|
215
|
-
| — | `src/adapters/{claude,qoder,vscode}/renderer.ts` | 新建骨架 |
|
|
216
|
-
|
|
217
|
-
### 关键契约
|
|
218
|
-
|
|
219
|
-
- Adapter 接口签名:`render(config: AddCoderConfig, targetDir: string, dryRun: boolean): Map<string, string>`
|
|
220
|
-
- 迁移完成后删除旧 `templates/` 扁平目录
|
|
221
|
-
|
|
222
|
-
### 高风险误区
|
|
223
|
-
|
|
224
|
-
- 禁止在迁移过程中修改文件内容
|
|
225
|
-
- 禁止提前实现第3轮的 adapter renderer 逻辑
|
|
226
|
-
|
|
227
|
-
### 验证标准
|
|
228
|
-
|
|
229
|
-
- [x] 新目录结构符合 Plan §3.2 ✅
|
|
230
|
-
- [x] `find templates/ -name "*.ts" | wc -l` 返回 0 ✅
|
|
231
|
-
|
|
232
|
-
---
|
|
233
|
-
|
|
234
|
-
## 第3轮:适配器实现
|
|
235
|
-
|
|
236
|
-
### 你当前的位置
|
|
237
|
-
|
|
238
|
-
你是第 3 轮。上游第2轮已完成目录重组 + 适配器骨架。
|
|
239
|
-
|
|
240
|
-
### 上游已完成
|
|
241
|
-
|
|
242
|
-
- `templates/core/` 所有模板文件已就位
|
|
243
|
-
- `templates/adapters/` 三端目录已创建
|
|
244
|
-
- Adapter 接口骨架已定义
|
|
245
|
-
|
|
246
|
-
### 恢复上下文审计查询(新 AI Session 首次启动必读)
|
|
247
|
-
|
|
248
|
-
```text
|
|
249
|
-
query_audit_logs({ planKeyword: "add-coder-npm-package" })
|
|
250
|
-
```
|
|
251
|
-
→ 返回 3 条本轮:claude/renderer.ts、qoder/renderer.ts、vscode/renderer.ts。afterState 含 adapter 名和关键参数(hook_matchers / no_native_hook)。
|
|
252
|
-
|
|
253
|
-
```text
|
|
254
|
-
query_audit_logs({ targetId: "packages/add-coder/src/adapters/claude/renderer.ts" })
|
|
255
|
-
```
|
|
256
|
-
→ 返回 1 条:hook_matchers: ["Write","Edit","Bash"]。
|
|
257
|
-
|
|
258
|
-
**恢复顺序建议**:
|
|
259
|
-
```
|
|
260
|
-
1. query_audit_logs({ planKeyword: "add-coder-npm-package" })
|
|
261
|
-
2. read "{{magicDir}}/specs/add-coder-add-coder-npm-package/tasks.md"(第3轮)
|
|
262
|
-
3. read "{{magicDir}}/specs/add-coder-add-coder-npm-package/checklist.md"(三)
|
|
263
|
-
```
|
|
264
|
-
|
|
265
|
-
### 原子事务目标
|
|
266
|
-
|
|
267
|
-
串行实现三个适配器:Claude → Qoder → VS Code。
|
|
268
|
-
|
|
269
|
-
### spec 文件
|
|
270
|
-
|
|
271
|
-
- `{{magicDir}}/specs/add-coder-add-coder-npm-package/tasks.md`(第3轮)
|
|
272
|
-
- `{{magicDir}}/specs/add-coder-add-coder-npm-package/checklist.md`(三)
|
|
273
|
-
|
|
274
|
-
### 你要改的文件(Task 3.0 Claude: 14 新建 / Task 3.1 Qoder: 3 / Task 3.2 VS Code: 3)
|
|
275
|
-
|
|
276
|
-
| 文件 | 操作 | 改什么 |
|
|
277
|
-
|------|------|--------|
|
|
278
|
-
| `templates/adapters/claude/settings.json` | 新建 | hook 配置,matcher 用标准工具名 |
|
|
279
|
-
| `templates/adapters/claude/mcp.json` | 新建 | Claude 格式 MCP 配置 |
|
|
280
|
-
| `templates/adapters/claude/hooks/` 下 12 脚本 | 新建 | 参考 Qoder,差异在 matcher |
|
|
281
|
-
| `src/adapters/claude/renderer.ts` | 实现 | Claude adapter 渲染器 |
|
|
282
|
-
| `templates/adapters/qoder/settings.json` | 修改 | matcher 双套工具名 |
|
|
283
|
-
| `src/adapters/qoder/renderer.ts` | 实现 | Qoder adapter 渲染器 |
|
|
284
|
-
| `templates/adapters/vscode/tasks.json` | 修改 | hook 模拟任务 |
|
|
285
|
-
| `src/adapters/vscode/renderer.ts` | 实现 | VS Code adapter 渲染器 |
|
|
286
|
-
|
|
287
|
-
### 关键契约
|
|
288
|
-
|
|
289
|
-
- Claude hooks matcher 用标准工具名(`Write`, `Edit`, `Bash`)
|
|
290
|
-
- Qoder hooks matcher 用双套工具名(`Write|write_to_file` 等)
|
|
291
|
-
- VS Code 无原生 hook,诚实声明能力边界
|
|
292
|
-
|
|
293
|
-
### 高风险误区
|
|
294
|
-
|
|
295
|
-
- 禁止在 Claude hooks 中使用 Qoder 的双套工具名 matcher
|
|
296
|
-
- 禁止在 VS Code adapter 中假装有 hook 能力
|
|
297
|
-
|
|
298
|
-
### 验证标准
|
|
299
|
-
|
|
300
|
-
#### 已完成验证
|
|
301
|
-
|
|
302
|
-
- `npx add-coder init --adapter claude` 生成 `.claude/` 目录 ✅
|
|
303
|
-
- `npx add-coder init --adapter qoder` 生成 `{{magicDir}}/` 目录 ✅
|
|
304
|
-
- `npx add-coder init --adapter vscode` 生成 `.vscode/` 目录 ✅
|
|
305
|
-
|
|
306
|
-
---
|
|
307
|
-
|
|
308
|
-
## 第4轮:配置 + CLI
|
|
309
|
-
|
|
310
|
-
### 你当前的位置
|
|
311
|
-
|
|
312
|
-
你是第 4 轮。上游第3轮已完成三端适配器。
|
|
313
|
-
|
|
314
|
-
### 上游已完成
|
|
315
|
-
|
|
316
|
-
- Claude/Qoder/VS Code 三个 adapter 的 renderer 已实现
|
|
317
|
-
- 所有模板文件已就位且参数化
|
|
318
|
-
|
|
319
|
-
### 恢复上下文审计查询(新 AI Session 首次启动必读)
|
|
320
|
-
|
|
321
|
-
```text
|
|
322
|
-
query_audit_logs({ planKeyword: "add-coder-npm-package" })
|
|
323
|
-
```
|
|
324
|
-
→ 返回 4 条本轮:schema.ts (CONFIG)、index.ts (CLI)、init.ts (CLI)、tsup.config.ts (BUILD_CONFIG)。
|
|
325
|
-
|
|
326
|
-
```text
|
|
327
|
-
query_audit_logs({ targetId: "packages/add-coder/src/config/schema.ts" })
|
|
328
|
-
```
|
|
329
|
-
→ 返回 1 条:Zod schema,fields: ["projectName","sourceDir","docsDir","logDir"]。
|
|
330
|
-
|
|
331
|
-
```text
|
|
332
|
-
query_audit_logs({ targetId: "packages/add-coder/src/cli/commands/init.ts" })
|
|
333
|
-
```
|
|
334
|
-
→ 返回 1 条:七步流程 detect→config→prisma→core→adapter→write→summary。
|
|
335
|
-
|
|
336
|
-
**恢复顺序建议**:
|
|
337
|
-
```
|
|
338
|
-
1. query_audit_logs({ planKeyword: "add-coder-npm-package" })
|
|
339
|
-
2. read "{{magicDir}}/specs/add-coder-add-coder-npm-package/tasks.md"(第4轮)
|
|
340
|
-
3. read "{{magicDir}}/specs/add-coder-add-coder-npm-package/checklist.md"(五)
|
|
341
|
-
```
|
|
342
|
-
|
|
343
|
-
### 原子事务目标
|
|
344
|
-
|
|
345
|
-
串行:Task 4.0 配置系统(Zod schema) → Task 4.1 CLI 重写。
|
|
346
|
-
|
|
347
|
-
### spec 文件
|
|
348
|
-
|
|
349
|
-
- `{{magicDir}}/specs/add-coder-add-coder-npm-package/tasks.md`(第4轮)
|
|
350
|
-
- `{{magicDir}}/specs/add-coder-add-coder-npm-package/checklist.md`(五)
|
|
351
|
-
|
|
352
|
-
### 你要改的文件(Task 4.0: 2 新建 + Task 4.1: 10 文件)
|
|
353
|
-
|
|
354
|
-
| 文件 | 操作 | 改什么 |
|
|
355
|
-
|------|------|--------|
|
|
356
|
-
| `packages/add-coder/src/config/schema.ts` | 新建 | Zod schema `AddCoderConfig` |
|
|
357
|
-
| `packages/add-coder/src/config/defaults.ts` | 新建 | 默认值 |
|
|
358
|
-
| `packages/add-coder/src/cli/index.ts` | 新建 | commander 主入口 |
|
|
359
|
-
| `packages/add-coder/src/cli/commands/init.ts` | 新建 | init 命令(七步流程) |
|
|
360
|
-
| `packages/add-coder/src/cli/commands/sync.ts` | 新建 | sync 命令 |
|
|
361
|
-
| `packages/add-coder/src/cli/commands/status.ts` | 新建 | status 命令 |
|
|
362
|
-
| `packages/add-coder/src/cli/detect.ts` | 新建 | IDE 环境检测 |
|
|
363
|
-
| `packages/add-coder/src/cli/config-loader.ts` | 新建 | 配置加载 + Zod 校验 |
|
|
364
|
-
| `packages/add-coder/src/cli/writer.ts` | 新建 | 智能写入(四种模式) |
|
|
365
|
-
| `packages/add-coder/bin/add-coder.js` | 修改 | 改为加载 `dist/cli/index.js` |
|
|
366
|
-
| `packages/add-coder/tsup.config.ts` | 新建 | 构建配置 |
|
|
367
|
-
| `packages/add-coder/tsconfig.json` | 新建 | TS 编译配置 |
|
|
368
|
-
|
|
369
|
-
### 关键契约
|
|
370
|
-
|
|
371
|
-
- 配置加载优先级:交互式问答 > `add-coder.config.ts` > 自动检测 > 默认值
|
|
372
|
-
- Writer 四种模式:交互 / `--yes` / `--force` / `--dry-run`
|
|
373
|
-
- `--force` 和 `--yes` 互斥
|
|
374
|
-
|
|
375
|
-
### 高风险误区
|
|
376
|
-
|
|
377
|
-
- 禁止在 CLI 中硬编码路径
|
|
378
|
-
|
|
379
|
-
### 验证标准
|
|
380
|
-
|
|
381
|
-
#### 已完成验证
|
|
382
|
-
|
|
383
|
-
- `npx add-coder init` 在空白项目中零配置生成完整 ADD 模板 ✅
|
|
384
|
-
- `tsc --noEmit` 通过 ✅
|
|
385
|
-
|
|
386
|
-
---
|
|
387
|
-
|
|
388
|
-
## 第5轮:测试 + 发布
|
|
389
|
-
|
|
390
|
-
### 你当前的位置
|
|
391
|
-
|
|
392
|
-
你是第 5 轮。上游第1-4轮全部完成。
|
|
393
|
-
|
|
394
|
-
### 上游已完成
|
|
395
|
-
|
|
396
|
-
- Prisma 模型 + 硬编码清理
|
|
397
|
-
- 模板目录重组 + 三端适配器
|
|
398
|
-
- 配置系统 + CLI 重写
|
|
399
|
-
|
|
400
|
-
### 恢复上下文审计查询(新 AI Session 首次启动必读)
|
|
401
|
-
|
|
402
|
-
```text
|
|
403
|
-
query_audit_logs({ planKeyword: "add-coder-npm-package" })
|
|
404
|
-
```
|
|
405
|
-
→ 返回 2 条本轮:package.json (MODIFY) / bin/add-coder.js (MODIFY)。
|
|
406
|
-
|
|
407
|
-
```text
|
|
408
|
-
query_audit_logs({ targetId: "packages/add-coder/package.json" })
|
|
409
|
-
```
|
|
410
|
-
→ 返回 1 条:private→false, type→module, engines: node>=20, exports 多入口, scripts 含 generate。
|
|
411
|
-
|
|
412
|
-
**恢复顺序建议**:
|
|
413
|
-
```
|
|
414
|
-
1. query_audit_logs({ planKeyword: "add-coder-npm-package" })
|
|
415
|
-
2. read "{{magicDir}}/specs/add-coder-add-coder-npm-package/tasks.md"(第5轮)
|
|
416
|
-
3. read "{{magicDir}}/specs/add-coder-add-coder-npm-package/checklist.md"(五、六、八)
|
|
417
|
-
```
|
|
418
|
-
|
|
419
|
-
### 原子事务目标
|
|
420
|
-
|
|
421
|
-
集成测试 + 文档 + 发布配置,前 4 轮收敛后的验证合流。
|
|
422
|
-
|
|
423
|
-
### spec 文件
|
|
424
|
-
|
|
425
|
-
- `{{magicDir}}/specs/add-coder-add-coder-npm-package/tasks.md`(第5轮)
|
|
426
|
-
- `{{magicDir}}/specs/add-coder-add-coder-npm-package/checklist.md`(五、六、八)
|
|
427
|
-
|
|
428
|
-
### 你要改的文件(6 文件)
|
|
429
|
-
|
|
430
|
-
| 文件 | 操作 | 改什么 |
|
|
431
|
-
|------|------|--------|
|
|
432
|
-
| `packages/add-coder/tests/` | 新建 | 单元测试 + 集成测试 |
|
|
433
|
-
| `packages/add-coder/README.md` | 修改 | 完整使用文档 |
|
|
434
|
-
| `packages/add-coder/package.json` | 修改 | `"private": false`, `"type": "module"`, `"exports"` 多入口 |
|
|
435
|
-
|
|
436
|
-
### 关键契约
|
|
437
|
-
|
|
438
|
-
- `"exports"` 多入口(`.`、`./config`、`./renderer`、`./adapters/*`)
|
|
439
|
-
- `npm pack` 产出包含 `dist/` + `templates/` + `bin/`,不包含 `src/`
|
|
440
|
-
|
|
441
|
-
### 高风险误区
|
|
442
|
-
|
|
443
|
-
- 禁止在 README 中暗示 `npm install` 就能拿到完整 ADD 运行时
|
|
444
|
-
|
|
445
|
-
### 验证标准
|
|
446
|
-
|
|
447
|
-
#### 已完成验证
|
|
448
|
-
|
|
449
|
-
- `npx tsc --noEmit` 通过 ✅
|
|
450
|
-
- `grep -r "process.env.*||" dist/` 返回空 ✅
|
|
451
|
-
- `"private": false`, `"type": "module"`, `"exports"` 多入口 ✅
|
|
452
|
-
|
|
453
|
-
#### 未执行的端到端验证
|
|
454
|
-
|
|
455
|
-
- [ ] `npm pack` 产出正确(原因:需 npm registry 或本地 pack 验证)
|
|
456
|
-
- [ ] `npm pack` 后 `npm install` 在空白项目中 `npx add-coder init` 端到端通过(原因:需隔离环境)
|
|
457
|
-
|
|
458
|
-
---
|
|
459
|
-
|
|
460
|
-
## 第6轮:裁决层
|
|
461
|
-
|
|
462
|
-
### 你当前的位置
|
|
463
|
-
|
|
464
|
-
你是第 6 轮。上游第1-5轮全部完成。
|
|
465
|
-
|
|
466
|
-
### 上游已完成
|
|
467
|
-
|
|
468
|
-
- Prisma 模型 + 硬编码清理
|
|
469
|
-
- 模板目录重组 + 三端适配器
|
|
470
|
-
- 配置系统 + CLI 重写
|
|
471
|
-
- 集成测试 + 文档 + 发布配置
|
|
472
|
-
|
|
473
|
-
### 恢复上下文审计查询(新 AI Session 首次启动必读)
|
|
474
|
-
|
|
475
|
-
```text
|
|
476
|
-
query_audit_logs({ planKeyword: "add-coder-npm-package" })
|
|
477
|
-
```
|
|
478
|
-
→ 返回 6 条本轮:caijue.toml (CAIJUE_CONFIG) / caijue.ts (CAIJUE_CONFIG) / transcribe.ts (CAIJUE_CONFIG) / detect.strategy.ts (STRATEGY) / prisma.strategy.ts (STRATEGY) + 3 条 cli 薄包装重构。afterState 含 GENERATED+USER CODE 区块描述。
|
|
479
|
-
|
|
480
|
-
```text
|
|
481
|
-
query_audit_logs({ targetId: "packages/add-coder/src/caijuehub/caijue.toml" })
|
|
482
|
-
```
|
|
483
|
-
→ 返回 1 条:策略索引,entries: ["detect-ide","resolve-adapters","prisma-inject","write-files"]。
|
|
484
|
-
|
|
485
|
-
```text
|
|
486
|
-
query_audit_logs({ targetId: "packages/add-coder/src/caijuehub/transcribe.ts" })
|
|
487
|
-
```
|
|
488
|
-
→ 返回 1 条:转录引擎,generators: ["genDetectRules","genAdapterRules","genPrismaRules","genWriterRules"]。
|
|
489
|
-
|
|
490
|
-
```text
|
|
491
|
-
query_audit_logs({ targetId: "packages/add-coder/src/cli/detect.ts" })
|
|
492
|
-
```
|
|
493
|
-
→ 返回 1 条 MODIFY:硬编码 26 行 → 薄包装 9 行,调 detect.strategy.ts。
|
|
494
|
-
|
|
495
|
-
**恢复顺序建议**:
|
|
496
|
-
```
|
|
497
|
-
1. query_audit_logs({ planKeyword: "add-coder-npm-package" })
|
|
498
|
-
2. read "{{magicDir}}/specs/add-coder-add-coder-npm-package/tasks.md"(第6轮)
|
|
499
|
-
3. read "{{magicDir}}/specs/add-coder-add-coder-npm-package/checklist.md"(七)
|
|
500
|
-
4. 执行 npm run generate 确保 GENERATED 区块最新
|
|
501
|
-
```
|
|
502
|
-
|
|
503
|
-
### 原子事务目标
|
|
504
|
-
|
|
505
|
-
- **Task 6.0**:CaijueHub 核心 — `caijue.toml` 索引 + `caijue.ts` 加载器 + `transcribe.ts` 转录引擎
|
|
506
|
-
- **Task 6.1**:策略文件搬迁 — 每个策略文件含 GENERATED 区块(transcribe 产出规则数据)和 USER CODE 区块(手写业务逻辑)
|
|
507
|
-
|
|
508
|
-
### spec 文件
|
|
509
|
-
|
|
510
|
-
- `{{magicDir}}/specs/add-coder-add-coder-npm-package/spec.md`(Requirement: CaijueHub 裁决层)
|
|
511
|
-
- `{{magicDir}}/specs/add-coder-add-coder-npm-package/tasks.md`(第6轮)
|
|
512
|
-
- `{{magicDir}}/specs/add-coder-add-coder-npm-package/checklist.md`(七)
|
|
513
|
-
|
|
514
|
-
### 你要改的文件(~16 个)
|
|
515
|
-
|
|
516
|
-
| 文件 | 操作 | 改什么 |
|
|
517
|
-
|------|------|--------|
|
|
518
|
-
| `src/caijuehub/caijue.toml` | 新建 | 策略索引 |
|
|
519
|
-
| `src/caijuehub/caijue.ts` | 新建 | TOML 索引加载器 |
|
|
520
|
-
| `src/caijuehub/transcribe.ts` | 新建 | 转录引擎 |
|
|
521
|
-
| `src/caijuehub/*-rules.toml` (4) | 新建 | 规则参数声明 |
|
|
522
|
-
| `src/caijuehub/strategies/*.strategy.ts` (4) | 新建 | GENERATED + USER CODE 双区块 |
|
|
523
|
-
| `src/cli/detect.ts` | 修改 | 薄包装 → 调 strategy |
|
|
524
|
-
| `src/cli/prisma-injector.ts` | 修改 | 薄包装 → 调 strategy |
|
|
525
|
-
| `src/cli/writer.ts` | 修改 | 薄包装 → 调 strategy |
|
|
526
|
-
| `src/cli/index.ts` | 修改 | 新增 `generate` 命令 |
|
|
527
|
-
| `package.json` | 修改 | 新增 `npm run generate` 脚本 |
|
|
528
|
-
|
|
529
|
-
### 核心设计
|
|
530
|
-
|
|
531
|
-
```
|
|
532
|
-
caijue.toml(索引) *-rules.toml(规则参数) strategies/*.ts
|
|
533
|
-
───────────────── ──────────────────── ┌──────────────────┐
|
|
534
|
-
[[caijue]] detect-rules.toml → │ GENERATED (转录) │
|
|
535
|
-
rules = "detect-rules" prisma-rules.toml → │ DETECT_RULES=[] │
|
|
536
|
-
impl = "strategies/..." adapter-rules.toml → │ PRISMA_CONFIG={} │
|
|
537
|
-
writer-rules.toml → ├──────────────────┤
|
|
538
|
-
│ USER CODE (手写) │
|
|
539
|
-
转录流程: │ detectIDE() │
|
|
540
|
-
npm run generate → transcribe.ts → GENERATED 区块 │ injectPrisma() │
|
|
541
|
-
└──────────────────┘
|
|
542
|
-
```
|
|
543
|
-
|
|
544
|
-
### 关键契约
|
|
545
|
-
|
|
546
|
-
- `caijue.toml` 只做索引,不耦合规则逻辑
|
|
547
|
-
- `*-rules.toml` 定义规则参数,由 `transcribe.ts` 产出 GENERATED 区块
|
|
548
|
-
- USER CODE 区块手写业务逻辑,`npm run generate` 不覆盖
|
|
549
|
-
- 修改规则后:`npm run generate` → `tsup` → 行为生效
|
|
550
|
-
|
|
551
|
-
### 高风险误区
|
|
552
|
-
|
|
553
|
-
- 禁止在 `caijue.toml` 中耦合规则逻辑
|
|
554
|
-
- 禁止 `transcribe.ts` 包含业务函数体(只产出规则数据)
|
|
555
|
-
- 策略文件的 GENERATED 和 USER CODE 必须用标记隔离,`npm run generate` 不可覆盖 USER CODE
|
|
556
|
-
|
|
557
|
-
### ADD-7 审计记录
|
|
558
|
-
|
|
559
|
-
| action | targetType | targetId | 说明 | 状态 |
|
|
560
|
-
|--------|-----------|----------|------|:--:|
|
|
561
|
-
| `SOURCE_CREATED` | CAIJUE_CONFIG | `src/caijuehub/caijue.toml` | 策略索引 | ✅ |
|
|
562
|
-
| `SOURCE_CREATED` | CAIJUE_CONFIG | `src/caijuehub/caijue.ts` | 索引加载器 | ✅ |
|
|
563
|
-
| `SOURCE_CREATED` | CAIJUE_CONFIG | `src/caijuehub/transcribe.ts` | 转录引擎 | ✅ |
|
|
564
|
-
| `SOURCE_CREATED` | STRATEGY | `src/caijuehub/strategies/detect.strategy.ts` | GENERATED+USER CODE | ✅ |
|
|
565
|
-
| `SOURCE_MODIFIED` | STRATEGY | `src/caijuehub/strategies/prisma.strategy.ts` | GENERATED+USER CODE | ✅ |
|
|
566
|
-
| `SOURCE_MODIFIED` | CLI | `src/cli/detect.ts` | 薄包装重构 | ✅ |
|
|
567
|
-
| `SOURCE_MODIFIED` | CLI | `src/cli/prisma-injector.ts` | 薄包装重构 | ✅ |
|
|
568
|
-
| `SOURCE_MODIFIED` | CLI | `src/cli/writer.ts` | 薄包装重构 | ✅ |
|
|
569
|
-
|
|
570
|
-
### 验证标准
|
|
571
|
-
|
|
572
|
-
#### 已完成验证
|
|
573
|
-
|
|
574
|
-
- `npm run generate` 产出 4 策略文件,GENERATED + USER CODE 双区块无误 ✅
|
|
575
|
-
- `tsup` 构建通过 ✅
|
|
576
|
-
- `add-coder init --dry-run` 三端正确 ✅
|
|
577
|
-
- `grep -r "farm.agent\|大田\|/home/xmm" templates/` 返回空 ✅
|
|
578
|
-
- `tsc --noEmit` 通过 ✅
|
|
579
|
-
|
|
580
|
-
---
|
|
581
|
-
|
|
582
|
-
## 每轮收敛判定补充规则
|
|
583
|
-
|
|
584
|
-
> 以下规则与 `add-paradigm` SKILL Step 8 收敛条件并列。
|
|
585
|
-
|
|
586
|
-
### checklist 证据要求
|
|
587
|
-
|
|
588
|
-
- [x] 全部项已勾选(不得空勾选)
|
|
589
|
-
- [x] 每项勾选有可验证证据
|
|
590
|
-
- [x] 未执行项诚实保留为 `- [ ]`,注明"待后续运行时验证"
|
|
591
|
-
|
|
592
|
-
### tasks 证据要求
|
|
593
|
-
|
|
594
|
-
- [x] 全部任务已完成(tasks.md 中全部 `- [x]`)
|
|
595
|
-
- [x] 每个任务有对应的 checklist 项覆盖
|
|
596
|
-
|
|
597
|
-
### 收敛声明规则
|
|
598
|
-
|
|
599
|
-
当前轮次 AI 不得自行声明"本轮已收敛"。收敛声明只能由开发者或 Review AI 做出。
|
|
600
|
-
|
|
601
|
-
---
|
|
602
|
-
|
|
603
|
-
## §7 实际产出与偏离
|
|
604
|
-
|
|
605
|
-
| 项 | 计划 | 实际 | 偏离说明 |
|
|
606
|
-
|------|------|------|------|
|
|
607
|
-
| 轮次数 | 5 轮 | 6 轮 | 新增第6轮 CaijueHub 裁决层 |
|
|
608
|
-
| 模板目录结构 | `templates/core/` + `adapters/` | 一致 | 无 |
|
|
609
|
-
| 适配器 | Claude/Qoder/VS Code | 一致 | 无 |
|
|
610
|
-
| caijue.toml | 无 | 索引注册 4 个策略 | 新增 |
|
|
611
|
-
| transcribe.ts | 无 | GENERATED 区块产出引擎 | 新增 |
|
|
612
|
-
| 策略文件 | 无 | GENERATED+USER CODE 双区块模式 | 新增 |
|
|
613
|
-
| 模板部署策略 | 仅 `.add/` | `{{magicDir}}/` `.claude/` 同时部署 core 内容 | IDE 只认自身 magic path,需三者各自完整 |
|
|
614
|
-
| `templates/core/prisma/` | add.prisma 模板 | 删除,由 injectPrisma 直接处理 | Prisma 文件不应在 `.add/` 下 |
|
|
615
|
-
| plans/specs 示例 | 无 | `templates/core/plans/` `specs/` 含 add-coder 示例 | 用户首次 init 即可看到完整 ADD 文档样例 |
|
|
616
|
-
| 三目录部署 | 仅 `.add/` | Plan 已设计,`renderCore()` 改造待执行 | 见 Plan §3.2 改造待执行清单 |
|
|
617
|
-
| Review v2 回流 | 无 | `{{magicDir}}/reviews/add-coder-add-coder-npm-package-review-v2.md` | 代码实现评审:2 条 P0(spawnSync catch 失能、ask 重复定义)在 Plan §4.8 回流,P0-1 已补充至 Task 1.0 验收项 |
|
|
618
|
-
|
|
619
|
-
## §8 验证结果
|
|
620
|
-
|
|
621
|
-
| 检查项 | 结果 | 证据 |
|
|
622
|
-
|------|:--:|------|
|
|
623
|
-
| `tsup` 构建 | ✅ | ESM 构建成功 |
|
|
624
|
-
| `tsc --noEmit` | ✅ | 零类型错误 |
|
|
625
|
-
| `init` 默认模式 | ✅ | Core 50 文件 |
|
|
626
|
-
| `init --adapter claude/qoder/vscode` | ✅ | 三端正确 |
|
|
627
|
-
| `add-coder generate` | ✅ | 4 策略全部产出 |
|
|
628
|
-
| 模板硬编码清零 | ✅ | `grep -r` 返回空 |
|
|
629
|
-
| `add-coder --help` | ✅ | 4 命令可见 |
|
|
630
|
-
|
|
631
|
-
## §9 后置确认
|
|
632
|
-
|
|
633
|
-
- [x] tasks.md 全部 6 轮 11 Task 已完成
|
|
634
|
-
- [x] checklist.md 全部可验证项已勾选
|
|
635
|
-
- [x] `grep -r "farm.agent\|大田\|/home/xmm" templates/` 返回空
|
|
636
|
-
- [ ] `npm pack` → `npm install` 端到端(待运行时验证)
|
|
637
|
-
- [x] ADD-7 `query_audit_logs` 回查确认 — 共 20 条记录,覆盖 6 轮全部关键文件
|
|
638
|
-
- [x] Review v2 P0-1(spawnSync catch 失能)已记录至 Plan 并补充验收项
|
|
639
|
-
- [ ] Review v2 P0-2(ask 重复定义)待第6轮 CaijueHub 重构时提取到 utils
|
|
640
|
-
- [ ] Review v2 P1-1(unlinkSync 缺口)、P1-2/3(gitignore)待 CI 基建清单补充
|
|
641
|
-
|
|
642
|
-
---
|
|
643
|
-
|
|
644
|
-
## 附录:每轮启动模板
|
|
645
|
-
|
|
646
|
-
新对话开始时,直接把下面内容 + 对应轮次章节粘贴给 LLM:
|
|
647
|
-
|
|
648
|
-
```text
|
|
649
|
-
## 上下文
|
|
650
|
-
|
|
651
|
-
你在执行 add-coder npm 包工程化的 [第N轮]。
|
|
652
|
-
上游 [第1轮~第N-1轮] 已完成。
|
|
653
|
-
先读 {{magicDir}}/plans/2026-07/08/add-coder-add-coder-npm-package-handoff-v1.md 的 <第N轮> 章节。
|
|
654
|
-
|
|
655
|
-
## 启动步骤(按顺序)
|
|
656
|
-
|
|
657
|
-
1. 执行 session-init SKILL
|
|
658
|
-
2. 执行 add-paradigm SKILL
|
|
659
|
-
3. 读 {{magicDir}}/specs/add-coder-add-coder-npm-package/spec.md
|
|
660
|
-
4. 读 {{magicDir}}/specs/add-coder-add-coder-npm-package/tasks.md(第N轮)
|
|
661
|
-
5. 读 {{magicDir}}/specs/add-coder-add-coder-npm-package/checklist.md
|
|
662
|
-
6. 按 tasks.md 顺序执行代码修改
|
|
663
|
-
7. 每完成一个 Task:读 checklist.md → 逐项验证 → 附证据 → 勾选
|
|
664
|
-
8. 每完成一个文件修改:record_dev_operation 写入 ADD-7 审计
|
|
665
|
-
9. 全部代码完成后:query_audit_logs 按 planKeyword 回查确认落库
|
|
666
|
-
|
|
667
|
-
## 关键提醒
|
|
668
|
-
|
|
669
|
-
- 当前执行的是 [第N轮]/6
|
|
670
|
-
- 当前轮次是一个原子工程事务,不允许拆到下一轮补齐
|
|
671
|
-
- handoff 是入口索引;具体实现以 spec/tasks/checklist 为准
|
|
672
|
-
- 禁止自行声明收敛
|
|
673
|
-
- 禁止提前实现下一轮的核心内容
|
|
674
|
-
```
|
|
675
|
-
|
|
676
|
-
---
|
|
677
|
-
|
|
678
|
-
### 脱敏要求
|
|
679
|
-
|
|
680
|
-
Handoff 文档中 **禁止出现** 以下类型的硬编码值:
|
|
681
|
-
- 数据库密码(`POSTGRES_PASSWORD`)
|
|
682
|
-
- Chroma auth token(`CHROMA_AUTH_TOKEN`)
|
|
683
|
-
- JWT 密钥(`JWT_SECRET`)
|
|
684
|
-
- API Key(`OPENAI_API_KEY_*`)
|
|
685
|
-
|
|
686
|
-
所有凭据值应通过 `${ENV_VAR}` 引用,并标注"值见 `.env.development` / `.env.production`"。
|