@dommaker/harness 0.8.3 → 0.9.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 (339) hide show
  1. package/README.md +127 -187
  2. package/bin/harness.js +15 -65
  3. package/dist/agents/index.d.ts +3 -0
  4. package/dist/agents/index.d.ts.map +1 -0
  5. package/dist/agents/index.js +19 -0
  6. package/dist/agents/index.js.map +1 -0
  7. package/dist/agents/lifecycle.d.ts +68 -0
  8. package/dist/agents/lifecycle.d.ts.map +1 -0
  9. package/dist/agents/lifecycle.js +181 -0
  10. package/dist/agents/lifecycle.js.map +1 -0
  11. package/dist/agents/types.d.ts +42 -0
  12. package/dist/agents/types.d.ts.map +1 -0
  13. package/dist/agents/types.js +6 -0
  14. package/dist/agents/types.js.map +1 -0
  15. package/dist/architecture/cross-project-checker.d.ts +19 -1
  16. package/dist/architecture/cross-project-checker.d.ts.map +1 -1
  17. package/dist/architecture/cross-project-checker.js +72 -60
  18. package/dist/architecture/cross-project-checker.js.map +1 -1
  19. package/dist/cli/commands/acceptance.d.ts.map +1 -1
  20. package/dist/cli/commands/acceptance.js +1 -0
  21. package/dist/cli/commands/acceptance.js.map +1 -1
  22. package/dist/cli/commands/check.d.ts.map +1 -1
  23. package/dist/cli/commands/check.js +2 -4
  24. package/dist/cli/commands/check.js.map +1 -1
  25. package/dist/cli/commands/command.d.ts +10 -3
  26. package/dist/cli/commands/command.d.ts.map +1 -1
  27. package/dist/cli/commands/command.js +7 -71
  28. package/dist/cli/commands/command.js.map +1 -1
  29. package/dist/cli/commands/index.d.ts +1 -1
  30. package/dist/cli/commands/index.d.ts.map +1 -1
  31. package/dist/cli/commands/index.js +2 -3
  32. package/dist/cli/commands/index.js.map +1 -1
  33. package/dist/cli/commands/passes-gate.d.ts.map +1 -1
  34. package/dist/cli/commands/passes-gate.js +2 -4
  35. package/dist/cli/commands/passes-gate.js.map +1 -1
  36. package/dist/cli/commands/review.d.ts.map +1 -1
  37. package/dist/cli/commands/review.js +27 -63
  38. package/dist/cli/commands/review.js.map +1 -1
  39. package/dist/cli/commands/security.d.ts +1 -1
  40. package/dist/cli/commands/security.d.ts.map +1 -1
  41. package/dist/cli/commands/security.js +40 -94
  42. package/dist/cli/commands/security.js.map +1 -1
  43. package/dist/cli/commands/status.d.ts.map +1 -1
  44. package/dist/cli/commands/status.js +2 -2
  45. package/dist/cli/commands/status.js.map +1 -1
  46. package/dist/constraints/definitions.d.ts +39 -0
  47. package/dist/constraints/definitions.d.ts.map +1 -0
  48. package/dist/constraints/definitions.js +71 -0
  49. package/dist/constraints/definitions.js.map +1 -0
  50. package/dist/constraints/index.d.ts +5 -0
  51. package/dist/constraints/index.d.ts.map +1 -0
  52. package/dist/constraints/index.js +21 -0
  53. package/dist/constraints/index.js.map +1 -0
  54. package/dist/constraints/quality.d.ts +11 -0
  55. package/dist/constraints/quality.d.ts.map +1 -0
  56. package/dist/constraints/quality.js +257 -0
  57. package/dist/constraints/quality.js.map +1 -0
  58. package/dist/constraints/registry.d.ts +64 -0
  59. package/dist/constraints/registry.d.ts.map +1 -0
  60. package/dist/constraints/registry.js +167 -0
  61. package/dist/constraints/registry.js.map +1 -0
  62. package/dist/constraints/safety.d.ts +13 -0
  63. package/dist/constraints/safety.d.ts.map +1 -0
  64. package/dist/constraints/safety.js +103 -0
  65. package/dist/constraints/safety.js.map +1 -0
  66. package/dist/constraints/types.d.ts +53 -0
  67. package/dist/constraints/types.d.ts.map +1 -0
  68. package/dist/constraints/types.js +8 -0
  69. package/dist/constraints/types.js.map +1 -0
  70. package/dist/context/compaction.d.ts +57 -0
  71. package/dist/context/compaction.d.ts.map +1 -0
  72. package/dist/context/compaction.js +166 -0
  73. package/dist/context/compaction.js.map +1 -0
  74. package/dist/context/file-budget.d.ts +40 -0
  75. package/dist/context/file-budget.d.ts.map +1 -0
  76. package/dist/context/file-budget.js +147 -0
  77. package/dist/context/file-budget.js.map +1 -0
  78. package/dist/context/index.d.ts +15 -0
  79. package/dist/context/index.d.ts.map +1 -0
  80. package/dist/context/index.js +31 -0
  81. package/dist/context/index.js.map +1 -0
  82. package/dist/context/knowledge-injector.d.ts +49 -0
  83. package/dist/context/knowledge-injector.d.ts.map +1 -0
  84. package/dist/context/knowledge-injector.js +122 -0
  85. package/dist/context/knowledge-injector.js.map +1 -0
  86. package/dist/context/progressive-loader.d.ts +0 -1
  87. package/dist/context/progressive-loader.d.ts.map +1 -1
  88. package/dist/context/progressive-loader.js +15 -32
  89. package/dist/context/progressive-loader.js.map +1 -1
  90. package/dist/context/session-manager.d.ts +67 -0
  91. package/dist/context/session-manager.d.ts.map +1 -0
  92. package/dist/context/session-manager.js +275 -0
  93. package/dist/context/session-manager.js.map +1 -0
  94. package/dist/context/token-pipeline.d.ts +55 -0
  95. package/dist/context/token-pipeline.d.ts.map +1 -0
  96. package/dist/context/token-pipeline.js +220 -0
  97. package/dist/context/token-pipeline.js.map +1 -0
  98. package/dist/context/tool-output-budget.d.ts +59 -0
  99. package/dist/context/tool-output-budget.d.ts.map +1 -0
  100. package/dist/context/tool-output-budget.js +177 -0
  101. package/dist/context/tool-output-budget.js.map +1 -0
  102. package/dist/context/types.d.ts +113 -0
  103. package/dist/context/types.d.ts.map +1 -0
  104. package/dist/context/types.js +30 -0
  105. package/dist/context/types.js.map +1 -0
  106. package/dist/core/constraints/checker.d.ts +9 -1
  107. package/dist/core/constraints/checker.d.ts.map +1 -1
  108. package/dist/core/constraints/checker.js +72 -155
  109. package/dist/core/constraints/checker.js.map +1 -1
  110. package/dist/core/constraints/definitions.d.ts.map +1 -1
  111. package/dist/core/constraints/definitions.js +8 -10
  112. package/dist/core/constraints/definitions.js.map +1 -1
  113. package/dist/core/constraints/interceptor.d.ts.map +1 -1
  114. package/dist/core/constraints/interceptor.js +2 -6
  115. package/dist/core/constraints/interceptor.js.map +1 -1
  116. package/dist/core/project-config-loader.d.ts.map +1 -1
  117. package/dist/core/project-config-loader.js +12 -30
  118. package/dist/core/project-config-loader.js.map +1 -1
  119. package/dist/core/session/clean-state.d.ts.map +1 -1
  120. package/dist/core/session/clean-state.js +6 -8
  121. package/dist/core/session/clean-state.js.map +1 -1
  122. package/dist/core/session/startup.d.ts.map +1 -1
  123. package/dist/core/session/startup.js +3 -5
  124. package/dist/core/session/startup.js.map +1 -1
  125. package/dist/core/spec/validator.d.ts.map +1 -1
  126. package/dist/core/spec/validator.js +2 -4
  127. package/dist/core/spec/validator.js.map +1 -1
  128. package/dist/core/validators/checkpoint.d.ts.map +1 -1
  129. package/dist/core/validators/checkpoint.js +3 -5
  130. package/dist/core/validators/checkpoint.js.map +1 -1
  131. package/dist/core/validators/passes-gate.d.ts +0 -4
  132. package/dist/core/validators/passes-gate.d.ts.map +1 -1
  133. package/dist/core/validators/passes-gate.js +5 -13
  134. package/dist/core/validators/passes-gate.js.map +1 -1
  135. package/dist/dashboard/data.d.ts +39 -0
  136. package/dist/dashboard/data.d.ts.map +1 -0
  137. package/dist/dashboard/data.js +89 -0
  138. package/dist/dashboard/data.js.map +1 -0
  139. package/dist/dashboard/index.d.ts +4 -0
  140. package/dist/dashboard/index.d.ts.map +1 -0
  141. package/dist/dashboard/index.js +20 -0
  142. package/dist/dashboard/index.js.map +1 -0
  143. package/dist/dashboard/stats.d.ts +20 -0
  144. package/dist/dashboard/stats.d.ts.map +1 -0
  145. package/dist/dashboard/stats.js +115 -0
  146. package/dist/dashboard/stats.js.map +1 -0
  147. package/dist/dashboard/types.d.ts +98 -0
  148. package/dist/dashboard/types.d.ts.map +1 -0
  149. package/dist/dashboard/types.js +8 -0
  150. package/dist/dashboard/types.js.map +1 -0
  151. package/dist/failure/recorder.d.ts +4 -0
  152. package/dist/failure/recorder.d.ts.map +1 -1
  153. package/dist/failure/recorder.js +9 -11
  154. package/dist/failure/recorder.js.map +1 -1
  155. package/dist/gates/acceptance.d.ts.map +1 -1
  156. package/dist/gates/acceptance.js +2 -4
  157. package/dist/gates/acceptance.js.map +1 -1
  158. package/dist/gates/contract.d.ts.map +1 -1
  159. package/dist/gates/contract.js +0 -3
  160. package/dist/gates/contract.js.map +1 -1
  161. package/dist/gates/performance.d.ts.map +1 -1
  162. package/dist/gates/performance.js +3 -5
  163. package/dist/gates/performance.js.map +1 -1
  164. package/dist/gates/review.d.ts.map +1 -1
  165. package/dist/gates/review.js +4 -6
  166. package/dist/gates/review.js.map +1 -1
  167. package/dist/gates/security.d.ts.map +1 -1
  168. package/dist/gates/security.js +2 -4
  169. package/dist/gates/security.js.map +1 -1
  170. package/dist/index.d.ts +9 -2
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +34 -3
  173. package/dist/index.js.map +1 -1
  174. package/dist/knowledge/import.d.ts +95 -0
  175. package/dist/knowledge/import.d.ts.map +1 -0
  176. package/dist/knowledge/import.js +429 -0
  177. package/dist/knowledge/import.js.map +1 -0
  178. package/dist/knowledge/index.d.ts +15 -0
  179. package/dist/knowledge/index.d.ts.map +1 -0
  180. package/dist/knowledge/index.js +40 -0
  181. package/dist/knowledge/index.js.map +1 -0
  182. package/dist/knowledge/ingest.d.ts +30 -0
  183. package/dist/knowledge/ingest.d.ts.map +1 -0
  184. package/dist/knowledge/ingest.js +94 -0
  185. package/dist/knowledge/ingest.js.map +1 -0
  186. package/dist/knowledge/lifecycle-hooks.d.ts +62 -0
  187. package/dist/knowledge/lifecycle-hooks.d.ts.map +1 -0
  188. package/dist/knowledge/lifecycle-hooks.js +140 -0
  189. package/dist/knowledge/lifecycle-hooks.js.map +1 -0
  190. package/dist/knowledge/lifecycle.d.ts +43 -0
  191. package/dist/knowledge/lifecycle.d.ts.map +1 -0
  192. package/dist/knowledge/lifecycle.js +141 -0
  193. package/dist/knowledge/lifecycle.js.map +1 -0
  194. package/dist/knowledge/lint.d.ts +57 -0
  195. package/dist/knowledge/lint.d.ts.map +1 -0
  196. package/dist/knowledge/lint.js +235 -0
  197. package/dist/knowledge/lint.js.map +1 -0
  198. package/dist/knowledge/query.d.ts +33 -0
  199. package/dist/knowledge/query.d.ts.map +1 -0
  200. package/dist/knowledge/query.js +107 -0
  201. package/dist/knowledge/query.js.map +1 -0
  202. package/dist/knowledge/reference-tracker.d.ts +31 -0
  203. package/dist/knowledge/reference-tracker.d.ts.map +1 -0
  204. package/dist/knowledge/reference-tracker.js +124 -0
  205. package/dist/knowledge/reference-tracker.js.map +1 -0
  206. package/dist/knowledge/store.d.ts +42 -0
  207. package/dist/knowledge/store.d.ts.map +1 -0
  208. package/dist/knowledge/store.js +278 -0
  209. package/dist/knowledge/store.js.map +1 -0
  210. package/dist/knowledge/types.d.ts +103 -0
  211. package/dist/knowledge/types.d.ts.map +1 -0
  212. package/dist/knowledge/types.js +17 -0
  213. package/dist/knowledge/types.js.map +1 -0
  214. package/dist/llm/adapter.d.ts +36 -0
  215. package/dist/llm/adapter.d.ts.map +1 -0
  216. package/dist/llm/adapter.js +118 -0
  217. package/dist/llm/adapter.js.map +1 -0
  218. package/dist/llm/index.d.ts +3 -0
  219. package/dist/llm/index.d.ts.map +1 -0
  220. package/dist/llm/index.js +19 -0
  221. package/dist/llm/index.js.map +1 -0
  222. package/dist/llm/types.d.ts +62 -0
  223. package/dist/llm/types.d.ts.map +1 -0
  224. package/dist/llm/types.js +8 -0
  225. package/dist/llm/types.js.map +1 -0
  226. package/dist/monitoring/context-tracker.d.ts +38 -0
  227. package/dist/monitoring/context-tracker.d.ts.map +1 -0
  228. package/dist/monitoring/context-tracker.js +162 -0
  229. package/dist/monitoring/context-tracker.js.map +1 -0
  230. package/dist/monitoring/index.d.ts +3 -0
  231. package/dist/monitoring/index.d.ts.map +1 -1
  232. package/dist/monitoring/index.js +6 -0
  233. package/dist/monitoring/index.js.map +1 -1
  234. package/dist/monitoring/knowledge-doctor.d.ts +78 -0
  235. package/dist/monitoring/knowledge-doctor.d.ts.map +1 -0
  236. package/dist/monitoring/knowledge-doctor.js +266 -0
  237. package/dist/monitoring/knowledge-doctor.js.map +1 -0
  238. package/dist/monitoring/knowledge-evolver.d.ts +72 -0
  239. package/dist/monitoring/knowledge-evolver.d.ts.map +1 -0
  240. package/dist/monitoring/knowledge-evolver.js +205 -0
  241. package/dist/monitoring/knowledge-evolver.js.map +1 -0
  242. package/dist/monitoring/performance-analyzer.d.ts.map +1 -1
  243. package/dist/monitoring/performance-analyzer.js +10 -4
  244. package/dist/monitoring/performance-analyzer.js.map +1 -1
  245. package/dist/monitoring/trace-analyzer.d.ts.map +1 -1
  246. package/dist/monitoring/trace-analyzer.js +12 -5
  247. package/dist/monitoring/trace-analyzer.js.map +1 -1
  248. package/dist/safety/index.d.ts +6 -0
  249. package/dist/safety/index.d.ts.map +1 -0
  250. package/dist/safety/index.js +22 -0
  251. package/dist/safety/index.js.map +1 -0
  252. package/dist/safety/input-guardrail.d.ts +36 -0
  253. package/dist/safety/input-guardrail.d.ts.map +1 -0
  254. package/dist/safety/input-guardrail.js +118 -0
  255. package/dist/safety/input-guardrail.js.map +1 -0
  256. package/dist/safety/output-guardrail.d.ts +40 -0
  257. package/dist/safety/output-guardrail.d.ts.map +1 -0
  258. package/dist/safety/output-guardrail.js +150 -0
  259. package/dist/safety/output-guardrail.js.map +1 -0
  260. package/dist/safety/sandbox.d.ts +45 -0
  261. package/dist/safety/sandbox.d.ts.map +1 -0
  262. package/dist/safety/sandbox.js +134 -0
  263. package/dist/safety/sandbox.js.map +1 -0
  264. package/dist/safety/tool-guardrail.d.ts +51 -0
  265. package/dist/safety/tool-guardrail.d.ts.map +1 -0
  266. package/dist/safety/tool-guardrail.js +147 -0
  267. package/dist/safety/tool-guardrail.js.map +1 -0
  268. package/dist/safety/types.d.ts +104 -0
  269. package/dist/safety/types.d.ts.map +1 -0
  270. package/dist/safety/types.js +6 -0
  271. package/dist/safety/types.js.map +1 -0
  272. package/dist/tools/core/index.d.ts +13 -0
  273. package/dist/tools/core/index.d.ts.map +1 -0
  274. package/dist/tools/core/index.js +198 -0
  275. package/dist/tools/core/index.js.map +1 -0
  276. package/dist/tools/index.d.ts +4 -0
  277. package/dist/tools/index.d.ts.map +1 -0
  278. package/dist/tools/index.js +20 -0
  279. package/dist/tools/index.js.map +1 -0
  280. package/dist/tools/registry.d.ts +59 -0
  281. package/dist/tools/registry.d.ts.map +1 -0
  282. package/dist/tools/registry.js +115 -0
  283. package/dist/tools/registry.js.map +1 -0
  284. package/dist/tools/types.d.ts +38 -0
  285. package/dist/tools/types.d.ts.map +1 -0
  286. package/dist/tools/types.js +6 -0
  287. package/dist/tools/types.js.map +1 -0
  288. package/dist/types/constraint.d.ts +4 -0
  289. package/dist/types/constraint.d.ts.map +1 -1
  290. package/dist/types/constraint.js.map +1 -1
  291. package/dist/utils/exec.d.ts +11 -1
  292. package/dist/utils/exec.d.ts.map +1 -1
  293. package/dist/utils/exec.js +19 -1
  294. package/dist/utils/exec.js.map +1 -1
  295. package/dist/verification/index.d.ts +4 -0
  296. package/dist/verification/index.d.ts.map +1 -0
  297. package/dist/verification/index.js +20 -0
  298. package/dist/verification/index.js.map +1 -0
  299. package/dist/verification/loop.d.ts +30 -0
  300. package/dist/verification/loop.d.ts.map +1 -0
  301. package/dist/verification/loop.js +114 -0
  302. package/dist/verification/loop.js.map +1 -0
  303. package/dist/verification/rules-based.d.ts +40 -0
  304. package/dist/verification/rules-based.d.ts.map +1 -0
  305. package/dist/verification/rules-based.js +130 -0
  306. package/dist/verification/rules-based.js.map +1 -0
  307. package/dist/verification/types.d.ts +69 -0
  308. package/dist/verification/types.d.ts.map +1 -0
  309. package/dist/verification/types.js +6 -0
  310. package/dist/verification/types.js.map +1 -0
  311. package/package.json +1 -1
  312. package/dist/cli/commands/diagnose.d.ts +0 -16
  313. package/dist/cli/commands/diagnose.d.ts.map +0 -1
  314. package/dist/cli/commands/diagnose.js +0 -195
  315. package/dist/cli/commands/diagnose.js.map +0 -1
  316. package/dist/cli/commands/propose.d.ts +0 -18
  317. package/dist/cli/commands/propose.d.ts.map +0 -1
  318. package/dist/cli/commands/propose.js +0 -331
  319. package/dist/cli/commands/propose.js.map +0 -1
  320. package/dist/cli/commands/traces.d.ts +0 -15
  321. package/dist/cli/commands/traces.d.ts.map +0 -1
  322. package/dist/cli/commands/traces.js +0 -167
  323. package/dist/cli/commands/traces.js.map +0 -1
  324. package/dist/extensions/long-running/constraints.d.ts +0 -38
  325. package/dist/extensions/long-running/constraints.d.ts.map +0 -1
  326. package/dist/extensions/long-running/constraints.js +0 -153
  327. package/dist/extensions/long-running/constraints.js.map +0 -1
  328. package/dist/extensions/long-running/index.d.ts +0 -30
  329. package/dist/extensions/long-running/index.d.ts.map +0 -1
  330. package/dist/extensions/long-running/index.js +0 -50
  331. package/dist/extensions/long-running/index.js.map +0 -1
  332. package/dist/extensions/long-running/types.d.ts +0 -154
  333. package/dist/extensions/long-running/types.d.ts.map +0 -1
  334. package/dist/extensions/long-running/types.js +0 -9
  335. package/dist/extensions/long-running/types.js.map +0 -1
  336. package/dist/presets/long-running.d.ts +0 -33
  337. package/dist/presets/long-running.d.ts.map +0 -1
  338. package/dist/presets/long-running.js +0 -52
  339. package/dist/presets/long-running.js.map +0 -1
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ /**
3
+ * 质量层约束(可退化)
4
+ *
5
+ * 这些约束会随模型能力提升逐步退化:
6
+ * - Iron Law → Guideline → Tip → 移除
7
+ * - 退化由拦截率数据驱动
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.QUALITY_CONSTRAINTS = void 0;
11
+ exports.getQualityConstraints = getQualityConstraints;
12
+ exports.QUALITY_CONSTRAINTS = {
13
+ no_self_approval: {
14
+ id: 'no_self_approval',
15
+ rule: 'NO SELF APPROVAL WITHOUT TEST EVIDENCE',
16
+ message: '禁止自评通过,必须提供测试证据',
17
+ level: 'iron_law',
18
+ trigger: 'task_completion_claim',
19
+ enforcement: 'passes-gate',
20
+ description: '任务完成声明必须基于真实测试结果。',
21
+ layer: 'quality',
22
+ deprecationStatus: 'active',
23
+ deprecationSchedule: {
24
+ targetLevel: 'guideline',
25
+ interceptRateThreshold: 5,
26
+ reason: '模型自评能力提升,拦截率持续下降',
27
+ rollbackable: true,
28
+ },
29
+ },
30
+ no_test_simplification: {
31
+ id: 'no_test_simplification',
32
+ rule: 'NO SIMPLIFYING TESTS TO AVOID DIFFICULTY',
33
+ message: '禁止简化测试绕过困难',
34
+ level: 'iron_law',
35
+ trigger: 'test_creation',
36
+ enforcement: 'full-test-coverage',
37
+ description: '遇到测试困难时不能简化或跳过测试。',
38
+ layer: 'quality',
39
+ deprecationStatus: 'active',
40
+ deprecationSchedule: {
41
+ targetLevel: 'guideline',
42
+ interceptRateThreshold: 5,
43
+ reason: '模型测试编写能力提升',
44
+ rollbackable: true,
45
+ },
46
+ },
47
+ incremental_progress: {
48
+ id: 'incremental_progress',
49
+ rule: 'ONE TASK PER SESSION',
50
+ message: '禁止一次做多个任务',
51
+ level: 'iron_law',
52
+ trigger: 'feature_completion_claim',
53
+ enforcement: 'single-task-check',
54
+ description: '一个 session 只处理一个任务,避免 one-shotting。',
55
+ layer: 'quality',
56
+ deprecationStatus: 'active',
57
+ deprecationSchedule: {
58
+ targetLevel: 'guideline',
59
+ interceptRateThreshold: 10,
60
+ reason: '模型长上下文能力提升,可处理更大任务',
61
+ rollbackable: true,
62
+ },
63
+ },
64
+ no_any_type: {
65
+ id: 'no_any_type',
66
+ rule: 'AVOID ANY TYPE, USE UNKNOWN OR SPECIFIC TYPES',
67
+ message: '避免 any 类型',
68
+ level: 'guideline',
69
+ trigger: 'code_implementation',
70
+ enforcement: 'type-safe',
71
+ description: 'TypeScript 代码中应避免使用 any 类型。',
72
+ layer: 'quality',
73
+ deprecationStatus: 'active',
74
+ deprecationSchedule: {
75
+ targetLevel: 'tip',
76
+ interceptRateThreshold: 8,
77
+ reason: '模型类型推断能力持续改善',
78
+ rollbackable: true,
79
+ },
80
+ },
81
+ simplest_solution_first: {
82
+ id: 'simplest_solution_first',
83
+ rule: 'CHECK LOCAL/SIMPLE OPTIONS BEFORE REMOTE/COMPLEX',
84
+ message: '先检查本地/简单方案',
85
+ level: 'guideline',
86
+ trigger: ['feature_development', 'module_extension', 'code_implementation'],
87
+ enforcement: 'check-local-first',
88
+ description: '实现功能时必须按顺序检查简单方案。',
89
+ layer: 'quality',
90
+ deprecationStatus: 'active',
91
+ deprecationSchedule: {
92
+ targetLevel: 'tip',
93
+ interceptRateThreshold: 8,
94
+ reason: '模型架构选择能力提升',
95
+ rollbackable: true,
96
+ },
97
+ },
98
+ no_code_without_test: {
99
+ id: 'no_code_without_test',
100
+ rule: 'PRODUCTION LOGIC CODE MUST HAVE TESTS FIRST',
101
+ message: '业务逻辑代码必须先写测试',
102
+ level: 'guideline',
103
+ trigger: 'code_implementation',
104
+ enforcement: 'tdd-cycle',
105
+ description: '业务逻辑代码必须先写测试。',
106
+ layer: 'quality',
107
+ deprecationStatus: 'active',
108
+ deprecationSchedule: {
109
+ targetLevel: 'tip',
110
+ reason: '模型自发编写测试的能力提升',
111
+ rollbackable: false,
112
+ },
113
+ },
114
+ no_creation_without_reuse_check: {
115
+ id: 'no_creation_without_reuse_check',
116
+ rule: 'NO NEW CAPABILITIES WITHOUT REUSE CHECK FIRST',
117
+ message: '创建新能力前必须检查复用',
118
+ level: 'guideline',
119
+ trigger: [
120
+ 'step_creation', 'tool_creation', 'workflow_creation',
121
+ 'module_creation', 'module_extension', 'feature_development',
122
+ ],
123
+ enforcement: 'reuse-first',
124
+ description: '创建新能力前必须先执行复用检查。',
125
+ layer: 'quality',
126
+ deprecationStatus: 'active',
127
+ deprecationSchedule: {
128
+ targetLevel: 'guideline',
129
+ interceptRateThreshold: 5,
130
+ reason: '转型为知识复用检查',
131
+ rollbackable: true,
132
+ },
133
+ },
134
+ no_fix_without_root_cause: {
135
+ id: 'no_fix_without_root_cause',
136
+ rule: 'NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST',
137
+ message: '复杂 bug 必须先调查根本原因',
138
+ level: 'guideline',
139
+ trigger: 'bug_fix_attempt',
140
+ enforcement: 'debug-systematic',
141
+ description: '在尝试修复 bug 之前,按复杂度区分调查要求。',
142
+ layer: 'quality',
143
+ deprecationStatus: 'active',
144
+ deprecationSchedule: {
145
+ targetLevel: 'guideline',
146
+ reason: '转型为知识约束(因果链要求)',
147
+ rollbackable: true,
148
+ },
149
+ },
150
+ capability_sync: {
151
+ id: 'capability_sync',
152
+ rule: 'CODE CHANGES MUST UPDATE CAPABILITIES.MD',
153
+ message: '核心模块变更必须同步功能清单',
154
+ level: 'guideline',
155
+ trigger: ['module_creation', 'module_modification', 'module_deletion', 'module_extension'],
156
+ enforcement: 'update-capabilities',
157
+ description: '核心模块变更必须同步功能清单。',
158
+ layer: 'quality',
159
+ deprecationStatus: 'active',
160
+ deprecationSchedule: {
161
+ targetLevel: 'guideline',
162
+ reason: '转型为知识同步检查',
163
+ rollbackable: true,
164
+ },
165
+ },
166
+ no_simplification_without_approval: {
167
+ id: 'no_simplification_without_approval',
168
+ rule: 'NO SIMPLIFYING LOGIC WITHOUT USER APPROVAL',
169
+ message: '禁止砍功能,合理重构除外',
170
+ level: 'guideline',
171
+ trigger: 'code_implementation',
172
+ enforcement: 'preserve-complexity',
173
+ description: '不能为了赶进度砍掉必要功能。',
174
+ layer: 'quality',
175
+ deprecationStatus: 'active',
176
+ deprecationSchedule: {
177
+ targetLevel: 'tip',
178
+ reason: '模型对需求完整性的理解提升',
179
+ rollbackable: true,
180
+ },
181
+ },
182
+ design_decision_requires_discussion: {
183
+ id: 'design_decision_requires_discussion',
184
+ rule: 'DESIGN DECISIONS MUST BE DISCUSSED BEFORE IMPLEMENTATION',
185
+ message: '设计决策类任务需先讨论方案再实现',
186
+ level: 'guideline',
187
+ trigger: ['design_request', 'architecture_change', 'feature_development'],
188
+ enforcement: 'require-discussion',
189
+ description: '架构决策必须沉淀为 decision 类型知识。',
190
+ layer: 'quality',
191
+ deprecationStatus: 'active',
192
+ deprecationSchedule: {
193
+ targetLevel: 'guideline',
194
+ reason: '转型为知识沉淀要求',
195
+ rollbackable: true,
196
+ },
197
+ },
198
+ no_skill_without_test: {
199
+ id: 'no_skill_without_test',
200
+ rule: 'NO SKILL WITHOUT A FAILING TEST FIRST',
201
+ message: '创建技能前必须先定义测试场景',
202
+ level: 'guideline',
203
+ trigger: 'skill_creation',
204
+ enforcement: 'skill-test-scenario',
205
+ description: '创建新的 agent 技能之前,必须先定义测试场景。',
206
+ layer: 'quality',
207
+ deprecationStatus: 'active',
208
+ },
209
+ test_coverage_required: {
210
+ id: 'test_coverage_required',
211
+ rule: 'TEST COVERAGE MUST MEET REQUIREMENTS',
212
+ message: '测试覆盖率必须达到要求',
213
+ level: 'guideline',
214
+ trigger: 'task_completion_claim',
215
+ enforcement: 'check-coverage',
216
+ description: '提交代码前,测试覆盖率必须达到项目要求。',
217
+ layer: 'quality',
218
+ deprecationStatus: 'active',
219
+ },
220
+ no_coverage_decrease: {
221
+ id: 'no_coverage_decrease',
222
+ rule: 'COVERAGE MUST NOT DECREASE ON NEW COMMITS',
223
+ message: '新提交不能降低测试覆盖率',
224
+ level: 'guideline',
225
+ trigger: 'commit',
226
+ enforcement: 'coverage-gate',
227
+ description: '每次提交代码时,测试覆盖率不能低于上一次提交。',
228
+ layer: 'quality',
229
+ deprecationStatus: 'active',
230
+ },
231
+ readme_required: {
232
+ id: 'readme_required',
233
+ rule: 'NEW MODULES SHOULD HAVE README',
234
+ message: '建议为新模块创建 README',
235
+ level: 'tip',
236
+ trigger: 'module_creation',
237
+ enforcement: 'create-readme',
238
+ description: '创建新模块时建议同时创建 README.md。',
239
+ layer: 'quality',
240
+ deprecationStatus: 'active',
241
+ },
242
+ doc_required_for_public_api: {
243
+ id: 'doc_required_for_public_api',
244
+ rule: 'PUBLIC API SHOULD HAVE DOCUMENTATION',
245
+ message: '建议为公共 API 添加文档注释',
246
+ level: 'tip',
247
+ trigger: 'export_change',
248
+ enforcement: 'add-docs',
249
+ description: '所有导出的函数、类、接口建议添加 JSDoc 注释。',
250
+ layer: 'quality',
251
+ deprecationStatus: 'active',
252
+ },
253
+ };
254
+ function getQualityConstraints() {
255
+ return Object.values(exports.QUALITY_CONSTRAINTS);
256
+ }
257
+ //# sourceMappingURL=quality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quality.js","sourceRoot":"","sources":["../../src/constraints/quality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * 约束注册表
3
+ *
4
+ * 统一管理安全层和质量层约束,提供分层查询、退化管理
5
+ */
6
+ import type { Constraint, ConstraintLevel, ConstraintTrigger } from '../types/constraint';
7
+ import type { LayeredConstraint, ConstraintLayer, DeprecationStatus, LayerStats, DeprecationSchedule } from './types';
8
+ export declare class ConstraintRegistry {
9
+ private constraints;
10
+ constructor();
11
+ /**
12
+ * 获取约束(兼容旧 API)
13
+ */
14
+ get(id: string): LayeredConstraint | undefined;
15
+ /**
16
+ * 获取所有约束
17
+ */
18
+ getAll(): LayeredConstraint[];
19
+ /**
20
+ * 按层获取约束
21
+ */
22
+ getByLayer(layer: ConstraintLayer): LayeredConstraint[];
23
+ /**
24
+ * 按退化状态获取约束
25
+ */
26
+ getByStatus(status: DeprecationStatus): LayeredConstraint[];
27
+ /**
28
+ * 按触发条件查找约束
29
+ */
30
+ getByTrigger(trigger: ConstraintTrigger): LayeredConstraint[];
31
+ /**
32
+ * 获取退化候选(拦截率低于阈值的约束)
33
+ */
34
+ getDeprecationCandidates(interceptRates: Map<string, number>): LayeredConstraint[];
35
+ /**
36
+ * 执行退化:降低约束级别
37
+ */
38
+ degrade(id: string): boolean;
39
+ /**
40
+ * 回滚退化
41
+ */
42
+ rollback(id: string, originalLevel: ConstraintLevel): boolean;
43
+ /**
44
+ * 标记为计划退化
45
+ */
46
+ scheduleDeprecation(id: string, schedule: DeprecationSchedule): boolean;
47
+ /**
48
+ * 获取层统计
49
+ */
50
+ getLayerStats(): LayerStats[];
51
+ /**
52
+ * 转换为旧格式 Constraint(兼容)
53
+ */
54
+ toLegacyConstraints(): Constraint[];
55
+ /**
56
+ * 注册自定义约束
57
+ */
58
+ register(constraint: LayeredConstraint): void;
59
+ /**
60
+ * 移除约束
61
+ */
62
+ remove(id: string): boolean;
63
+ }
64
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/constraints/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAItH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,WAAW,CAAiC;;IAwBpD;;OAEG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAI9C;;OAEG;IACH,MAAM,IAAI,iBAAiB,EAAE;IAI7B;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,iBAAiB,EAAE;IAIvD;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,EAAE;IAI3D;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,iBAAiB,GAAG,iBAAiB,EAAE;IAO7D;;OAEG;IACH,wBAAwB,CAAC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,iBAAiB,EAAE;IAWlF;;OAEG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;IAU5B;;OAEG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,GAAG,OAAO;IAU7D;;OAEG;IACH,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,GAAG,OAAO;IASvE;;OAEG;IACH,aAAa,IAAI,UAAU,EAAE;IAe7B;;OAEG;IACH,mBAAmB,IAAI,UAAU,EAAE;IAcnC;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI;IAI7C;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO;CAG5B"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ /**
3
+ * 约束注册表
4
+ *
5
+ * 统一管理安全层和质量层约束,提供分层查询、退化管理
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.ConstraintRegistry = void 0;
9
+ const safety_1 = require("./safety");
10
+ const quality_1 = require("./quality");
11
+ class ConstraintRegistry {
12
+ constraints;
13
+ constructor() {
14
+ this.constraints = new Map();
15
+ // 注册安全层约束(克隆避免修改静态定义)
16
+ for (const [id, constraint] of Object.entries(safety_1.SAFETY_CONSTRAINTS)) {
17
+ this.constraints.set(id, {
18
+ ...constraint,
19
+ deprecationSchedule: constraint.deprecationSchedule
20
+ ? { ...constraint.deprecationSchedule }
21
+ : undefined,
22
+ });
23
+ }
24
+ // 注册质量层约束
25
+ for (const [id, constraint] of Object.entries(quality_1.QUALITY_CONSTRAINTS)) {
26
+ this.constraints.set(id, {
27
+ ...constraint,
28
+ deprecationSchedule: constraint.deprecationSchedule
29
+ ? { ...constraint.deprecationSchedule }
30
+ : undefined,
31
+ });
32
+ }
33
+ }
34
+ /**
35
+ * 获取约束(兼容旧 API)
36
+ */
37
+ get(id) {
38
+ return this.constraints.get(id);
39
+ }
40
+ /**
41
+ * 获取所有约束
42
+ */
43
+ getAll() {
44
+ return Array.from(this.constraints.values());
45
+ }
46
+ /**
47
+ * 按层获取约束
48
+ */
49
+ getByLayer(layer) {
50
+ return this.getAll().filter(c => c.layer === layer);
51
+ }
52
+ /**
53
+ * 按退化状态获取约束
54
+ */
55
+ getByStatus(status) {
56
+ return this.getAll().filter(c => c.deprecationStatus === status);
57
+ }
58
+ /**
59
+ * 按触发条件查找约束
60
+ */
61
+ getByTrigger(trigger) {
62
+ return this.getAll().filter(c => {
63
+ const triggers = Array.isArray(c.trigger) ? c.trigger : [c.trigger];
64
+ return triggers.includes(trigger);
65
+ });
66
+ }
67
+ /**
68
+ * 获取退化候选(拦截率低于阈值的约束)
69
+ */
70
+ getDeprecationCandidates(interceptRates) {
71
+ return this.getAll().filter(c => {
72
+ if (c.layer !== 'quality' || !c.deprecationSchedule)
73
+ return false;
74
+ if (c.deprecationStatus !== 'active')
75
+ return false;
76
+ const threshold = c.deprecationSchedule.interceptRateThreshold;
77
+ if (threshold === undefined)
78
+ return false;
79
+ const rate = interceptRates.get(c.id);
80
+ return rate !== undefined && rate < threshold;
81
+ });
82
+ }
83
+ /**
84
+ * 执行退化:降低约束级别
85
+ */
86
+ degrade(id) {
87
+ const constraint = this.constraints.get(id);
88
+ if (!constraint || !constraint.deprecationSchedule)
89
+ return false;
90
+ if (constraint.deprecationStatus !== 'active')
91
+ return false;
92
+ constraint.level = constraint.deprecationSchedule.targetLevel;
93
+ constraint.deprecationStatus = 'deprecated';
94
+ return true;
95
+ }
96
+ /**
97
+ * 回滚退化
98
+ */
99
+ rollback(id, originalLevel) {
100
+ const constraint = this.constraints.get(id);
101
+ if (!constraint)
102
+ return false;
103
+ if (!constraint.deprecationSchedule?.rollbackable)
104
+ return false;
105
+ constraint.level = originalLevel;
106
+ constraint.deprecationStatus = 'active';
107
+ return true;
108
+ }
109
+ /**
110
+ * 标记为计划退化
111
+ */
112
+ scheduleDeprecation(id, schedule) {
113
+ const constraint = this.constraints.get(id);
114
+ if (!constraint || constraint.layer !== 'quality')
115
+ return false;
116
+ constraint.deprecationSchedule = schedule;
117
+ constraint.deprecationStatus = 'scheduled';
118
+ return true;
119
+ }
120
+ /**
121
+ * 获取层统计
122
+ */
123
+ getLayerStats() {
124
+ const layers = ['safety', 'quality'];
125
+ return layers.map(layer => {
126
+ const constraints = this.getByLayer(layer);
127
+ return {
128
+ layer,
129
+ totalConstraints: constraints.length,
130
+ active: constraints.filter(c => c.deprecationStatus === 'active').length,
131
+ scheduled: constraints.filter(c => c.deprecationStatus === 'scheduled').length,
132
+ deprecated: constraints.filter(c => c.deprecationStatus === 'deprecated').length,
133
+ removed: constraints.filter(c => c.deprecationStatus === 'removed').length,
134
+ };
135
+ });
136
+ }
137
+ /**
138
+ * 转换为旧格式 Constraint(兼容)
139
+ */
140
+ toLegacyConstraints() {
141
+ return this.getAll().map(c => ({
142
+ id: c.id,
143
+ rule: c.rule,
144
+ message: c.message,
145
+ level: c.level,
146
+ trigger: c.trigger,
147
+ enforcement: c.enforcement,
148
+ description: c.description,
149
+ enabled: c.enabled,
150
+ exceptions: c.exceptions,
151
+ }));
152
+ }
153
+ /**
154
+ * 注册自定义约束
155
+ */
156
+ register(constraint) {
157
+ this.constraints.set(constraint.id, constraint);
158
+ }
159
+ /**
160
+ * 移除约束
161
+ */
162
+ remove(id) {
163
+ return this.constraints.delete(id);
164
+ }
165
+ }
166
+ exports.ConstraintRegistry = ConstraintRegistry;
167
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/constraints/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * 安全层约束(永久保留)
3
+ *
4
+ * 这些约束是模型无关的安全底线,不随模型能力提升而退化:
5
+ * - CommandGate:命令黑名单
6
+ * - SecurityGate:敏感文件审计
7
+ * - 跨项目接口一致性
8
+ * - 架构规则引擎
9
+ */
10
+ import type { LayeredConstraint } from './types';
11
+ export declare const SAFETY_CONSTRAINTS: Record<string, LayeredConstraint>;
12
+ export declare function getSafetyConstraints(): LayeredConstraint[];
13
+ //# sourceMappingURL=safety.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safety.d.ts","sourceRoot":"","sources":["../../src/constraints/safety.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CA2FhE,CAAC;AAEF,wBAAgB,oBAAoB,IAAI,iBAAiB,EAAE,CAE1D"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ /**
3
+ * 安全层约束(永久保留)
4
+ *
5
+ * 这些约束是模型无关的安全底线,不随模型能力提升而退化:
6
+ * - CommandGate:命令黑名单
7
+ * - SecurityGate:敏感文件审计
8
+ * - 跨项目接口一致性
9
+ * - 架构规则引擎
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SAFETY_CONSTRAINTS = void 0;
13
+ exports.getSafetyConstraints = getSafetyConstraints;
14
+ exports.SAFETY_CONSTRAINTS = {
15
+ no_bypass_checkpoint: {
16
+ id: 'no_bypass_checkpoint',
17
+ rule: 'NO BYPASSING CHECKPOINTS',
18
+ message: '禁止跳过检查点验证',
19
+ level: 'iron_law',
20
+ trigger: 'step_execution',
21
+ enforcement: 'checkpoint-required',
22
+ description: '所有检查点必须通过,不能跳过验证步骤。检查点是质量的最后一道防线。',
23
+ layer: 'safety',
24
+ deprecationStatus: 'active',
25
+ permanent: true,
26
+ },
27
+ CommandGate: {
28
+ id: 'CommandGate',
29
+ rule: 'BLOCKED COMMANDS CANNOT BE EXECUTED',
30
+ message: '黑名单命令禁止执行',
31
+ level: 'iron_law',
32
+ trigger: 'workflow_execution',
33
+ enforcement: 'command-blacklist',
34
+ description: 'rm -rf /、mkfs、fork bomb 等危险命令永远不能执行。',
35
+ layer: 'safety',
36
+ deprecationStatus: 'active',
37
+ permanent: true,
38
+ },
39
+ SecurityGate: {
40
+ id: 'SecurityGate',
41
+ rule: 'SENSITIVE FILE ACCESS MUST BE AUDITED',
42
+ message: '敏感文件访问必须审计',
43
+ level: 'iron_law',
44
+ trigger: 'file_modification',
45
+ enforcement: 'security-audit',
46
+ description: '.env、密钥文件、凭证文件的访问必须留审计日志。',
47
+ layer: 'safety',
48
+ deprecationStatus: 'active',
49
+ permanent: true,
50
+ },
51
+ cross_project_interface_consistency: {
52
+ id: 'cross_project_interface_consistency',
53
+ rule: 'CROSS-PROJECT INTERFACES MUST REMAIN CONSISTENT',
54
+ message: '跨项目接口必须保持一致',
55
+ level: 'iron_law',
56
+ trigger: ['api_change', 'module_modification'],
57
+ enforcement: 'cross-project-check',
58
+ description: '多仓库协调问题,不是模型能力问题,必须永久保留。',
59
+ layer: 'safety',
60
+ deprecationStatus: 'active',
61
+ permanent: true,
62
+ },
63
+ architecture_rule_engine: {
64
+ id: 'architecture_rule_engine',
65
+ rule: 'ARCHITECTURE BOUNDARY RULES MUST BE ENFORCED',
66
+ message: '架构边界规则必须强制执行',
67
+ level: 'iron_law',
68
+ trigger: ['module_creation', 'module_extension', 'code_implementation'],
69
+ enforcement: 'architecture-check',
70
+ description: '团队架构边界的硬约束,如 forbidden-pattern 等。',
71
+ layer: 'safety',
72
+ deprecationStatus: 'active',
73
+ permanent: true,
74
+ },
75
+ verify_external_capability: {
76
+ id: 'verify_external_capability',
77
+ rule: 'VERIFY EXTERNAL CAPABILITY BEFORE IMPLEMENTATION',
78
+ message: '外部依赖能力必须先验证',
79
+ level: 'iron_law',
80
+ trigger: 'external_api_design',
81
+ enforcement: 'capability-verification',
82
+ description: '实现方案依赖外部系统的未确认能力时,必须先验证。',
83
+ layer: 'safety',
84
+ deprecationStatus: 'active',
85
+ permanent: true,
86
+ },
87
+ no_implementation_without_requirement_review: {
88
+ id: 'no_implementation_without_requirement_review',
89
+ rule: 'REVIEW IMPLEMENTATION AGAINST REQUIREMENTS',
90
+ message: '实现后必须对比需求验证',
91
+ level: 'iron_law',
92
+ trigger: 'implementation_complete',
93
+ enforcement: 'requirement-review',
94
+ description: '实现完成后,必须对比原始需求进行验证。',
95
+ layer: 'safety',
96
+ deprecationStatus: 'active',
97
+ permanent: true,
98
+ },
99
+ };
100
+ function getSafetyConstraints() {
101
+ return Object.values(exports.SAFETY_CONSTRAINTS);
102
+ }
103
+ //# sourceMappingURL=safety.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safety.js","sourceRoot":"","sources":["../../src/constraints/safety.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAiGH,oDAEC;AA/FY,QAAA,kBAAkB,GAAsC;IACnE,oBAAoB,EAAE;QACpB,EAAE,EAAE,sBAAsB;QAC1B,IAAI,EAAE,0BAA0B;QAChC,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,gBAAgB;QACzB,WAAW,EAAE,qBAAqB;QAClC,WAAW,EAAE,mCAAmC;QAChD,KAAK,EAAE,QAAQ;QACf,iBAAiB,EAAE,QAAQ;QAC3B,SAAS,EAAE,IAAI;KAChB;IAED,WAAW,EAAE;QACX,EAAE,EAAE,aAAa;QACjB,IAAI,EAAE,qCAAqC;QAC3C,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,oBAAoB;QAC7B,WAAW,EAAE,mBAAmB;QAChC,WAAW,EAAE,sCAAsC;QACnD,KAAK,EAAE,QAAQ;QACf,iBAAiB,EAAE,QAAQ;QAC3B,SAAS,EAAE,IAAI;KAChB;IAED,YAAY,EAAE;QACZ,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,uCAAuC;QAC7C,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,mBAAmB;QAC5B,WAAW,EAAE,gBAAgB;QAC7B,WAAW,EAAE,2BAA2B;QACxC,KAAK,EAAE,QAAQ;QACf,iBAAiB,EAAE,QAAQ;QAC3B,SAAS,EAAE,IAAI;KAChB;IAED,mCAAmC,EAAE;QACnC,EAAE,EAAE,qCAAqC;QACzC,IAAI,EAAE,iDAAiD;QACvD,OAAO,EAAE,aAAa;QACtB,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,CAAC,YAAY,EAAE,qBAAqB,CAAC;QAC9C,WAAW,EAAE,qBAAqB;QAClC,WAAW,EAAE,0BAA0B;QACvC,KAAK,EAAE,QAAQ;QACf,iBAAiB,EAAE,QAAQ;QAC3B,SAAS,EAAE,IAAI;KAChB;IAED,wBAAwB,EAAE;QACxB,EAAE,EAAE,0BAA0B;QAC9B,IAAI,EAAE,8CAA8C;QACpD,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,qBAAqB,CAAC;QACvE,WAAW,EAAE,oBAAoB;QACjC,WAAW,EAAE,mCAAmC;QAChD,KAAK,EAAE,QAAQ;QACf,iBAAiB,EAAE,QAAQ;QAC3B,SAAS,EAAE,IAAI;KAChB;IAED,0BAA0B,EAAE;QAC1B,EAAE,EAAE,4BAA4B;QAChC,IAAI,EAAE,kDAAkD;QACxD,OAAO,EAAE,aAAa;QACtB,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,qBAAqB;QAC9B,WAAW,EAAE,yBAAyB;QACtC,WAAW,EAAE,0BAA0B;QACvC,KAAK,EAAE,QAAQ;QACf,iBAAiB,EAAE,QAAQ;QAC3B,SAAS,EAAE,IAAI;KAChB;IAED,4CAA4C,EAAE;QAC5C,EAAE,EAAE,8CAA8C;QAClD,IAAI,EAAE,4CAA4C;QAClD,OAAO,EAAE,aAAa;QACtB,KAAK,EAAE,UAAU;QACjB,OAAO,EAAE,yBAAyB;QAClC,WAAW,EAAE,oBAAoB;QACjC,WAAW,EAAE,qBAAqB;QAClC,KAAK,EAAE,QAAQ;QACf,iBAAiB,EAAE,QAAQ;QAC3B,SAAS,EAAE,IAAI;KAChB;CACF,CAAC;AAEF,SAAgB,oBAAoB;IAClC,OAAO,MAAM,CAAC,MAAM,CAAC,0BAAkB,CAAC,CAAC;AAC3C,CAAC"}