@dommaker/harness 0.5.0 → 0.6.1
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/README.md +92 -24
- package/bin/harness.js +59 -7
- package/dist/cli/commands/check.d.ts.map +1 -1
- package/dist/cli/commands/check.js +77 -0
- package/dist/cli/commands/check.js.map +1 -1
- package/dist/cli/commands/flow.d.ts +20 -0
- package/dist/cli/commands/flow.d.ts.map +1 -0
- package/dist/cli/commands/flow.js +239 -0
- package/dist/cli/commands/flow.js.map +1 -0
- package/dist/cli/commands/index.d.ts +2 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +5 -1
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +99 -12
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/status.d.ts +20 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +183 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/core/project-config-loader.d.ts +8 -0
- package/dist/core/project-config-loader.d.ts.map +1 -1
- package/dist/core/project-config-loader.js +69 -9
- package/dist/core/project-config-loader.js.map +1 -1
- package/dist/types/project-config.d.ts +11 -9
- package/dist/types/project-config.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,13 +10,15 @@
|
|
|
10
10
|
|
|
11
11
|
| 功能 | 说明 |
|
|
12
12
|
|------|------|
|
|
13
|
-
| **铁律系统** |
|
|
13
|
+
| **铁律系统** | 16 条内置约束(4 Iron Laws + 10 Guidelines + 2 Tips) |
|
|
14
14
|
| **检查点验证** | 验证工作流步骤的结果是否符合预期 |
|
|
15
15
|
| **测试门控** | 禁止自评通过,必须通过真实测试 |
|
|
16
16
|
| **Session 管理** | 启动检查点 + 结束状态管理 |
|
|
17
17
|
| **预设系统** | 提供 strict/standard/relaxed 三种预设 |
|
|
18
18
|
| **Execution Trace** | 轻量记录约束检查,异常检测,诊断系统(v0.3+) |
|
|
19
19
|
| **项目级自定义约束** | 扩展/覆盖内置约束,无需 fork(v0.4+) |
|
|
20
|
+
| **智能提示** | check 后根据条件提示下一步操作(v0.6+) |
|
|
21
|
+
| **一键流程** | harness flow 一键执行诊断+提案(v0.6+) |
|
|
20
22
|
| **CLI 工具** | 命令行工具执行检查 |
|
|
21
23
|
|
|
22
24
|
## 安装
|
|
@@ -46,12 +48,27 @@ npx harness init --preset standard
|
|
|
46
48
|
# 初始化项目配置
|
|
47
49
|
harness init --preset standard
|
|
48
50
|
|
|
51
|
+
# 输出配置代码片段(不创建文件)
|
|
52
|
+
harness init --print-snippets
|
|
53
|
+
|
|
49
54
|
# 检查铁律
|
|
50
55
|
harness check
|
|
51
56
|
|
|
52
57
|
# 列出所有铁律
|
|
53
58
|
harness check --list
|
|
54
59
|
|
|
60
|
+
# 查看状态(统计、异常、建议)
|
|
61
|
+
harness status
|
|
62
|
+
|
|
63
|
+
# 查看详细状态
|
|
64
|
+
harness status --detail
|
|
65
|
+
|
|
66
|
+
# 只显示异常
|
|
67
|
+
harness status --anomalies
|
|
68
|
+
|
|
69
|
+
# 一键执行诊断+提案流程
|
|
70
|
+
harness flow
|
|
71
|
+
|
|
55
72
|
# 验证检查点
|
|
56
73
|
harness validate
|
|
57
74
|
|
|
@@ -61,12 +78,10 @@ harness passes-gate
|
|
|
61
78
|
# 生成报告
|
|
62
79
|
harness report
|
|
63
80
|
|
|
64
|
-
#
|
|
65
|
-
harness traces stats
|
|
66
|
-
harness traces summary
|
|
67
|
-
harness traces anomalies
|
|
68
|
-
harness traces report # 生成完整报告
|
|
69
|
-
harness traces clean # 清理旧 trace 文件
|
|
81
|
+
# [已弃用] 请使用 harness status
|
|
82
|
+
harness traces stats
|
|
83
|
+
harness traces summary
|
|
84
|
+
harness traces anomalies
|
|
70
85
|
```
|
|
71
86
|
|
|
72
87
|
### 3. 在 CI 中使用
|
|
@@ -115,23 +130,26 @@ const cleaner = new CleanStateManager();
|
|
|
115
130
|
const cleanResult = await cleaner.onSessionEnd(workDir, sessionInfo);
|
|
116
131
|
```
|
|
117
132
|
|
|
118
|
-
##
|
|
119
|
-
|
|
120
|
-
| ID | 规则 | 严重性 |
|
|
121
|
-
|
|
122
|
-
| `
|
|
123
|
-
| `
|
|
124
|
-
| `no_completion_without_verification` | 完成必须有验证证据 | 🔴 error |
|
|
125
|
-
| `
|
|
126
|
-
| `
|
|
127
|
-
| `
|
|
128
|
-
| `
|
|
129
|
-
| `
|
|
130
|
-
| `
|
|
131
|
-
| `
|
|
132
|
-
| `
|
|
133
|
-
| `
|
|
134
|
-
| `
|
|
133
|
+
## 内置约束(16 条)
|
|
134
|
+
|
|
135
|
+
| ID | 规则 | 层级 | 严重性 |
|
|
136
|
+
|---|------|------|:------:|
|
|
137
|
+
| `no_bypass_checkpoint` | 禁止跳过检查点 | iron_law | 🔴 error |
|
|
138
|
+
| `no_self_approval` | 禁止自评通过 | iron_law | 🔴 error |
|
|
139
|
+
| `no_completion_without_verification` | 完成必须有验证证据 | iron_law | 🔴 error |
|
|
140
|
+
| `no_test_simplification` | 禁止擅自简化测试 | iron_law | 🔴 error |
|
|
141
|
+
| `no_fix_without_root_cause` | 修复前必须找到根因 | guideline | 🔴 error |
|
|
142
|
+
| `no_code_without_test` | 写代码前必须有测试 | guideline | 🔴 error |
|
|
143
|
+
| `no_any_type` | 禁止使用 any 类型 | guideline | 🟡 warning |
|
|
144
|
+
| `simplest_solution_first` | 优先选择最简方案 | guideline | 🟡 warning |
|
|
145
|
+
| `no_creation_without_reuse_check` | 创建前必须检查可复用 | guideline | 🟡 warning |
|
|
146
|
+
| `capability_sync` | 代码变更必须更新 CAPABILITIES.md | guideline | 🟡 warning |
|
|
147
|
+
| `no_simplification_without_approval` | 不能擅自简化逻辑 | guideline | 🟡 warning |
|
|
148
|
+
| `no_skill_without_test` | 创建技能前必须有测试 | guideline | 🟡 warning |
|
|
149
|
+
| `test_coverage_required` | 测试覆盖率必须达标 | guideline | 🟡 warning |
|
|
150
|
+
| `design_decision_requires_discussion` | 设计决策必须先讨论 | guideline | 🟡 warning |
|
|
151
|
+
| `readme_required` | 新模块必须有 README | tip | 🔵 info |
|
|
152
|
+
| `doc_required_for_public_api` | 公共 API 必须有文档 | tip | 🔵 info |
|
|
135
153
|
|
|
136
154
|
## 预设系统
|
|
137
155
|
|
|
@@ -141,6 +159,56 @@ const cleanResult = await cleaner.onSessionEnd(workDir, sessionInfo);
|
|
|
141
159
|
| `standard` | 标准模式,推荐使用 |
|
|
142
160
|
| `relaxed` | 宽松模式,警告不阻止 |
|
|
143
161
|
|
|
162
|
+
## 自定义约束(v0.4+)
|
|
163
|
+
|
|
164
|
+
### 扩展例外(v0.6+)
|
|
165
|
+
|
|
166
|
+
使用 `extend_exceptions` 追加例外,保留内置例外:
|
|
167
|
+
|
|
168
|
+
```yaml
|
|
169
|
+
# .harness/custom-constraints.yml
|
|
170
|
+
custom_constraints:
|
|
171
|
+
no_fix_without_root_cause:
|
|
172
|
+
extend_exceptions:
|
|
173
|
+
- my_special_case_1
|
|
174
|
+
- my_special_case_2
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
结果:内置例外 + 新增例外
|
|
178
|
+
|
|
179
|
+
### 完全覆盖
|
|
180
|
+
|
|
181
|
+
使用 `exceptions` 完全覆盖内置例外:
|
|
182
|
+
|
|
183
|
+
```yaml
|
|
184
|
+
# .harness/custom-constraints.yml
|
|
185
|
+
custom_constraints:
|
|
186
|
+
no_fix_without_root_cause:
|
|
187
|
+
level: guideline
|
|
188
|
+
rule: Do not fix without root cause
|
|
189
|
+
message: 禁止没有根因分析就修复
|
|
190
|
+
trigger: bug_fix
|
|
191
|
+
exceptions:
|
|
192
|
+
- my_only_exception
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
结果:只使用自定义例外
|
|
196
|
+
|
|
197
|
+
### 混合模式
|
|
198
|
+
|
|
199
|
+
同时使用 `exceptions` 和 `extend_exceptions`:
|
|
200
|
+
|
|
201
|
+
```yaml
|
|
202
|
+
custom_constraints:
|
|
203
|
+
no_fix_without_root_cause:
|
|
204
|
+
exceptions:
|
|
205
|
+
- my_new_exception
|
|
206
|
+
extend_exceptions:
|
|
207
|
+
- another_exception
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
结果:内置例外 + my_new_exception + another_exception
|
|
211
|
+
|
|
144
212
|
## 项目模板
|
|
145
213
|
|
|
146
214
|
提供多种项目模板:
|
package/bin/harness.js
CHANGED
|
@@ -16,7 +16,9 @@ const {
|
|
|
16
16
|
report,
|
|
17
17
|
tracesCommand,
|
|
18
18
|
diagnoseCommand,
|
|
19
|
-
proposeCommand
|
|
19
|
+
proposeCommand,
|
|
20
|
+
status,
|
|
21
|
+
flow
|
|
20
22
|
} = require('../dist/cli/commands/index');
|
|
21
23
|
|
|
22
24
|
const program = new Command();
|
|
@@ -93,6 +95,7 @@ program
|
|
|
93
95
|
.option('--project-path <path>', '项目路径')
|
|
94
96
|
.option('--no-git-hooks', '不创建 Git hooks')
|
|
95
97
|
.option('--no-github-actions', '不创建 GitHub Actions')
|
|
98
|
+
.option('--print-snippets', '只输出代码片段,不创建文件')
|
|
96
99
|
.action(async (options) => {
|
|
97
100
|
await init(options);
|
|
98
101
|
});
|
|
@@ -111,16 +114,21 @@ program
|
|
|
111
114
|
});
|
|
112
115
|
|
|
113
116
|
// ========================================
|
|
114
|
-
// harness traces
|
|
117
|
+
// harness traces [DEPRECATED]
|
|
115
118
|
// ========================================
|
|
116
119
|
program
|
|
117
120
|
.command('traces [subcommand]')
|
|
118
|
-
.description('
|
|
121
|
+
.description('[已弃用] 请使用 harness status')
|
|
119
122
|
.option('--hours <n>', '分析最近 N 小时', '1')
|
|
120
123
|
.option('--constraint <id>', '过滤约束 ID')
|
|
121
124
|
.option('--format <format>', '输出格式 (json/text)', 'text')
|
|
122
125
|
.option('--max-age-days <n>', '清理超过 N 天的文件', '30')
|
|
123
126
|
.action(async (subcommand, options, command) => {
|
|
127
|
+
console.log('⚠️ harness traces 已弃用,请使用 harness status');
|
|
128
|
+
console.log(' harness status # 查看统计');
|
|
129
|
+
console.log(' harness status --detail # 查看详情');
|
|
130
|
+
console.log(' harness status --anomalies # 查看异常');
|
|
131
|
+
console.log();
|
|
124
132
|
const sub = subcommand || 'stats';
|
|
125
133
|
await tracesCommand(sub, {
|
|
126
134
|
hours: parseInt(options.hours, 10),
|
|
@@ -131,17 +139,20 @@ program
|
|
|
131
139
|
});
|
|
132
140
|
|
|
133
141
|
// ========================================
|
|
134
|
-
// harness diagnose
|
|
142
|
+
// harness diagnose [DEPRECATED]
|
|
135
143
|
// ========================================
|
|
136
144
|
program
|
|
137
145
|
.command('diagnose [subcommand]')
|
|
138
|
-
.description('
|
|
146
|
+
.description('[已弃用] 请使用 harness flow')
|
|
139
147
|
.option('--hours <n>', '分析最近 N 小时', '24')
|
|
140
148
|
.option('--constraint <id>', '过滤约束 ID')
|
|
141
149
|
.option('--anomaly <id>', '特定异常 ID')
|
|
142
150
|
.option('--format <format>', '输出格式 (json/text)', 'text')
|
|
143
151
|
.option('--save', '保存诊断结果', false)
|
|
144
152
|
.action(async (subcommand, options, command) => {
|
|
153
|
+
console.log('⚠️ harness diagnose 已弃用,请使用 harness flow');
|
|
154
|
+
console.log(' harness flow # 一键执行诊断 + 提案流程');
|
|
155
|
+
console.log();
|
|
145
156
|
const sub = subcommand || 'list';
|
|
146
157
|
await diagnoseCommand(sub, {
|
|
147
158
|
hours: parseInt(options.hours, 10),
|
|
@@ -153,11 +164,11 @@ program
|
|
|
153
164
|
});
|
|
154
165
|
|
|
155
166
|
// ========================================
|
|
156
|
-
// harness propose
|
|
167
|
+
// harness propose [DEPRECATED]
|
|
157
168
|
// ========================================
|
|
158
169
|
program
|
|
159
170
|
.command('propose [subcommand]')
|
|
160
|
-
.description('
|
|
171
|
+
.description('[已弃用] 请使用 harness flow')
|
|
161
172
|
.option('--diagnosis <id>', '诊断 ID')
|
|
162
173
|
.option('--status <status>', '过滤状态')
|
|
163
174
|
.option('--format <format>', '输出格式 (json/text)', 'text')
|
|
@@ -166,6 +177,9 @@ program
|
|
|
166
177
|
.option('--reject', '拒绝提案', false)
|
|
167
178
|
.option('--comment <text>', '审核意见')
|
|
168
179
|
.action(async (subcommand, options, command) => {
|
|
180
|
+
console.log('⚠️ harness propose 已弃用,请使用 harness flow');
|
|
181
|
+
console.log(' harness flow # 一键执行诊断 + 提案流程');
|
|
182
|
+
console.log();
|
|
169
183
|
const sub = subcommand || 'list';
|
|
170
184
|
await proposeCommand(sub, {
|
|
171
185
|
diagnosisId: options.diagnosis,
|
|
@@ -178,5 +192,43 @@ program
|
|
|
178
192
|
});
|
|
179
193
|
});
|
|
180
194
|
|
|
195
|
+
// ========================================
|
|
196
|
+
// harness status
|
|
197
|
+
// ========================================
|
|
198
|
+
program
|
|
199
|
+
.command('status')
|
|
200
|
+
.description('显示 Harness 状态、统计、异常检测')
|
|
201
|
+
.option('-p, --project-path <path>', '项目路径')
|
|
202
|
+
.option('-d, --detail', '显示详细信息', false)
|
|
203
|
+
.option('-a, --anomalies', '只显示异常', false)
|
|
204
|
+
.option('--hours <n>', '分析最近 N 小时', '24')
|
|
205
|
+
.action(async (options) => {
|
|
206
|
+
await status({
|
|
207
|
+
projectPath: options.projectPath,
|
|
208
|
+
detail: options.detail,
|
|
209
|
+
anomalies: options.anomalies,
|
|
210
|
+
hours: parseInt(options.hours, 10),
|
|
211
|
+
});
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
// ========================================
|
|
215
|
+
// harness flow
|
|
216
|
+
// ========================================
|
|
217
|
+
program
|
|
218
|
+
.command('flow')
|
|
219
|
+
.description('一键执行诊断 + 提案流程')
|
|
220
|
+
.option('-p, --project-path <path>', '项目路径')
|
|
221
|
+
.option('--from <step>', '从哪个步骤开始 (analyze/diagnose/propose)')
|
|
222
|
+
.option('--auto-apply', '自动应用低风险提案', false)
|
|
223
|
+
.option('--hours <n>', '分析最近 N 小时', '24')
|
|
224
|
+
.action(async (options) => {
|
|
225
|
+
await flow({
|
|
226
|
+
projectPath: options.projectPath,
|
|
227
|
+
from: options.from,
|
|
228
|
+
autoApply: options.autoApply,
|
|
229
|
+
hours: parseInt(options.hours, 10),
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
|
|
181
233
|
// 解析命令行参数
|
|
182
234
|
program.parse();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAAE,iBAAiB,EAAuC,MAAM,wBAAwB,CAAC;AAErG,MAAM,WAAW,YAAY;IAC3B,WAAW;IACX,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW;IACX,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAiDD;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAiGhE;AAsED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAgC/B"}
|
|
@@ -44,8 +44,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
44
44
|
exports.check = check;
|
|
45
45
|
exports.listLaws = listLaws;
|
|
46
46
|
const chalk_1 = __importDefault(require("chalk"));
|
|
47
|
+
const fs = __importStar(require("fs"));
|
|
48
|
+
const path = __importStar(require("path"));
|
|
47
49
|
const checker_1 = require("../../core/constraints/checker");
|
|
48
50
|
const definitions_1 = require("../../core/constraints/definitions");
|
|
51
|
+
const project_config_loader_1 = require("../../core/project-config-loader");
|
|
49
52
|
/**
|
|
50
53
|
* 从 git diff 获取变更的文件
|
|
51
54
|
*/
|
|
@@ -88,6 +91,18 @@ function detectTrigger(changedFiles, options) {
|
|
|
88
91
|
async function check(options) {
|
|
89
92
|
console.log(chalk_1.default.blue('🔍 检查约束...'));
|
|
90
93
|
console.log(chalk_1.default.gray(`预设: ${options.preset}`));
|
|
94
|
+
// 加载项目级自定义约束
|
|
95
|
+
const projectPath = options.projectPath || process.cwd();
|
|
96
|
+
const configLoader = new project_config_loader_1.ProjectConfigLoader(projectPath);
|
|
97
|
+
configLoader.load();
|
|
98
|
+
if (configLoader.hasCustomConfig()) {
|
|
99
|
+
const merged = configLoader.mergeConstraints();
|
|
100
|
+
checker_1.constraintChecker.setCustomConfig(merged);
|
|
101
|
+
console.log(chalk_1.default.gray(`自定义约束: ${merged.custom.length} 条`));
|
|
102
|
+
if (merged.disabled.length > 0) {
|
|
103
|
+
console.log(chalk_1.default.gray(`已禁用约束: ${merged.disabled.join(', ')}`));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
91
106
|
// 获取变更文件
|
|
92
107
|
const changedFiles = await getChangedFiles(options.staged);
|
|
93
108
|
if (changedFiles.length > 0) {
|
|
@@ -152,6 +167,68 @@ async function check(options) {
|
|
|
152
167
|
}
|
|
153
168
|
console.log();
|
|
154
169
|
console.log(chalk_1.default.green('✅ 约束检查通过'));
|
|
170
|
+
// 智能提示
|
|
171
|
+
const hint = await getSmartHint(projectPath);
|
|
172
|
+
if (hint) {
|
|
173
|
+
console.log();
|
|
174
|
+
console.log(chalk_1.default.gray('────────────────────────────────────'));
|
|
175
|
+
console.log(hint);
|
|
176
|
+
console.log(chalk_1.default.gray('────────────────────────────────────'));
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* 智能提示:检查是否需要提示用户下一步操作
|
|
181
|
+
*/
|
|
182
|
+
async function getSmartHint(projectPath) {
|
|
183
|
+
const tracesPath = path.join(projectPath, '.harness', 'traces', 'execution.log');
|
|
184
|
+
const statePath = path.join(projectPath, '.harness', '.state.json');
|
|
185
|
+
// 检查 trace 文件是否存在
|
|
186
|
+
if (!fs.existsSync(tracesPath)) {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
// 读取 trace 记录数
|
|
190
|
+
const tracesContent = fs.readFileSync(tracesPath, 'utf-8');
|
|
191
|
+
const lines = tracesContent.trim().split('\n').filter(Boolean);
|
|
192
|
+
const traceCount = lines.length;
|
|
193
|
+
// 读取状态
|
|
194
|
+
let state = {};
|
|
195
|
+
if (fs.existsSync(statePath)) {
|
|
196
|
+
state = JSON.parse(fs.readFileSync(statePath, 'utf-8'));
|
|
197
|
+
}
|
|
198
|
+
state.shownHints = state.shownHints || [];
|
|
199
|
+
const hints = [];
|
|
200
|
+
// 条件 1: 记录数首次达到 50
|
|
201
|
+
if (traceCount >= 50 && !state.shownHints.includes('trace_50')) {
|
|
202
|
+
hints.push('📊 记录已足够,运行 harness status 查看统计');
|
|
203
|
+
state.shownHints.push('trace_50');
|
|
204
|
+
}
|
|
205
|
+
// 条件 2: 记录数达到 100 且从未运行过诊断
|
|
206
|
+
if (traceCount >= 100 && !state.lastDiagnoseRun && !state.shownHints.includes('diagnose_suggest')) {
|
|
207
|
+
hints.push('💡 数据充足,建议运行 harness diagnose 查看诊断');
|
|
208
|
+
state.shownHints.push('diagnose_suggest');
|
|
209
|
+
}
|
|
210
|
+
// 条件 3: 检查异常趋势(简单检查绕过率)
|
|
211
|
+
const bypassCount = lines.filter(line => {
|
|
212
|
+
try {
|
|
213
|
+
const trace = JSON.parse(line);
|
|
214
|
+
return trace.result === 'bypassed';
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
return false;
|
|
218
|
+
}
|
|
219
|
+
}).length;
|
|
220
|
+
const bypassRate = traceCount > 10 ? bypassCount / traceCount : 0;
|
|
221
|
+
if (bypassRate > 0.3 && !state.shownHints.includes('high_bypass')) {
|
|
222
|
+
hints.push('⚠️ 发现异常趋势,建议运行 harness status 查看详情');
|
|
223
|
+
state.shownHints.push('high_bypass');
|
|
224
|
+
}
|
|
225
|
+
// 保存状态
|
|
226
|
+
if (hints.length > 0) {
|
|
227
|
+
fs.mkdirSync(path.dirname(statePath), { recursive: true });
|
|
228
|
+
fs.writeFileSync(statePath, JSON.stringify(state, null, 2));
|
|
229
|
+
return hints.join('\n');
|
|
230
|
+
}
|
|
231
|
+
return null;
|
|
155
232
|
}
|
|
156
233
|
/**
|
|
157
234
|
* 列出所有约束
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* harness flow 命令
|
|
3
|
+
*
|
|
4
|
+
* 一键执行诊断 + 提案流程
|
|
5
|
+
*/
|
|
6
|
+
export interface FlowOptions {
|
|
7
|
+
/** 项目路径 */
|
|
8
|
+
projectPath?: string;
|
|
9
|
+
/** 从哪个步骤开始 */
|
|
10
|
+
from?: 'analyze' | 'diagnose' | 'propose';
|
|
11
|
+
/** 自动应用低风险提案 */
|
|
12
|
+
autoApply?: boolean;
|
|
13
|
+
/** 时间范围(小时) */
|
|
14
|
+
hours?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 执行流程
|
|
18
|
+
*/
|
|
19
|
+
export declare function flow(options: FlowOptions): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/flow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,MAAM,WAAW,WAAW;IAC1B,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc;IACd,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1C,gBAAgB;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,eAAe;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuBD;;GAEG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA2L9D"}
|