code-copilot 1.0.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.
@@ -0,0 +1,67 @@
1
+ # Spec Compliance Reviewer
2
+
3
+ 专职验证代码实现是否符合 spec 规格。**只读不写**,独立于实现者的上下文。
4
+
5
+ ## 核心理念
6
+
7
+ **不信报告,只信代码** — reviewer 必须读取实际代码独立验证,不能仅凭实现者的报告下结论。
8
+
9
+ ## 身份
10
+
11
+ 你是一个严格的 Spec 合规审查员。你的唯一职责是比对 spec 与代码,找出偏差。
12
+
13
+ ## 审查流程
14
+
15
+ 1. 读取 `changes/<变更名>/spec.md`,理解每个功能点的预期行为
16
+ 2. 读取 `changes/<变更名>/tasks.md`,了解任务拆分和涉及文件
17
+ 3. **逐个读取涉及的代码文件**,用 Grep/Read 工具验证实际实现
18
+ 4. 逐条比对 spec 功能点与实际代码
19
+ 5. 输出审查报告
20
+
21
+ ## 审查维度
22
+
23
+ | 维度 | 检查内容 | 严重程度 |
24
+ |------|---------|---------|
25
+ | **缺失实现** | spec 要求了但代码没做 | ❌ FAIL |
26
+ | **多余实现** | spec 没要求但代码多做了(YAGNI 违规) | ⚠️ WARN |
27
+ | **理解偏差** | 做了但做错了方向 | ❌ FAIL |
28
+ | **业务规则落地** | spec 中的业务规则是否全部体现在代码中 | ❌ FAIL |
29
+ | **数据变更准确性** | spec 中的表/字段变更是否准确落地 | ❌ FAIL |
30
+
31
+ ## 输出格式
32
+
33
+ ```markdown
34
+ # Spec Compliance Review — <变更名>
35
+
36
+ ## 功能点逐条验证
37
+
38
+ ### 功能 1: <功能名>
39
+ - **Spec 要求**: (简述 spec 中的预期)
40
+ - **代码实现**: (简述实际代码做了什么)
41
+ - **文件出处**: `path/to/File.java:L行号`
42
+ - **结论**: ✅ 合规 / ❌ 不合规(原因)/ ⚠️ 有偏差(说明)
43
+
44
+ ### 功能 2: <功能名>
45
+ (同上格式)
46
+
47
+ ## 总结
48
+
49
+ - ✅ 合规: N 个
50
+ - ❌ 不合规: N 个
51
+ - ⚠️ 偏差: N 个
52
+
53
+ ## 最终结论
54
+
55
+ **✅ Spec 合规** / **❌ 不合规**(附具体问题和修复建议)
56
+ ```
57
+
58
+ ## 工具权限
59
+
60
+ 仅需 Read / Grep / Glob / Bash(只读),**不需要写入权限**。
61
+
62
+ ## 约束
63
+
64
+ - 不评价代码质量(那是 code-quality-reviewer 的职责)
65
+ - 不提出改进建议(只判断是否符合 spec)
66
+ - 不修改任何文件
67
+ - 如果 spec 本身有歧义或矛盾,标记出来但不自行解释
@@ -0,0 +1,31 @@
1
+ # 知识索引
2
+
3
+ > 领域知识的轻量索引。每条用一句话说清核心逻辑。
4
+ > 格式:`- **触发关键词**: 一句话核心逻辑 → 包名.类名.方法名`(可选)
5
+ >
6
+ > 这个文件是知识飞轮的输出。通过 `/archive` 从变更日志中沉淀而来。
7
+ > AI 在工作时会根据当前任务的关键词搜索此索引,加载相关知识。
8
+
9
+ ---
10
+
11
+ ## 业务知识
12
+
13
+ > 与业务领域相关的核心逻辑和规则。
14
+
15
+ - (待补充)
16
+
17
+ ---
18
+
19
+ ## 技术约定
20
+
21
+ > 项目中非标准但重要的技术约定和最佳实践。
22
+
23
+ - (待补充)
24
+
25
+ ---
26
+
27
+ ## 踩坑记录
28
+
29
+ > 容易踩的坑、已知的坑、及解决方案。
30
+
31
+ - (待补充)
@@ -0,0 +1,48 @@
1
+ ---
2
+ alwaysApply: true
3
+ ---
4
+
5
+ # 编码规范
6
+
7
+ ## 1. 命名
8
+
9
+ - 类名:大驼峰(PascalCase),见名知意
10
+ - 方法名:小驼峰(camelCase),动词开头
11
+ - 常量:全大写下划线分隔(UPPER_SNAKE_CASE)
12
+ - 抽象类以 `Abstract` 或 `Base` 开头
13
+ - 测试类以被测类名开头,`Test` 结尾
14
+ - 禁止拼音、中英混拼命名
15
+
16
+ ## 2. 异常处理
17
+
18
+ - 业务异常使用自定义 `BizException`,携带错误码
19
+ - 系统异常向上抛出,由统一异常处理器兜底
20
+ - **禁止吞掉异常**(空 catch 块)
21
+ - catch 中必须记录日志
22
+ - 异常信息必须包含上下文(关键参数值、操作目标)
23
+
24
+ ## 3. 日志
25
+
26
+ - Controller 入口打 INFO,含请求关键参数
27
+ - Service 关键业务节点打 INFO
28
+ - 异常打 ERROR,含完整堆栈
29
+ - **禁止在日志中打印用户敏感信息**(手机号、身份证、银行卡等)
30
+
31
+ ## 4. 接口设计
32
+
33
+ - 写接口必须考虑幂等
34
+ - 涉及并发场景必须说明同步策略(加锁/乐观锁/队列)
35
+ - 入参必须有校验(`@Valid` / 手动校验)
36
+ - 返回值必须包装(统一响应格式)
37
+
38
+ ## 5. 代码质量
39
+
40
+ - 魔法值必须定义为常量
41
+ - 单个方法不超过 80 行(超长需拆分并说明原因)
42
+ - 单个类不超过 500 行
43
+ - 圈复杂度不超过 10
44
+ - 嵌套层级不超过 4 层
45
+
46
+ ## 6. 项目特定规范
47
+
48
+ > 在实践中补充项目特有的编码约定。
@@ -0,0 +1,30 @@
1
+ ---
2
+ alwaysApply: false
3
+ description: "当涉及业务领域特定逻辑时应用本规则"
4
+ ---
5
+
6
+ # 业务领域约束
7
+
8
+ ## 1. 通用领域规则
9
+
10
+ - 所有金额使用 `long` 类型,单位为**分**(避免浮点精度问题)
11
+ - 时间字段统一使用项目标准时间类型
12
+ - 外部接口调用必须设置超时(默认 3s)并做降级处理
13
+ - 状态变更必须通过状态机,禁止直接 set 状态字段
14
+ - 分布式操作必须考虑幂等性和顺序性
15
+ - 配置变更必须有灰度机制,禁止全量生效
16
+
17
+ ## 2. 项目特定规则
18
+
19
+ > 在实践中补充项目特有的业务规则。
20
+ > 格式:`- **场景**: 规则描述 → 涉及的类/方法`
21
+
22
+ - (待补充)
23
+
24
+ ## 3. 领域术语表
25
+
26
+ > 项目中的业务术语定义,避免歧义。
27
+
28
+ | 术语 | 定义 | 备注 |
29
+ |------|------|------|
30
+ | (待填充) | | |
@@ -0,0 +1,59 @@
1
+ ---
2
+ alwaysApply: true
3
+ ---
4
+
5
+ # 工程上下文
6
+
7
+ > 首次使用时执行 `/init` 让 AI 分析工程并填充本文件。
8
+ > 填充后,AI 在每次会话中都会参考这些信息来理解项目结构。
9
+
10
+ ## 1. 应用概况
11
+
12
+ - **应用名**: (待填充)
13
+ - **简介**: (一句话描述这个应用做什么)
14
+ - **技术栈**: (待填充,如 Java 21 / Spring Boot 3.x / ...)
15
+ - **构建工具**: (待填充,如 Maven / Gradle / npm / pnpm)
16
+ - **包名/模块名**: (待填充)
17
+
18
+ ## 2. 目录结构与模块职责
19
+
20
+ > 执行目录扫描后填充。按模块/包列出各目录的职责。
21
+
22
+ ```
23
+ (待填充)
24
+ ```
25
+
26
+ ## 3. 分层架构
27
+
28
+ > 根据项目实际分层模式填充。以下是常见的 Java 后端分层,仅供参考。
29
+
30
+ ```
31
+ Controller (入口层) ← 参数校验 + 协议转换
32
+
33
+ Service (业务编排层) ← 业务逻辑 + 事务边界
34
+
35
+ Manager (领域能力层) ← 单一职责 + 可复用
36
+
37
+ DAO (数据访问层) ← 纯数据访问
38
+ ```
39
+
40
+ **项目实际分层**: (待填充)
41
+
42
+ ## 4. 关键依赖
43
+
44
+ | 中间件/依赖 | 用途 | 备注 |
45
+ |------------|------|------|
46
+ | (待填充) | | |
47
+ | (待填充) | | |
48
+
49
+ ## 5. 核心配置
50
+
51
+ | 配置项 | 位置 | 说明 |
52
+ |--------|------|------|
53
+ | (待填充) | | |
54
+
55
+ ## 6. 特殊约定
56
+
57
+ > 项目中非标准但重要的约定,如特殊的包命名规则、特殊的异常处理方式等。
58
+
59
+ - (待填充)
@@ -0,0 +1,37 @@
1
+ ---
2
+ alwaysApply: true
3
+ ---
4
+
5
+ # 安全红线
6
+
7
+ ## 1. 代码安全
8
+
9
+ - ❌ **禁止**在代码中硬编码密钥、AK/SK、数据库密码
10
+ - ❌ **禁止**提交包含用户个人信息的测试数据
11
+ - ❌ **禁止**在日志中打印手机号、身份证、银行卡等敏感信息
12
+ - ❌ **禁止**使用已知的废弃/不安全算法(如 MD5 做密码哈希)
13
+
14
+ ## 2. 业务安全
15
+
16
+ - ⚠️ 涉及**资金变更**的逻辑,必须在 spec 中明确标注,人工审查后方可编码
17
+ - ⚠️ 涉及**状态流转**的逻辑,必须检查状态机合法性
18
+ - ⚠️ 涉及**权限变更**的逻辑,必须显式校验操作人权限
19
+ - ⚠️ 涉及**批量数据操作**的逻辑,必须考虑性能影响和数据一致性
20
+
21
+ ## 3. 接口安全
22
+
23
+ - 外部接口必须做参数校验,不信任任何外部输入
24
+ - 涉及鉴权的接口必须有明确的权限标识
25
+ - 文件上传必须校验文件类型、大小
26
+ - SQL 必须使用参数化查询,禁止字符串拼接
27
+
28
+ ## 4. 数据安全
29
+
30
+ - 敏感数据存储必须加密
31
+ - 数据库查询必须有合理的索引支撑,防止慢查询
32
+ - 批量操作必须考虑事务边界和回滚策略
33
+ - 删除操作优先使用逻辑删除(软删除)
34
+
35
+ ## 5. 项目特定安全规则
36
+
37
+ > 在实践中补充项目特有的安全约束。
@@ -0,0 +1,51 @@
1
+ # 变更日志 — $CHANGE_NAME
2
+
3
+ > 记录决策、踩坑和知识发现。知识飞轮的输入。
4
+
5
+ ---
6
+
7
+ ## 时间线
8
+
9
+ | 时间 | 阶段 | 事件 | 备注 |
10
+ |------|------|------|------|
11
+ | (待填充) | | | |
12
+
13
+ ---
14
+
15
+ ## 技术决策
16
+
17
+ | 决策 | 选择 | 放弃的方案 | 原因 |
18
+ |------|------|-----------|------|
19
+ | (待填充) | | | |
20
+
21
+ ---
22
+
23
+ ## 踩坑记录
24
+
25
+ | 问题 | 原因 | 解决方案 | 沉淀? |
26
+ |------|------|---------|--------|
27
+ | (待填充) | | | ☐ |
28
+
29
+ ---
30
+
31
+ ## 知识发现
32
+
33
+ > 每个 task 后实时记录,`/archive` 时逐条确认沉淀到 `knowledge/`
34
+
35
+ - [ ] **关键词**: (描述这个发现) → `包名.类名.方法名`(可选)
36
+
37
+ ---
38
+
39
+ ## Spec-Code 偏差记录
40
+
41
+ | 偏差点 | Spec 预期 | 实际情况 | 处理方式 |
42
+ |--------|----------|---------|---------|
43
+ | (待填充) | | | |
44
+
45
+ ---
46
+
47
+ ## 代码质量备忘
48
+
49
+ > 记录执行过程中发现但未在 review 中体现的代码质量问题。
50
+
51
+ - (待填充)
@@ -0,0 +1,140 @@
1
+ # Spec — $CHANGE_NAME
2
+
3
+ > status: propose | confirmed | apply | review | done
4
+ > created: $DATE
5
+ > complexity: 🟢简单 | 🟡中等 | 🔴复杂
6
+
7
+ ---
8
+
9
+ ## 1. 背景与目标
10
+
11
+ **为什么做**:
12
+ (描述需求来源、业务驱动、当前痛点)
13
+
14
+ **做完后的效果**:
15
+ (可验证的结果描述,如"用户可以在设置页开启/关闭消息推送,开关实时生效")
16
+
17
+ ---
18
+
19
+ ## 2. 代码现状(Research Findings)
20
+
21
+ > 每个结论必须有代码出处(文件路径 + 类名/方法名)
22
+
23
+ ### 2.1 相关入口与链路
24
+
25
+ - 入口:`path/to/Controller.java` → `ClassName.methodName()`
26
+ - (待填充)
27
+
28
+ ### 2.2 现有实现
29
+
30
+ - (描述与本次变更相关的现有代码逻辑)
31
+ - (每个描述必须有出处:`path/to/File.java:L行号`)
32
+
33
+ ### 2.3 发现与风险
34
+
35
+ - (代码侦察中发现的问题、潜在风险)
36
+ - (待填充)
37
+
38
+ ---
39
+
40
+ ## 3. 功能点
41
+
42
+ - [ ] **功能 1**:(输入→处理→输出)
43
+ - [ ] **功能 2**:(输入→处理→输出)
44
+ - (按需添加)
45
+
46
+ ---
47
+
48
+ ## 4. 业务规则
49
+
50
+ | # | 规则描述 | 触发条件 | 备注 |
51
+ |---|---------|---------|------|
52
+ | 1 | (待填充) | | |
53
+
54
+ ---
55
+
56
+ ## 5. 数据变更
57
+
58
+ | 操作 | 表名 | 字段/索引 | 说明 |
59
+ |------|------|----------|------|
60
+ | (待填充) | | | |
61
+
62
+ ---
63
+
64
+ ## 6. 接口变更
65
+
66
+ | 操作 | 接口 | 方法 | 变更内容 |
67
+ |------|------|------|---------|
68
+ | (待填充) | | | |
69
+
70
+ ---
71
+
72
+ ## 7. 影响范围
73
+
74
+ - **直接影响**:(哪些模块/服务会受到影响)
75
+ - **间接影响**:(下游调用方、依赖方)
76
+ - **不涉及**:(明确排除的范围)
77
+
78
+ ---
79
+
80
+ ## 8. 风险与关注点
81
+
82
+ > ⚠️ 涉及资金/状态流转/权限变更必须标注
83
+
84
+ | # | 风险描述 | 影响等级 | 缓解措施 |
85
+ |---|---------|---------|---------|
86
+ | (待填充) | | 🟢/🟡/🔴 | |
87
+
88
+ ---
89
+
90
+ ## 8.5 测试策略
91
+
92
+ - **测试范围**:(哪些模块需要测试)
93
+ - **覆盖率目标**:(核心逻辑 100%?新增代码 80%+?)
94
+ - **独立 Test Spec**:是/否
95
+
96
+ ---
97
+
98
+ ## 9. 待澄清
99
+
100
+ > 全部解决后才能进入 `/apply`
101
+
102
+ - [ ] 问题 1:(待回答)
103
+ - (按需添加)
104
+
105
+ ---
106
+
107
+ ## 10. 技术决策
108
+
109
+ | 决策点 | 选择 | 放弃的方案 | 原因 |
110
+ |--------|------|-----------|------|
111
+ | (待填充) | | | |
112
+
113
+ ---
114
+
115
+ ## 11. 执行日志
116
+
117
+ > 由 `/apply` 阶段自动填充
118
+
119
+ | Task | 状态 | 实际改动文件 | 备注 |
120
+ |------|------|------------|------|
121
+ | (待填充) | | | |
122
+
123
+ ---
124
+
125
+ ## 12. 审查结论
126
+
127
+ > 由 `/review` 阶段自动填充
128
+
129
+ **Spec Compliance**: PASS / FAIL
130
+ **Code Quality**: PASS / FAIL
131
+
132
+ (待填充具体结论)
133
+
134
+ ---
135
+
136
+ ## 13. 确认记录(HARD-GATE)
137
+
138
+ - **确认时间**: (待填充)
139
+ - **确认人**: (待填充)
140
+ - **确认内容**: spec.md + tasks.md 全部内容已审查并确认
@@ -0,0 +1,58 @@
1
+ # 任务拆分 — $CHANGE_NAME
2
+
3
+ > 拆分原则:
4
+ > - 顺序:数据模型 → 接口协议 → 底层实现 → 上层编排 → 入口层
5
+ > - 每个任务 = 可独立提交的原子变更(3-5 个文件)
6
+ > - 每个任务必须精确到文件路径和函数签名
7
+
8
+ ---
9
+
10
+ ## 前置条件
11
+
12
+ - [ ] spec.md 已确认(HARD-GATE 通过)
13
+ - [ ] (其他前置条件,如依赖的二方包是否就绪)
14
+
15
+ ---
16
+
17
+ ## Task 1: $TASK_NAME
18
+
19
+ - **目标**: (一句话描述这个任务完成什么)
20
+ - **涉及文件**:
21
+ - `path/to/File1.java` — 新增/修改,(做什么)
22
+ - `path/to/File2.java` — 新增/修改,(做什么)
23
+ - **关键签名**:
24
+
25
+ ```
26
+ (关键方法签名)
27
+ ```
28
+
29
+ - **依赖**: 无 / Task N
30
+ - **验收标准**: (怎样算完成)
31
+
32
+ ---
33
+
34
+ ## Task 2: $TASK_NAME
35
+
36
+ (同上格式)
37
+
38
+ ---
39
+
40
+ ## Task 3: $TASK_NAME
41
+
42
+ (同上格式)
43
+
44
+ ---
45
+
46
+ (按需添加更多 Task)
47
+
48
+ ---
49
+
50
+ ## 变更摘要
51
+
52
+ > `/apply` 全部完成后填写
53
+
54
+ - **总文件数**: (待填充)
55
+ - **新增文件**: (待填充)
56
+ - **修改文件**: (待填充)
57
+ - **Spec-Plan 偏差记录**: (如有偏差,记录在 log.md 中)
58
+ - **遗留问题**: (待填充)
@@ -0,0 +1,62 @@
1
+ # 单测 Spec — $CHANGE_NAME
2
+
3
+ > status: propose | apply | done
4
+ > created: $DATE
5
+
6
+ ---
7
+
8
+ ## 0. 测试原则
9
+
10
+ - **Red/Green TDD**:测试必须先 Red 再 Green,跳过 Red 的测试无法证明有效
11
+ - **First Run the Tests**:开始前先跑已有测试套件,了解框架和基线
12
+ - **展示工作**:必须展示实际测试输出,禁止"测试通过"等无证据声明
13
+
14
+ ---
15
+
16
+ ## 1. 测试框架
17
+
18
+ | 项目 | 值 |
19
+ |------|-----|
20
+ | 测试框架 | (JUnit 5 / pytest / Jest / ...) |
21
+ | Mock 框架 | (Mockito / unittest.mock / ...) |
22
+ | 已有测试数量 | (待填充) |
23
+ | 已有测试风格 | (待填充) |
24
+
25
+ ---
26
+
27
+ ## 2. 覆盖范围
28
+
29
+ ### P0 — 核心业务逻辑(必须覆盖)
30
+
31
+ #### 类名: $ClassName
32
+
33
+ | 方法 | 场景 | 输入 | Mock 行为 | 预期结果 |
34
+ |------|------|------|-----------|---------|
35
+ | (待填充) | | | | |
36
+
37
+ ### P1 — 数据访问层
38
+
39
+ | 方法 | 场景 | 输入 | Mock 行为 | 预期结果 |
40
+ |------|------|------|-----------|---------|
41
+ | (待填充) | | | | |
42
+
43
+ ### P2 — 入口层/服务层
44
+
45
+ | 方法 | 场景 | 输入 | Mock 行为 | 预期结果 |
46
+ |------|------|------|-----------|---------|
47
+ | (待填充) | | | | |
48
+
49
+ ### 不测试(明确列出原因)
50
+
51
+ | 类/方法 | 原因 |
52
+ |--------|------|
53
+ | (待填充) | |
54
+
55
+ ---
56
+
57
+ ## 3. 执行计划
58
+
59
+ - [ ] **Step 1**: 运行已有测试套件,确认基线
60
+ - [ ] **Step 2**: 生成 P0 测试 → 确认 Red → 确认 Green
61
+ - [ ] **Step 3**: 生成 P1/P2 测试
62
+ - [ ] **Step 4**: 运行完整测试套件,确认覆盖率
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "code-copilot",
3
+ "version": "1.0.0",
4
+ "description": "Progressive Spec Coding Framework — cross-platform AI coding collaboration",
5
+ "bin": {
6
+ "code-copilot": "bin/cli.js"
7
+ },
8
+ "files": [
9
+ "bin/",
10
+ "AGENTS.md",
11
+ "core/",
12
+ "adapters/"
13
+ ],
14
+ "keywords": [
15
+ "ai-coding",
16
+ "spec-driven",
17
+ "claude-code",
18
+ "cursor",
19
+ "cline",
20
+ "coding-framework",
21
+ "progressive-spec"
22
+ ],
23
+ "license": "MIT",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "https://github.com/lawushanshan/code-copilot.git"
27
+ }
28
+ }