@dommaker/harness 0.1.4 → 0.2.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 (65) hide show
  1. package/dist/cli/commands/check.d.ts +5 -5
  2. package/dist/cli/commands/check.d.ts.map +1 -1
  3. package/dist/cli/commands/check.js +65 -42
  4. package/dist/cli/commands/check.js.map +1 -1
  5. package/dist/core/constraints/checker.d.ts +84 -0
  6. package/dist/core/constraints/checker.d.ts.map +1 -0
  7. package/dist/core/constraints/checker.js +375 -0
  8. package/dist/core/constraints/checker.js.map +1 -0
  9. package/dist/core/constraints/definitions.d.ts +42 -0
  10. package/dist/core/constraints/definitions.d.ts.map +1 -0
  11. package/dist/core/constraints/definitions.js +438 -0
  12. package/dist/core/constraints/definitions.js.map +1 -0
  13. package/dist/core/constraints/index.d.ts +8 -0
  14. package/dist/core/constraints/index.d.ts.map +1 -0
  15. package/dist/core/constraints/index.js +36 -0
  16. package/dist/core/constraints/index.js.map +1 -0
  17. package/dist/core/index.d.ts +1 -1
  18. package/dist/core/index.d.ts.map +1 -1
  19. package/dist/core/index.js +3 -1
  20. package/dist/core/index.js.map +1 -1
  21. package/dist/index.d.ts +15 -5
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +23 -7
  24. package/dist/index.js.map +1 -1
  25. package/dist/presets/index.d.ts +3 -11
  26. package/dist/presets/index.d.ts.map +1 -1
  27. package/dist/presets/index.js +9 -19
  28. package/dist/presets/index.js.map +1 -1
  29. package/dist/presets/standard.d.ts +44 -2
  30. package/dist/presets/standard.d.ts.map +1 -1
  31. package/dist/presets/standard.js +71 -41
  32. package/dist/presets/standard.js.map +1 -1
  33. package/dist/types/constraint.d.ts +184 -0
  34. package/dist/types/constraint.d.ts.map +1 -0
  35. package/dist/types/constraint.js +34 -0
  36. package/dist/types/constraint.js.map +1 -0
  37. package/dist/types/index.d.ts +1 -1
  38. package/dist/types/index.d.ts.map +1 -1
  39. package/dist/types/index.js +2 -1
  40. package/dist/types/index.js.map +1 -1
  41. package/dist/types/iron-law.d.ts +15 -103
  42. package/dist/types/iron-law.d.ts.map +1 -1
  43. package/dist/types/iron-law.js +8 -13
  44. package/dist/types/iron-law.js.map +1 -1
  45. package/package.json +1 -1
  46. package/dist/core/iron-laws/checker.d.ts +0 -61
  47. package/dist/core/iron-laws/checker.d.ts.map +0 -1
  48. package/dist/core/iron-laws/checker.js +0 -175
  49. package/dist/core/iron-laws/checker.js.map +0 -1
  50. package/dist/core/iron-laws/definitions.d.ts +0 -28
  51. package/dist/core/iron-laws/definitions.d.ts.map +0 -1
  52. package/dist/core/iron-laws/definitions.js +0 -189
  53. package/dist/core/iron-laws/definitions.js.map +0 -1
  54. package/dist/core/iron-laws/index.d.ts +0 -6
  55. package/dist/core/iron-laws/index.d.ts.map +0 -1
  56. package/dist/core/iron-laws/index.js +0 -22
  57. package/dist/core/iron-laws/index.js.map +0 -1
  58. package/dist/presets/relaxed.d.ts +0 -8
  59. package/dist/presets/relaxed.d.ts.map +0 -1
  60. package/dist/presets/relaxed.js +0 -24
  61. package/dist/presets/relaxed.js.map +0 -1
  62. package/dist/presets/strict.d.ts +0 -8
  63. package/dist/presets/strict.d.ts.map +0 -1
  64. package/dist/presets/strict.js +0 -51
  65. package/dist/presets/strict.js.map +0 -1
@@ -1,25 +1,25 @@
1
1
  /**
2
2
  * harness check 命令
3
3
  *
4
- * 检查铁律是否满足
4
+ * 检查约束是否满足(三层:Iron Laws / Guidelines / Tips)
5
5
  */
6
- import type { IronLawTrigger } from '../../types/iron-law';
6
+ import type { ConstraintTrigger } from '../../types/constraint';
7
7
  export interface CheckOptions {
8
8
  /** 预设名称 */
9
9
  preset: string;
10
10
  /** 是否只检查暂存文件 */
11
11
  staged: boolean;
12
12
  /** 触发条件 */
13
- trigger?: IronLawTrigger;
13
+ trigger?: ConstraintTrigger;
14
14
  /** 项目路径 */
15
15
  projectPath?: string;
16
16
  }
17
17
  /**
18
- * 执行铁律检查
18
+ * 执行约束检查
19
19
  */
20
20
  export declare function check(options: CheckOptions): Promise<void>;
21
21
  /**
22
- * 列出所有铁律
22
+ * 列出所有约束
23
23
  */
24
24
  export declare function listLaws(): void;
25
25
  //# sourceMappingURL=check.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAiC,MAAM,sBAAsB,CAAC;AAE1F,MAAM,WAAW,YAAY;IAC3B,WAAW;IACX,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW;IACX,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAiDD;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA0EhE;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAY/B"}
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,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,CA0EhE;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAgC/B"}
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * harness check 命令
4
4
  *
5
- * 检查铁律是否满足
5
+ * 检查约束是否满足(三层:Iron Laws / Guidelines / Tips)
6
6
  */
7
7
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
8
  if (k2 === undefined) k2 = k;
@@ -44,8 +44,8 @@ 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 checker_1 = require("../../core/iron-laws/checker");
48
- const definitions_1 = require("../../core/iron-laws/definitions");
47
+ const checker_1 = require("../../core/constraints/checker");
48
+ const definitions_1 = require("../../core/constraints/definitions");
49
49
  /**
50
50
  * 从 git diff 获取变更的文件
51
51
  */
@@ -83,13 +83,11 @@ function detectTrigger(changedFiles, options) {
83
83
  return 'file_modification';
84
84
  }
85
85
  /**
86
- * 执行铁律检查
86
+ * 执行约束检查
87
87
  */
88
88
  async function check(options) {
89
- console.log(chalk_1.default.blue('🔍 检查铁律...'));
89
+ console.log(chalk_1.default.blue('🔍 检查约束...'));
90
90
  console.log(chalk_1.default.gray(`预设: ${options.preset}`));
91
- const checker = checker_1.IronLawChecker.getInstance();
92
- const allLaws = (0, definitions_1.getAllLaws)();
93
91
  // 获取变更文件
94
92
  const changedFiles = await getChangedFiles(options.staged);
95
93
  if (changedFiles.length > 0) {
@@ -109,57 +107,82 @@ async function check(options) {
109
107
  hasVerificationEvidence: false, // TODO: 检查是否有验证证据
110
108
  hasReuseCheck: false, // TODO: 检查是否有复用检查
111
109
  };
112
- // 执行检查
113
- const results = await checker.checkAll(context);
114
- // 统计结果
115
- const passed = results.filter(r => r.satisfied);
116
- const violations = results.filter(r => !r.satisfied);
117
- const errors = violations.filter(r => r.law?.severity === 'error');
118
- const warnings = violations.filter(r => r.law?.severity === 'warning');
110
+ // 执行三层检查
111
+ const result = await checker_1.constraintChecker.checkConstraints(context);
119
112
  // 输出结果
120
113
  console.log();
121
- if (passed.length > 0) {
122
- console.log(chalk_1.default.green(`✅ 通过: ${passed.length} 条`));
123
- passed.forEach(r => {
124
- if (r.law) {
125
- console.log(chalk_1.default.gray(` - ${r.law.id}`));
114
+ // Iron Laws
115
+ const ironLawViolations = result.ironLaws.filter(r => !r.satisfied);
116
+ if (ironLawViolations.length === 0 && result.ironLaws.length > 0) {
117
+ console.log(chalk_1.default.green(`✅ 铁律: 全部通过 (${result.ironLaws.length} 条)`));
118
+ }
119
+ else if (ironLawViolations.length > 0) {
120
+ console.log(chalk_1.default.red(`❌ 铁律违规: ${ironLawViolations.length} 条`));
121
+ ironLawViolations.forEach(r => {
122
+ if (r.constraint) {
123
+ console.log(chalk_1.default.red(` - ${r.constraint.id}: ${r.constraint.message}`));
124
+ console.log(chalk_1.default.red(` ${r.constraint.rule}`));
126
125
  }
127
126
  });
127
+ console.log();
128
+ console.log(chalk_1.default.red('🛑 铁律检查失败,请修复后再提交'));
129
+ process.exit(1);
128
130
  }
129
- if (warnings.length > 0) {
130
- console.log(chalk_1.default.yellow(`⚠️ 警告: ${warnings.length} 条`));
131
- warnings.forEach(r => {
132
- if (r.law) {
133
- console.log(chalk_1.default.yellow(` - ${r.law.id}: ${r.law.message}`));
131
+ // Guidelines
132
+ if (result.warningCount > 0) {
133
+ console.log(chalk_1.default.yellow(`⚠️ 指导原则警告: ${result.warningCount} 条`));
134
+ result.guidelines.filter(r => !r.satisfied).forEach(r => {
135
+ if (r.constraint) {
136
+ console.log(chalk_1.default.yellow(` - ${r.constraint.id}: ${r.constraint.message}`));
134
137
  }
135
138
  });
136
139
  }
137
- if (errors.length > 0) {
138
- console.log(chalk_1.default.red(`❌ 违规: ${errors.length} 条`));
139
- errors.forEach(r => {
140
- if (r.law) {
141
- console.log(chalk_1.default.red(` - ${r.law.id}: ${r.law.message}`));
142
- console.log(chalk_1.default.red(` ${r.law.rule}`));
140
+ else if (result.guidelines.length > 0) {
141
+ const passedGuidelines = result.guidelines.filter(r => r.satisfied).length;
142
+ console.log(chalk_1.default.green(`✅ 指导原则: ${passedGuidelines}/${result.guidelines.length} 通过`));
143
+ }
144
+ // Tips
145
+ if (result.tipCount > 0) {
146
+ console.log(chalk_1.default.blue(`💡 提示: ${result.tipCount} 条`));
147
+ result.tips.filter(r => !r.satisfied).forEach(r => {
148
+ if (r.constraint) {
149
+ console.log(chalk_1.default.blue(` - ${r.constraint.id}: ${r.constraint.message}`));
143
150
  }
144
151
  });
145
- console.log();
146
- console.log(chalk_1.default.red('🛑 铁律检查失败,请修复后再提交'));
147
- process.exit(1);
148
152
  }
149
153
  console.log();
150
- console.log(chalk_1.default.green('✅ 所有铁律检查通过'));
154
+ console.log(chalk_1.default.green('✅ 约束检查通过'));
151
155
  }
152
156
  /**
153
- * 列出所有铁律
157
+ * 列出所有约束
154
158
  */
155
159
  function listLaws() {
156
- const laws = (0, definitions_1.getAllLaws)();
157
- console.log(chalk_1.default.blue('\n📜 所有铁律:\n'));
158
- laws.forEach(law => {
159
- const icon = law.severity === 'error' ? '🔴' : law.severity === 'warning' ? '🟡' : '🔵';
160
- console.log(`${icon} ${chalk_1.default.bold(law.id)}`);
161
- console.log(chalk_1.default.gray(` ${law.rule}`));
162
- console.log(chalk_1.default.gray(` ${law.message}`));
160
+ console.log(chalk_1.default.blue('\n📜 所有约束:\n'));
161
+ // Iron Laws
162
+ console.log(chalk_1.default.red('🔴 铁律 (Iron Laws) - 绝对禁止,无例外:\n'));
163
+ Object.values(definitions_1.IRON_LAWS).forEach(constraint => {
164
+ console.log(chalk_1.default.red(` ${constraint.id}`));
165
+ console.log(chalk_1.default.gray(` ${constraint.rule}`));
166
+ console.log(chalk_1.default.gray(` ${constraint.message}`));
167
+ console.log();
168
+ });
169
+ // Guidelines
170
+ console.log(chalk_1.default.yellow('🟡 指导原则 (Guidelines) - 优先建议,有例外:\n'));
171
+ Object.values(definitions_1.GUIDELINES).forEach(constraint => {
172
+ console.log(chalk_1.default.yellow(` ${constraint.id}`));
173
+ console.log(chalk_1.default.gray(` ${constraint.rule}`));
174
+ console.log(chalk_1.default.gray(` ${constraint.message}`));
175
+ if (constraint.exceptions && constraint.exceptions.length > 0) {
176
+ console.log(chalk_1.default.gray(` 例外: ${constraint.exceptions.join(', ')}`));
177
+ }
178
+ console.log();
179
+ });
180
+ // Tips
181
+ console.log(chalk_1.default.blue('🔵 提示 (Tips) - 信息性,可忽略:\n'));
182
+ Object.values(definitions_1.TIPS).forEach(constraint => {
183
+ console.log(chalk_1.default.blue(` ${constraint.id}`));
184
+ console.log(chalk_1.default.gray(` ${constraint.rule}`));
185
+ console.log(chalk_1.default.gray(` ${constraint.message}`));
163
186
  console.log();
164
187
  });
165
188
  }
@@ -1 +1 @@
1
- {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/cli/commands/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * 约束检查引擎
3
+ *
4
+ * 三层约束体系检查:
5
+ * - Iron Laws:检查失败立即抛出异常
6
+ * - Guidelines:检查失败记录警告
7
+ * - Tips:检查失败记录提示
8
+ */
9
+ import type { Constraint, ConstraintContext, ConstraintResult, ConstraintCheckResult } from '../../types/constraint';
10
+ /**
11
+ * 约束检查器
12
+ */
13
+ export declare class ConstraintChecker {
14
+ private static instance;
15
+ private constructor();
16
+ /**
17
+ * 获取单例实例
18
+ */
19
+ static getInstance(): ConstraintChecker;
20
+ /**
21
+ * 检查单个约束
22
+ */
23
+ check(constraint: Constraint, context: ConstraintContext): Promise<ConstraintResult>;
24
+ /**
25
+ * 检查例外条件
26
+ */
27
+ private checkException;
28
+ /**
29
+ * 检查约束前置条件
30
+ */
31
+ private checkPrecondition;
32
+ /**
33
+ * 查找适用于当前操作的约束
34
+ */
35
+ findApplicableConstraints(context: ConstraintContext): {
36
+ ironLaws: Constraint[];
37
+ guidelines: Constraint[];
38
+ tips: Constraint[];
39
+ };
40
+ /**
41
+ * 执行三层约束检查
42
+ *
43
+ * - Iron Laws:检查失败立即抛出异常
44
+ * - Guidelines:检查失败记录警告
45
+ * - Tips:检查失败记录提示
46
+ */
47
+ checkConstraints(context: ConstraintContext): Promise<ConstraintCheckResult>;
48
+ /**
49
+ * 执行前检查(仅检查 Iron Laws)
50
+ *
51
+ * @throws ConstraintViolationError 如果有铁律违规
52
+ */
53
+ beforeExecution(context: ConstraintContext): Promise<void>;
54
+ }
55
+ /**
56
+ * 快捷函数:检查约束
57
+ */
58
+ export declare function checkConstraint(constraintId: string, context: ConstraintContext): Promise<ConstraintResult>;
59
+ /**
60
+ * 快捷函数:执行三层检查
61
+ */
62
+ export declare function checkConstraints(context: ConstraintContext): Promise<ConstraintCheckResult>;
63
+ /**
64
+ * 快捷函数:执行前检查
65
+ */
66
+ export declare function checkBeforeExecution(context: ConstraintContext): Promise<void>;
67
+ export declare const constraintChecker: ConstraintChecker;
68
+ /**
69
+ * @deprecated 使用 ConstraintChecker 代替
70
+ */
71
+ export declare const IronLawChecker: typeof ConstraintChecker;
72
+ /**
73
+ * @deprecated 使用 checkConstraint 代替
74
+ */
75
+ export declare function checkIronLaw(lawId: string, context: ConstraintContext): Promise<ConstraintResult>;
76
+ /**
77
+ * @deprecated 使用 checkConstraints 代替
78
+ */
79
+ export declare function checkAllIronLaws(context: ConstraintContext): Promise<ConstraintResult[]>;
80
+ /**
81
+ * @deprecated 使用 constraintChecker 代替
82
+ */
83
+ export declare const ironLawChecker: ConstraintChecker;
84
+ //# sourceMappingURL=checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/checker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EAEtB,MAAM,wBAAwB,CAAC;AAIhC;;GAEG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAoB;IAE3C,OAAO;IAEP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,iBAAiB;IAOvC;;OAEG;IACG,KAAK,CACT,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC;IA6B5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAkFtB;;OAEG;YACW,iBAAiB;IAwE/B;;OAEG;IACH,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,GAAG;QACrD,QAAQ,EAAE,UAAU,EAAE,CAAC;QACvB,UAAU,EAAE,UAAU,EAAE,CAAC;QACzB,IAAI,EAAE,UAAU,EAAE,CAAC;KACpB;IAmBD;;;;;;OAMG;IACG,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA8DlF;;;;OAIG;IACG,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;CAkBjE;AAMD;;GAEG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAiB3B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,qBAAqB,CAAC,CAEhC;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpF;AAGD,eAAO,MAAM,iBAAiB,mBAAkC,CAAC;AAMjE;;GAEG;AACH,eAAO,MAAM,cAAc,0BAAoB,CAAC;AAEhD;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAE3B;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAG7B;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,mBAAoB,CAAC"}