@dommaker/harness 0.1.4 → 0.2.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.
Files changed (69) 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/core/validators/checkpoint.d.ts +13 -1
  22. package/dist/core/validators/checkpoint.d.ts.map +1 -1
  23. package/dist/core/validators/checkpoint.js +51 -0
  24. package/dist/core/validators/checkpoint.js.map +1 -1
  25. package/dist/index.d.ts +15 -5
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +23 -7
  28. package/dist/index.js.map +1 -1
  29. package/dist/presets/index.d.ts +3 -11
  30. package/dist/presets/index.d.ts.map +1 -1
  31. package/dist/presets/index.js +9 -19
  32. package/dist/presets/index.js.map +1 -1
  33. package/dist/presets/standard.d.ts +44 -2
  34. package/dist/presets/standard.d.ts.map +1 -1
  35. package/dist/presets/standard.js +71 -41
  36. package/dist/presets/standard.js.map +1 -1
  37. package/dist/types/constraint.d.ts +184 -0
  38. package/dist/types/constraint.d.ts.map +1 -0
  39. package/dist/types/constraint.js +34 -0
  40. package/dist/types/constraint.js.map +1 -0
  41. package/dist/types/index.d.ts +1 -1
  42. package/dist/types/index.d.ts.map +1 -1
  43. package/dist/types/index.js +2 -1
  44. package/dist/types/index.js.map +1 -1
  45. package/dist/types/iron-law.d.ts +15 -103
  46. package/dist/types/iron-law.d.ts.map +1 -1
  47. package/dist/types/iron-law.js +8 -13
  48. package/dist/types/iron-law.js.map +1 -1
  49. package/package.json +1 -1
  50. package/dist/core/iron-laws/checker.d.ts +0 -61
  51. package/dist/core/iron-laws/checker.d.ts.map +0 -1
  52. package/dist/core/iron-laws/checker.js +0 -175
  53. package/dist/core/iron-laws/checker.js.map +0 -1
  54. package/dist/core/iron-laws/definitions.d.ts +0 -28
  55. package/dist/core/iron-laws/definitions.d.ts.map +0 -1
  56. package/dist/core/iron-laws/definitions.js +0 -189
  57. package/dist/core/iron-laws/definitions.js.map +0 -1
  58. package/dist/core/iron-laws/index.d.ts +0 -6
  59. package/dist/core/iron-laws/index.d.ts.map +0 -1
  60. package/dist/core/iron-laws/index.js +0 -22
  61. package/dist/core/iron-laws/index.js.map +0 -1
  62. package/dist/presets/relaxed.d.ts +0 -8
  63. package/dist/presets/relaxed.d.ts.map +0 -1
  64. package/dist/presets/relaxed.js +0 -24
  65. package/dist/presets/relaxed.js.map +0 -1
  66. package/dist/presets/strict.d.ts +0 -8
  67. package/dist/presets/strict.d.ts.map +0 -1
  68. package/dist/presets/strict.js +0 -51
  69. package/dist/presets/strict.js.map +0 -1
@@ -0,0 +1,438 @@
1
+ "use strict";
2
+ /**
3
+ * 约束定义
4
+ *
5
+ * 三层约束体系:
6
+ * - IRON_LAWS:绝对禁止,无例外
7
+ * - GUIDELINES:优先建议,有例外
8
+ * - TIPS:信息性提示
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.filterLawsBySeverity = exports.TIPS = exports.GUIDELINES = exports.IRON_LAWS = exports.IronLawViolationError = void 0;
12
+ exports.getAllConstraints = getAllConstraints;
13
+ exports.findConstraintsByTrigger = findConstraintsByTrigger;
14
+ exports.getConstraint = getConstraint;
15
+ exports.getAllLaws = getAllLaws;
16
+ exports.findLawsByTrigger = findLawsByTrigger;
17
+ exports.getLaw = getLaw;
18
+ // 导出兼容类
19
+ var constraint_1 = require("../../types/constraint");
20
+ Object.defineProperty(exports, "IronLawViolationError", { enumerable: true, get: function () { return constraint_1.IronLawViolationError; } });
21
+ // ========================================
22
+ // IRON LAWS(铁律)
23
+ //
24
+ // 定义:绝对禁止,无例外,违背即阻止执行
25
+ // ========================================
26
+ exports.IRON_LAWS = {
27
+ /**
28
+ * 禁止跳过检查点验证
29
+ * 原因:安全底线,检查点是质量门控
30
+ */
31
+ no_bypass_checkpoint: {
32
+ id: 'no_bypass_checkpoint',
33
+ rule: 'NO BYPASSING CHECKPOINTS',
34
+ message: '禁止跳过检查点验证',
35
+ level: 'iron_law',
36
+ trigger: 'step_execution',
37
+ enforcement: 'checkpoint-required',
38
+ description: '所有检查点必须通过,不能跳过验证步骤。检查点是质量的最后一道防线。',
39
+ },
40
+ /**
41
+ * 禁止自评通过
42
+ * 原因:质量底线,必须有测试证据
43
+ */
44
+ no_self_approval: {
45
+ id: 'no_self_approval',
46
+ rule: 'NO SELF APPROVAL WITHOUT TEST EVIDENCE',
47
+ message: '禁止自评通过,必须提供测试证据',
48
+ level: 'iron_law',
49
+ trigger: 'task_completion_claim',
50
+ enforcement: 'passes-gate',
51
+ description: '任务完成声明必须基于真实测试结果,不能由开发者自评。测试证据包括:测试报告、覆盖率数据、CI 通过记录。',
52
+ },
53
+ /**
54
+ * 禁止无验证声明完成
55
+ * 原因:质量底线,必须有验证命令
56
+ */
57
+ no_completion_without_verification: {
58
+ id: 'no_completion_without_verification',
59
+ rule: 'NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE',
60
+ message: '禁止无验证声明完成,必须运行验证命令',
61
+ level: 'iron_law',
62
+ trigger: 'task_completion_claim',
63
+ enforcement: 'verify-completion',
64
+ description: '在声明任何任务完成之前,必须运行新鲜的、完整的验证命令。验证命令包括:npm test、npm run build、CI 流程。',
65
+ },
66
+ /**
67
+ * 禁止简化测试
68
+ * 原因:质量底线,测试困难必须解决
69
+ */
70
+ no_test_simplification: {
71
+ id: 'no_test_simplification',
72
+ rule: 'NO SIMPLIFYING TESTS TO AVOID DIFFICULTY',
73
+ message: '禁止简化测试绕过困难',
74
+ level: 'iron_law',
75
+ trigger: 'test_creation',
76
+ enforcement: 'full-test-coverage',
77
+ description: `在编写测试时,不能因为遇到困难而简化或跳过测试。
78
+
79
+ 遇到测试困难时:
80
+ 1. 分析问题:是 mock 问题?异步问题?环境问题?
81
+ 2. 尝试解决:查阅文档、搜索解决方案
82
+ 3. 请求帮助:向用户说明困难,请求指示
83
+
84
+ 禁止:
85
+ - 为了绕过 mock 困难而删除测试用例
86
+ - 为了绕过异步问题而跳过断言
87
+ - 降低测试覆盖率要求`,
88
+ },
89
+ };
90
+ // ========================================
91
+ // GUIDELINES(指导原则)
92
+ //
93
+ // 定义:优先建议,有例外,违背发警告但不阻止
94
+ // ========================================
95
+ exports.GUIDELINES = {
96
+ /**
97
+ * 禁止无调查修复 bug
98
+ * 例外:简单 typo、配置错误
99
+ */
100
+ no_fix_without_root_cause: {
101
+ id: 'no_fix_without_root_cause',
102
+ rule: 'NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST',
103
+ message: '复杂 bug 必须先调查根本原因',
104
+ level: 'guideline',
105
+ trigger: 'bug_fix_attempt',
106
+ enforcement: 'debug-systematic',
107
+ description: `在尝试修复 bug 之前,按复杂度区分调查要求:
108
+
109
+ [复杂 bug - 必须系统性调查]
110
+ - 业务逻辑错误(需追踪数据流)
111
+ - 状态不一致(需分析状态变化链)
112
+ - 性能问题(需定位瓶颈)
113
+ - 多模块联动问题(需分析调用链)
114
+
115
+ [简单 bug - 快速确认即可]
116
+ - typo/拼写错误
117
+ - 配置值错误
118
+ - 缺少必要配置
119
+
120
+ [禁止]
121
+ - 没有任何调查就直接猜测修复
122
+ - 看到 error 就直接 try-catch 掩盖`,
123
+ exceptions: ['simple_typo', 'config_value_error', 'missing_config'],
124
+ },
125
+ /**
126
+ * 业务逻辑代码必须先写测试
127
+ * 例外:配置文件、类型定义
128
+ */
129
+ no_code_without_test: {
130
+ id: 'no_code_without_test',
131
+ rule: 'PRODUCTION LOGIC CODE MUST HAVE TESTS FIRST',
132
+ message: '业务逻辑代码必须先写测试',
133
+ level: 'guideline',
134
+ trigger: 'code_implementation',
135
+ enforcement: 'tdd-cycle',
136
+ description: `在编写代码时,按类型区分测试要求:
137
+
138
+ [必须先写测试]
139
+ - 业务逻辑代码(算法、计算、数据处理)
140
+ - 工具函数(可复用的独立函数)
141
+ - API 接口(输入输出验证)
142
+ - 核心组件(影响系统行为的组件)
143
+
144
+ [不强制测试]
145
+ - 配置文件(config、env)
146
+ - 类型定义文件(.d.ts、interface)
147
+ - 简单 getter/setter
148
+ - 纯展示 UI 组件(无交互逻辑)`,
149
+ exceptions: ['config_file', 'type_definition', 'simple_accessor', 'pure_display_component'],
150
+ },
151
+ /**
152
+ * 避免 any 类型
153
+ * 例外:JSON.parse、第三方库无类型
154
+ */
155
+ no_any_type: {
156
+ id: 'no_any_type',
157
+ rule: 'AVOID ANY TYPE, USE UNKNOWN OR SPECIFIC TYPES',
158
+ message: '避免 any 类型',
159
+ level: 'guideline',
160
+ trigger: 'code_implementation',
161
+ enforcement: 'type-safe',
162
+ description: `TypeScript 代码中应避免使用 any 类型:
163
+
164
+ [推荐做法]
165
+ - 使用 unknown + 类型守卫
166
+ - 使用具体类型定义
167
+ - 使用泛型约束
168
+
169
+ [允许例外] 但需添加注释说明
170
+ - JSON.parse/JSON.stringify 结果
171
+ - 第三方库无类型定义
172
+ - 迁移遗留代码临时使用`,
173
+ exceptions: ['json_parse_result', 'third_party_no_types', 'legacy_migration'],
174
+ },
175
+ /**
176
+ * 简单方案优先
177
+ * 例外:扩展性、安全性、性能需求
178
+ */
179
+ simplest_solution_first: {
180
+ id: 'simplest_solution_first',
181
+ rule: 'CHECK LOCAL/SIMPLE OPTIONS BEFORE REMOTE/COMPLEX',
182
+ message: '先检查本地/简单方案',
183
+ level: 'guideline',
184
+ trigger: ['feature_development', 'module_extension', 'code_implementation'],
185
+ enforcement: 'check-local-first',
186
+ description: `在实现功能时,必须按顺序检查:
187
+ 1) 是否有本地数据源(内存/文件)?
188
+ 2) 是否有更简单的方案(更少依赖/更少代码)?
189
+ 3) 如需远程查询/复杂架构,必须说明理由。
190
+
191
+ 例外情况(可跳过简单方案):
192
+ - scalability_required: 需要多实例/分布式部署
193
+ - security_required: 需要加密/鉴权等安全措施
194
+ - performance_required: 本地方案性能不足
195
+ - reliability_required: 需要持久化/高可用`,
196
+ exceptions: ['scalability_required', 'security_required', 'performance_required', 'reliability_required'],
197
+ },
198
+ /**
199
+ * 复用检查优先
200
+ * 例外:紧急情况
201
+ */
202
+ no_creation_without_reuse_check: {
203
+ id: 'no_creation_without_reuse_check',
204
+ rule: 'NO NEW CAPABILITIES WITHOUT REUSE CHECK FIRST',
205
+ message: '创建新能力前必须检查复用',
206
+ level: 'guideline',
207
+ trigger: [
208
+ 'step_creation',
209
+ 'tool_creation',
210
+ 'workflow_creation',
211
+ 'module_creation',
212
+ 'module_extension',
213
+ 'feature_development',
214
+ ],
215
+ enforcement: 'reuse-first',
216
+ description: `在创建新能力之前,必须先执行复用检查:
217
+
218
+ 1. 查询现有能力索引
219
+ 2. 检查是否有功能相似的能力
220
+ 3. 评估是否可以复用或扩展
221
+ 4. 记录复用检查结果
222
+
223
+ 复用优先级:
224
+ 1. 直接复用现有能力
225
+ 2. 扩展现有能力
226
+ 3. 组合多个现有能力
227
+ 4. 创建新能力`,
228
+ },
229
+ /**
230
+ * 功能清单同步
231
+ * 例外:内部重构、bug fix
232
+ */
233
+ capability_sync: {
234
+ id: 'capability_sync',
235
+ rule: 'CODE CHANGES MUST UPDATE CAPABILITIES.MD',
236
+ message: '核心模块变更必须同步功能清单',
237
+ level: 'guideline',
238
+ trigger: ['module_creation', 'module_modification', 'module_deletion', 'module_extension'],
239
+ enforcement: 'update-capabilities',
240
+ description: `在创建/修改/删除/扩展核心模块时,必须同步更新 CAPABILITIES.md:
241
+
242
+ [必须更新]
243
+ - 新增模块/功能
244
+ - 修改模块对外接口
245
+ - 删除模块/功能
246
+ - 扩展模块能力
247
+
248
+ [不强制更新]
249
+ - 内部重构不影响对外接口
250
+ - bug fix 不改变功能
251
+ - 性能优化不改变接口`,
252
+ exceptions: ['internal_refactor', 'bug_fix_only', 'performance_optimization'],
253
+ },
254
+ /**
255
+ * 禁止砍功能
256
+ * 例外:冗余代码清理
257
+ */
258
+ no_simplification_without_approval: {
259
+ id: 'no_simplification_without_approval',
260
+ rule: 'NO SIMPLIFYING LOGIC WITHOUT USER APPROVAL',
261
+ message: '禁止砍功能,合理重构除外',
262
+ level: 'guideline',
263
+ trigger: 'code_implementation',
264
+ enforcement: 'preserve-complexity',
265
+ description: `在实现或修改代码时,区分简化类型:
266
+
267
+ [禁止] 必须向用户说明并获取批准
268
+ - 为了赶进度砍掉必要功能
269
+ - 为了省事跳过边界条件处理
270
+ - 为了简化逻辑牺牲用户体验
271
+
272
+ [允许] 合理优化,不需要批准
273
+ - 发现冗余代码后的重构优化
274
+ - 用更简洁的实现达到相同效果
275
+ - 删除不再使用的遗留代码`,
276
+ exceptions: ['redundant_code_cleanup', 'same_effect_refactor', 'unused_code_removal'],
277
+ },
278
+ /**
279
+ * 技能需要测试
280
+ * 例外:MVP
281
+ */
282
+ no_skill_without_test: {
283
+ id: 'no_skill_without_test',
284
+ rule: 'NO SKILL WITHOUT A FAILING TEST FIRST',
285
+ message: '创建技能前必须先定义测试场景',
286
+ level: 'guideline',
287
+ trigger: 'skill_creation',
288
+ enforcement: 'skill-test-scenario',
289
+ description: `在创建新的 agent 技能之前,必须先定义测试场景:
290
+
291
+ 1. 定义输入/输出期望
292
+ 2. 定义边界条件
293
+ 3. 定义失败场景
294
+ 4. 编写测试用例
295
+
296
+ 测试场景帮助:
297
+ - 明确技能的功能边界
298
+ - 验证技能的正确性
299
+ - 防止回归`,
300
+ },
301
+ /**
302
+ * 测试覆盖率要求
303
+ * 例外:遗留代码
304
+ */
305
+ test_coverage_required: {
306
+ id: 'test_coverage_required',
307
+ rule: 'TEST COVERAGE MUST MEET REQUIREMENTS',
308
+ message: '测试覆盖率必须达到要求',
309
+ level: 'guideline',
310
+ trigger: 'task_completion_claim',
311
+ enforcement: 'check-coverage',
312
+ description: `在提交代码前,测试覆盖率必须达到项目要求(默认 80%)。
313
+
314
+ 检查命令:
315
+ - npm run test:coverage
316
+ - 查看覆盖率报告
317
+
318
+ 提升覆盖率:
319
+ - 为未覆盖的分支添加测试
320
+ - 为边界条件添加测试`,
321
+ },
322
+ };
323
+ // ========================================
324
+ // TIPS(提示)
325
+ //
326
+ // 定义:信息性提示,可忽略
327
+ // ========================================
328
+ exports.TIPS = {
329
+ /**
330
+ * 建议写 README
331
+ */
332
+ readme_required: {
333
+ id: 'readme_required',
334
+ rule: 'NEW MODULES SHOULD HAVE README',
335
+ message: '建议为新模块创建 README',
336
+ level: 'tip',
337
+ trigger: 'module_creation',
338
+ enforcement: 'create-readme',
339
+ description: `创建新模块时建议同时创建 README.md,说明:
340
+
341
+ - 模块用途
342
+ - 使用方法
343
+ - API 文档
344
+ - 示例代码
345
+
346
+ README 帮助其他开发者快速了解模块。`,
347
+ },
348
+ /**
349
+ * 建议写 API 文档
350
+ */
351
+ doc_required_for_public_api: {
352
+ id: 'doc_required_for_public_api',
353
+ rule: 'PUBLIC API SHOULD HAVE DOCUMENTATION',
354
+ message: '建议为公共 API 添加文档注释',
355
+ level: 'tip',
356
+ trigger: 'export_change',
357
+ enforcement: 'add-docs',
358
+ description: `所有导出的函数、类、接口建议添加 JSDoc 注释:
359
+
360
+ \`\`\`typescript
361
+ /**
362
+ * 计算两个数的和
363
+ * @param a 第一个数
364
+ * @param b 第二个数
365
+ * @returns 两数之和
366
+ */
367
+ export function add(a: number, b: number): number {
368
+ return a + b;
369
+ }
370
+ \`\`\`
371
+
372
+ 文档注释帮助 IDE 提供智能提示。`,
373
+ },
374
+ };
375
+ // ========================================
376
+ // 辅助函数
377
+ // ========================================
378
+ /**
379
+ * 获取所有约束(三层合并)
380
+ */
381
+ function getAllConstraints() {
382
+ return [
383
+ ...Object.values(exports.IRON_LAWS),
384
+ ...Object.values(exports.GUIDELINES),
385
+ ...Object.values(exports.TIPS),
386
+ ];
387
+ }
388
+ /**
389
+ * 根据触发条件查找适用的约束
390
+ */
391
+ function findConstraintsByTrigger(trigger) {
392
+ return getAllConstraints().filter(constraint => {
393
+ const triggers = Array.isArray(constraint.trigger) ? constraint.trigger : [constraint.trigger];
394
+ return triggers.includes(trigger);
395
+ });
396
+ }
397
+ /**
398
+ * 根据 ID 获取约束
399
+ */
400
+ function getConstraint(id) {
401
+ return exports.IRON_LAWS[id] || exports.GUIDELINES[id] || exports.TIPS[id];
402
+ }
403
+ // ========================================
404
+ // 向后兼容的函数
405
+ // ========================================
406
+ /**
407
+ * @deprecated 使用 getAllConstraints 代替
408
+ */
409
+ function getAllLaws() {
410
+ return getAllConstraints();
411
+ }
412
+ /**
413
+ * @deprecated 使用 findConstraintsByTrigger 代替
414
+ */
415
+ function findLawsByTrigger(trigger) {
416
+ return findConstraintsByTrigger(trigger);
417
+ }
418
+ /**
419
+ * @deprecated 使用 getConstraint 代替
420
+ */
421
+ function getLaw(id) {
422
+ return getConstraint(id);
423
+ }
424
+ /**
425
+ * @deprecated 使用 GUIDELINES 代替
426
+ */
427
+ const filterLawsBySeverity = (severity) => {
428
+ // 向后兼容映射
429
+ if (severity === 'error')
430
+ return Object.values(exports.IRON_LAWS);
431
+ if (severity === 'warning')
432
+ return Object.values(exports.GUIDELINES);
433
+ if (severity === 'info')
434
+ return Object.values(exports.TIPS);
435
+ return [];
436
+ };
437
+ exports.filterLawsBySeverity = filterLawsBySeverity;
438
+ //# sourceMappingURL=definitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../../src/core/constraints/definitions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * 约束模块入口
3
+ */
4
+ export { IRON_LAWS, GUIDELINES, TIPS, getAllConstraints, findConstraintsByTrigger, getConstraint, getAllLaws, findLawsByTrigger, getLaw, filterLawsBySeverity, } from './definitions';
5
+ export { ConstraintChecker, checkConstraint, checkConstraints, checkBeforeExecution, constraintChecker, IronLawChecker, checkIronLaw, checkAllIronLaws, ironLawChecker, } from './checker';
6
+ export type { ConstraintId, ConstraintLevel, ConstraintTrigger, Constraint, ConstraintResult, ConstraintContext, ConstraintCheckResult, IronLawId, IronLawSeverity, IronLawTrigger, IronLaw, IronLawResult, IronLawContext, } from '../../types/constraint';
7
+ export { ConstraintViolationError, IronLawViolationError, } from '../../types/constraint';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/constraints/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,SAAS,EACT,UAAU,EACV,IAAI,EACJ,iBAAiB,EACjB,wBAAwB,EACxB,aAAa,EAEb,UAAU,EACV,iBAAiB,EACjB,MAAM,EACN,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EAEjB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,cAAc,GACf,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EAErB,SAAS,EACT,eAAe,EACf,cAAc,EACd,OAAO,EACP,aAAa,EACb,cAAc,GACf,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,wBAAwB,EAExB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /**
3
+ * 约束模块入口
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.IronLawViolationError = exports.ConstraintViolationError = exports.ironLawChecker = exports.checkAllIronLaws = exports.checkIronLaw = exports.IronLawChecker = exports.constraintChecker = exports.checkBeforeExecution = exports.checkConstraints = exports.checkConstraint = exports.ConstraintChecker = exports.filterLawsBySeverity = exports.getLaw = exports.findLawsByTrigger = exports.getAllLaws = exports.getConstraint = exports.findConstraintsByTrigger = exports.getAllConstraints = exports.TIPS = exports.GUIDELINES = exports.IRON_LAWS = void 0;
7
+ // 三层约束定义
8
+ var definitions_1 = require("./definitions");
9
+ Object.defineProperty(exports, "IRON_LAWS", { enumerable: true, get: function () { return definitions_1.IRON_LAWS; } });
10
+ Object.defineProperty(exports, "GUIDELINES", { enumerable: true, get: function () { return definitions_1.GUIDELINES; } });
11
+ Object.defineProperty(exports, "TIPS", { enumerable: true, get: function () { return definitions_1.TIPS; } });
12
+ Object.defineProperty(exports, "getAllConstraints", { enumerable: true, get: function () { return definitions_1.getAllConstraints; } });
13
+ Object.defineProperty(exports, "findConstraintsByTrigger", { enumerable: true, get: function () { return definitions_1.findConstraintsByTrigger; } });
14
+ Object.defineProperty(exports, "getConstraint", { enumerable: true, get: function () { return definitions_1.getConstraint; } });
15
+ // 向后兼容
16
+ Object.defineProperty(exports, "getAllLaws", { enumerable: true, get: function () { return definitions_1.getAllLaws; } });
17
+ Object.defineProperty(exports, "findLawsByTrigger", { enumerable: true, get: function () { return definitions_1.findLawsByTrigger; } });
18
+ Object.defineProperty(exports, "getLaw", { enumerable: true, get: function () { return definitions_1.getLaw; } });
19
+ Object.defineProperty(exports, "filterLawsBySeverity", { enumerable: true, get: function () { return definitions_1.filterLawsBySeverity; } });
20
+ // 约束检查器
21
+ var checker_1 = require("./checker");
22
+ Object.defineProperty(exports, "ConstraintChecker", { enumerable: true, get: function () { return checker_1.ConstraintChecker; } });
23
+ Object.defineProperty(exports, "checkConstraint", { enumerable: true, get: function () { return checker_1.checkConstraint; } });
24
+ Object.defineProperty(exports, "checkConstraints", { enumerable: true, get: function () { return checker_1.checkConstraints; } });
25
+ Object.defineProperty(exports, "checkBeforeExecution", { enumerable: true, get: function () { return checker_1.checkBeforeExecution; } });
26
+ Object.defineProperty(exports, "constraintChecker", { enumerable: true, get: function () { return checker_1.constraintChecker; } });
27
+ // 向后兼容
28
+ Object.defineProperty(exports, "IronLawChecker", { enumerable: true, get: function () { return checker_1.IronLawChecker; } });
29
+ Object.defineProperty(exports, "checkIronLaw", { enumerable: true, get: function () { return checker_1.checkIronLaw; } });
30
+ Object.defineProperty(exports, "checkAllIronLaws", { enumerable: true, get: function () { return checker_1.checkAllIronLaws; } });
31
+ Object.defineProperty(exports, "ironLawChecker", { enumerable: true, get: function () { return checker_1.ironLawChecker; } });
32
+ var constraint_1 = require("../../types/constraint");
33
+ Object.defineProperty(exports, "ConstraintViolationError", { enumerable: true, get: function () { return constraint_1.ConstraintViolationError; } });
34
+ // 向后兼容
35
+ Object.defineProperty(exports, "IronLawViolationError", { enumerable: true, get: function () { return constraint_1.IronLawViolationError; } });
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/constraints/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,SAAS;AACT,6CAYuB;AAXrB,wGAAA,SAAS,OAAA;AACT,yGAAA,UAAU,OAAA;AACV,mGAAA,IAAI,OAAA;AACJ,gHAAA,iBAAiB,OAAA;AACjB,uHAAA,wBAAwB,OAAA;AACxB,4GAAA,aAAa,OAAA;AACb,OAAO;AACP,yGAAA,UAAU,OAAA;AACV,gHAAA,iBAAiB,OAAA;AACjB,qGAAA,MAAM,OAAA;AACN,mHAAA,oBAAoB,OAAA;AAGtB,QAAQ;AACR,qCAWmB;AAVjB,4GAAA,iBAAiB,OAAA;AACjB,0GAAA,eAAe,OAAA;AACf,2GAAA,gBAAgB,OAAA;AAChB,+GAAA,oBAAoB,OAAA;AACpB,4GAAA,iBAAiB,OAAA;AACjB,OAAO;AACP,yGAAA,cAAc,OAAA;AACd,uGAAA,YAAY,OAAA;AACZ,2GAAA,gBAAgB,OAAA;AAChB,yGAAA,cAAc,OAAA;AAqBhB,qDAIgC;AAH9B,sHAAA,wBAAwB,OAAA;AACxB,OAAO;AACP,mHAAA,qBAAqB,OAAA"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * 核心模块导出
3
3
  */
4
- export * from './iron-laws';
4
+ export * from './constraints';
5
5
  export * from './validators';
6
6
  export * from './session';
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,cAAc,eAAe,CAAC;AAE9B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC"}
@@ -17,7 +17,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
17
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- __exportStar(require("./iron-laws"), exports);
20
+ // 约束系统(三层:Iron Laws / Guidelines / Tips)
21
+ // 包含向后兼容的 IronLaw* 导出
22
+ __exportStar(require("./constraints"), exports);
21
23
  __exportStar(require("./validators"), exports);
22
24
  __exportStar(require("./session"), exports);
23
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,8CAA4B;AAC5B,+CAA6B;AAC7B,4CAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;AAEH,yCAAyC;AACzC,sBAAsB;AACtB,gDAA8B;AAE9B,+CAA6B;AAC7B,4CAA0B"}
@@ -3,14 +3,22 @@
3
3
  *
4
4
  * 在每个步骤执行后,自动验证检查点是否满足
5
5
  */
6
- import type { Checkpoint, CheckpointResult, CheckpointContext } from '../../types/checkpoint';
6
+ import type { Checkpoint, CheckpointResult, CheckpointContext, CheckType } from '../../types/checkpoint';
7
7
  /**
8
8
  * 检查点验证器
9
9
  */
10
10
  export declare class CheckpointValidator {
11
11
  private static instance;
12
+ /**
13
+ * 支持的检查类型列表
14
+ */
15
+ private static readonly SUPPORTED_CHECK_TYPES;
12
16
  private constructor();
13
17
  static getInstance(): CheckpointValidator;
18
+ /**
19
+ * 获取支持的检查类型
20
+ */
21
+ getSupportedCheckTypes(): CheckType[];
14
22
  /**
15
23
  * 验证检查点
16
24
  */
@@ -31,6 +39,10 @@ export declare class CheckpointValidator {
31
39
  * 检查文件包含内容
32
40
  */
33
41
  private checkFileContains;
42
+ /**
43
+ * 检查文件不包含内容
44
+ */
45
+ private checkFileNotContains;
34
46
  /**
35
47
  * 检查命令执行成功
36
48
  */
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../../src/core/validators/checkpoint.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EACV,UAAU,EAEV,gBAAgB,EAEhB,iBAAiB,EAElB,MAAM,wBAAwB,CAAC;AAIhC;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsB;IAE7C,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,mBAAmB;IAOzC;;OAEG;IACG,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA6B7F;;OAEG;YACW,YAAY;IA6C1B;;OAEG;YACW,eAAe;IAa7B;;OAEG;YACW,iBAAiB;IAyB/B;;OAEG;YACW,iBAAiB;IA0B/B;;OAEG;YACW,mBAAmB;IAwBjC;;OAEG;YACW,kBAAkB;IA4BhC;;OAEG;YACW,mBAAmB;IAcjC;;OAEG;YACW,sBAAsB;IAcpC;;OAEG;YACW,kBAAkB;IAehC;;OAEG;YACW,aAAa;IA6B3B;;OAEG;YACW,eAAe;IA4B7B;;OAEG;YACW,aAAa;IAgC3B;;OAEG;YACW,WAAW;IAgBzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,YAAY;CAarB;AAGD,eAAO,MAAM,mBAAmB,qBAAoC,CAAC;AAErE;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAE3B"}
1
+ {"version":3,"file":"checkpoint.d.ts","sourceRoot":"","sources":["../../../src/core/validators/checkpoint.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EACV,UAAU,EAEV,gBAAgB,EAEhB,iBAAiB,EACjB,SAAS,EACV,MAAM,wBAAwB,CAAC;AAIhC;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsB;IAE7C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAc3C;IAEF,OAAO;IAEP,MAAM,CAAC,WAAW,IAAI,mBAAmB;IAOzC;;OAEG;IACH,sBAAsB,IAAI,SAAS,EAAE;IAIrC;;OAEG;IACG,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA6B7F;;OAEG;YACW,YAAY;IA+C1B;;OAEG;YACW,eAAe;IAa7B;;OAEG;YACW,iBAAiB;IAyB/B;;OAEG;YACW,iBAAiB;IA0B/B;;OAEG;YACW,oBAAoB;IA0BlC;;OAEG;YACW,mBAAmB;IAwBjC;;OAEG;YACW,kBAAkB;IA4BhC;;OAEG;YACW,mBAAmB;IAcjC;;OAEG;YACW,sBAAsB;IAcpC;;OAEG;YACW,kBAAkB;IAehC;;OAEG;YACW,aAAa;IA6B3B;;OAEG;YACW,eAAe;IA4B7B;;OAEG;YACW,aAAa;IAgC3B;;OAEG;YACW,WAAW;IAgBzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAUvB;;OAEG;IACH,OAAO,CAAC,YAAY;CAarB;AAGD,eAAO,MAAM,mBAAmB,qBAAoC,CAAC;AAErE;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAE3B"}
@@ -50,6 +50,24 @@ const execAsync = (0, util_1.promisify)(child_process_1.exec);
50
50
  */
51
51
  class CheckpointValidator {
52
52
  static instance;
53
+ /**
54
+ * 支持的检查类型列表
55
+ */
56
+ static SUPPORTED_CHECK_TYPES = [
57
+ 'file_exists',
58
+ 'file_not_empty',
59
+ 'file_contains',
60
+ 'file_not_contains',
61
+ 'command_success',
62
+ 'command_output',
63
+ 'output_contains',
64
+ 'output_not_contains',
65
+ 'output_matches',
66
+ 'json_path',
67
+ 'http_status',
68
+ 'http_body',
69
+ 'custom',
70
+ ];
53
71
  constructor() { }
54
72
  static getInstance() {
55
73
  if (!CheckpointValidator.instance) {
@@ -57,6 +75,12 @@ class CheckpointValidator {
57
75
  }
58
76
  return CheckpointValidator.instance;
59
77
  }
78
+ /**
79
+ * 获取支持的检查类型
80
+ */
81
+ getSupportedCheckTypes() {
82
+ return [...CheckpointValidator.SUPPORTED_CHECK_TYPES];
83
+ }
60
84
  /**
61
85
  * 验证检查点
62
86
  */
@@ -96,6 +120,8 @@ class CheckpointValidator {
96
120
  return await this.checkFileNotEmpty(check, context);
97
121
  case 'file_contains':
98
122
  return await this.checkFileContains(check, context);
123
+ case 'file_not_contains':
124
+ return await this.checkFileNotContains(check, context);
99
125
  case 'command_success':
100
126
  return await this.checkCommandSuccess(check, context);
101
127
  case 'command_output':
@@ -195,6 +221,31 @@ class CheckpointValidator {
195
221
  expected: true,
196
222
  };
197
223
  }
224
+ /**
225
+ * 检查文件不包含内容
226
+ */
227
+ async checkFileNotContains(check, context) {
228
+ const filePath = this.resolvePath(check.config.path || '', context.workdir);
229
+ const content = check.config.content || '';
230
+ if (!fs.existsSync(filePath)) {
231
+ return {
232
+ checkId: check.id,
233
+ passed: false,
234
+ message: `文件不存在: ${filePath}`,
235
+ actual: null,
236
+ expected: `不包含: ${content}`,
237
+ };
238
+ }
239
+ const fileContent = fs.readFileSync(filePath, 'utf-8');
240
+ const notContains = !fileContent.includes(content);
241
+ return {
242
+ checkId: check.id,
243
+ passed: notContains,
244
+ message: notContains ? `文件不包含内容: ${content}` : `文件包含内容: ${content}`,
245
+ actual: !notContains,
246
+ expected: false,
247
+ };
248
+ }
198
249
  /**
199
250
  * 检查命令执行成功
200
251
  */