jsharness 1.6.0 → 1.8.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.
Files changed (31) hide show
  1. package/.harness/agents/code-reviewer.md +81 -0
  2. package/.harness/agents/developer.md +101 -0
  3. package/.harness/agents/gate-controller.md +77 -0
  4. package/.harness/agents/project-manager.md +77 -0
  5. package/.harness/agents/requirements-analyst.md +90 -0
  6. package/.harness/agents/solution-designer.md +86 -0
  7. package/.harness/agents/tester.md +105 -0
  8. package/.harness/commands/js/build-gates-frontend.md +33 -0
  9. package/.harness/commands/js/build-gates-java.md +33 -0
  10. package/.harness/commands/js/build-gates.md +32 -0
  11. package/.harness/commands/js/engineering-consistency.md +29 -0
  12. package/.harness/commands/js/security-quality.md +27 -0
  13. package/.harness/commands/js/static-compliance.md +35 -0
  14. package/.harness/commands/js/task-board-maintenance.md +68 -0
  15. package/.harness/commands/js/test-compliance.md +30 -0
  16. package/.harness/skills/task-board-maintenance/SKILL.md +7 -3
  17. package/bin/jsharness.js +9 -5
  18. package/files/AI_RULE.md +185 -0
  19. package/files/architecture-designer.md +1334 -0
  20. package/files/frontend-project-conventions/SKILL.md +125 -0
  21. package/files/java-backend-coding-standards/SKILL.md +536 -0
  22. package/files//345/205/254/345/217/270harness.txt +1818 -0
  23. package/lib/index.mjs +655 -99
  24. package/package.json +63 -54
  25. package/.harness/agents/code-reviewer/contract.yaml +0 -64
  26. package/.harness/agents/developer/contract.yaml +0 -72
  27. package/.harness/agents/gate-controller/contract.yaml +0 -64
  28. package/.harness/agents/project-manager/contract.yaml +0 -77
  29. package/.harness/agents/requirements-analyst/contract.yaml +0 -64
  30. package/.harness/agents/solution-designer/contract.yaml +0 -131
  31. package/.harness/agents/tester/contract.yaml +0 -92
@@ -0,0 +1,32 @@
1
+ ---
2
+ name: build-gates
3
+ description: 构建门槛检查 — 自动检测项目类型并分发到对应的门禁检查模块
4
+ ---
5
+
6
+ # 构建门槛检查 (Build Gates)
7
+
8
+ > **源文件**: `.harness/gate/checks/build-gates.js`
9
+ > **类别**: B 类 — 构建门槛
10
+
11
+ 自动检测项目类型并分发到对应的门禁检查模块:
12
+ - 检测到 `pom.xml` → 调用 build-gates-java.js (Maven/Java)
13
+ - 检测到 `package.json` → 调用 build-gates-frontend.js (Node/前端)
14
+ - 都没有 → 返回 warning
15
+
16
+ ## 检查项
17
+
18
+ | 编号 | 检查项 | 说明 |
19
+ |------|--------|------|
20
+ | B1 | 项目类型检测 | 检测 pom.xml / package.json 确定项目类型 |
21
+ | B2 | 前端构建 | TypeScript 类型检查 + 依赖完整性 + npm run build + ESLint |
22
+ | B3 | Java 构建 | Maven 编译 + 单元测试 + Checkstyle + 依赖树分析 |
23
+
24
+ ## 通过条件
25
+
26
+ - 项目类型检测成功(Java 或 Frontend)
27
+ - 对应子模块的构建检查全部 PASS
28
+
29
+ ## 失败条件
30
+
31
+ - 无法检测项目类型 → WARNING
32
+ - 子模块构建失败 → FAIL
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: engineering-consistency
3
+ description: 工程一致性检查 — CHANGELOG 更新、dev-map 一致性、配置同步
4
+ ---
5
+
6
+ # 工程一致性检查 (Engineering Consistency)
7
+
8
+ > **源文件**: `.harness/gate/checks/engineering-consistency.js`
9
+ > **类别**: E 类 — 工程一致性
10
+
11
+ ## 检查项
12
+
13
+ | 编号 | 检查项 | 说明 |
14
+ |------|--------|------|
15
+ | E1 | CHANGELOG 更新检查 | 检查 Unreleased 区域是否有内容 |
16
+ | E2 | dev-map 一致性检查 | 检查 dev-map 与实际代码是否一致 |
17
+ | E3 | 配置同步检查 | 检查各配置文件是否同步 |
18
+
19
+ ## 通过条件
20
+
21
+ - CHANGELOG Unreleased 区域有内容
22
+ - dev-map 与代码一致
23
+ - 配置文件同步
24
+
25
+ ## 失败条件
26
+
27
+ - CHANGELOG 未更新 → WARNING
28
+ - dev-map 不一致 → WARNING
29
+ - 配置不同步 → WARNING
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: security-quality
3
+ description: 安全与质量检查 — CVE 依赖审计、Code Review Approval 状态
4
+ ---
5
+
6
+ # 安全与质量检查 (Security & Quality)
7
+
8
+ > **源文件**: `.harness/gate/checks/security-quality.js`
9
+ > **类别**: D 类 — 安全与质量
10
+
11
+ ## 检查项
12
+
13
+ | 编号 | 检查项 | 说明 |
14
+ |------|--------|------|
15
+ | D1 | npm audit 安全审计 | 检测 CVE 漏洞(HIGH/CRITICAL 级别) |
16
+ | D2 | Code Review Approval | 检查代码审查状态(通过 Git 信息判断) |
17
+
18
+ ## 通过条件
19
+
20
+ - 安全评分 ≥ 80 分
21
+ - 无 CRITICAL 级别 CVE 漏洞
22
+ - HIGH 级别漏洞有修复计划
23
+
24
+ ## 失败条件
25
+
26
+ - 存在 CRITICAL 级别漏洞 → FAIL
27
+ - 安全评分 < 60 分 → FAIL
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: static-compliance
3
+ description: 静态合规检查 — ESLint、Prettier、console.log 残留、硬编码字符串、Secret 泄露检测
4
+ ---
5
+
6
+ # 静态合规检查 (Static Compliance)
7
+
8
+ > **源文件**: `.harness/gate/checks/static-compliance.js`
9
+ > **类别**: A 类 — 静态合规
10
+
11
+ ## 检查项
12
+
13
+ | 编号 | 检查项 | 说明 |
14
+ |------|--------|------|
15
+ | A1 | ESLint 检查 | 零 error,零 warning |
16
+ | A2 | Prettier 格式化 | 格式化后无 diff 变更 |
17
+ | A3 | console.log / debugger 残留 | 禁止残留到生产代码 |
18
+ | A4 | 硬编码字符串检测 | 检测未国际化的中文字符串 |
19
+ | A5 | TODO/FIXME 残留 | 检测遗留的 TODO/FIXME |
20
+ | A6 | 命名规范检查 | 检查文件名/变量名是否符合规范 |
21
+ | A7 | 文件长度限制 | 单文件不超过 300 行 |
22
+ | A8 | Secret 泄露检测 | 检测硬编码的密钥/Token/密码 |
23
+
24
+ ## 通过条件
25
+
26
+ - ESLint 零错误
27
+ - Prettier 格式一致
28
+ - 无 console.log / debugger 残留
29
+ - 无 Secret 泄露
30
+
31
+ ## 失败条件
32
+
33
+ - ESLint 存在 error → FAIL
34
+ - Secret 泄露检测命中 → FAIL(安全红线)
35
+ - console.log / debugger 残留 → FAIL
@@ -0,0 +1,68 @@
1
+ ---
2
+ name: task-board-maintenance
3
+ description: TaskBoard 维护命令 — 任务注册/状态流转/周报生成/看板同步
4
+ alwaysApply: false
5
+ enabled: true
6
+ ---
7
+
8
+ # TaskBoard 维护 Command
9
+
10
+ > **执行角色**: PM Agent / 工作流引擎
11
+ > **触发时机**: 任务状态变更时、每日定时、周报生成前
12
+ > **源文件**: `.harness/skills/task-board-maintenance/SKILL.md` (已迁移为 command)
13
+
14
+ ---
15
+
16
+ ## 操作清单
17
+
18
+ ### 1. 新任务注册
19
+
20
+ 当 PM 收到新需求时:
21
+
22
+ - 分配 Task ID(格式:TASK-YYYYMMDD-NNN)
23
+ - 判断流程变体类型:
24
+ - 新功能 → 标准七阶段流程
25
+ - Bug 修复 → Bug 修复轻量流程
26
+ - P0/P1 生产问题 → 热修最快路径
27
+ - 文档/配置变更 → 微型流程
28
+ - 安全漏洞 → 安全响应流程
29
+ - 在「待开始任务」表添加一行
30
+ - 检查是否与历史任务重复
31
+ - 如有关联的 Issue/PR,填入对应编号
32
+ - 更新「新增需求」计数器
33
+
34
+ ### 2. 状态推进
35
+
36
+ 当一个阶段完成,需要推入下一阶段:
37
+
38
+ - 从当前区域移动目标任务到下一区域
39
+ - 更新「当前阶段」字段
40
+ - 更新「负责Agent」字段为下一个角色
41
+ - 更新「上次更新」为当前时间
42
+ - 在备注中记录简要原因
43
+ - 如果是打回,在「备注」中注明打回原因和来源角色
44
+
45
+ ### 3. 交付归档
46
+
47
+ 测试 PASS 后:
48
+
49
+ - 移动到「已完成」区域
50
+ - 填写「交付结论」(PASS / CONDITIONAL_PASS)
51
+ - 计算「实际周期」
52
+ - 填写「归档日期」
53
+ - 收集各阶段文档链接
54
+ - 更新度量指标
55
+
56
+ ### 4. 定期维护
57
+
58
+ **每日检查**(PM Agent 自动执行):
59
+ - 检查是否有超时未更新的任务(超过 48 小时)
60
+ - 检查是否有阻塞超过 24 小时的任务
61
+ - 更新「最后更新」时间戳
62
+
63
+ **每周清理**(PM Agent 手动执行):
64
+ - 清理已取消或合并的重复条目
65
+ - 确认已完成任务都已正确归档
66
+ - 生成周度度量报告
67
+ - 识别瓶颈阶段
68
+ - 汇总流程违规情况并提出改进建议
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: test-compliance
3
+ description: 测试合规检查 — 单元测试执行与覆盖率、E2E 测试、API 集成测试
4
+ ---
5
+
6
+ # 测试合规检查 (Test Compliance)
7
+
8
+ > **源文件**: `.harness/gate/checks/test-compliance.js`
9
+ > **类别**: C 类 — 测试合规
10
+
11
+ ## 检查项
12
+
13
+ | 编号 | 检查项 | 说明 |
14
+ |------|--------|------|
15
+ | C1 | 单元测试 | `npm run test -- --coverage` |
16
+ | C2 | E2E 关键路径测试 | 可选 |
17
+ | C3 | API 集成测试 | 可选 |
18
+ | C4 | 测试数量对比 | 基线模式,检测测试是否减少 |
19
+
20
+ ## 通过条件
21
+
22
+ - 单元测试全部 PASS
23
+ - 覆盖率不低于基线
24
+ - 测试数量未减少
25
+
26
+ ## 失败条件
27
+
28
+ - 单元测试失败 → FAIL
29
+ - 覆盖率低于基线 → WARNING
30
+ - 测试数量减少 → WARNING
@@ -1,11 +1,15 @@
1
1
  ---
2
2
  name: task-board-maintenance
3
- description: TaskBoard 维护技能任务注册/状态流转/周报生成/看板同步,PM Agent 专属操作清单
3
+ description: ⚠️ DEPRECATED已迁移为 command,请使用 .harness/commands/task-board-maintenance/COMMAND.md
4
4
  alwaysApply: false
5
- enabled: true
5
+ enabled: false
6
6
  ---
7
7
 
8
- # TaskBoard 维护 Skill
8
+ > **⚠️ DEPRECATED**: Skill 已迁移为 Command。
9
+ > 新位置: `.harness/commands/task-board-maintenance/COMMAND.md`
10
+ > 迁移日期: 2026-05-21
11
+
12
+ # TaskBoard 维护 Skill (已废弃)
9
13
 
10
14
  > **执行角色**: PM Agent / 工作流引擎
11
15
  > **触发时机**: 任务状态变更时、每日定时、周报生成前
package/bin/jsharness.js CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
 
3
3
  /**
4
4
  * jsharness CLI
@@ -8,7 +8,9 @@
8
8
  * npx jsharness init --tool codebuddy # 指定工具(跳过工具选择)
9
9
  * npx jsharness init --stack vue3 # 指定技术栈(跳过技术栈选择)
10
10
  * npx jsharness init --tool cursor --stack all # 全部指定,无交互
11
- * npx jsharness init --tool augment # 指定 Augment Code
11
+ * npx jsharness init --tool augment # 指定 Augment Code
12
+ * npx jsharness init --commands-only # 只注入命令桶
13
+ * npx jsharness init --subagents-only # 只注入角色桶
12
14
  * npx jsharness list-tools # 列出支持的工具
13
15
  * npx jsharness status # 查看当前状态
14
16
  * npx jsharness openspec list # 列出 OpenSpec 变更
@@ -45,11 +47,13 @@ program
45
47
 
46
48
  program
47
49
  .command('init')
48
- .description('初始化 Harness 到当前项目的 AI 工具中')
50
+ .description('初始化 Harness 到当前项目的 AI 工具中(四桶: Rules/Skills/Commands/Agents)')
49
51
  .option('-t, --tool <name>', '指定目标 AI 工具(跳过交互选择)')
50
52
  .option('-s, --stack <name>', '指定技术栈 vue3/java/all(跳过交互选择)')
51
- .option('--rules-only', '只注入规则,不注入技能')
52
- .option('--skills-only', '只注入技能,不注入规则')
53
+ .option('--rules-only', '只注入规则桶')
54
+ .option('--skills-only', '只注入技能桶')
55
+ .option('--commands-only', '只注入命令桶')
56
+ .option('--subagents-only', '只注入角色桶')
53
57
  .option('--force', '覆盖已有配置')
54
58
  .option('-v, --verbose', '显示详细输出')
55
59
  .action((opts) => runInit(process.cwd(), opts));
@@ -0,0 +1,185 @@
1
+ # AI 代码生成规范 (Rule)
2
+
3
+ ## 一、AI 生成基础约束
4
+
5
+ | 编号 | 规则描述 |
6
+ |------|----------|
7
+ | **Rule-A01** | AI 生成代码必须贴合项目 JDK 版本、SpringBoot/SpringCloud 指定版本,禁止自动引入高版本依赖 |
8
+ | **Rule-A02** | AI 补全优先沿用项目现有变量名、方法名、命名风格,禁止擅自修改业务标识符 |
9
+ | **Rule-A03** | AI 单次生成代码块长度控制在 80 行内,超长逻辑强制拆分方法 / 工具类 |
10
+ | **Rule-A04** | 禁止 AI 自动生成 shturl.cc/、shturl.cc/anUsxIa 调试代码,统一使用项目日志框架 |
11
+ | **Rule-A05** | AI 生成代码必须匹配项目缩进、空格、换行格式,统一 4 空格缩进,禁用 Tab |
12
+ | **Rule-A06** | AI 禁止默认省略异常捕获、参数校验,业务接口强制生成入参非空与合法性校验 |
13
+
14
+ ---
15
+
16
+ ## 二、依赖与引入规范
17
+
18
+ | 编号 | 规则描述 |
19
+ |------|----------|
20
+ | **Rule-A07** | AI 引入第三方组件 / 工具类,优先使用项目已引入依赖,禁止随意新增陌生 Maven 依赖 |
21
+ | **Rule-A08** | AI 生成工具方法优先复用项目 Common 工具类,禁止重复编写通用工具逻辑 |
22
+ | **Rule-A09** | AI 导入包遵循项目包导入排序规则,禁止杂乱导入、全量通配导入 |
23
+ | **Rule-A10** | AI 禁止自动引入废弃 API、过期类、已下线框架接口 |
24
+
25
+ ---
26
+
27
+ ## 三、业务代码生成
28
+
29
+ | 编号 | 规则描述 |
30
+ |------|----------|
31
+ | **Rule-A11** | AI 写 Controller 层只做参数接收、参数校验、结果封装,禁止编写业务逻辑 |
32
+ | **Rule-A12** | AI 写 Service 层专注业务逻辑编排,DAO / 数据查询下沉至 Mapper/Repository |
33
+ | **Rule-A13** | AI 生成数据库操作,强制使用 #{} 预编译,禁止直接拼接 SQL,杜绝注入风险 |
34
+ | **Rule-A14** | AI 生成集合逻辑,默认指定集合初始化容量,优先使用 isEmpty 判空 |
35
+ | **Rule-A15** | AI 循环逻辑禁止在循环内 new 对象、频繁创建连接,统一外部初始化 |
36
+ | **Rule-A16** | AI 生成枚举类禁止使用 ordinal 取值,强制自定义 code 与 desc 字段 |
37
+
38
+ ---
39
+
40
+ ## 四、并发 & 线程 & 资源
41
+
42
+ | 编号 | 规则描述 |
43
+ |------|----------|
44
+ | **Rule-A17** | AI 创建线程一律使用线程池,禁止直接 new Thread、Executors 快捷创建线程池 |
45
+ | **Rule-A18** | AI 涉及 IO 流、数据库连接、Redis 连接,强制生成 try-with-resources 自动关闭 |
46
+ | **Rule-A19** | AI 使用 ThreadLocal 必须配套生成 remove 清理逻辑,规避内存泄漏 |
47
+ | **Rule-A20** | AI 高并发逻辑禁止滥用 synchronized,优先推荐分布式锁 + JUC 并发工具 |
48
+
49
+ ---
50
+
51
+ ## 五、注释 & 文档
52
+
53
+ | 编号 | 规则描述 |
54
+ |------|----------|
55
+ | **Rule-A21** | AI 生成公共类、对外接口、核心业务方法自动补全标准 JavaDoc 注释 |
56
+ | **Rule-A22** | AI 复杂逻辑仅写关键逻辑注释,禁止堆砌无意义冗余注释 |
57
+ | **Rule-A23** | AI 生成 TODO 标记必须附带业务场景,禁止空 TODO 占位 |
58
+ | **Rule-A24** | AI 重构代码时同步更新旧注释,保证注释与代码逻辑一致 |
59
+
60
+ ---
61
+
62
+ ## 六、接口 & DTO & 实体
63
+
64
+ | 编号 | 规则描述 |
65
+ |------|----------|
66
+ | **Rule-A25** | AI 生成 POJO/DTO 所有属性私有,自动生成标准 get/set,禁止手写冗余方法 |
67
+ | **Rule-A26** | AI 生成接口返回值统一使用项目统一 Result 封装体,禁止直接返回原始数据 |
68
+ | **Rule-A27** | AI 分页查询强制生成分页参数、分页返回结构体,禁止手写零散分页逻辑 |
69
+ | **Rule-A28** | AI 时间字段统一使用 LocalDateTime/LocalDate,禁止默认使用 Date |
70
+
71
+ ---
72
+
73
+ ## 七、异常处理
74
+
75
+ | 编号 | 规则描述 |
76
+ |------|----------|
77
+ | **Rule-A29** | AI 捕获异常精准捕获业务异常,禁止一刀切捕获 Exception 顶级异常 |
78
+ | **Rule-A30** | AI 异常处理必须打印上下文参数日志,禁止空 catch 空逻辑 |
79
+ | **Rule-A31** | AI 抛异常优先使用项目自定义业务异常,禁止直接抛出原生 RuntimeException |
80
+
81
+ ---
82
+
83
+ ## 八、AI 重构 & 优化
84
+
85
+ | 编号 | 规则描述 |
86
+ |------|----------|
87
+ | **Rule-A32** | AI 代码重构不改动原有业务流程、接口出入参,只优化结构与性能 |
88
+ | **Rule-A33** | AI 精简代码禁止删除原有业务分支、兜底逻辑,优先剔除冗余重复代码 |
89
+ | **Rule-A34** | AI 性能优化优先优化循环、SQL 查询、频繁 IO,不擅自修改业务算法 |
90
+ | **Rule-A35** | AI 代码脱敏自动屏蔽手机号、身份证、密钥等敏感字段输出 |
91
+
92
+ ---
93
+
94
+ ## 九、前端 / 脚本 / 通用
95
+
96
+ | 编号 | 规则描述 |
97
+ |------|----------|
98
+ | **Rule-A36** | AI 前端代码遵循项目 ESLint 规范,统一代码格式与变量命名 |
99
+ | **Rule-A37** | AI Shell / 运维脚本禁止明文写入账号密码、服务器密钥 |
100
+ | **Rule-A38** | AI 单元测试代码只写核心业务用例,覆盖正常 / 异常 / 边界场景 |
101
+ | **Rule-A39** | AI 生成配置文件遵循项目 Nacos/yml/properties 统一格式规范 |
102
+ | **Rule-A40** | AI 生成测试环境代码禁止携带线上硬编码地址、账号配置 |
103
+
104
+ ---
105
+
106
+ ## 十、AI 人机协同开发
107
+
108
+ | 编号 | 规则描述 |
109
+ |------|----------|
110
+ | **Rule-A41** | AI 仅负责代码编写、补全、重构、查错,业务逻辑决策由开发人员确认 |
111
+ | **Rule-A42** | AI 生成代码必须人工评审后提交,禁止直接一键提交 AI 产出代码 |
112
+ | **Rule-A43** | 遇到 AI 错误逻辑、过时写法,统一录入规则库,统一纠正 AI 输出习惯 |
113
+ | **Rule-A44** | 团队统一 AI 提示词模板,全员使用同款约束指令,保证 AI 输出风格统一 |
114
+
115
+ ---
116
+
117
+ ## 快速参考
118
+
119
+ ### 核心原则
120
+
121
+ ```
122
+ 1. 禁止擅自修改 - 沿用项目现有风格
123
+ 2. 控制代码长度 - 单次生成不超过 80 行
124
+ 3. 异常必须捕获 - 禁止空 catch 或顶层异常
125
+ 4. 复用优于新建 - 优先使用项目已有工具类
126
+ 5. 安全第一 - SQL 预编译、敏感信息脱敏
127
+ 6. 人工审核 - AI 代码必须评审后才能提交
128
+ ```
129
+
130
+ ### 常用代码模板
131
+
132
+ #### Controller 层
133
+ ```java
134
+ @RestController
135
+ @RequiredArgsConstructor
136
+ public class DemoController {
137
+
138
+ /**
139
+ * 示例接口
140
+ * @param request 请求参数
141
+ * @return 统一返回结果
142
+ */
143
+ @PostMapping("/demo")
144
+ public Result<DemoResponse> demo(@Valid @RequestBody DemoRequest request) {
145
+ // 仅参数校验和结果封装
146
+ return Result.success(demoService.process(request));
147
+ }
148
+ }
149
+ ```
150
+
151
+ #### Service 层
152
+ ```java
153
+ @Service
154
+ @RequiredArgsConstructor
155
+ public class DemoService {
156
+
157
+ private final DemoMapper demoMapper;
158
+
159
+ /**
160
+ * 业务逻辑处理
161
+ */
162
+ public DemoResponse process(DemoRequest request) {
163
+ // 业务逻辑编排
164
+ // DAO 下沉至 Mapper
165
+ }
166
+ }
167
+ ```
168
+
169
+ #### 异常处理
170
+ ```java
171
+ try {
172
+ // 业务逻辑
173
+ } catch (BusinessException e) {
174
+ log.error("业务异常: userId={}, orderId={}", userId, orderId, e);
175
+ throw e;
176
+ } catch (Exception e) {
177
+ log.error("系统异常: userId={}, orderId={}", userId, orderId, e);
178
+ throw new SystemException("系统错误");
179
+ }
180
+ ```
181
+
182
+ ---
183
+
184
+ *文档版本: v1.0*
185
+ *最后更新: 2026-05-19*