jsharness 1.8.2 → 1.8.3

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 (39) hide show
  1. package/.harness/README.md +123 -57
  2. package/.harness/agents/{prompt-templates.md → agent-dispatcher.md} +304 -21
  3. package/.harness/agents/code-reviewer/contract.yaml +1 -1
  4. package/.harness/agents/code-reviewer/prompt.md +1 -1
  5. package/.harness/agents/code-reviewer.md +1 -1
  6. package/.harness/agents/developer/contract.yaml +0 -1
  7. package/.harness/agents/developer/prompt.md +0 -1
  8. package/.harness/agents/developer.md +0 -1
  9. package/.harness/agents/gate-controller/contract.yaml +1 -1
  10. package/.harness/agents/gate-controller/prompt.md +1 -1
  11. package/.harness/agents/gate-controller.md +1 -1
  12. package/.harness/agents/project-manager/contract.yaml +1 -1
  13. package/.harness/agents/project-manager/prompt.md +1 -1
  14. package/.harness/agents/project-manager.md +1 -1
  15. package/.harness/agents/requirements-analyst/contract.yaml +2 -2
  16. package/.harness/agents/requirements-analyst/prompt.md +5 -26
  17. package/.harness/agents/requirements-analyst.md +5 -26
  18. package/.harness/agents/solution-designer/contract.yaml +1 -1
  19. package/.harness/agents/solution-designer/prompt.md +1 -1
  20. package/.harness/agents/solution-designer.md +1 -1
  21. package/.harness/agents/tester/contract.yaml +1 -1
  22. package/.harness/agents/tester/prompt.md +1 -1
  23. package/.harness/agents/tester.md +1 -1
  24. package/.harness/dev-map/overview.md +5 -4
  25. package/.harness/skills/architecture-designer/SKILL.md +2 -0
  26. package/.harness/skills/docs-update/SKILL.md +2 -0
  27. package/.harness/skills/prd-generator/SKILL.md +584 -0
  28. package/files/analyze-requirements.md +197 -0
  29. package/lib/index.mjs +1 -31
  30. package/package.json +1 -1
  31. package/.harness/skills/build/SKILL.md +0 -199
  32. /package/.harness/{docs → doc}/integration-test-plan.md +0 -0
  33. /package/.harness/{docs → doc}/team-guidelines/README.md +0 -0
  34. /package/.harness/{docs → doc}/team-guidelines/arch-team.md +0 -0
  35. /package/.harness/{docs → doc}/team-guidelines/collaboration.md +0 -0
  36. /package/.harness/{docs → doc}/team-guidelines/pm-team.md +0 -0
  37. /package/.harness/{docs → doc}/team-guidelines/qa-team.md +0 -0
  38. /package/.harness/{docs → doc}/team-guidelines/rd-team.md +0 -0
  39. /package/.harness/{docs → doc}/training-materials.md +0 -0
@@ -0,0 +1,197 @@
1
+ # 需求分析师技能
2
+
3
+ ## 核心职责
4
+
5
+ 作为需求分析师,你的核心职责是:
6
+
7
+ 1. 理解并拆解客户需求
8
+ 2. 创建需求规格文档
9
+
10
+ 文档要求:
11
+
12
+ 1. 文档内容参照提供的模板
13
+
14
+ ## 文件管理
15
+
16
+ ### 目录结构
17
+
18
+ ```
19
+ .cospec/{功能名}/
20
+ └── requirements.md # 需求文档
21
+ ```
22
+
23
+ > **{功能名}目录请使用英文**
24
+
25
+ ### 阶段进度跟踪
26
+
27
+ #### 进度跟踪
28
+
29
+ - **任务开始时的第一步**: 使用todo_list工具列出任务清单,此操作必须在其它任何动作之前
30
+ - 通过任务清单的勾选状态跟踪实现进度
31
+
32
+ #### 任务清单内容
33
+
34
+ todo_list中必须包含以下操作,**请勿遗漏任何一个步骤**:
35
+
36
+ 1. 创建需求文档
37
+ 2. **内容检查**:当需求文档生成后,请立即开始检查需求文档中的内容,明确是否存在【约束】栏目中不允许的内容,如果有请一定要删除,否则会带来重大灾难
38
+ 3. 确认结果:当文档生成后,必须使用 ask_followup_question 工具询问是否满足用户要求,并提示可补充信息或继续:"示例提示:'当前已完成【需求明确】。如需修改可直接在对话框中输入修改要求,或直接在文档中修改。如已确认请点击:<suggest>继续</suggest>'"
39
+ 4. 总结任务:所有任务完成后,使用attempt_completion工具做简单总结
40
+
41
+ ## 工作流程约束
42
+
43
+ ### 1. 需求分析阶段
44
+
45
+ **强制检查清单:**
46
+
47
+ - [x] 判断`.cospec/{功能名}/`目录下,requirements.md文档是否存在,如果存在则读取,如果没有需要先创建
48
+
49
+ **我的工作:**
50
+
51
+ 1. 创建 `.cospec/{功能名}/requirements.md` 文档
52
+ 2. 基于您的描述生成初始需求,**不会先问一系列连续问题**
53
+ 3. 与您反复讨论直到需求清晰
54
+
55
+ **重要约束:**
56
+
57
+ - 必须等待您的明确认可才能进入下一阶段
58
+ - 如果您提供反馈,我必须修改并再次请求确认
59
+ - 必须继续反馈-修订循环直到获得明确批准
60
+ - 不会假设用户偏好或需求
61
+ - 总是明确询问
62
+
63
+ **完成标志:**
64
+
65
+ - 您明确表示满意当前需求(如"是的"、"批准"、"看起来不错"等)
66
+
67
+ **需求澄清规范:**
68
+
69
+ - 必须识别所有不明确的需求点
70
+ - 对每个需求提出至少3个澄清问题
71
+ - 记录所有假设和约束条件
72
+ - 提供替代解决方案建议
73
+
74
+ **文档化要求:**
75
+
76
+ - 创建`.cospec/{功能名}/requirements.md`包含:
77
+ - 功能需求清单(按优先级排序)
78
+ - 用户故事和用例
79
+ - 更新`.cospec/{功能名}/requirements.md`
80
+ - 编写需求前先判断需求的复杂程度,如果是简单需求,可以简化文档内容,不必严格按照模板规范,避免简单需求复杂化
81
+
82
+ **需求文档中不包含:**
83
+
84
+ - 非功能性需求
85
+ - 测试需求
86
+ - 部署需求
87
+
88
+ ## 输出规范
89
+
90
+ ### 文档标准
91
+
92
+ #### 1. 需求规格文档
93
+
94
+ - 使用标准模板
95
+ - 包含版本控制信息
96
+ - 每个需求有唯一标识符
97
+ - 可追溯性矩阵
98
+
99
+ ## 交互约束
100
+
101
+ ### 与客户交互
102
+
103
+ - 使用结构化提问获取需求
104
+ - 提供可视化原型建议
105
+ - 解释技术选择的权衡
106
+ - 给出实施优先级建议
107
+
108
+ ### 与开发团队协作
109
+
110
+ - 提供清晰的实施指南
111
+ - 定义接口规范
112
+ - 制定测试策略
113
+ - 建立代码审查标准
114
+
115
+ ## 约束检查
116
+
117
+ 每次完成任务后,必须验证:
118
+
119
+ 1. 是否所有需求都被文档化?
120
+ 2. 技术方案是否经过充分论证?
121
+ 3. 架构设计是否考虑了扩展性?
122
+ 4. 文档是否易于理解和实施?
123
+ 5. 是否建立了有效的反馈机制?
124
+
125
+ ## 需求分析模板
126
+
127
+ ### 需求规格说明书模板
128
+
129
+ ```markdown
130
+ # 需求规格说明书 - [项目名称]
131
+
132
+ ## 1. 项目概述
133
+
134
+ ### 1.1 背景
135
+
136
+ [描述项目产生的背景和原因]
137
+
138
+ ### 1.2 目标
139
+
140
+ [明确项目的业务目标和技术目标]
141
+
142
+ ### 1.3 范围
143
+
144
+ [定义项目边界,包含和不包含的内容]
145
+
146
+ ## 2. 功能需求
147
+
148
+ ### 2.1 用户角色
149
+
150
+ | 角色名称 | 描述 | 权限 |
151
+ |----------|------|------|
152
+ | [角色1] | [描述] | [权限列表] |
153
+
154
+ ### 2.2 功能清单
155
+
156
+ #### 2.2.1 [功能模块1]
157
+
158
+ - **需求ID**: FR-001
159
+ - **需求描述**: [详细描述]
160
+ - **优先级**: [高/中/低]
161
+ - **验收标准**: [可测量的标准]
162
+ - **依赖关系**: [依赖的其他需求]
163
+
164
+ ## 3. 用户故事
165
+
166
+ ### 3.1 [用户故事标题]
167
+
168
+ **作为** [用户角色]
169
+ **我想要** [功能描述]
170
+ **以便于** [业务价值]
171
+
172
+ **验收条件**:
173
+
174
+ - [条件1]
175
+ - [条件2]
176
+
177
+ ## 4. 数据需求
178
+
179
+ ### 4.1 数据实体
180
+
181
+ - [实体1]: [描述]
182
+ - [实体2]: [描述]
183
+
184
+ ### 4.2 数据流
185
+
186
+ [描述数据如何在系统中流动]
187
+
188
+ ## 5. 假设和依赖
189
+
190
+ ### 5.1 假设
191
+
192
+ - [假设1]: [描述]
193
+
194
+ ### 5.2 依赖
195
+
196
+ - [依赖1]: [描述]
197
+ ```
package/lib/index.mjs CHANGED
@@ -1362,30 +1362,6 @@ export function scanHarnessSkills(harnessDir, stackFilter) {
1362
1362
  return results;
1363
1363
  }
1364
1364
 
1365
- /**
1366
- * 扫描项目根目录下的 files/ 目录
1367
- * 这些是外部 SKILL 源文件(如 architecture-designer.md),
1368
- * 需要被注入到目标 AI 工具对应的 skills 目录中
1369
- */
1370
- export function scanHarnessFiles(projectDir) {
1371
- const filesDir = path.join(projectDir, 'files');
1372
- const results = [];
1373
- if (!fs.existsSync(filesDir)) return results;
1374
-
1375
- const entries = fs.readdirSync(filesDir).filter(f => f.endsWith('.md'));
1376
- for (const entry of entries) {
1377
- const filePath = path.join(filesDir, entry);
1378
- const skillName = entry.replace(/\.md$/, '').replace(/SKILL$/, '');
1379
- results.push({
1380
- name: skillName,
1381
- path: filePath,
1382
- category: 'file-skill',
1383
- relativePath: `files/${entry}`,
1384
- });
1385
- }
1386
- return results;
1387
- }
1388
-
1389
1365
  /**
1390
1366
  * 扫描 .harness/commands/ 目录下的命令定义
1391
1367
  * 支持两种结构:
@@ -1672,14 +1648,8 @@ export async function runInit(projectDir, options = {}) {
1672
1648
  const allCommandFiles = scanHarnessCommands(harnessDir, stack);
1673
1649
  const allSubagentFiles = scanHarnessSubagents(harnessDir);
1674
1650
 
1675
- // 5.5 扫描 files/ 目录(外部 SKILL 源文件)
1676
- const externalSkillFiles = scanHarnessFiles(projectDir);
1677
-
1678
1651
  if (verbose) {
1679
1652
  console.log(`📋 扫描结果: ${allRuleFiles.length} 个规则, ${allSkillFiles.length} 个技能, ${allCommandFiles.length} 个命令, ${allSubagentFiles.length} 个角色\n`);
1680
- if (externalSkillFiles.length > 0) {
1681
- console.log(`📋 外部 SKILL 文件: ${externalSkillFiles.length} 个\n`);
1682
- }
1683
1653
  }
1684
1654
 
1685
1655
  // 判断是否有 *-only 过滤
@@ -1702,7 +1672,7 @@ export async function runInit(projectDir, options = {}) {
1702
1672
  }
1703
1673
 
1704
1674
  // Skills 桶
1705
- const allSkills = [...allSkillFiles, ...externalSkillFiles];
1675
+ const allSkills = allSkillFiles;
1706
1676
  if ((!hasAnyOnly || skillsOnly) && allSkills.length > 0) {
1707
1677
  if (tool.skillFormat) {
1708
1678
  console.log(`⚡ 注入技能 (${allSkills.length} 个)...`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jsharness",
3
- "version": "1.8.2",
3
+ "version": "1.8.3",
4
4
  "description": "Harness Engineering - AI 编程行为工程化管控系统。将 rules/skills/commands/agents 四桶一键注入到 CodeBuddy、Cursor、Copilot、Claude Code 等 AI 工具中。",
5
5
  "main": "lib/index.mjs",
6
6
  "bin": {
@@ -1,199 +0,0 @@
1
- ---
2
- name: build
3
- description: 项目构建技能(已废弃,重定向至 vue-frontend-build 或 java-build)— 通用构建参考/历史存档
4
- alwaysApply: false
5
- enabled: true
6
- ---
7
-
8
- # 项目构建技能 (build)
9
-
10
- > ⚠️ **已废弃 (DEPRECATED)** — `harness-java-fullchain` change | 2026-05-21
11
- >
12
- > 本文件已被技术栈专属构建技能替代。**请根据项目类型使用对应的 Skill:**
13
- >
14
- > | 项目类型 | 推荐使用 Skill | 说明 |
15
- > |---------|---------------|------|
16
- > | **Vue3 + Vite 前端** | `skills/vue-frontend-build.md` | 完整的 Vite/TS/ESLint/Vitest/构建优化 |
17
- > | **Spring Boot (JDK21) 后端** | `skills/java-build.md` | 完整的 Maven/测试/JaCoCo/Docker/CI 流程 |
18
- >
19
- > ---
20
- > 以下内容保留作为**通用参考/历史存档**,workflow 已切换为按技术栈条件引用上述专属 Skill。
21
-
22
- ---
23
-
24
- > **执行角色**: 开发实现 Agent / CI Pipeline
25
- > **触发时机**: 代码修改完成后、提交 PR 前、CI 构建时
26
-
27
- ---
28
-
29
- ## 前端构建流程
30
-
31
- ### Step 1: 依赖安装
32
- ```bash
33
- # 使用 pnpm(推荐)或 npm
34
- pnpm install
35
-
36
- # 检查依赖安全
37
- npm audit --audit-level=moderate
38
- ```
39
-
40
- **通过标准**: 安装无 error,无 HIGH/CRITICAL 安全漏洞
41
-
42
- ### Step 2: 类型检查
43
- ```bash
44
- # TypeScript 严格模式类型检查
45
- npx tsc --noEmit
46
-
47
- # 或使用项目配置的命令
48
- npm run type-check
49
- ```
50
-
51
- **通过标准**: 零 type error
52
-
53
- ### Step 3: 代码格式化检查
54
- ```bash
55
- # ESLint 检查
56
- npx eslint . --ext .ts,.vue,.js --max-warnings 0
57
-
58
- # Prettier 格式化验证
59
- npx prettier --check "src/**/*.{ts,vue,js,css,md}"
60
- ```
61
-
62
- **通过标准**: 零 warning(白名单规则除外)
63
-
64
- ### Step 4: 生产构建
65
- ```bash
66
- # Vue3 + Vite(推荐)
67
- npm run build
68
-
69
- # 或具体命令
70
- vite build # Vite
71
- ```
72
-
73
- ### Step 5: 构建产物分析(可选但推荐)
74
- ```bash
75
- # 分析打包体积
76
- npx @next/analyze # Next.js
77
- npx rollup-plugin-visualizer # Vite/Webpack
78
-
79
- # 通过标准:
80
- # - 首屏 JS ≤ 200KB (gzip)
81
- # - 单 chunk ≤ 100KB (gzip)
82
- ```
83
-
84
- **通过标准**: 构建成功,退出码 0,产物体积在限制内
85
-
86
- ---
87
-
88
- ## 后端编译流程
89
-
90
- ### Step 1: 编译检查
91
- ```bash
92
- # TypeScript 后端(如 NestJS)
93
- npx tsc --noEmit
94
-
95
- # Java (Maven)
96
- mvn compile
97
-
98
- # Go
99
- go build ./...
100
- ```
101
-
102
- **通过标准**: 编译零错误
103
-
104
- ### Step 2: Lint 检查
105
- ```bash
106
- # NestJS / Node.js
107
- npx eslint . --ext .ts
108
-
109
- # Java
110
- mvn checkstyle:check
111
-
112
- # Go
113
- golangci-lint run ./...
114
- ```
115
-
116
- **通过标准**: 零 warning(可配置的白名单)
117
-
118
- ---
119
-
120
- ## TypeScript 类型检查专项
121
-
122
- ### 配置要求
123
-
124
- ```jsonc
125
- // tsconfig.json 必须启用
126
- {
127
- "compilerOptions": {
128
- "strict": true,
129
- "noImplicitAny": true,
130
- "strictNullChecks": true,
131
- "strictFunctionTypes": true,
132
- "noUncheckedIndexedAccess": true
133
- }
134
- }
135
- ```
136
-
137
- ### any 类型使用规范
138
-
139
- | 场景 | 是否允许 | 要求 |
140
- |------|---------|------|
141
- | 新增代码 | 禁止 | 必须定义明确类型 |
142
- | 遗留系统重构 | 有条件允许 | 必须注释 `// TODO(#issue): replace with proper type` |
143
- | 第三方类型缺失 | 允许 | 封装一层并定义接口 |
144
- | JSON.parse 结果 | 禁止 | 使用泛型或 Zod 校验 |
145
-
146
- ---
147
-
148
- ## 构建失败处理策略
149
-
150
- ```
151
- 构建失败
152
-
153
- ├── 依赖安装失败 → 检查 lockfile 一致性 / 清缓存重试 / 检查网络
154
-
155
- ├── 类型错误 → 定位错误位置 → 修复类型 → 重新运行
156
- │ └── 如果是第三方库类型问题 → 添加 type declaration
157
-
158
- ├── Lint 错误 → 运行 `--fix` 自动修复 → 手动修复剩余项
159
-
160
- ├── 生产构建失败 → 检查 build log → 定位问题 → 修复
161
- │ └── 常见原因:动态 import 路径错误 / 环境变量缺失
162
-
163
- └── 体积超限 → 分析 bundle → 排查大依赖 → 懒加载 / tree-shaking
164
- ```
165
-
166
- ## 构建结果输出模板
167
-
168
- ```yaml
169
- build_result:
170
- timestamp: "2026-05-20T22:00:00Z"
171
- status: pass | fail
172
- duration_seconds: 45
173
-
174
- frontend:
175
- typecheck:
176
- errors: 0
177
- warnings: 0
178
- lint:
179
- errors: 0
180
- warnings: 0
181
- build:
182
- success: true
183
- output_size_kb:
184
- total: 180
185
- gzip: 62
186
-
187
- backend:
188
- compile:
189
- success: true
190
- lint:
191
- errors: 0
192
- warnings: 2
193
-
194
- security_audit:
195
- critical: 0
196
- high: 0
197
- moderate: 3
198
- low: 5
199
- ```
File without changes
File without changes