jsharness 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.
- package/.harness/README.md +199 -0
- package/.harness/agents/code-reviewer/contract.yaml +64 -0
- package/.harness/agents/developer/contract.yaml +72 -0
- package/.harness/agents/gate-controller/contract.yaml +64 -0
- package/.harness/agents/project-manager/contract.yaml +77 -0
- package/.harness/agents/prompt-templates.md +352 -0
- package/.harness/agents/requirements-analyst/contract.yaml +64 -0
- package/.harness/agents/solution-designer/contract.yaml +75 -0
- package/.harness/agents/tester/contract.yaml +92 -0
- package/.harness/config/models.yaml +67 -0
- package/.harness/dev-map/backend/api-definition.md +131 -0
- package/.harness/dev-map/backend/auth-security.md +131 -0
- package/.harness/dev-map/backend/conventions-java.md +471 -0
- package/.harness/dev-map/backend/conventions.md +192 -0
- package/.harness/dev-map/backend/database.md +106 -0
- package/.harness/dev-map/backend/structure.md +140 -0
- package/.harness/dev-map/decisions.md +275 -0
- package/.harness/dev-map/frontend/api-integration.md +139 -0
- package/.harness/dev-map/frontend/components.md +178 -0
- package/.harness/dev-map/frontend/conventions.md +416 -0
- package/.harness/dev-map/frontend/state-management.md +170 -0
- package/.harness/dev-map/frontend/structure.md +103 -0
- package/.harness/dev-map/overview.md +267 -0
- package/.harness/docs/integration-test-plan.md +248 -0
- package/.harness/docs/team-guidelines/README.md +161 -0
- package/.harness/docs/team-guidelines/arch-team.md +811 -0
- package/.harness/docs/team-guidelines/collaboration.md +556 -0
- package/.harness/docs/team-guidelines/pm-team.md +337 -0
- package/.harness/docs/team-guidelines/qa-team.md +562 -0
- package/.harness/docs/team-guidelines/rd-team.md +714 -0
- package/.harness/docs/training-materials.md +280 -0
- package/.harness/gate/baseline.js +220 -0
- package/.harness/gate/checks/build-gates-frontend.js +152 -0
- package/.harness/gate/checks/build-gates-java.js +155 -0
- package/.harness/gate/checks/build-gates.js +119 -0
- package/.harness/gate/checks/engineering-consistency.js +138 -0
- package/.harness/gate/checks/security-quality.js +129 -0
- package/.harness/gate/checks/static-compliance.js +313 -0
- package/.harness/gate/checks/test-compliance.js +114 -0
- package/.harness/gate/index.js +315 -0
- package/.harness/mcp/config.yaml +435 -0
- package/.harness/rules/global/coding-standard.md +232 -0
- package/.harness/rules/global/commit-convention.md +165 -0
- package/.harness/rules/global/process-discipline.md +192 -0
- package/.harness/rules/global/security-baseline.md +306 -0
- package/.harness/rules/project/frontend-vue3.md +293 -0
- package/.harness/rules/project/java-backend.md +460 -0
- package/.harness/rules/project/web-specific.md +231 -0
- package/.harness/skills/build.md +192 -0
- package/.harness/skills/code-review.md +251 -0
- package/.harness/skills/docker-build.md +227 -0
- package/.harness/skills/docs-update.md +164 -0
- package/.harness/skills/java-build.md +261 -0
- package/.harness/skills/lint-check.md +482 -0
- package/.harness/skills/task-board-maintenance.md +105 -0
- package/.harness/skills/test-api.md +461 -0
- package/.harness/skills/test-e2e.md +431 -0
- package/.harness/skills/test-unit.md +649 -0
- package/.harness/skills/vue-frontend-build.md +344 -0
- package/.harness/specs/quality-feedback/implementation-guide.md +350 -0
- package/.harness/task-board.md +121 -0
- package/.harness/workflow/definition.yaml +504 -0
- package/.harness/workflow/validate.js +320 -0
- package/.harness/workflow/variants.yaml +253 -0
- package/README.md +237 -0
- package/bin/jsharness.js +53 -0
- package/lib/index.mjs +778 -0
- package/package.json +1 -0
package/README.md
ADDED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
# Harness Engineering
|
|
2
|
+
|
|
3
|
+
> **AI 编程行为工程化管控系统** — 一条命令将规则和技能注入到你的 AI 工具中
|
|
4
|
+
|
|
5
|
+
[](https://www.npmjs.com/package/hariness)
|
|
6
|
+

|
|
7
|
+
|
|
8
|
+
## 它是什么
|
|
9
|
+
|
|
10
|
+
Harness Engineering 是一套**文件化的 AI 编码约束系统**,通过 **Rules(规则)+ Skills(技能)+ Gate(门禁)** 三层机制,确保 AI 在项目中持续产出符合规范的代码。
|
|
11
|
+
|
|
12
|
+
**本 npm 包解决的核心问题:**
|
|
13
|
+
|
|
14
|
+
> 当你使用 AI 编程助手(CodeBuddy / Cursor / Copilot / Windsurf 等)时,
|
|
15
|
+
> 如何让 AI **自动遵守你们团队的编码规范、技术栈选择和安全红线?**
|
|
16
|
+
|
|
17
|
+
## 快速开始
|
|
18
|
+
|
|
19
|
+
### 30 秒初始化
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# 在你的项目根目录执行
|
|
23
|
+
npx hariness init
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
这条命令会:
|
|
27
|
+
|
|
28
|
+
1. **自动检测** 你使用的 AI 编程工具
|
|
29
|
+
2. **扫描** `.harness/` 下的所有规则和技能
|
|
30
|
+
3. **转换格式** 并写入到对应工具的配置位置
|
|
31
|
+
4. 让你在下一次 AI 对话中**立即生效**
|
|
32
|
+
|
|
33
|
+
### 指定目标工具
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
# 指定 CodeBuddy
|
|
37
|
+
npx hariness init --tool codebuddy
|
|
38
|
+
|
|
39
|
+
# 指定 Cursor
|
|
40
|
+
npx hariness init --tool cursor
|
|
41
|
+
|
|
42
|
+
# 指定 GitHub Copilot
|
|
43
|
+
npx hariness init --tool copilot
|
|
44
|
+
|
|
45
|
+
# 指定 Continue (VS Code)
|
|
46
|
+
npx hariness init --tool continue
|
|
47
|
+
|
|
48
|
+
# 指定 Cline (VS Code)
|
|
49
|
+
npx hariness init --tool cline
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 只注入特定技术栈的规则
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# 只要 Vue3 前端规则
|
|
56
|
+
npx hariness init --stack vue3
|
|
57
|
+
|
|
58
|
+
# 只要 Java 后端规则
|
|
59
|
+
npx hariness init --stack java
|
|
60
|
+
|
|
61
|
+
# 全部(默认)
|
|
62
|
+
npx hariness init --stack all
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## 支持的 AI 工具
|
|
66
|
+
|
|
67
|
+
| 工具 | 注入位置 | 规则 | 技能 |
|
|
68
|
+
|------|---------|------|------|
|
|
69
|
+
| **CodeBuddy** | `.codebuddy/rules/` + `.codebuddy/skills/` | ✅ | ✅ |
|
|
70
|
+
| **Cursor** | `.cursorrules` | ✅ 合并为单文件 | — |
|
|
71
|
+
| **GitHub Copilot** | `.github/copilot-instructions.md` | ✅ | — |
|
|
72
|
+
| **Windsurf** | `.windsurfrules` | ✅ XML 格式 | — |
|
|
73
|
+
| **Continue** | `continue.config.json` | ✅ JSON 格式 | — |
|
|
74
|
+
| **Cline** | `.clinerules` | ✅ | — |
|
|
75
|
+
|
|
76
|
+
查看完整列表:
|
|
77
|
+
```bash
|
|
78
|
+
npx hariness list-tools
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## 工作原理
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
用户运行: npx hariness init
|
|
85
|
+
↓
|
|
86
|
+
1️⃣ 扫描 .harness/rules/*.md 和 .harness/skills/*.md
|
|
87
|
+
↓
|
|
88
|
+
2️⃣ 自动检测当前项目的 AI 工具
|
|
89
|
+
↓
|
|
90
|
+
3️⃣ 将 Markdown 规则转换为目标工具的原生格式
|
|
91
|
+
↓
|
|
92
|
+
4️⃣ 写入对应配置位置
|
|
93
|
+
|
|
94
|
+
例: .harness/rules/global/coding-standard.md
|
|
95
|
+
↓ 转换为 CodeBuddy 格式
|
|
96
|
+
→ .codebuddy/rules/coding-standard.md
|
|
97
|
+
|
|
98
|
+
例: .harness/rules/project/frontend-vue3.md
|
|
99
|
+
↓ 转换为 Cursor 格式
|
|
100
|
+
→ 追加到 .cursorrules
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## 系统架构
|
|
104
|
+
|
|
105
|
+
Harness 包含以下层级,全部可通过本包一键注入:
|
|
106
|
+
|
|
107
|
+
### 三层约束机制
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
┌─────────────────────────────────────────┐
|
|
111
|
+
│ 🔴 Rules (软约束) │ Markdown 声明式规范
|
|
112
|
+
│ → "什么不能做" │ AI 自觉遵守
|
|
113
|
+
├─────────────────────────────────────────┤
|
|
114
|
+
│ 🟡 Skills (半硬约束) │ 步骤化操作手册
|
|
115
|
+
│ → "具体怎么做" │ AI 按步骤执行
|
|
116
|
+
├─────────────────────────────────────────┤
|
|
117
|
+
│ 🚧 Gate Scripts (硬约束) │ 可执行检查脚本
|
|
118
|
+
│ → "不通过就拦截" │ PASS / FAIL
|
|
119
|
+
└─────────────────────────────────────────┘
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### 内置内容(默认包含)
|
|
123
|
+
|
|
124
|
+
#### 规则层 (Rules)
|
|
125
|
+
|
|
126
|
+
| 文件 | 说明 |
|
|
127
|
+
|------|------|
|
|
128
|
+
| `rules/global/coding-standard.md` | 通用编码规范(命名/导入/注释) |
|
|
129
|
+
| `rules/global/commit-convention.md` | Commit 信息格式规范 |
|
|
130
|
+
| `rules/global/security-baseline.md` | 安全红线(XSS/CSRF/注入) |
|
|
131
|
+
| `rules/project/frontend-vue3.md` | Vue3 前端技术栈规则 |
|
|
132
|
+
| `rules/project/java-backend.md` | Java Spring Boot 后端规则 |
|
|
133
|
+
| `rules/project/web-specific.md` | Web 应用通用规则 |
|
|
134
|
+
|
|
135
|
+
#### 技能层 (Skills)
|
|
136
|
+
|
|
137
|
+
| 文件 | 说明 |
|
|
138
|
+
|------|------|
|
|
139
|
+
| `skills/vue-frontend-build.md` | Vue3 + Vite 构建全流程 |
|
|
140
|
+
| `skills/java-build.md` | Maven + JUnit5 构建全流程 |
|
|
141
|
+
| `skills/lint-check.md` | ESLint / Checkstyle 配置 |
|
|
142
|
+
| `skills/code-review.md` | 代码审查清单(双技术栈) |
|
|
143
|
+
| `skills/test-unit.md` | 单元测试(Vitest + JUnit5) |
|
|
144
|
+
|
|
145
|
+
#### 门禁层 (Gate)
|
|
146
|
+
|
|
147
|
+
| 文件 | 说明 |
|
|
148
|
+
|------|------|
|
|
149
|
+
| `gate/checks/build-gates.js` | 构建门禁路由器 |
|
|
150
|
+
| `gate/checks/build-gates-frontend.js` | 前端门禁(npm/tsc/lint) |
|
|
151
|
+
| `gate/checks/build-gates-java.js` | 后端门禁(mvn compile/test) |
|
|
152
|
+
| `gate/checks/security-quality.js` | 安全质量检查 |
|
|
153
|
+
|
|
154
|
+
#### 角色 (Agents) & 流程 (Workflow)
|
|
155
|
+
|
|
156
|
+
7 个专业 Agent(PM/需求分析/方案设计/闸门/开发/CR/测试)+ 标准协作流程。
|
|
157
|
+
|
|
158
|
+
## 高级用法
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# 覆盖已有配置(谨慎使用)
|
|
162
|
+
npx hariness init --force
|
|
163
|
+
|
|
164
|
+
# 只注入规则,不注入技能
|
|
165
|
+
npx hariness init --rules-only
|
|
166
|
+
|
|
167
|
+
# 只注入技能,不注入规则
|
|
168
|
+
npx hariness init --skills-only
|
|
169
|
+
|
|
170
|
+
# 查看详细输出
|
|
171
|
+
npx hariness init -v
|
|
172
|
+
|
|
173
|
+
# 查看当前状态
|
|
174
|
+
npx hariness status
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## 作为 SDK 使用
|
|
178
|
+
|
|
179
|
+
```javascript
|
|
180
|
+
import {
|
|
181
|
+
detectTool,
|
|
182
|
+
scanHarnessRules,
|
|
183
|
+
transformRules,
|
|
184
|
+
injectOutputs
|
|
185
|
+
} from 'hariness';
|
|
186
|
+
|
|
187
|
+
// 检测 AI 工具
|
|
188
|
+
const tools = detectTool('/path/to/project');
|
|
189
|
+
|
|
190
|
+
// 获取规则文件
|
|
191
|
+
const rules = scanHarnessRules('/path/to/.harness', 'vue3');
|
|
192
|
+
|
|
193
|
+
// 转换为目标格式
|
|
194
|
+
const outputs = transformRules(rules, 'codebuddy');
|
|
195
|
+
|
|
196
|
+
// 写入项目
|
|
197
|
+
injectOutputs('/path/to/project', outputs);
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## 开发指南
|
|
201
|
+
|
|
202
|
+
### 本地开发
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
git clone <repo>
|
|
206
|
+
cd hariness
|
|
207
|
+
npm install
|
|
208
|
+
npm run init # 初始化测试
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### 自定义规则
|
|
212
|
+
|
|
213
|
+
1. 在 `.harness/rules/` 下添加 `.md` 文件
|
|
214
|
+
2. 运行 `npx hariness init --force` 更新注入
|
|
215
|
+
3. 规则会自动被所有适配器支持
|
|
216
|
+
|
|
217
|
+
### 添加新工具适配器
|
|
218
|
+
|
|
219
|
+
在 `lib/index.mjs` 的 `RULE_TRANSFORMERS` 中新增一个 key 即可。每种工具只需实现一个函数,输入是规则文件列表,输出是 `{ format, files: [{ relativePath, content }] }`。
|
|
220
|
+
|
|
221
|
+
## 技术栈说明
|
|
222
|
+
|
|
223
|
+
本包内置的默认规则基于以下技术栈(可在初始化后自行修改):
|
|
224
|
+
|
|
225
|
+
- **前端**: Vue 3 + Vite + TypeScript + Pinia + Element Plus
|
|
226
|
+
- **后端**: Spring Boot 3.2 + JDK21 + MyBatis-Plus + Nacos
|
|
227
|
+
|
|
228
|
+
如需其他技术栈,修改 `.harness/` 下的对应文件即可。
|
|
229
|
+
|
|
230
|
+
## License
|
|
231
|
+
|
|
232
|
+
ISC
|
|
233
|
+
|
|
234
|
+
## 相关链接
|
|
235
|
+
|
|
236
|
+
- [操作手册](./Harness使用手册.md)
|
|
237
|
+
- [OpenSpec 变更管理](./openspec/)
|
package/bin/jsharness.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* jsharness CLI
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* npx jsharness init # 初始化(自动检测 AI 工具)
|
|
8
|
+
* npx jsharness init --tool codebuddy # 指定工具
|
|
9
|
+
* npx jsharness init --stack vue3 # 指定技术栈
|
|
10
|
+
* npx jsharness list-tools # 列出支持的工具
|
|
11
|
+
* npx jsharness status # 查看当前状态
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { createRequire } from 'module';
|
|
15
|
+
import { program } from 'commander';
|
|
16
|
+
|
|
17
|
+
const require = createRequire(import.meta.url);
|
|
18
|
+
|
|
19
|
+
// 通过包名引用主库(npm 安装后兼容)
|
|
20
|
+
const { runInit, listTools, showStatus } = await import('jsharness');
|
|
21
|
+
|
|
22
|
+
program
|
|
23
|
+
.name('jsharness')
|
|
24
|
+
.description('Harness Engineering - AI 编程行为工程化管控系统')
|
|
25
|
+
.version(require('jsharness/package.json').version);
|
|
26
|
+
|
|
27
|
+
program
|
|
28
|
+
.command('init')
|
|
29
|
+
.description('初始化 Harness 到当前项目的 AI 工具中')
|
|
30
|
+
.option('-t, --tool <name>', '指定目标 AI 工具')
|
|
31
|
+
.option('-s, --stack <name>', '指定技术栈 (vue3/java/all)', 'all')
|
|
32
|
+
.option('--rules-only', '只注入规则,不注入技能')
|
|
33
|
+
.option('--skills-only', '只注入技能,不注入规则')
|
|
34
|
+
.option('--force', '覆盖已有配置')
|
|
35
|
+
.option('-v, --verbose', '显示详细输出')
|
|
36
|
+
.action((opts) => runInit(process.cwd(), opts));
|
|
37
|
+
|
|
38
|
+
program
|
|
39
|
+
.command('list-tools')
|
|
40
|
+
.description('列出所有支持的 AI 工具及适配器状态')
|
|
41
|
+
.action(() => listTools());
|
|
42
|
+
|
|
43
|
+
program
|
|
44
|
+
.command('status')
|
|
45
|
+
.description('查看当前项目 Harness 初始化状态')
|
|
46
|
+
.action(() => showStatus(process.cwd()));
|
|
47
|
+
|
|
48
|
+
program.parse(process.argv);
|
|
49
|
+
|
|
50
|
+
// 无参数时默认执行 init
|
|
51
|
+
if (!process.argv.slice(2).length) {
|
|
52
|
+
await runInit(process.cwd(), {});
|
|
53
|
+
}
|