@ultime/codecraft 1.0.3 → 1.2.0
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/CHANGELOG.md +15 -0
- package/CONTRIBUTING.md +12 -1
- package/README.md +93 -33
- package/SKILL.md +67 -0
- package/VERSION +1 -1
- package/adapters/README.md +2 -0
- package/adapters/claude/SKILL.md +3 -1
- package/adapters/generic/AGENTS.md +2 -0
- package/adapters/trae/SKILL.md +3 -1
- package/codecraft.config.example.json +8 -0
- package/docs/00-constitution.md +17 -5
- package/docs/01-family-cards.md +44 -21
- package/docs/02-ai-contract.md +7 -6
- package/docs/03-style-map.md +1 -0
- package/docs/04-gates.md +5 -0
- package/docs/05-patterns.md +1 -0
- package/docs/06-architecture.md +2 -0
- package/docs/07-ai-prompts.md +17 -1
- package/evals/golden-tasks.md +9 -0
- package/package.json +5 -3
- package/src/cli.mjs +153 -13
- package/src/gates.mjs +8 -5
- package/src/ignore.mjs +145 -0
- package/src/install.mjs +100 -0
- package/templates/app/README.md +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.2.0 - 2026-10-27
|
|
4
|
+
|
|
5
|
+
- 新增 `ignore` 例外配置(A12):`rule` / `file` / `reason` 必填,`expires` 可选;支持 `*` / `**` / `?` 路径匹配;安全规则 `A21` 不可豁免。
|
|
6
|
+
- 命中例外的 findings 不再影响退出码,但仍在报告的 `Ignored` 表和 JSON 的 `ignored` / `exceptions` 中可见;过期例外汇总到 `Expired Exceptions`。
|
|
7
|
+
- 错误信息补充下一步:root 不存在、config 非法、pack 不匹配、未知命令。
|
|
8
|
+
- README 增加 FAQ 与版本口径;`docs/04` 与配置示例补充 `ignore`。
|
|
9
|
+
- 文档明确范围:JS/TS、默认前端、示例原生优先、Node 后端只复用结构规则;框架示例只保留 Vue 3 / React,其它框架留扩展位。
|
|
10
|
+
|
|
11
|
+
## 1.1.0 - 2026-10-27
|
|
12
|
+
|
|
13
|
+
- 新增根 `SKILL.md`,兼容 Agent Skills / `skills-npm`;安装 `@ultime/codecraft` 后可被自动发现。
|
|
14
|
+
- 新增 `codecraft install`:自动检测 Claude / Trae / Cursor,写入 `.agents/skills` 与对应目录;支持 `--agent` / `--global` / `--dest` / `--force` / `--dry-run`。
|
|
15
|
+
- README 增加三种安装方式:`skills-npm`、内置安装器、手动指针。
|
|
16
|
+
- `docs/07-ai-prompts.md` 与 adapters 补充安装入口。
|
|
17
|
+
|
|
3
18
|
## 1.0.3 - 2026-10-27
|
|
4
19
|
|
|
5
20
|
- 文档从 v0 草稿固化为 v1 稳定版。
|
package/CONTRIBUTING.md
CHANGED
|
@@ -19,9 +19,20 @@
|
|
|
19
19
|
## 验证
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
|
-
|
|
22
|
+
npm test
|
|
23
|
+
npm pack --dry-run
|
|
23
24
|
node bin/codecraft.mjs check --root <项目>
|
|
24
25
|
```
|
|
25
26
|
|
|
26
27
|
- 新增 / 修改规则必须补测试;没有反例的规则降级为「参考」。
|
|
27
28
|
- 不提交密钥、客户名、内部路径;发现疑似凭据立即停止并提示轮换。
|
|
29
|
+
|
|
30
|
+
## 版本号
|
|
31
|
+
|
|
32
|
+
只按 semver,不按「感觉重要」升 major:
|
|
33
|
+
|
|
34
|
+
- **major**:破坏性变更——规则 ID 语义变更、配置格式不兼容、JSON 输出结构变化。
|
|
35
|
+
- **minor**:新能力——CLI 选项、检查规则、适配器、模板、向后兼容的配置字段。
|
|
36
|
+
- **patch**:修复、文档、提示词、测试、CI,或无行为变化的内部调整。
|
|
37
|
+
- `2.0` 不设时间表;没有破坏性变更就不进 major。
|
|
38
|
+
- 发布前同时改 `VERSION`、`package.json`、`CHANGELOG.md`,并跑 `npm test` 与 `npm pack --dry-run`。
|
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Codecraft(代码手艺)
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
>
|
|
3
|
+
> 面向 JS/TS 的代码规范与架构设计,作为可安装的 skill 包。
|
|
4
|
+
> 默认 Web 前端;示例原生优先(TS / 原生 Web API),框架只给 Vue 3 / React;Node 后端只复用结构规则;其它语言不在范围。
|
|
5
5
|
|
|
6
6
|
- 版本:见 [VERSION](./VERSION)
|
|
7
7
|
- npm:[@ultime/codecraft](https://www.npmjs.com/package/@ultime/codecraft)
|
|
@@ -19,29 +19,67 @@
|
|
|
19
19
|
|
|
20
20
|
规则正文只在 [`docs/`](./docs/);其它位置只放入口与指针,避免第二份真源。
|
|
21
21
|
|
|
22
|
-
> 第一次用:直接看 [
|
|
22
|
+
> 第一次用:直接看 [安装](#安装) 和 [第一次使用](#第一次使用)。
|
|
23
23
|
|
|
24
|
-
##
|
|
24
|
+
## 范围与分层
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
| 项 | 内容 |
|
|
27
|
+
|---|---|
|
|
28
|
+
| 覆盖 | JS/TS 项目;Web 前端为默认场景(示例原生优先,框架仅 Vue 3 / React) |
|
|
29
|
+
| 可复用 | Node 后端:模块边界、依赖方向、内外分离、生成物、门禁与文档规则 |
|
|
30
|
+
| 不适用 | Page / Component 等前端族;数据库、缓存、并发、事务等后端专项 |
|
|
31
|
+
| 不在范围 | Java / Go / Python 等其它语言;后端专项另立体系 |
|
|
32
|
+
|
|
33
|
+
内容分三层,按需取用:
|
|
34
|
+
|
|
35
|
+
| 层 | 回答什么 | 位置 |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| **规则** | 什么不能变 | [`docs/00-constitution.md`](./docs/00-constitution.md) |
|
|
38
|
+
| **形状** | 边界与结构长什么样 | [`docs/06-architecture.md`](./docs/06-architecture.md)、[`docs/01-family-cards.md`](./docs/01-family-cards.md) |
|
|
39
|
+
| **示例** | 原生怎么落,框架怎么对应 | 族卡的形状、[`templates/`](./templates/)、[`docs/05-patterns.md`](./docs/05-patterns.md) |
|
|
40
|
+
|
|
41
|
+
> 族卡的形状默认原生(HTML + TS);框架示例只给 Vue 3 / React,其它框架在族卡 §12 登记,不预建。
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
## 安装
|
|
45
|
+
|
|
46
|
+
### 方式 A:npm + skills-npm(推荐,多项目 / 团队)
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
npm i -D @ultime/codecraft skills-npm
|
|
50
|
+
npx skills-npm setup
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
之后每次 `npm install` 都会把 `node_modules/@ultime/codecraft` 里的 skill 同步到 agent 目录:`.agents/skills/codecraft`,以及检测到的 Claude / Trae / Cursor 目录。需要 Node.js >= 22.20(`skills-npm` 的要求)。
|
|
54
|
+
|
|
55
|
+
### 方式 B:Codecraft 自带安装器(单次,无额外依赖)
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
npx @ultime/codecraft install
|
|
59
|
+
```
|
|
27
60
|
|
|
28
|
-
|
|
61
|
+
自动检测当前项目的 agent,把 `SKILL.md`、`docs/`、`scenarios/`、`prompts/` 复制到 `.agents/skills/codecraft` 和对应 agent 目录(`.claude/skills`、`.trae/skills`、`.cursor/skills`)。
|
|
29
62
|
|
|
30
|
-
|
|
63
|
+
```bash
|
|
64
|
+
npx @ultime/codecraft install --agent claude # 指定 agent,可逗号分隔
|
|
65
|
+
npx @ultime/codecraft install --global --agent claude # 装到用户目录
|
|
66
|
+
npx @ultime/codecraft install --dry-run # 只看计划
|
|
67
|
+
npx @ultime/codecraft install --force # 覆盖已有目录
|
|
68
|
+
```
|
|
31
69
|
|
|
32
|
-
|
|
70
|
+
### 方式 C:手动指针
|
|
33
71
|
|
|
34
|
-
|
|
72
|
+
不复制文件,只在项目规则里留一行:
|
|
35
73
|
|
|
36
|
-
- Trae
|
|
37
|
-
- Claude
|
|
38
|
-
-
|
|
74
|
+
- Trae:`.trae/rules/codecraft.md`
|
|
75
|
+
- Claude:`CLAUDE.md` 或 `~/.claude/CLAUDE.md`
|
|
76
|
+
- 其他:`AGENTS.md`
|
|
39
77
|
|
|
40
78
|
```md
|
|
41
79
|
代码任务先读 <Codecraft 路径>/codecraft/adapters/trae/SKILL.md
|
|
42
80
|
```
|
|
43
81
|
|
|
44
|
-
|
|
82
|
+
平台入口:
|
|
45
83
|
|
|
46
84
|
| 平台 | 入口文件 |
|
|
47
85
|
|---|---|
|
|
@@ -49,11 +87,7 @@ Codecraft 不是装完 npm 包就自动出现在 agent 里。选一种方式接
|
|
|
49
87
|
| Trae | [`adapters/trae/SKILL.md`](./adapters/trae/SKILL.md) |
|
|
50
88
|
| Claude | [`adapters/claude/SKILL.md`](./adapters/claude/SKILL.md) |
|
|
51
89
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
把对应平台的入口文件放进 agent 的 skills 目录。必须让 `docs/`、`scenarios/`、`prompts/` 与该文件保持 `../../` 的相对位置(符号链接即可),否则入口里的路径会失效。
|
|
55
|
-
|
|
56
|
-
### 第 2 步:对 AI 说第一句话
|
|
90
|
+
## 第一次使用
|
|
57
91
|
|
|
58
92
|
```text
|
|
59
93
|
用 Codecraft 审计本项目,只读,不改文件。
|
|
@@ -63,18 +97,11 @@ Codecraft 不是装完 npm 包就自动出现在 agent 里。选一种方式接
|
|
|
63
97
|
|
|
64
98
|
更多场景(只出报告、新项目、重构评审、架构设计、模式选型、脚手架、Design System)见 [docs/07-ai-prompts.md](./docs/07-ai-prompts.md)。
|
|
65
99
|
|
|
66
|
-
|
|
100
|
+
需要本地检查时再装 CLI:
|
|
67
101
|
|
|
68
102
|
```bash
|
|
69
103
|
npx @ultime/codecraft check --root .
|
|
70
|
-
npx
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
安装为项目依赖:
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
npm i -D @ultime/codecraft
|
|
77
|
-
npx codecraft check --root .
|
|
104
|
+
npx codecraft check --root . # 已安装为项目依赖时
|
|
78
105
|
```
|
|
79
106
|
|
|
80
107
|
本地开发 / 未发布时用 tarball:
|
|
@@ -85,8 +112,6 @@ npm i -D /path/to/ultime-codecraft-<version>.tgz
|
|
|
85
112
|
npx codecraft check --root .
|
|
86
113
|
```
|
|
87
114
|
|
|
88
|
-
也可以 `pnpm link --global /path/to/codecraft`,之后在任意目录使用 `codecraft`。
|
|
89
|
-
|
|
90
115
|
## 模式
|
|
91
116
|
|
|
92
117
|
| 模式 | 是否改文件 | 对应命令 |
|
|
@@ -107,6 +132,7 @@ codecraft <command> [options]
|
|
|
107
132
|
| `audit` | 内置规则 + `codecraft.config.json` 里的 gates,出只读报告 |
|
|
108
133
|
| `plan` | 把 findings 转成只读升级计划;默认不跑 gates |
|
|
109
134
|
| `init` | 生成 app / library 骨架;默认 dry-run |
|
|
135
|
+
| `install` | 把 skill 安装到 agent skills 目录;默认写入,`--dry-run` 只看计划 |
|
|
110
136
|
| `version` | 输出版本号 |
|
|
111
137
|
|
|
112
138
|
### 常用
|
|
@@ -121,6 +147,9 @@ codecraft audit --config codecraft.config.json --fail-fast
|
|
|
121
147
|
codecraft plan --root . --with-gates
|
|
122
148
|
codecraft init --root . --name demo # dry-run
|
|
123
149
|
codecraft init --root . --name demo --apply # 写盘
|
|
150
|
+
codecraft install # 自动检测并安装
|
|
151
|
+
codecraft install --agent trae,claude --force
|
|
152
|
+
codecraft install --dry-run
|
|
124
153
|
```
|
|
125
154
|
|
|
126
155
|
### 参数
|
|
@@ -138,13 +167,18 @@ codecraft init --root . --name demo --apply # 写盘
|
|
|
138
167
|
| `--with-gates` | — | 关 | `plan` 执行 gates |
|
|
139
168
|
| `--name <name>` | 字符串 | — | `init` 的 app / package 名称;`--apply` 时必填 |
|
|
140
169
|
| `--apply` | — | 关 | `init` 写盘;已存在路径跳过,不覆盖 |
|
|
170
|
+
| `--agent <list>` | `auto` / `claude` / `trae` / `cursor` / `generic` | `auto` | `install` 目标,可逗号分隔 |
|
|
171
|
+
| `--global` | — | 关 | `install` 写入用户目录 |
|
|
172
|
+
| `--dest <path>` | 目录 | — | `install` 的显式目标 |
|
|
173
|
+
| `--force` | — | 关 | `install` 覆盖已有 codecraft 目录 |
|
|
174
|
+
| `--dry-run` | — | 关 | `install` 只输出计划,不写盘 |
|
|
141
175
|
|
|
142
176
|
### 退出码
|
|
143
177
|
|
|
144
178
|
| 码 | 含义 |
|
|
145
179
|
|---|---|
|
|
146
180
|
| `0` | 通过;warning 不阻断 |
|
|
147
|
-
| `1` | 有 error findings
|
|
181
|
+
| `1` | 有 error findings、install 失败,或有 gate 失败 |
|
|
148
182
|
| `2` | 用法错误、root 不存在、配置非法 |
|
|
149
183
|
|
|
150
184
|
### 输出
|
|
@@ -161,7 +195,7 @@ codecraft init --root . --name demo --apply # 写盘
|
|
|
161
195
|
| `library` | A2 / A11 / A21 | 包不 import app、相对路径不逃逸、workspace 依赖必须声明;生成物必须有“勿手改 / 派生”标记;密钥扫描 |
|
|
162
196
|
| `design-system` | A2 / A11 / A21 | library 规则 + 包内公开文档不得引用内部 `docs/` |
|
|
163
197
|
|
|
164
|
-
`--pack auto`
|
|
198
|
+
`--pack auto` 的判定顺序(基于 JS/TS 生态的目录与 `package.json`):
|
|
165
199
|
|
|
166
200
|
1. 有 `apps/` 或 `src/pages` → `app`
|
|
167
201
|
2. 有 `packages/` 或根 `package.json` → `library`
|
|
@@ -181,12 +215,22 @@ A4(单一收口)属于结构判断,由 review 与项目门禁负责,不
|
|
|
181
215
|
"gates": [
|
|
182
216
|
{ "name": "typecheck", "run": "pnpm typecheck", "timeoutMs": 120000 },
|
|
183
217
|
{ "name": "test", "run": "pnpm test", "timeoutMs": 120000 }
|
|
218
|
+
],
|
|
219
|
+
"ignore": [
|
|
220
|
+
{
|
|
221
|
+
"rule": "A17",
|
|
222
|
+
"file": "src/pages/legacy/**",
|
|
223
|
+
"reason": "legacy page; migrate in 2026-Q4",
|
|
224
|
+
"expires": "2026-12-31"
|
|
225
|
+
}
|
|
184
226
|
]
|
|
185
227
|
}
|
|
186
228
|
```
|
|
187
229
|
|
|
188
230
|
- `pack`:`app` / `library` / `design-system` / `auto`。
|
|
189
231
|
- `gates`:数组;每项必须有一个非空的 `run` 字符串,可选 `name`、`timeoutMs`(默认 `120000`)。
|
|
232
|
+
- `ignore`:例外登记(A12)。每项必须有 `rule` / `file` / `reason`,`expires` 可选(`YYYY-MM-DD`);`file` 支持 `*` / `**` / `?`。安全规则 `A21` 不可豁免。
|
|
233
|
+
- 命中的 findings 不参与退出码,但仍出现在报告的 `Ignored` 表与 JSON 的 `ignored`;过期的条目不生效,列在 `Expired Exceptions`。
|
|
190
234
|
- gate 在 `--root` 下通过 shell 执行,注入 `CI=1`;失败时报告尾部 40 行 / 4000 字符。
|
|
191
235
|
- `check` 不跑 gates;`audit` 默认跑;`plan` 只在 `--with-gates` 时跑。
|
|
192
236
|
- 通用规则内置,业务门禁只编排、不复制。构建指引见 [`docs/04-gates.md`](./docs/04-gates.md)。
|
|
@@ -194,25 +238,41 @@ A4(单一收口)属于结构判断,由 review 与项目门禁负责,不
|
|
|
194
238
|
## 目录
|
|
195
239
|
|
|
196
240
|
```text
|
|
241
|
+
SKILL.md 标准 agent skill 入口(skills-npm / install 使用)
|
|
197
242
|
docs/ 宪法、族卡、AI 契约、风格总图、模式、架构、AI 提示词、门禁
|
|
198
243
|
scenarios/ 新项目 / 旧项目审计 / 只出报告 / 重构评审
|
|
199
|
-
adapters/ generic / Trae / Claude
|
|
244
|
+
adapters/ generic / Trae / Claude 手动指针
|
|
200
245
|
prompts/ 输出格式
|
|
201
|
-
src/ + bin/ CLI
|
|
246
|
+
src/ + bin/ CLI(含 install)
|
|
202
247
|
tests/ node:test 用例
|
|
203
248
|
templates/ init --apply 的 app / library 骨架
|
|
204
249
|
evals/ golden tasks(人工回归)
|
|
250
|
+
ROADMAP.md 后续版本计划与交接说明
|
|
205
251
|
```
|
|
206
252
|
|
|
207
253
|
## 版本与稳定承诺
|
|
208
254
|
|
|
209
255
|
- semver;当前版本见 [VERSION](./VERSION)。
|
|
256
|
+
- **major**:只用于破坏性变更——规则 ID 语义变更、配置格式不兼容、JSON 输出结构变化。
|
|
257
|
+
- **minor**:新能力——CLI 选项、检查规则、适配器、模板、向后兼容的配置字段。
|
|
258
|
+
- **patch**:修复、文档、提示词、测试、CI,或无行为变化的内部调整。
|
|
259
|
+
- 不按「感觉重要」升 major;`2.0` 不设时间表。
|
|
210
260
|
- 规则 ID `A1–A21` 稳定;增删规则属于 minor 以上的变更。
|
|
211
261
|
- 报告始终携带版本号;跨版本对比以 JSON 为准。
|
|
262
|
+
- 后续计划:[ROADMAP.md](https://github.com/ultime-space/skills/blob/main/codecraft/ROADMAP.md)。
|
|
263
|
+
|
|
264
|
+
## FAQ
|
|
265
|
+
|
|
266
|
+
- **静态检查误报怎么办?** 在 `codecraft.config.json` 的 `ignore` 里登记 `rule` + `file` + `reason`,必要时加 `expires`;不要直接删规则。
|
|
267
|
+
- **`check` / `audit` / `plan` 有什么区别?** `check` 只跑内置规则;`audit` 额外跑 config 里的 gates;`plan` 只读,把 findings 转成计划,默认不跑 gates。
|
|
268
|
+
- **为什么不自动跑 typecheck / test?** 门禁由项目提供,Codecraft 只编排,避免第二套实现。
|
|
269
|
+
- **monorepo 为什么被判成 library?** 有 `packages/` 或根 `package.json` 即按 library;可用 `--pack` 显式覆盖。
|
|
270
|
+
- **支持哪些文件?** 只扫 JS/TS 相关扩展名与 `package.json`;其它语言不覆盖。
|
|
212
271
|
|
|
213
272
|
## 边界
|
|
214
273
|
|
|
215
274
|
- 静态检查是文本级:能覆盖高置信模式,可能漏报或误报;最终以项目门禁与 review 为准。
|
|
275
|
+
- 机检只扫描 JS/TS 相关文件(`.ts` / `.tsx` / `.js` / `.jsx` / `.mjs` / `.cjs` / `.vue` / `.svelte`)与 `package.json`,其它语言不覆盖。
|
|
216
276
|
- 不内置任何业务规则、框架约定或公司内部门禁。
|
|
217
277
|
- 不读取、不上传代码;所有检查在本地完成。
|
|
218
278
|
|
package/SKILL.md
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: codecraft
|
|
3
|
+
description: 面向 JS/TS 的代码规范与架构设计(Codecraft)。默认 Web 前端,Node 后端可复用结构规则;用于审计、架构设计、重构评审、规范检查与脚手架。Code standard and architecture design for JS/TS projects (frontend-first; structural rules reusable for Node backends).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Codecraft(代码手艺)
|
|
7
|
+
|
|
8
|
+
> 方向:JS/TS。默认场景是 Web 前端;示例原生优先(TS / 原生 Web API),框架只给 Vue 3 / React;Node 后端只复用结构规则;其它语言不在范围。
|
|
9
|
+
|
|
10
|
+
## 范围
|
|
11
|
+
|
|
12
|
+
| 项 | 内容 |
|
|
13
|
+
|---|---|
|
|
14
|
+
| 覆盖 | JS/TS 项目;页面、组件、行为、状态、传输、类型、包、脚本、测试 |
|
|
15
|
+
| 可复用 | Node 后端:模块边界、依赖方向、内外分离、生成物、门禁与文档规则 |
|
|
16
|
+
| 不适用 | 前端专属族(Page / Component);后端数据库、缓存、并发、事务等专项规范 |
|
|
17
|
+
| 不在范围 | Java / Go / Python 等其它语言;后端专项另立体系,本 skill 不承诺覆盖 |
|
|
18
|
+
|
|
19
|
+
> 示例顺序:原生 → Vue 3 / React;其它框架不预建,先在 `docs/01-family-cards.md` §12 登记。
|
|
20
|
+
|
|
21
|
+
## 读法(按任务路由)
|
|
22
|
+
|
|
23
|
+
| 任务 | 先读 | 产出 |
|
|
24
|
+
|---|---|---|
|
|
25
|
+
| 审计 / 评审现有代码 | 宪法 + 相关族卡 | 报告(只读) |
|
|
26
|
+
| 设计架构 / 拆边界 | `docs/06-architecture.md` + 宪法 | 计划 / ADR(只读) |
|
|
27
|
+
| 新项目 / 脚手架 | `06` + `scenarios/new-project.md` | 骨架计划;必要时 `init` |
|
|
28
|
+
| 选型(模式 / 库) | `docs/05-patterns.md` | 选型与代价 |
|
|
29
|
+
| 改代码 | 宪法 + 相关族卡 + 项目门禁 | 变更 + 验证 |
|
|
30
|
+
|
|
31
|
+
## 先读
|
|
32
|
+
|
|
33
|
+
1. 项目 `AGENTS.md` / `rules/`
|
|
34
|
+
2. `docs/00-constitution.md`
|
|
35
|
+
3. 设计架构时:`docs/06-architecture.md`
|
|
36
|
+
4. 只读相关族卡:`docs/01-family-cards.md`(前端项目才读 Page / Component)
|
|
37
|
+
5. 需要选型时:`docs/05-patterns.md`
|
|
38
|
+
6. 选一个场景:`scenarios/`
|
|
39
|
+
7. 按 `docs/02-ai-contract.md` 执行
|
|
40
|
+
8. 按 `prompts/output.md` 输出
|
|
41
|
+
9. 不知道怎么说时:`docs/07-ai-prompts.md`
|
|
42
|
+
|
|
43
|
+
## 模式
|
|
44
|
+
|
|
45
|
+
- **Audit(审计)**:只读,出报告。
|
|
46
|
+
- **Plan(计划)**:只读,出架构 / 升级计划。
|
|
47
|
+
- **Apply(执行)**:改代码 + 跑门禁。
|
|
48
|
+
|
|
49
|
+
## 工作流
|
|
50
|
+
|
|
51
|
+
1. 判定任务属于哪个场景。
|
|
52
|
+
2. 只读相关族卡,不要一次加载全部。
|
|
53
|
+
3. 先出计划;Apply 前确认范围。
|
|
54
|
+
4. 跑项目验证命令;不能跑要说明原因。
|
|
55
|
+
5. 按 `prompts/output.md` 输出。
|
|
56
|
+
|
|
57
|
+
## 禁止
|
|
58
|
+
|
|
59
|
+
- Audit / Plan 模式改文件。
|
|
60
|
+
- 把业务逻辑放进 Transport 或 Page。
|
|
61
|
+
- 内部代码 import `external/` 或生成类型。
|
|
62
|
+
- 手改生成物。
|
|
63
|
+
- 把前端族规则套到 Node 后端(Page / Component / UI 不适用)。
|
|
64
|
+
- 写敏感信息;发现即停止、脱敏、提示轮换。
|
|
65
|
+
- 安全红线登记例外。
|
|
66
|
+
|
|
67
|
+
规则正文只在 `docs/`;本文件只做入口。
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.0
|
|
1
|
+
1.2.0
|
package/adapters/README.md
CHANGED
|
@@ -9,4 +9,6 @@ Core 是 `docs/` + `scenarios/` + `scripts/`;adapters 只做入口,不复制
|
|
|
9
9
|
|
|
10
10
|
规则:adapter 只写“读什么、按什么流程、输出什么”,规则正文留在 `docs/`。
|
|
11
11
|
|
|
12
|
+
包根的 [`SKILL.md`](../SKILL.md) 是标准 agent skill 入口(`skills-npm` / `codecraft install` 使用);本目录的平台文件用于手动指针接入。两者二选一,不要同时维护两套正文。
|
|
13
|
+
|
|
12
14
|
使用者提示词(怎么对 AI 说):[`../docs/07-ai-prompts.md`](../docs/07-ai-prompts.md)。
|
package/adapters/claude/SKILL.md
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: codecraft
|
|
3
|
-
description:
|
|
3
|
+
description: 面向 JS/TS 的代码规范与架构设计(Codecraft)。默认 Web 前端,Node 后端可复用结构规则;用于审计、架构设计、重构评审、规范检查与脚手架。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Codecraft(代码手艺)
|
|
7
7
|
|
|
8
|
+
> 方向:JS/TS(默认前端)。后端只复用结构规则;Page / Component 等前端族不套用到后端。
|
|
9
|
+
|
|
8
10
|
## 先读
|
|
9
11
|
|
|
10
12
|
1. 项目 `AGENTS.md` / `rules/`
|
package/adapters/trae/SKILL.md
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: codecraft
|
|
3
|
-
description:
|
|
3
|
+
description: 面向 JS/TS 的代码规范与架构设计(Codecraft)。默认 Web 前端,Node 后端可复用结构规则;用于审计、架构设计、重构评审、规范检查与脚手架。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Codecraft(代码手艺)
|
|
7
7
|
|
|
8
|
+
> 方向:JS/TS(默认前端)。后端只复用结构规则;Page / Component 等前端族不套用到后端。
|
|
9
|
+
|
|
8
10
|
## 先读
|
|
9
11
|
|
|
10
12
|
1. 项目 `AGENTS.md` / `rules/`
|
package/docs/00-constitution.md
CHANGED
|
@@ -1,11 +1,23 @@
|
|
|
1
|
-
# 代码宪法 v1
|
|
1
|
+
# 代码宪法 v1(JS/TS)
|
|
2
2
|
|
|
3
3
|
> 2026-10-27 · v1 稳定版。
|
|
4
|
-
> 用途:给人和 AI
|
|
4
|
+
> 用途:给人和 AI 的共同约束;适用于 JS/TS 项目,默认前端场景。
|
|
5
5
|
> 读者:团队 / AI(Design Specification)。
|
|
6
6
|
> 术语:English(中文)。
|
|
7
7
|
|
|
8
|
-
## 0.
|
|
8
|
+
## 0. 范围与读法
|
|
9
|
+
|
|
10
|
+
| 项 | 内容 |
|
|
11
|
+
|---|---|
|
|
12
|
+
| 覆盖 | JS/TS;Web 前端为默认场景 |
|
|
13
|
+
| 可复用 | Node 后端:M1–M5 与 A1–A21 中的结构、边界与安全规则 |
|
|
14
|
+
| 部分适用 | A5 / A6 / A8 的验收列是 TS / 前端写法(`assertNever` / `satisfies` / `computed`);其它实现只要证明同一不变量即可 |
|
|
15
|
+
| 示例顺序 | 原生(TS / Web API)→ Vue 3 / React → 其它框架(不预建,族卡 §12 登记) |
|
|
16
|
+
| 不在范围 | Page / Component 等前端族;数据库、缓存、并发、事务;其它语言 |
|
|
17
|
+
|
|
18
|
+
> 读法:§1 元判据 → §2 不变量 → 按主题查 §3 → 族形查《代码族卡 v1》。
|
|
19
|
+
|
|
20
|
+
## 0.1 第一性
|
|
9
21
|
|
|
10
22
|
**可预测性(Predictability)**:同一类东西长得一样;同一类改动只动一处;错误看得见;文档不会撒谎。
|
|
11
23
|
|
|
@@ -237,7 +249,7 @@ repo/
|
|
|
237
249
|
|---|---|---|---|
|
|
238
250
|
| **Transport(传输)** | 网络 / HTTP / 取消 | 有远程调用时 | 自研 / 第三方 |
|
|
239
251
|
| **Wrapper(包装)** | 外部 → 内部转换 | 有外部契约时 | 自研 / 生成 |
|
|
240
|
-
| **Behavior(行为)** | 页面无关行为 | 有复用 / 复杂逻辑时 | composable / hook / service |
|
|
252
|
+
| **Behavior(行为)** | 页面无关行为 | 有复用 / 复杂逻辑时 | 纯函数 / 状态机;需要时再加 composable / hook / service |
|
|
241
253
|
| **State(状态)** | 状态建模与转移 | 有异步 / 多态时 | 联合类型 / 状态机 |
|
|
242
254
|
| **Concurrency(并发控制)** | 去重 / 共享 in-flight / 取消 | 有并发请求时 | 自研 / 第三方 / 不做 |
|
|
243
255
|
| **Observability(可观测性)** | 日志 / 追踪 / 请求序 | 需要排障时 | console / APM / 不做 |
|
|
@@ -306,5 +318,5 @@ repo/
|
|
|
306
318
|
|
|
307
319
|
## 7. 待定
|
|
308
320
|
|
|
309
|
-
- 第一个语言方言是 TS/JS,还是同时写 Java/Go?
|
|
310
321
|
- 每条规则的 owner 和到期日。
|
|
322
|
+
- 后端(Node)专项是否独立成体系;当前只复用本宪法的结构与安全规则。
|
package/docs/01-family-cards.md
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
# 代码族卡 v1(11
|
|
1
|
+
# 代码族卡 v1(11 个环节 · JS/TS)
|
|
2
2
|
|
|
3
3
|
> 2026-10-27 · v1 稳定版。
|
|
4
4
|
> 用途:把《代码宪法 v1》落到每个代码族(环节);不同族可以不同形状,族内必须同形。
|
|
5
|
+
> 形状与示例原生优先:TS + 原生 Web API(DOM / fetch / CustomEvent)为默认;框架示例只给 Vue 3 / React。
|
|
6
|
+
> 其它框架不预建,先在 §12 扩展位登记。
|
|
7
|
+
> 前端专用族:Page / Component;Node 后端只复用结构与边界类族。
|
|
5
8
|
> 术语:English(中文)。
|
|
6
9
|
|
|
7
10
|
## 0. 卡模板
|
|
@@ -10,11 +13,29 @@
|
|
|
10
13
|
|
|
11
14
|
> 族是「环节」,不是必须模块;项目没有这个职责时,这一族可以不存在。
|
|
12
15
|
|
|
13
|
-
## 1
|
|
16
|
+
## 0.1 适用范围
|
|
17
|
+
|
|
18
|
+
| 族 | 前端 | Node 后端 | 备注 |
|
|
19
|
+
|---|---|---|---|
|
|
20
|
+
| Page | ✅ | ❌ | 后端无对应物,不要硬造 |
|
|
21
|
+
| Component | ✅ | ❌ | 同上 |
|
|
22
|
+
| Behavior | ✅ | ⚠️ | 对应 domain service;core 不依赖框架仍成立 |
|
|
23
|
+
| Transport | ✅ | ✅ | 后端是 client / adapter |
|
|
24
|
+
| Wrapper | ✅ | ✅ | 防腐层,规则一致 |
|
|
25
|
+
| Type | ✅ | ✅ | 联合类型等验收项按语言替换 |
|
|
26
|
+
| Package | ✅ | ✅ | 包边界、版本、public API 规则通用 |
|
|
27
|
+
| State | ✅ | ⚠️ | 状态机 / 领域状态可用;computed 换成同义派生 |
|
|
28
|
+
| Util | ✅ | ✅ | 纯函数,规则一致 |
|
|
29
|
+
| Script | ✅ | ✅ | 脚本通用 |
|
|
30
|
+
| Test | ✅ | ✅ | 分层测试策略通用 |
|
|
31
|
+
|
|
32
|
+
> ✅ 直接用;⚠️ 思路可用、形状要按项目重写;❌ 不适用。
|
|
33
|
+
|
|
34
|
+
## 1. Page(页面)· 前端专用
|
|
14
35
|
|
|
15
36
|
- **职责**:组合根;路由入口;只做编排、布局、状态展示;不承载业务规则。
|
|
16
|
-
- **形状**:`pages/<domain>/index.
|
|
17
|
-
- **命名**:目录 kebab-case
|
|
37
|
+
- **形状**:`pages/<domain>/index.html` + `index.ts`(原生);`index.vue`(Vue);`index.tsx`(React)。页面级类 `page-*`;页面骨架固定为顶栏 / 内容 / 底栏 / 弹层四插槽(组件名按项目命名)。
|
|
38
|
+
- **命名**:目录 kebab-case;页面级类 `page-*`(标作用域,不做装饰);组件名原生用 kebab-case 自定义元素,Vue / React 用 PascalCase。
|
|
18
39
|
- **契约**:接收路由参数;调用 Behavior Layer(行为层);渲染 loading / empty / error / success;不直接 import api。
|
|
19
40
|
- **状态与错误**:页面状态由 Behavior Layer 提供;页面只持有纯 UI 状态(弹窗、tab);错误必须可见。
|
|
20
41
|
- **测试**:集成 / 视觉回归;纯 UI 不写单元测试。
|
|
@@ -22,22 +43,22 @@
|
|
|
22
43
|
- **反例**:页面直接 import api;页面里写请求与转换;多个互斥布尔。
|
|
23
44
|
- **验收**:lint「pages 不 import `@/api`」;路由 / 页面清单;视觉回归。
|
|
24
45
|
|
|
25
|
-
## 2. Behavior Layer
|
|
46
|
+
## 2. Behavior Layer(行为层)· 前端为主
|
|
26
47
|
|
|
27
48
|
- **职责**:页面无关的行为;状态转移、校验、编排;不放 UI、不放平台细节。
|
|
28
|
-
-
|
|
29
|
-
- **命名**:`
|
|
49
|
+
- **形状**:默认 `behavior/<domain>/<verb>.ts`(纯 TS,不依赖框架);需要框架绑定时再加薄适配 `useXxx.ts`(Vue composable / React hook)。
|
|
50
|
+
- **命名**:`xxxCore` / `xxxBehavior` 核心;`useXxx` 适配器;一个文件一个动词;同族一种前缀。
|
|
30
51
|
- **契约**:入参 / 选项明确;返回状态 + 动作;不藏模块级单例;core 不 import 框架。
|
|
31
|
-
-
|
|
52
|
+
- **状态与错误**:状态用联合类型;派生用纯函数(Vue `computed` / React selector);预期失败用 Result / 域变体。
|
|
32
53
|
- **测试**:core 属性测试;适配器集成测试。
|
|
33
|
-
- **正例**:`
|
|
34
|
-
-
|
|
35
|
-
- **验收**:依赖规则「behavior core 不 import vue / react
|
|
54
|
+
- **正例**:`listBehavior` + `useList`(适配层);`refreshList(state, fetchPage)`。
|
|
55
|
+
- **反例**:适配层直接 toast / 跳转;模块级可变状态;为一次性页面逻辑硬抽 composable。
|
|
56
|
+
- **验收**:依赖规则「behavior core 不 import vue / react 或其它框架运行时」;状态转移测试;`any` lint。
|
|
36
57
|
|
|
37
58
|
## 3. Transport(传输层)
|
|
38
59
|
|
|
39
60
|
- **职责**:网络、HTTP、取消;原样透传;不解释业务 code。401 / 日志是可选环节;外部契约转换在 Wrapper(包装层)。
|
|
40
|
-
- **形状**:`api/` 或 `request/`;`adapter/` / `interceptors/` / `modules
|
|
61
|
+
- **形状**:`api/` 或 `request/`;`adapter/` / `interceptors/` / `modules/`;默认用原生 `fetch` + `AbortController`,框架封装只作可选实现;`pending/` / `console/` 是可选环节,不是必须目录。
|
|
41
62
|
- **命名**:API 文件 snake_case 且与 URL 同名;一 URL 一文件。新代码推荐 `api/<domain>/<action>.ts` + `fetchXxx` / `getXxx`;旧项目可保留 `api_` 前缀(防重名、可搜索、标层);同族不要混用。
|
|
42
63
|
- **契约**:返回 raw response 或传输层结果;不产出域类型;错误只做传输层归一。
|
|
43
64
|
- **状态与错误**:无 UI 状态;401 单一收口;超时 / 取消 / 网络错误;不弹业务 toast。
|
|
@@ -99,12 +120,12 @@
|
|
|
99
120
|
- **反例**:`utils` 包;工具包 import 应用;包内混入业务页面。
|
|
100
121
|
- **验收**:`boundaries`;包 build / test;`exports` 检查;兼容矩阵。
|
|
101
122
|
|
|
102
|
-
## 7. Component
|
|
123
|
+
## 7. Component(组件)· 前端专用
|
|
103
124
|
|
|
104
125
|
- **职责**:UI 展示与交互;只消费 props / emit;不取数、不放业务规则;可复用、可组合。
|
|
105
|
-
-
|
|
106
|
-
-
|
|
107
|
-
- **契约**:props
|
|
126
|
+
- **形状**:`components/<Name>/index.html` + `index.css`(+ 可选 `index.ts`);Vue `index.vue`;React `index.tsx`;全局原语放 `app-ui/`;页面私有组件放页面目录。
|
|
127
|
+
- **命名**:原生自定义元素 kebab-case;Vue / React 组件 PascalCase;`app-` 用于全局原语;角色后缀 `XxxCard / XxxList / XxxForm / XxxModal / XxxPage`;类型 `XxxProps / XxxEmits`(Vue / React)。
|
|
128
|
+
- **契约**:attributes / properties 下行、`CustomEvent` 上行(Vue / React 对应 props / emit);不 import api / behavior;不读业务 store(仅全局身份 / 权限例外);样式 scoped / BEM;可访问性(键盘 / ARIA / 对比度)。
|
|
108
129
|
- **状态与错误**:只持有纯 UI 状态(open / hover / focus);loading / empty / error 由 props 传入;不吞错。
|
|
109
130
|
- **测试**:示例页 / Storybook;交互测试;视觉回归;a11y。
|
|
110
131
|
- **正例**:页面骨架组件、`XxxCard`、`XxxGrid`。
|
|
@@ -114,12 +135,12 @@
|
|
|
114
135
|
## 8. State(状态)
|
|
115
136
|
|
|
116
137
|
- **职责**:领域状态建模;状态是数据,不是布尔堆;转移通过事件 / 动作。
|
|
117
|
-
-
|
|
138
|
+
- **形状**:默认纯 TS:`types/<domain>` 的联合类型 + `behavior/<domain>/core.ts` 的 reducer / state machine;store 只存数据 + setter,框架只做订阅与派生。
|
|
118
139
|
- **命名**:`XxxState` / `XxxStatus` / `XxxEvent` / `XxxAction`;通用 `AsyncState / ListState` 放 `types/common`。
|
|
119
|
-
- **契约**:状态用联合类型;非法状态不可表示;`success` 有 data,`error` 有 error
|
|
140
|
+
- **契约**:状态用联合类型;非法状态不可表示;`success` 有 data,`error` 有 error;派生用纯函数(Vue `computed` / React selector)。
|
|
120
141
|
- **错误**:错误分类;预期失败用 Result / 域变体;空 catch 为零。
|
|
121
142
|
- **测试**:状态转移表 / 属性测试;关键流程。
|
|
122
|
-
- **正例**:`
|
|
143
|
+
- **正例**:`listBehavior` 的 status;auth machine;form state。
|
|
123
144
|
- **反例**:`loading / error / data` 三个布尔;store 放请求逻辑;派生状态另存一份。
|
|
124
145
|
- **验收**:`assertNever`;`satisfies Record<Union, T>`;状态转移测试。
|
|
125
146
|
|
|
@@ -150,7 +171,7 @@
|
|
|
150
171
|
## 11. Test(测试)
|
|
151
172
|
|
|
152
173
|
- **职责**:保护契约与关键路径;不是追覆盖率。
|
|
153
|
-
- **形状**:`tests/` 或 `__tests__/`;fixture 单独;命名 `<unit>.test.ts
|
|
174
|
+
- **形状**:`tests/` 或 `__tests__/`;fixture 单独;命名 `<unit>.test.ts`;默认 `node:test`,组件交互 / 视觉测试再按项目选工具。
|
|
154
175
|
- **命名**:`describe('<unit> · <behavior>')`、`it('does X when Y')`;中英文随项目,保持一致。
|
|
155
176
|
- **契约**:
|
|
156
177
|
- Pure core → 属性测试 / 单元测试;
|
|
@@ -166,4 +187,6 @@
|
|
|
166
187
|
|
|
167
188
|
## 12. 扩展位
|
|
168
189
|
|
|
169
|
-
|
|
190
|
+
当前收录的框架示例:Vue 3、React;其它框架不预建目录与示例,先在这里登记。
|
|
191
|
+
|
|
192
|
+
登记时补四项:入口形状、状态派生方式、组件契约(props / events)、测试工具。
|
package/docs/02-ai-contract.md
CHANGED
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
> 2026-10-27 · v1 稳定版。
|
|
4
4
|
> 用途:所有模型 / agent 生成或修改代码前先读;与《代码宪法 v1》《代码族卡 v1》配套。
|
|
5
|
+
> 范围:JS/TS 项目,默认前端。示例原生优先(TS / Web API),框架只给 Vue 3 / React;Node 后端只套用结构与安全规则,Page / Component 等前端族不适用。
|
|
5
6
|
> 术语:English(中文)。
|
|
6
7
|
|
|
7
8
|
## 1. 先读
|
|
8
9
|
|
|
9
|
-
1.
|
|
10
|
-
2.
|
|
11
|
-
3.
|
|
12
|
-
4.
|
|
13
|
-
5.
|
|
10
|
+
1. 项目覆盖:`AGENTS.md` / `rules/` / `README`
|
|
11
|
+
2. 《代码宪法 v1》
|
|
12
|
+
3. 设计或评审架构:`06-architecture.md`(档位 / 七步法 / 边界 / ADR)
|
|
13
|
+
4. 只读相关《代码族卡 v1》(前端项目才读 Page / Component)
|
|
14
|
+
5. 需要选型时:`05-patterns.md`(按力选,不按名字选)
|
|
14
15
|
6. 相关契约 / 类型 / 测试 / 示例
|
|
15
16
|
|
|
16
17
|
## 2. 禁止
|
|
@@ -57,7 +58,7 @@
|
|
|
57
58
|
|
|
58
59
|
## 6. Review Checklist(评审清单)
|
|
59
60
|
|
|
60
|
-
- [ ] 族形正确(Page / Behavior / Transport)
|
|
61
|
+
- [ ] 族形正确(Page / Behavior / Transport;Node 后端跳过 Page / Component)
|
|
61
62
|
- [ ] 依赖向内
|
|
62
63
|
- [ ] 状态穷尽
|
|
63
64
|
- [ ] 错误可见
|