@dommaker/harness 0.8.1 → 0.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.
package/README.md CHANGED
@@ -78,6 +78,12 @@ harness contract --contract-path api/openapi.yaml
78
78
  harness review # PR 审查状态检查
79
79
  harness review --min-reviewers 2 # 要求 2 个审批
80
80
  harness review status # PR 详情
81
+
82
+ # 命令黑名单
83
+ harness command "rm -rf /" # 检查命令
84
+ harness command --level "DROP TABLE" # 显示风险等级
85
+ harness command --list # 列出所有规则
86
+ harness cmd # 别名
81
87
  ```
82
88
 
83
89
  ### Spec 验证
@@ -135,7 +141,7 @@ harness flow --auto-apply # 自动应用低风险提案
135
141
  | `verify_external_capability` | 外部能力先验证 |
136
142
  | `no_implementation_without_requirement_review` | 实现后对比需求 |
137
143
 
138
- ### 7 种门禁(均有 CLI 命令)
144
+ ### 8 种门禁(均有 CLI 命令)
139
145
 
140
146
  | 门禁 | CLI 命令 | 用途 |
141
147
  |------|:--------:|------|
@@ -145,9 +151,8 @@ harness flow --auto-apply # 自动应用低风险提案
145
151
  | SecurityGate | `security` / `sec` | 安全检查 |
146
152
  | ContractGate | `contract` | API 契约验证 |
147
153
  | ReviewGate | `review` | PR 审核检查 |
154
+ | CommandGate | `command` / `cmd` | 命令黑名单 |
148
155
  | CheckpointValidator | `validate` | 检查点验证 |
149
- | CheckpointValidator | 检查点验证 |
150
- | SpecAcceptanceGate | 验收标准检查 |
151
156
 
152
157
  ---
153
158
 
@@ -157,8 +162,8 @@ harness flow --auto-apply # 自动应用低风险提案
157
162
  import {
158
163
  IronLawChecker,
159
164
  PassesGate,
165
+ CommandGate,
160
166
  CheckpointValidator,
161
- interceptOperation,
162
167
  } from '@dommaker/harness';
163
168
 
164
169
  // 铁律检查
@@ -169,17 +174,15 @@ const results = await checker.checkAll(context);
169
174
  const gate = new PassesGate({ requireEvidence: true });
170
175
  const passed = await gate.runTests();
171
176
 
172
- // 检查点验证
173
- const validator = CheckpointValidator.getInstance();
174
- const result = await validator.validate(checkpoints, context);
175
-
176
- // 拦截器(自动执行 enforcement)
177
- await interceptOperation('task_completion_claim', context);
177
+ // 命令黑名单
178
+ const commandGate = new CommandGate();
179
+ const result = await commandGate.check('rm -rf /');
180
+ // { passed: false, message: '命令被禁止执行...' }
178
181
  ```
179
182
 
180
- ---
183
+ > 详细 API 参考:[capabilities/](capabilities/) 目录
181
184
 
182
- ## 📁 项目配置
185
+ ---
183
186
 
184
187
  ### .harness/config.yml
185
188
 
package/bin/harness.js CHANGED
@@ -27,7 +27,9 @@ const {
27
27
  contract,
28
28
  validateSchema,
29
29
  review,
30
- reviewStatus
30
+ reviewStatus,
31
+ command,
32
+ cmd
31
33
  } = require('../dist/cli/commands/index');
32
34
 
33
35
  const program = new Command();
@@ -295,5 +297,70 @@ program
295
297
  }
296
298
  });
297
299
 
300
+ // ========================================
301
+ // harness command
302
+ // ========================================
303
+ program
304
+ .command('command [cmd]')
305
+ .description('检查命令是否在黑名单中')
306
+ .alias('cmd')
307
+ .option('-l, --level', '显示风险等级')
308
+ .option('--list', '列出所有黑名单规则')
309
+ .option('--json', 'JSON 格式输出')
310
+ .option('--strict', '严格模式(warn 也阻止)')
311
+ .action(async (cmd, options, command) => {
312
+ const gate = require('../dist/gates/command').createCommandGate({ strict: options.strict });
313
+
314
+ if (options.list) {
315
+ const { DEFAULT_COMMAND_BLACKLIST } = require('../dist/gates/command');
316
+ if (options.json) {
317
+ console.log(JSON.stringify(DEFAULT_COMMAND_BLACKLIST.map(r => ({
318
+ id: r.id,
319
+ level: r.level,
320
+ message: r.message,
321
+ category: r.category,
322
+ })), null, 2));
323
+ } else {
324
+ console.log('\n命令黑名单规则:\n');
325
+ console.log(`共 ${DEFAULT_COMMAND_BLACKLIST.length} 条规则`);
326
+ console.log('使用 harness command --list --json 查看详情');
327
+ }
328
+ return;
329
+ }
330
+
331
+ if (!cmd) {
332
+ console.error('错误:请提供要检查的命令');
333
+ console.error('用法:harness command "your command"');
334
+ process.exit(1);
335
+ }
336
+
337
+ const result = await gate.check(cmd);
338
+
339
+ if (options.level) {
340
+ const { getCommandRiskLevel } = require('../dist/gates/command');
341
+ const level = getCommandRiskLevel(cmd);
342
+ if (options.json) {
343
+ console.log(JSON.stringify({ level, command: cmd }));
344
+ } else {
345
+ const levelColors = { high: '\x1b[31m', medium: '\x1b[33m', low: '\x1b[32m' };
346
+ console.log(`${levelColors[level]}${level}\x1b[0m ${cmd}`);
347
+ }
348
+ process.exit(level === 'high' ? 1 : 0);
349
+ }
350
+
351
+ if (options.json) {
352
+ console.log(JSON.stringify({
353
+ command: cmd,
354
+ passed: result.passed,
355
+ message: result.message,
356
+ details: result.details,
357
+ }, null, 2));
358
+ } else {
359
+ console.log(result.passed ? `\x1b[32m✓\x1b[0m ${result.message}` : `\x1b[31m✗\x1b[0m ${result.message}`);
360
+ }
361
+
362
+ process.exit(result.passed ? 0 : 1);
363
+ });
364
+
298
365
  // 解析命令行参数
299
366
  program.parse();
@@ -0,0 +1,12 @@
1
+ /**
2
+ * 命令黑名单检查
3
+ *
4
+ * 用法:
5
+ * harness command "rm -rf /"
6
+ * harness command --level "DROP TABLE users"
7
+ * harness command --list
8
+ */
9
+ import { Command } from 'commander';
10
+ export declare const command: Command;
11
+ export declare const cmd: Command;
12
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/command.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,OAAO,SAoFhB,CAAC;AAGL,eAAO,MAAM,GAAG,SAmDZ,CAAC"}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ /**
3
+ * 命令黑名单检查
4
+ *
5
+ * 用法:
6
+ * harness command "rm -rf /"
7
+ * harness command --level "DROP TABLE users"
8
+ * harness command --list
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.cmd = exports.command = void 0;
12
+ const commander_1 = require("commander");
13
+ const gates_1 = require("../../gates");
14
+ exports.command = new commander_1.Command('command')
15
+ .description('检查命令是否在黑名单中')
16
+ .argument('[cmd]', '要检查的命令')
17
+ .option('-l, --level', '显示风险等级')
18
+ .option('--list', '列出所有黑名单规则')
19
+ .option('--json', 'JSON 格式输出')
20
+ .option('--strict', '严格模式(warn 也阻止)')
21
+ .action(async (cmd, options) => {
22
+ // 列出所有规则
23
+ if (options.list) {
24
+ if (options.json) {
25
+ console.log(JSON.stringify(gates_1.DEFAULT_COMMAND_BLACKLIST.map((r) => ({
26
+ id: r.id,
27
+ level: r.level,
28
+ message: r.message,
29
+ category: r.category,
30
+ })), null, 2));
31
+ }
32
+ else {
33
+ console.log('\n命令黑名单规则:\n');
34
+ const byCategory = gates_1.DEFAULT_COMMAND_BLACKLIST.reduce((acc, rule) => {
35
+ if (!acc[rule.category])
36
+ acc[rule.category] = [];
37
+ acc[rule.category].push(rule);
38
+ return acc;
39
+ }, {});
40
+ for (const [category, rules] of Object.entries(byCategory)) {
41
+ console.log(`[${category}]`);
42
+ for (const rule of rules) {
43
+ const levelIcon = rule.level === 'block' ? '🚫' : rule.level === 'warn' ? '⚠️' : '📋';
44
+ console.log(` ${levelIcon} ${rule.id}: ${rule.message} (${rule.level})`);
45
+ }
46
+ console.log();
47
+ }
48
+ console.log(`共 ${gates_1.DEFAULT_COMMAND_BLACKLIST.length} 条规则`);
49
+ }
50
+ return;
51
+ }
52
+ // 需要命令参数
53
+ if (!cmd) {
54
+ console.error('错误:请提供要检查的命令');
55
+ console.error('用法:harness command "your command"');
56
+ process.exit(1);
57
+ }
58
+ // 创建门禁
59
+ const gate = (0, gates_1.createCommandGate)({ strict: options.strict });
60
+ const result = await gate.check(cmd);
61
+ if (options.level) {
62
+ // 只显示风险等级
63
+ const level = (0, gates_1.getCommandRiskLevel)(cmd);
64
+ if (options.json) {
65
+ console.log(JSON.stringify({ level, command: cmd }));
66
+ }
67
+ else {
68
+ const levelColors = {
69
+ high: '\x1b[31m',
70
+ medium: '\x1b[33m',
71
+ low: '\x1b[32m',
72
+ };
73
+ console.log(`${levelColors[level]}${level}\x1b[0m ${cmd}`);
74
+ }
75
+ process.exit(level === 'high' ? 1 : 0);
76
+ }
77
+ // 完整检查
78
+ if (options.json) {
79
+ console.log(JSON.stringify({
80
+ command: cmd,
81
+ passed: result.passed,
82
+ message: result.message,
83
+ details: result.details,
84
+ }, null, 2));
85
+ }
86
+ else {
87
+ if (result.passed) {
88
+ console.log(`\x1b[32m✓\x1b[0m ${result.message}`);
89
+ }
90
+ else {
91
+ console.log(`\x1b[31m✗\x1b[0m ${result.message}`);
92
+ }
93
+ }
94
+ process.exit(result.passed ? 0 : 1);
95
+ });
96
+ // 别名
97
+ exports.cmd = new commander_1.Command('cmd')
98
+ .description('命令黑名单检查(command 的别名)')
99
+ .argument('[cmd]', '要检查的命令')
100
+ .option('-l, --level', '显示风险等级')
101
+ .option('--list', '列出所有黑名单规则')
102
+ .option('--json', 'JSON 格式输出')
103
+ .option('--strict', '严格模式(warn 也阻止)')
104
+ .action(async (cmd, options) => {
105
+ // 复用 command 的逻辑
106
+ const gate = (0, gates_1.createCommandGate)({ strict: options.strict });
107
+ if (options.list) {
108
+ if (options.json) {
109
+ console.log(JSON.stringify(gates_1.DEFAULT_COMMAND_BLACKLIST.map((r) => ({
110
+ id: r.id,
111
+ level: r.level,
112
+ message: r.message,
113
+ category: r.category,
114
+ })), null, 2));
115
+ }
116
+ else {
117
+ console.log('\n命令黑名单规则:\n');
118
+ console.log(`共 ${gates_1.DEFAULT_COMMAND_BLACKLIST.length} 条规则`);
119
+ console.log('使用 harness command --list 查看详情');
120
+ }
121
+ return;
122
+ }
123
+ if (!cmd) {
124
+ console.error('错误:请提供要检查的命令');
125
+ process.exit(1);
126
+ }
127
+ const result = await gate.check(cmd);
128
+ if (options.level) {
129
+ const level = (0, gates_1.getCommandRiskLevel)(cmd);
130
+ console.log(level);
131
+ process.exit(level === 'high' ? 1 : 0);
132
+ }
133
+ if (options.json) {
134
+ console.log(JSON.stringify({
135
+ command: cmd,
136
+ passed: result.passed,
137
+ message: result.message,
138
+ }, null, 2));
139
+ }
140
+ else {
141
+ console.log(result.passed ? `\x1b[32m✓\x1b[0m` : `\x1b[31m✗\x1b[0m ${result.message}`);
142
+ }
143
+ process.exit(result.passed ? 0 : 1);
144
+ });
145
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/cli/commands/command.ts"],"names":[],"mappings":"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"}
@@ -14,4 +14,5 @@ export { performance, type PerformanceOptions } from './performance';
14
14
  export { security, auditDetails, type SecurityOptions } from './security';
15
15
  export { contract, validateSchema, type ContractOptions } from './contract';
16
16
  export { review, reviewStatus, type ReviewOptions } from './review';
17
+ export { command, cmd } from './command';
17
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,uBAAuB,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrF,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC/E,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC"}
@@ -3,7 +3,7 @@
3
3
  * CLI 命令导出
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.reviewStatus = exports.review = exports.validateSchema = exports.contract = exports.auditDetails = exports.security = exports.performance = exports.listAcceptanceCriteria = exports.acceptance = exports.listSpecTypes = exports.specValidate = exports.flow = exports.status = exports.report = exports.init = exports.checkCoverage = exports.runPassesGate = exports.createExampleCheckpoint = exports.validate = exports.listLaws = exports.check = void 0;
6
+ exports.cmd = exports.command = exports.reviewStatus = exports.review = exports.validateSchema = exports.contract = exports.auditDetails = exports.security = exports.performance = exports.listAcceptanceCriteria = exports.acceptance = exports.listSpecTypes = exports.specValidate = exports.flow = exports.status = exports.report = exports.init = exports.checkCoverage = exports.runPassesGate = exports.createExampleCheckpoint = exports.validate = exports.listLaws = exports.check = void 0;
7
7
  var check_1 = require("./check");
8
8
  Object.defineProperty(exports, "check", { enumerable: true, get: function () { return check_1.check; } });
9
9
  Object.defineProperty(exports, "listLaws", { enumerable: true, get: function () { return check_1.listLaws; } });
@@ -38,4 +38,7 @@ Object.defineProperty(exports, "validateSchema", { enumerable: true, get: functi
38
38
  var review_1 = require("./review");
39
39
  Object.defineProperty(exports, "review", { enumerable: true, get: function () { return review_1.review; } });
40
40
  Object.defineProperty(exports, "reviewStatus", { enumerable: true, get: function () { return review_1.reviewStatus; } });
41
+ var command_1 = require("./command");
42
+ Object.defineProperty(exports, "command", { enumerable: true, get: function () { return command_1.command; } });
43
+ Object.defineProperty(exports, "cmd", { enumerable: true, get: function () { return command_1.cmd; } });
41
44
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,iCAA6D;AAApD,8FAAA,KAAK,OAAA;AAAE,iGAAA,QAAQ,OAAA;AACxB,uCAAqF;AAA5E,oGAAA,QAAQ,OAAA;AAAE,mHAAA,uBAAuB,OAAA;AAC1C,6CAAqF;AAA5E,4GAAA,aAAa,OAAA;AAAE,4GAAA,aAAa,OAAA;AACrC,+BAAgD;AAAvC,4FAAA,IAAI,OAAA;AACb,mCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,mCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,+BAAgD;AAAvC,4FAAA,IAAI,OAAA;AACb,+BAA+E;AAAtE,oGAAA,YAAY,OAAA;AAAE,qGAAA,aAAa,OAAA;AACpC,2CAA0F;AAAjF,wGAAA,UAAU,OAAA;AAAE,oHAAA,sBAAsB,OAAA;AAC3C,6CAAqE;AAA5D,0GAAA,WAAW,OAAA;AACpB,uCAA0E;AAAjE,oGAAA,QAAQ,OAAA;AAAE,wGAAA,YAAY,OAAA;AAC/B,uCAA4E;AAAnE,oGAAA,QAAQ,OAAA;AAAE,0GAAA,cAAc,OAAA;AACjC,mCAAoE;AAA3D,gGAAA,MAAM,OAAA;AAAE,sGAAA,YAAY,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/commands/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,iCAA6D;AAApD,8FAAA,KAAK,OAAA;AAAE,iGAAA,QAAQ,OAAA;AACxB,uCAAqF;AAA5E,oGAAA,QAAQ,OAAA;AAAE,mHAAA,uBAAuB,OAAA;AAC1C,6CAAqF;AAA5E,4GAAA,aAAa,OAAA;AAAE,4GAAA,aAAa,OAAA;AACrC,+BAAgD;AAAvC,4FAAA,IAAI,OAAA;AACb,mCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,mCAAsD;AAA7C,gGAAA,MAAM,OAAA;AACf,+BAAgD;AAAvC,4FAAA,IAAI,OAAA;AACb,+BAA+E;AAAtE,oGAAA,YAAY,OAAA;AAAE,qGAAA,aAAa,OAAA;AACpC,2CAA0F;AAAjF,wGAAA,UAAU,OAAA;AAAE,oHAAA,sBAAsB,OAAA;AAC3C,6CAAqE;AAA5D,0GAAA,WAAW,OAAA;AACpB,uCAA0E;AAAjE,oGAAA,QAAQ,OAAA;AAAE,wGAAA,YAAY,OAAA;AAC/B,uCAA4E;AAAnE,oGAAA,QAAQ,OAAA;AAAE,0GAAA,cAAc,OAAA;AACjC,mCAAoE;AAA3D,gGAAA,MAAM,OAAA;AAAE,sGAAA,YAAY,OAAA;AAC7B,qCAAyC;AAAhC,kGAAA,OAAO,OAAA;AAAE,8FAAA,GAAG,OAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dommaker/harness",
3
- "version": "0.8.1",
3
+ "version": "0.8.3",
4
4
  "description": "通用工程约束框架 - 铁律系统、检查点验证、测试门控、拦截器",
5
5
  "keywords": [
6
6
  "harness",