@dommaker/harness 1.1.1 → 1.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 (348) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/README.md +2 -4
  3. package/bin/harness.js +12 -37
  4. package/dist/cli/commands/check.d.ts +2 -2
  5. package/dist/cli/commands/check.d.ts.map +1 -1
  6. package/dist/cli/commands/check.js +7 -32
  7. package/dist/cli/commands/check.js.map +1 -1
  8. package/dist/cli/commands/definitions.d.ts +2 -0
  9. package/dist/cli/commands/definitions.d.ts.map +1 -1
  10. package/dist/cli/commands/definitions.js.map +1 -1
  11. package/dist/cli/commands/init.d.ts.map +1 -1
  12. package/dist/cli/commands/init.js +6 -37
  13. package/dist/cli/commands/init.js.map +1 -1
  14. package/dist/cli/commands/knowledge.d.ts.map +1 -1
  15. package/dist/cli/commands/knowledge.js +1 -12
  16. package/dist/cli/commands/knowledge.js.map +1 -1
  17. package/dist/cli/commands/report.d.ts.map +1 -1
  18. package/dist/cli/commands/report.js +0 -2
  19. package/dist/cli/commands/report.js.map +1 -1
  20. package/dist/cli/commands/status.js +2 -2
  21. package/dist/cli/commands/status.js.map +1 -1
  22. package/dist/context/index.d.ts +9 -6
  23. package/dist/context/index.d.ts.map +1 -1
  24. package/dist/context/index.js +18 -20
  25. package/dist/context/index.js.map +1 -1
  26. package/dist/core/constraints/capabilities-parser.d.ts +3 -2
  27. package/dist/core/constraints/capabilities-parser.d.ts.map +1 -1
  28. package/dist/core/constraints/capabilities-parser.js +25 -47
  29. package/dist/core/constraints/capabilities-parser.js.map +1 -1
  30. package/dist/core/constraints/checker.d.ts +29 -32
  31. package/dist/core/constraints/checker.d.ts.map +1 -1
  32. package/dist/core/constraints/checker.js +34 -126
  33. package/dist/core/constraints/checker.js.map +1 -1
  34. package/dist/core/constraints/checkers/index.d.ts +2 -1
  35. package/dist/core/constraints/checkers/index.d.ts.map +1 -1
  36. package/dist/core/constraints/checkers/index.js +3 -0
  37. package/dist/core/constraints/checkers/index.js.map +1 -1
  38. package/dist/core/constraints/checkers/types.d.ts +25 -0
  39. package/dist/core/constraints/checkers/types.d.ts.map +1 -1
  40. package/dist/core/constraints/checkers/types.js +24 -0
  41. package/dist/core/constraints/checkers/types.js.map +1 -1
  42. package/dist/core/constraints/definitions/guidelines.d.ts.map +1 -1
  43. package/dist/core/constraints/definitions/guidelines.js +0 -2
  44. package/dist/core/constraints/definitions/guidelines.js.map +1 -1
  45. package/dist/core/constraints/definitions/prompts.d.ts.map +1 -1
  46. package/dist/core/constraints/definitions/prompts.js +0 -5
  47. package/dist/core/constraints/definitions/prompts.js.map +1 -1
  48. package/dist/core/constraints/index.d.ts +1 -2
  49. package/dist/core/constraints/index.d.ts.map +1 -1
  50. package/dist/core/constraints/index.js +1 -7
  51. package/dist/core/constraints/index.js.map +1 -1
  52. package/dist/core/constraints/usage-report.d.ts +1 -2
  53. package/dist/core/constraints/usage-report.d.ts.map +1 -1
  54. package/dist/core/constraints/usage-report.js +2 -5
  55. package/dist/core/constraints/usage-report.js.map +1 -1
  56. package/dist/core/effective-constraints.d.ts +24 -4
  57. package/dist/core/effective-constraints.d.ts.map +1 -1
  58. package/dist/core/effective-constraints.js +28 -7
  59. package/dist/core/effective-constraints.js.map +1 -1
  60. package/dist/core/effective-set.d.ts +30 -0
  61. package/dist/core/effective-set.d.ts.map +1 -0
  62. package/dist/core/effective-set.js +35 -0
  63. package/dist/core/effective-set.js.map +1 -0
  64. package/dist/core/index.d.ts +13 -6
  65. package/dist/core/index.d.ts.map +1 -1
  66. package/dist/core/index.js +44 -21
  67. package/dist/core/index.js.map +1 -1
  68. package/dist/core/project-config-loader.d.ts +3 -6
  69. package/dist/core/project-config-loader.d.ts.map +1 -1
  70. package/dist/core/project-config-loader.js +47 -61
  71. package/dist/core/project-config-loader.js.map +1 -1
  72. package/dist/failure/constraint-handler.d.ts +1 -1
  73. package/dist/failure/constraint-handler.js +1 -1
  74. package/dist/gates/checker-gate.d.ts +1 -4
  75. package/dist/gates/checker-gate.d.ts.map +1 -1
  76. package/dist/gates/checker-gate.js +3 -11
  77. package/dist/gates/checker-gate.js.map +1 -1
  78. package/dist/gates/definitions.d.ts +9 -38
  79. package/dist/gates/definitions.d.ts.map +1 -1
  80. package/dist/gates/definitions.js +24 -13
  81. package/dist/gates/definitions.js.map +1 -1
  82. package/dist/gates/effective-gates.d.ts.map +1 -1
  83. package/dist/gates/effective-gates.js +14 -18
  84. package/dist/gates/effective-gates.js.map +1 -1
  85. package/dist/gates/index.d.ts +1 -1
  86. package/dist/gates/index.d.ts.map +1 -1
  87. package/dist/gates/index.js.map +1 -1
  88. package/dist/hooks/bootstrap.d.ts.map +1 -1
  89. package/dist/hooks/bootstrap.js +0 -3
  90. package/dist/hooks/bootstrap.js.map +1 -1
  91. package/dist/index.d.ts +43 -60
  92. package/dist/index.d.ts.map +1 -1
  93. package/dist/index.js +180 -143
  94. package/dist/index.js.map +1 -1
  95. package/dist/knowledge/query.d.ts +15 -0
  96. package/dist/knowledge/query.d.ts.map +1 -1
  97. package/dist/knowledge/query.js +23 -0
  98. package/dist/knowledge/query.js.map +1 -1
  99. package/dist/monitoring/analyzer-base.d.ts +0 -4
  100. package/dist/monitoring/analyzer-base.d.ts.map +1 -1
  101. package/dist/monitoring/analyzer-base.js +0 -21
  102. package/dist/monitoring/analyzer-base.js.map +1 -1
  103. package/dist/monitoring/index.d.ts +6 -12
  104. package/dist/monitoring/index.d.ts.map +1 -1
  105. package/dist/monitoring/index.js +13 -29
  106. package/dist/monitoring/index.js.map +1 -1
  107. package/dist/monitoring/trace-analyzer.d.ts.map +1 -1
  108. package/dist/monitoring/trace-analyzer.js +2 -68
  109. package/dist/monitoring/trace-analyzer.js.map +1 -1
  110. package/dist/monitoring/traces.d.ts +0 -4
  111. package/dist/monitoring/traces.d.ts.map +1 -1
  112. package/dist/monitoring/traces.js +0 -14
  113. package/dist/monitoring/traces.js.map +1 -1
  114. package/dist/presets/index.d.ts +2 -2
  115. package/dist/presets/index.d.ts.map +1 -1
  116. package/dist/presets/index.js +3 -4
  117. package/dist/presets/index.js.map +1 -1
  118. package/dist/presets/standard.d.ts +10 -22
  119. package/dist/presets/standard.d.ts.map +1 -1
  120. package/dist/presets/standard.js +15 -75
  121. package/dist/presets/standard.js.map +1 -1
  122. package/dist/types/constraint.d.ts +1 -29
  123. package/dist/types/constraint.d.ts.map +1 -1
  124. package/dist/types/constraint.js +1 -1
  125. package/dist/types/constraint.js.map +1 -1
  126. package/dist/types/index.d.ts +0 -3
  127. package/dist/types/index.d.ts.map +1 -1
  128. package/dist/types/index.js +0 -4
  129. package/dist/types/index.js.map +1 -1
  130. package/dist/types/project-config.d.ts +4 -8
  131. package/dist/types/project-config.d.ts.map +1 -1
  132. package/dist/types/trace.d.ts +5 -18
  133. package/dist/types/trace.d.ts.map +1 -1
  134. package/package.json +2 -2
  135. package/src/CONTEXT.md +4 -5
  136. package/src/__tests__/checker-extra.test.ts +33 -139
  137. package/src/__tests__/checker.test.ts +0 -376
  138. package/src/__tests__/project-config-loader-extra.test.ts +42 -29
  139. package/src/__tests__/public-exports.test.ts +138 -0
  140. package/src/__tests__/trace-analyzer-extra.test.ts +6 -86
  141. package/src/__tests__/trace-analyzer.test.ts +4 -5
  142. package/src/__tests__/trace-collector.test.ts +0 -11
  143. package/src/__tests__/traces.test.ts +3 -22
  144. package/src/cli/commands/CONTEXT.md +2 -2
  145. package/src/cli/commands/__tests__/check-skip-output.test.ts +10 -7
  146. package/src/cli/commands/__tests__/check.test.ts +29 -69
  147. package/src/cli/commands/__tests__/constraints-report.test.ts +1 -1
  148. package/src/cli/commands/__tests__/knowledge.test.ts +90 -1
  149. package/src/cli/commands/__tests__/registry.test.ts +8 -6
  150. package/src/cli/commands/__tests__/status-extra.test.ts +6 -6
  151. package/src/cli/commands/__tests__/status.test.ts +6 -6
  152. package/src/cli/commands/check.ts +8 -34
  153. package/src/cli/commands/definitions.ts +2 -0
  154. package/src/cli/commands/init.ts +6 -37
  155. package/src/cli/commands/knowledge.ts +1 -16
  156. package/src/cli/commands/report.ts +0 -2
  157. package/src/cli/commands/status.ts +2 -2
  158. package/src/context/index.ts +29 -6
  159. package/src/core/CONTEXT.md +4 -3
  160. package/src/core/__tests__/effective-set.test.ts +80 -0
  161. package/src/core/constraints/capabilities-parser.ts +43 -49
  162. package/src/core/constraints/checker.ts +51 -145
  163. package/src/core/constraints/checkers/index.ts +2 -1
  164. package/src/core/constraints/checkers/types.ts +42 -0
  165. package/src/core/constraints/definitions/guidelines.ts +0 -2
  166. package/src/core/constraints/definitions/prompts.ts +0 -5
  167. package/src/core/constraints/index.ts +2 -17
  168. package/src/core/constraints/usage-report.ts +5 -8
  169. package/src/core/effective-constraints.ts +35 -7
  170. package/src/core/effective-set.ts +56 -0
  171. package/src/core/index.ts +80 -6
  172. package/src/core/project-config-loader.ts +53 -68
  173. package/src/failure/CONTEXT.md +1 -1
  174. package/src/failure/constraint-handler.ts +1 -1
  175. package/src/gates/CONTEXT.md +3 -3
  176. package/src/gates/checker-gate.ts +4 -12
  177. package/src/gates/definitions.ts +27 -50
  178. package/src/gates/effective-gates.ts +14 -21
  179. package/src/gates/index.ts +1 -1
  180. package/src/hooks/bootstrap.ts +0 -3
  181. package/src/index.ts +384 -148
  182. package/src/knowledge/CONTEXT.md +2 -2
  183. package/src/knowledge/__tests__/query.test.ts +64 -0
  184. package/src/knowledge/query.ts +28 -0
  185. package/src/monitoring/CONTEXT.md +7 -13
  186. package/src/monitoring/__tests__/traces.test.ts +0 -10
  187. package/src/monitoring/analyzer-base.ts +0 -22
  188. package/src/monitoring/index.ts +6 -12
  189. package/src/monitoring/trace-analyzer.ts +2 -73
  190. package/src/monitoring/traces.ts +0 -20
  191. package/src/presets/__tests__/standard.test.ts +48 -69
  192. package/src/presets/index.ts +3 -5
  193. package/src/presets/standard.ts +14 -79
  194. package/src/spec/CONTEXT.md +5 -13
  195. package/src/types/constraint.ts +1 -51
  196. package/src/types/index.ts +0 -12
  197. package/src/types/project-config.ts +4 -10
  198. package/src/types/trace.ts +5 -30
  199. package/dist/core/constraints/interceptor.d.ts +0 -39
  200. package/dist/core/constraints/interceptor.d.ts.map +0 -1
  201. package/dist/core/constraints/interceptor.js +0 -166
  202. package/dist/core/constraints/interceptor.js.map +0 -1
  203. package/dist/dashboard/data.d.ts +0 -31
  204. package/dist/dashboard/data.d.ts.map +0 -1
  205. package/dist/dashboard/data.js +0 -81
  206. package/dist/dashboard/data.js.map +0 -1
  207. package/dist/dashboard/index.d.ts +0 -4
  208. package/dist/dashboard/index.d.ts.map +0 -1
  209. package/dist/dashboard/index.js +0 -20
  210. package/dist/dashboard/index.js.map +0 -1
  211. package/dist/dashboard/stats.d.ts +0 -20
  212. package/dist/dashboard/stats.d.ts.map +0 -1
  213. package/dist/dashboard/stats.js +0 -115
  214. package/dist/dashboard/stats.js.map +0 -1
  215. package/dist/dashboard/types.d.ts +0 -110
  216. package/dist/dashboard/types.d.ts.map +0 -1
  217. package/dist/dashboard/types.js +0 -8
  218. package/dist/dashboard/types.js.map +0 -1
  219. package/dist/monitoring/constraint-doctor.d.ts +0 -76
  220. package/dist/monitoring/constraint-doctor.d.ts.map +0 -1
  221. package/dist/monitoring/constraint-doctor.js +0 -189
  222. package/dist/monitoring/constraint-doctor.js.map +0 -1
  223. package/dist/monitoring/diagnosis-rules.d.ts +0 -18
  224. package/dist/monitoring/diagnosis-rules.d.ts.map +0 -1
  225. package/dist/monitoring/diagnosis-rules.js +0 -119
  226. package/dist/monitoring/diagnosis-rules.js.map +0 -1
  227. package/dist/monitoring/knowledge-doctor.d.ts +0 -78
  228. package/dist/monitoring/knowledge-doctor.d.ts.map +0 -1
  229. package/dist/monitoring/knowledge-doctor.js +0 -266
  230. package/dist/monitoring/knowledge-doctor.js.map +0 -1
  231. package/dist/monitoring/knowledge-evolver.d.ts +0 -72
  232. package/dist/monitoring/knowledge-evolver.d.ts.map +0 -1
  233. package/dist/monitoring/knowledge-evolver.js +0 -205
  234. package/dist/monitoring/knowledge-evolver.js.map +0 -1
  235. package/dist/monitoring/performance-analyzer.d.ts +0 -92
  236. package/dist/monitoring/performance-analyzer.d.ts.map +0 -1
  237. package/dist/monitoring/performance-analyzer.js +0 -343
  238. package/dist/monitoring/performance-analyzer.js.map +0 -1
  239. package/dist/monitoring/performance-collector.d.ts +0 -103
  240. package/dist/monitoring/performance-collector.d.ts.map +0 -1
  241. package/dist/monitoring/performance-collector.js +0 -298
  242. package/dist/monitoring/performance-collector.js.map +0 -1
  243. package/dist/safety/index.d.ts +0 -6
  244. package/dist/safety/index.d.ts.map +0 -1
  245. package/dist/safety/index.js +0 -22
  246. package/dist/safety/index.js.map +0 -1
  247. package/dist/safety/input-guardrail.d.ts +0 -36
  248. package/dist/safety/input-guardrail.d.ts.map +0 -1
  249. package/dist/safety/input-guardrail.js +0 -118
  250. package/dist/safety/input-guardrail.js.map +0 -1
  251. package/dist/safety/output-guardrail.d.ts +0 -39
  252. package/dist/safety/output-guardrail.d.ts.map +0 -1
  253. package/dist/safety/output-guardrail.js +0 -147
  254. package/dist/safety/output-guardrail.js.map +0 -1
  255. package/dist/safety/sandbox.d.ts +0 -45
  256. package/dist/safety/sandbox.d.ts.map +0 -1
  257. package/dist/safety/sandbox.js +0 -134
  258. package/dist/safety/sandbox.js.map +0 -1
  259. package/dist/safety/tool-guardrail.d.ts +0 -51
  260. package/dist/safety/tool-guardrail.d.ts.map +0 -1
  261. package/dist/safety/tool-guardrail.js +0 -147
  262. package/dist/safety/tool-guardrail.js.map +0 -1
  263. package/dist/safety/types.d.ts +0 -104
  264. package/dist/safety/types.d.ts.map +0 -1
  265. package/dist/safety/types.js +0 -6
  266. package/dist/safety/types.js.map +0 -1
  267. package/dist/spec/annotation-checker.d.ts +0 -47
  268. package/dist/spec/annotation-checker.d.ts.map +0 -1
  269. package/dist/spec/annotation-checker.js +0 -279
  270. package/dist/spec/annotation-checker.js.map +0 -1
  271. package/dist/types/enforcement.d.ts +0 -42
  272. package/dist/types/enforcement.d.ts.map +0 -1
  273. package/dist/types/enforcement.js +0 -6
  274. package/dist/types/enforcement.js.map +0 -1
  275. package/dist/types/monitoring-types.d.ts +0 -53
  276. package/dist/types/monitoring-types.d.ts.map +0 -1
  277. package/dist/types/monitoring-types.js +0 -10
  278. package/dist/types/monitoring-types.js.map +0 -1
  279. package/dist/types/performance.d.ts +0 -204
  280. package/dist/types/performance.d.ts.map +0 -1
  281. package/dist/types/performance.js +0 -12
  282. package/dist/types/performance.js.map +0 -1
  283. package/dist/verification/index.d.ts +0 -4
  284. package/dist/verification/index.d.ts.map +0 -1
  285. package/dist/verification/index.js +0 -20
  286. package/dist/verification/index.js.map +0 -1
  287. package/dist/verification/loop.d.ts +0 -30
  288. package/dist/verification/loop.d.ts.map +0 -1
  289. package/dist/verification/loop.js +0 -114
  290. package/dist/verification/loop.js.map +0 -1
  291. package/dist/verification/rules-based.d.ts +0 -40
  292. package/dist/verification/rules-based.d.ts.map +0 -1
  293. package/dist/verification/rules-based.js +0 -130
  294. package/dist/verification/rules-based.js.map +0 -1
  295. package/dist/verification/types.d.ts +0 -69
  296. package/dist/verification/types.d.ts.map +0 -1
  297. package/dist/verification/types.js +0 -6
  298. package/dist/verification/types.js.map +0 -1
  299. package/src/__tests__/annotation-checker.test.ts +0 -183
  300. package/src/__tests__/constraint-doctor.test.ts +0 -271
  301. package/src/__tests__/doctor-extra.test.ts +0 -155
  302. package/src/__tests__/extend-exceptions.test.ts +0 -149
  303. package/src/__tests__/interceptor.test.ts +0 -89
  304. package/src/__tests__/performance-analyzer.test.ts +0 -499
  305. package/src/__tests__/performance-collector.test.ts +0 -276
  306. package/src/__tests__/presets.test.ts +0 -65
  307. package/src/core/constraints/__tests__/interceptor.test.ts +0 -267
  308. package/src/core/constraints/interceptor.ts +0 -217
  309. package/src/dashboard/CONTEXT.md +0 -21
  310. package/src/dashboard/__tests__/data.test.ts +0 -111
  311. package/src/dashboard/__tests__/stats.test.ts +0 -159
  312. package/src/dashboard/data.ts +0 -103
  313. package/src/dashboard/index.ts +0 -3
  314. package/src/dashboard/stats.ts +0 -127
  315. package/src/dashboard/types.ts +0 -130
  316. package/src/monitoring/__tests__/knowledge-doctor.test.ts +0 -278
  317. package/src/monitoring/__tests__/knowledge-evolver.test.ts +0 -368
  318. package/src/monitoring/__tests__/performance-analyzer.test.ts +0 -137
  319. package/src/monitoring/__tests__/performance-collector.test.ts +0 -331
  320. package/src/monitoring/constraint-doctor.ts +0 -228
  321. package/src/monitoring/diagnosis-rules.ts +0 -132
  322. package/src/monitoring/knowledge-doctor.ts +0 -322
  323. package/src/monitoring/knowledge-evolver.ts +0 -289
  324. package/src/monitoring/performance-analyzer.ts +0 -400
  325. package/src/monitoring/performance-collector.ts +0 -326
  326. package/src/safety/CONTEXT.md +0 -23
  327. package/src/safety/__tests__/input-guardrail.test.ts +0 -105
  328. package/src/safety/__tests__/output-guardrail.test.ts +0 -108
  329. package/src/safety/__tests__/sandbox.test.ts +0 -158
  330. package/src/safety/__tests__/tool-guardrail.test.ts +0 -127
  331. package/src/safety/index.ts +0 -5
  332. package/src/safety/input-guardrail.ts +0 -133
  333. package/src/safety/output-guardrail.ts +0 -170
  334. package/src/safety/sandbox.ts +0 -148
  335. package/src/safety/tool-guardrail.ts +0 -176
  336. package/src/safety/types.ts +0 -124
  337. package/src/spec/__tests__/annotation-checker.test.ts +0 -294
  338. package/src/spec/annotation-checker.ts +0 -320
  339. package/src/types/enforcement.ts +0 -48
  340. package/src/types/monitoring-types.ts +0 -68
  341. package/src/types/performance.ts +0 -295
  342. package/src/verification/CONTEXT.md +0 -23
  343. package/src/verification/__tests__/loop.test.ts +0 -303
  344. package/src/verification/__tests__/rules-based.test.ts +0 -240
  345. package/src/verification/index.ts +0 -3
  346. package/src/verification/loop.ts +0 -137
  347. package/src/verification/rules-based.ts +0 -152
  348. package/src/verification/types.ts +0 -81
@@ -95,7 +95,7 @@ function collectUsageByConstraint(traces) {
95
95
  for (const t of traces) {
96
96
  let agg = map.get(t.constraintId);
97
97
  if (!agg) {
98
- agg = { total: 0, pass: 0, fail: 0, skip: 0, bypassed: 0 };
98
+ agg = { total: 0, pass: 0, fail: 0, skip: 0 };
99
99
  map.set(t.constraintId, agg);
100
100
  }
101
101
  agg.total++;
@@ -105,8 +105,6 @@ function collectUsageByConstraint(traces) {
105
105
  agg.fail++;
106
106
  else if (t.result === 'skip')
107
107
  agg.skip++;
108
- else if (t.result === 'bypassed')
109
- agg.bypassed++;
110
108
  if (agg.firstAt === undefined || t.timestamp < agg.firstAt)
111
109
  agg.firstAt = t.timestamp;
112
110
  if (agg.lastAt === undefined || t.timestamp > agg.lastAt)
@@ -115,7 +113,7 @@ function collectUsageByConstraint(traces) {
115
113
  return map;
116
114
  }
117
115
  function toStats(id, level, agg) {
118
- const a = agg ?? { total: 0, pass: 0, fail: 0, skip: 0, bypassed: 0 };
116
+ const a = agg ?? { total: 0, pass: 0, fail: 0, skip: 0 };
119
117
  const evaluated = a.total - a.skip;
120
118
  return {
121
119
  id,
@@ -124,7 +122,6 @@ function toStats(id, level, agg) {
124
122
  pass: a.pass,
125
123
  fail: a.fail,
126
124
  skip: a.skip,
127
- bypassed: a.bypassed,
128
125
  evaluated,
129
126
  failRate: evaluated > 0 ? a.fail / evaluated : 0,
130
127
  firstAt: a.firstAt,
@@ -1 +1 @@
1
- {"version":3,"file":"usage-report.js","sourceRoot":"","sources":["../../../src/core/constraints/usage-report.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage-report.js","sourceRoot":"","sources":["../../../src/core/constraints/usage-report.ts"],"names":[],"mappings":"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"}
@@ -7,18 +7,38 @@
7
7
  * 不再直接读 IRON_LAWS/GUIDELINES/PROMPTS 全集。
8
8
  */
9
9
  import type { Constraint } from '../types/constraint';
10
+ import type { MergedConstraintsConfig } from '../types/project-config';
10
11
  /**
11
12
  * 获取项目当前生效的约束集(check + prompt,带 kind)
12
13
  *
13
- * 内部完成完整合并:内置 → preset 裁剪 → config.yml `constraints.<id>.enabled:false`
14
- * 删除(内置与 custom 同效)→ custom-constraints 追加/extend_exceptions
15
- * (禁用/已退役的 custom 不追加)→ scenes 过滤
14
+ * 生效集链路同 getMergedConstraintsConfig:内置 → preset 裁剪 → config.yml
15
+ * `constraints.<id>.enabled:false` 删除(内置与 custom 同效)→ custom-constraints
16
+ * 追加(禁用/已退役的 custom 不追加)→ scenes 过滤
16
17
  * (带 appliesTo 的 prompt 仅当 config.yml `scenes` 与其交集非空时保留,
17
18
  * 缺省 scenes=[] 即场景专属 prompt 默认不进入生效集)。
18
19
  *
19
20
  * @param projectRoot 项目根路径(缺省 process.cwd())
21
+ * @param options.preset 覆盖 config.yml 的 preset;仅在项目无自定义配置时生效
22
+ * (与 getMergedConstraintsConfig 同一优先级规则),不传则尊重 config.yml
20
23
  */
21
- export declare function getEffectiveConstraints(projectRoot?: string): Constraint[];
24
+ export declare function getEffectiveConstraints(projectRoot?: string, options?: {
25
+ preset?: string;
26
+ }): Constraint[];
27
+ /**
28
+ * 获取项目当前生效的合并约束配置(ADR-0001 唯一来源的完整形状)
29
+ *
30
+ * 与 getEffectiveConstraints 同一生效集链路,返回完整 MergedConstraintsConfig
31
+ * (含 disabled/custom/unknownIds),供 check 等需要诊断信息的消费方使用。
32
+ *
33
+ * options.preset(CLI --preset)仅在项目无自定义配置时覆盖 config.yml 的
34
+ * preset(工单 23 语义:项目自定义配置优先于 CLI 预设);不传 preset 时
35
+ * 完全尊重 config.yml 的 preset 键。
36
+ *
37
+ * @param projectRoot 项目根路径(缺省 process.cwd())
38
+ */
39
+ export declare function getMergedConstraintsConfig(projectRoot?: string, options?: {
40
+ preset?: string;
41
+ }): MergedConstraintsConfig;
22
42
  /**
23
43
  * 生效集配置诊断结果
24
44
  */
@@ -1 +1 @@
1
- {"version":3,"file":"effective-constraints.d.ts","sourceRoot":"","sources":["../../src/core/effective-constraints.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAItD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,GAAE,MAAsB,GAAG,UAAU,EAAE,CASzF;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;IAErB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB;;;OAGG;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,GAAE,MAAsB,GAAG,mBAAmB,CAqB5F"}
1
+ {"version":3,"file":"effective-constraints.d.ts","sourceRoot":"","sources":["../../src/core/effective-constraints.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAIvE;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,GAAE,MAAsB,EACnC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5B,UAAU,EAAE,CAOd;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,GAAE,MAAsB,EACnC,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5B,uBAAuB,CAOzB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;IAErB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB;;;OAGG;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,GAAE,MAAsB,GAAG,mBAAmB,CAqB5F"}
@@ -9,30 +9,51 @@
9
9
  */
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
11
  exports.getEffectiveConstraints = getEffectiveConstraints;
12
+ exports.getMergedConstraintsConfig = getMergedConstraintsConfig;
12
13
  exports.lintEffectiveConfig = lintEffectiveConfig;
13
14
  const definitions_1 = require("./constraints/definitions");
14
15
  const project_config_loader_1 = require("./project-config-loader");
15
16
  /**
16
17
  * 获取项目当前生效的约束集(check + prompt,带 kind)
17
18
  *
18
- * 内部完成完整合并:内置 → preset 裁剪 → config.yml `constraints.<id>.enabled:false`
19
- * 删除(内置与 custom 同效)→ custom-constraints 追加/extend_exceptions
20
- * (禁用/已退役的 custom 不追加)→ scenes 过滤
19
+ * 生效集链路同 getMergedConstraintsConfig:内置 → preset 裁剪 → config.yml
20
+ * `constraints.<id>.enabled:false` 删除(内置与 custom 同效)→ custom-constraints
21
+ * 追加(禁用/已退役的 custom 不追加)→ scenes 过滤
21
22
  * (带 appliesTo 的 prompt 仅当 config.yml `scenes` 与其交集非空时保留,
22
23
  * 缺省 scenes=[] 即场景专属 prompt 默认不进入生效集)。
23
24
  *
24
25
  * @param projectRoot 项目根路径(缺省 process.cwd())
26
+ * @param options.preset 覆盖 config.yml 的 preset;仅在项目无自定义配置时生效
27
+ * (与 getMergedConstraintsConfig 同一优先级规则),不传则尊重 config.yml
25
28
  */
26
- function getEffectiveConstraints(projectRoot = process.cwd()) {
27
- const loader = new project_config_loader_1.ProjectConfigLoader(projectRoot);
28
- loader.load();
29
- const merged = loader.mergeConstraints();
29
+ function getEffectiveConstraints(projectRoot = process.cwd(), options) {
30
+ const merged = getMergedConstraintsConfig(projectRoot, options);
30
31
  return [
31
32
  ...Object.values(merged.ironLaws),
32
33
  ...Object.values(merged.guidelines),
33
34
  ...Object.values(merged.prompts ?? {}),
34
35
  ];
35
36
  }
37
+ /**
38
+ * 获取项目当前生效的合并约束配置(ADR-0001 唯一来源的完整形状)
39
+ *
40
+ * 与 getEffectiveConstraints 同一生效集链路,返回完整 MergedConstraintsConfig
41
+ * (含 disabled/custom/unknownIds),供 check 等需要诊断信息的消费方使用。
42
+ *
43
+ * options.preset(CLI --preset)仅在项目无自定义配置时覆盖 config.yml 的
44
+ * preset(工单 23 语义:项目自定义配置优先于 CLI 预设);不传 preset 时
45
+ * 完全尊重 config.yml 的 preset 键。
46
+ *
47
+ * @param projectRoot 项目根路径(缺省 process.cwd())
48
+ */
49
+ function getMergedConstraintsConfig(projectRoot = process.cwd(), options) {
50
+ const loader = new project_config_loader_1.ProjectConfigLoader(projectRoot);
51
+ loader.load();
52
+ if (loader.hasCustomConfig() || !options?.preset) {
53
+ return loader.mergeConstraints();
54
+ }
55
+ return loader.mergeConstraints({ preset: options.preset });
56
+ }
36
57
  /**
37
58
  * 诊断项目约束配置:未知 id 残留、scenes 生效情况
38
59
  *
@@ -1 +1 @@
1
- {"version":3,"file":"effective-constraints.js","sourceRoot":"","sources":["../../src/core/effective-constraints.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAiBH,0DASC;AA8BD,kDAqBC;AA1ED,2DAAoD;AACpD,mEAA8D;AAE9D;;;;;;;;;;GAUG;AACH,SAAgB,uBAAuB,CAAC,cAAsB,OAAO,CAAC,GAAG,EAAE;IACzE,MAAM,MAAM,GAAG,IAAI,2CAAmB,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,CAAC,IAAI,EAAE,CAAC;IACd,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACzC,OAAO;QACL,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACjC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;QACnC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;KACvC,CAAC;AACJ,CAAC;AAuBD;;;;;;GAMG;AACH,SAAgB,mBAAmB,CAAC,cAAsB,OAAO,CAAC,GAAG,EAAE;IACrE,MAAM,MAAM,GAAG,IAAI,2CAAmB,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IAEnC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAO,CAAC;SACzC,MAAM,CACL,CAAC,CAAC,EAAE,CACF,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QACtB,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAClC;SACA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAElB,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;QACnC,MAAM;QACN,aAAa;KACd,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"effective-constraints.js","sourceRoot":"","sources":["../../src/core/effective-constraints.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;AAoBH,0DAUC;AAcD,gEAUC;AA8BD,kDAqBC;AArGD,2DAAoD;AACpD,mEAA8D;AAE9D;;;;;;;;;;;;GAYG;AACH,SAAgB,uBAAuB,CACrC,cAAsB,OAAO,CAAC,GAAG,EAAE,EACnC,OAA6B;IAE7B,MAAM,MAAM,GAAG,0BAA0B,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAChE,OAAO;QACL,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACjC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;QACnC,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;KACvC,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,0BAA0B,CACxC,cAAsB,OAAO,CAAC,GAAG,EAAE,EACnC,OAA6B;IAE7B,MAAM,MAAM,GAAG,IAAI,2CAAmB,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,CAAC,IAAI,EAAE,CAAC;IACd,IAAI,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QACjD,OAAO,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACnC,CAAC;IACD,OAAO,MAAM,CAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AAC7D,CAAC;AAuBD;;;;;;GAMG;AACH,SAAgB,mBAAmB,CAAC,cAAsB,OAAO,CAAC,GAAG,EAAE;IACrE,MAAM,MAAM,GAAG,IAAI,2CAAmB,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;IAEnC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAO,CAAC;SACzC,MAAM,CACL,CAAC,CAAC,EAAE,CACF,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC;QACtB,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAClC;SACA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAElB,OAAO;QACL,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;QACnC,MAAM;QACN,aAAa;KACd,CAAC;AACJ,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * 生效集共享筛选器(ADR-0001 收口)
3
+ *
4
+ * 「config.yml 引用了哪些 id、哪些被禁用」的判定,约束侧与门禁侧共用一份:
5
+ * - 约束侧(ProjectConfigLoader.mergeConstraints):未知 id 静默忽略,
6
+ * 收集进结果 unknownIds 供诊断(历史配置可能存在已移除约束的禁用残留)
7
+ * - 门禁侧(getEffectiveGates):未知 id 抛错(闭环校验;gates 配置段为
8
+ * 新增面,不存在历史残留配置)
9
+ *
10
+ * 行为差异仅收敛为 onUnknownId 一个开关,筛选语义两侧一致。
11
+ */
12
+ export interface FilterEnabledEntriesOptions {
13
+ /** 未知 id 处理:'collect' 收集进结果 unknownIds;'throw' 立即抛错 */
14
+ onUnknownId: 'collect' | 'throw';
15
+ /** onUnknownId='throw' 时的错误消息定制(如附带可用 id 清单) */
16
+ unknownIdError?: (id: string) => string;
17
+ }
18
+ export interface FilterEnabledEntriesResult {
19
+ /** enabled === false 的 id(未知 id 若带 enabled:false 同样计入,与历史行为一致) */
20
+ disabledIds: string[];
21
+ /** 未知 id(仅 onUnknownId='collect' 时非空) */
22
+ unknownIds: string[];
23
+ }
24
+ /**
25
+ * 按 config 条目筛选:未知 id 按 onUnknownId 处理,enabled:false 收进 disabledIds
26
+ */
27
+ export declare function filterEnabledEntries(knownIds: ReadonlySet<string>, entries: Record<string, {
28
+ enabled?: boolean;
29
+ } | undefined>, options: FilterEnabledEntriesOptions): FilterEnabledEntriesResult;
30
+ //# sourceMappingURL=effective-set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effective-set.d.ts","sourceRoot":"","sources":["../../src/core/effective-set.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,2BAA2B;IAC1C,uDAAuD;IACvD,WAAW,EAAE,SAAS,GAAG,OAAO,CAAC;IAEjC,gDAAgD;IAChD,cAAc,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC;CACzC;AAED,MAAM,WAAW,0BAA0B;IACzC,kEAAkE;IAClE,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB,yCAAyC;IACzC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,EAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,CAAC,EAC1D,OAAO,EAAE,2BAA2B,GACnC,0BAA0B,CAoB5B"}
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ /**
3
+ * 生效集共享筛选器(ADR-0001 收口)
4
+ *
5
+ * 「config.yml 引用了哪些 id、哪些被禁用」的判定,约束侧与门禁侧共用一份:
6
+ * - 约束侧(ProjectConfigLoader.mergeConstraints):未知 id 静默忽略,
7
+ * 收集进结果 unknownIds 供诊断(历史配置可能存在已移除约束的禁用残留)
8
+ * - 门禁侧(getEffectiveGates):未知 id 抛错(闭环校验;gates 配置段为
9
+ * 新增面,不存在历史残留配置)
10
+ *
11
+ * 行为差异仅收敛为 onUnknownId 一个开关,筛选语义两侧一致。
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.filterEnabledEntries = filterEnabledEntries;
15
+ /**
16
+ * 按 config 条目筛选:未知 id 按 onUnknownId 处理,enabled:false 收进 disabledIds
17
+ */
18
+ function filterEnabledEntries(knownIds, entries, options) {
19
+ const disabledIds = [];
20
+ const unknownIds = [];
21
+ for (const [id, entry] of Object.entries(entries)) {
22
+ if (!knownIds.has(id)) {
23
+ if (options.onUnknownId === 'throw') {
24
+ throw new Error(options.unknownIdError?.(id) ??
25
+ `[harness] 配置引用了未注册的 id "${id}"。`);
26
+ }
27
+ unknownIds.push(id);
28
+ }
29
+ if (entry?.enabled === false) {
30
+ disabledIds.push(id);
31
+ }
32
+ }
33
+ return { disabledIds, unknownIds };
34
+ }
35
+ //# sourceMappingURL=effective-set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"effective-set.js","sourceRoot":"","sources":["../../src/core/effective-set.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;AAqBH,oDAwBC;AA3BD;;GAEG;AACH,SAAgB,oBAAoB,CAClC,QAA6B,EAC7B,OAA0D,EAC1D,OAAoC;IAEpC,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACtB,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACb,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;oBAC1B,2BAA2B,EAAE,IAAI,CACpC,CAAC;YACJ,CAAC;YACD,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC;QACD,IAAI,KAAK,EAAE,OAAO,KAAK,KAAK,EAAE,CAAC;YAC7B,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AACrC,CAAC"}
@@ -1,11 +1,18 @@
1
1
  /**
2
- * 核心模块导出
2
+ * 核心模块导出(ADR-0003:显式清单,禁 export *)
3
+ *
4
+ * checkConstraints 与包根统一为 options 对象签名(CheckConstraintsOptions),
5
+ * 不再暴露位置参数版。
3
6
  */
4
- export * from './constraints';
5
- export * from './validators';
6
- export * from './session';
7
+ export { IRON_LAWS, GUIDELINES, PROMPTS, getAllConstraints, findConstraintsByTrigger, getConstraint, ConstraintChecker, checkConstraint, checkConstraints, checkBeforeExecution, constraintChecker, CONSTRAINTS_START_MARKER, CONSTRAINTS_END_MARKER, renderConstraintsSection, CheckCache, renderConstraintsByTrigger, ConstraintViolationError, } from './constraints';
8
+ export type { CheckConstraintsOptions, CheckCacheConfig, CheckSamplingConfig, RenderConstraintsByTriggerOptions, ConstraintId, ConstraintKind, ConstraintLevel, ConstraintTrigger, Constraint, ConstraintResult, ConstraintContext, ConstraintCheckResult, IronLawContext, } from './constraints';
9
+ export { CheckpointValidator, PassesGate, createPassesGate, CSOValidator, } from './validators';
10
+ export type { CSOValidationResult, CSOIssue, Checkpoint, CheckpointCheck, CheckpointResult, CheckResult, CheckpointContext, CheckType, CheckConfig, PassesGateConfig, PassesGateResult, TaskTestResult, DynamicTask, } from './validators';
11
+ export { SessionStartup, createSessionStartup, DEFAULT_CODE_CHECKPOINTS, MINIMAL_CHECKPOINTS, CleanStateManager, createCleanStateManager, } from './session';
7
12
  export { SpecValidator } from './spec/validator';
8
13
  export type { SpecValidatorConfig, SpecValidationResult, BatchSpecValidationResult, SpecSchemaDefinition, SpecType, } from '../types/spec';
9
- export * from './project-config-loader';
10
- export * from './effective-constraints';
14
+ export { ProjectConfigLoader, loadRawProjectConfig, getCapabilitiesMode, } from './project-config-loader';
15
+ export type { CapabilitiesMode } from './project-config-loader';
16
+ export { getEffectiveConstraints, lintEffectiveConfig, } from './effective-constraints';
17
+ export type { EffectiveConfigLint } from './effective-constraints';
11
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
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;AAG1B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,QAAQ,GACT,MAAM,eAAe,CAAC;AAGvB,cAAc,yBAAyB,CAAC;AAGxC,cAAc,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,SAAS,EACT,UAAU,EACV,OAAO,EACP,iBAAiB,EACjB,wBAAwB,EACxB,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,EACjB,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,EACxB,UAAU,EACV,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,EACnB,iCAAiC,EACjC,YAAY,EACZ,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,GACf,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,mBAAmB,EACnB,UAAU,EACV,gBAAgB,EAChB,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,mBAAmB,EACnB,QAAQ,EACR,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,WAAW,GACZ,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,oBAAoB,EACpB,QAAQ,GACT,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EACL,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -1,32 +1,55 @@
1
1
  "use strict";
2
2
  /**
3
- * 核心模块导出
3
+ * 核心模块导出(ADR-0003:显式清单,禁 export *)
4
+ *
5
+ * checkConstraints 与包根统一为 options 对象签名(CheckConstraintsOptions),
6
+ * 不再暴露位置参数版。
4
7
  */
5
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- var desc = Object.getOwnPropertyDescriptor(m, k);
8
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
- desc = { enumerable: true, get: function() { return m[k]; } };
10
- }
11
- Object.defineProperty(o, k2, desc);
12
- }) : (function(o, m, k, k2) {
13
- if (k2 === undefined) k2 = k;
14
- o[k2] = m[k];
15
- }));
16
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
- };
19
8
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.SpecValidator = void 0;
9
+ exports.lintEffectiveConfig = exports.getEffectiveConstraints = exports.getCapabilitiesMode = exports.loadRawProjectConfig = exports.ProjectConfigLoader = exports.SpecValidator = exports.createCleanStateManager = exports.CleanStateManager = exports.MINIMAL_CHECKPOINTS = exports.DEFAULT_CODE_CHECKPOINTS = exports.createSessionStartup = exports.SessionStartup = exports.CSOValidator = exports.createPassesGate = exports.PassesGate = exports.CheckpointValidator = exports.ConstraintViolationError = exports.renderConstraintsByTrigger = exports.CheckCache = exports.renderConstraintsSection = exports.CONSTRAINTS_END_MARKER = exports.CONSTRAINTS_START_MARKER = exports.constraintChecker = exports.checkBeforeExecution = exports.checkConstraints = exports.checkConstraint = exports.ConstraintChecker = exports.getConstraint = exports.findConstraintsByTrigger = exports.getAllConstraints = exports.PROMPTS = exports.GUIDELINES = exports.IRON_LAWS = void 0;
21
10
  // 约束系统(三层:Iron Laws / Guidelines / Tips)
22
- __exportStar(require("./constraints"), exports);
23
- __exportStar(require("./validators"), exports);
24
- __exportStar(require("./session"), exports);
11
+ var constraints_1 = require("./constraints");
12
+ Object.defineProperty(exports, "IRON_LAWS", { enumerable: true, get: function () { return constraints_1.IRON_LAWS; } });
13
+ Object.defineProperty(exports, "GUIDELINES", { enumerable: true, get: function () { return constraints_1.GUIDELINES; } });
14
+ Object.defineProperty(exports, "PROMPTS", { enumerable: true, get: function () { return constraints_1.PROMPTS; } });
15
+ Object.defineProperty(exports, "getAllConstraints", { enumerable: true, get: function () { return constraints_1.getAllConstraints; } });
16
+ Object.defineProperty(exports, "findConstraintsByTrigger", { enumerable: true, get: function () { return constraints_1.findConstraintsByTrigger; } });
17
+ Object.defineProperty(exports, "getConstraint", { enumerable: true, get: function () { return constraints_1.getConstraint; } });
18
+ Object.defineProperty(exports, "ConstraintChecker", { enumerable: true, get: function () { return constraints_1.ConstraintChecker; } });
19
+ Object.defineProperty(exports, "checkConstraint", { enumerable: true, get: function () { return constraints_1.checkConstraint; } });
20
+ Object.defineProperty(exports, "checkConstraints", { enumerable: true, get: function () { return constraints_1.checkConstraints; } });
21
+ Object.defineProperty(exports, "checkBeforeExecution", { enumerable: true, get: function () { return constraints_1.checkBeforeExecution; } });
22
+ Object.defineProperty(exports, "constraintChecker", { enumerable: true, get: function () { return constraints_1.constraintChecker; } });
23
+ Object.defineProperty(exports, "CONSTRAINTS_START_MARKER", { enumerable: true, get: function () { return constraints_1.CONSTRAINTS_START_MARKER; } });
24
+ Object.defineProperty(exports, "CONSTRAINTS_END_MARKER", { enumerable: true, get: function () { return constraints_1.CONSTRAINTS_END_MARKER; } });
25
+ Object.defineProperty(exports, "renderConstraintsSection", { enumerable: true, get: function () { return constraints_1.renderConstraintsSection; } });
26
+ Object.defineProperty(exports, "CheckCache", { enumerable: true, get: function () { return constraints_1.CheckCache; } });
27
+ Object.defineProperty(exports, "renderConstraintsByTrigger", { enumerable: true, get: function () { return constraints_1.renderConstraintsByTrigger; } });
28
+ Object.defineProperty(exports, "ConstraintViolationError", { enumerable: true, get: function () { return constraints_1.ConstraintViolationError; } });
29
+ // 验证器(检查点 / PassesGate / CSO)
30
+ var validators_1 = require("./validators");
31
+ Object.defineProperty(exports, "CheckpointValidator", { enumerable: true, get: function () { return validators_1.CheckpointValidator; } });
32
+ Object.defineProperty(exports, "PassesGate", { enumerable: true, get: function () { return validators_1.PassesGate; } });
33
+ Object.defineProperty(exports, "createPassesGate", { enumerable: true, get: function () { return validators_1.createPassesGate; } });
34
+ Object.defineProperty(exports, "CSOValidator", { enumerable: true, get: function () { return validators_1.CSOValidator; } });
35
+ // 会话启动 / 净室状态
36
+ var session_1 = require("./session");
37
+ Object.defineProperty(exports, "SessionStartup", { enumerable: true, get: function () { return session_1.SessionStartup; } });
38
+ Object.defineProperty(exports, "createSessionStartup", { enumerable: true, get: function () { return session_1.createSessionStartup; } });
39
+ Object.defineProperty(exports, "DEFAULT_CODE_CHECKPOINTS", { enumerable: true, get: function () { return session_1.DEFAULT_CODE_CHECKPOINTS; } });
40
+ Object.defineProperty(exports, "MINIMAL_CHECKPOINTS", { enumerable: true, get: function () { return session_1.MINIMAL_CHECKPOINTS; } });
41
+ Object.defineProperty(exports, "CleanStateManager", { enumerable: true, get: function () { return session_1.CleanStateManager; } });
42
+ Object.defineProperty(exports, "createCleanStateManager", { enumerable: true, get: function () { return session_1.createCleanStateManager; } });
25
43
  // Spec 验证器
26
44
  var validator_1 = require("./spec/validator");
27
45
  Object.defineProperty(exports, "SpecValidator", { enumerable: true, get: function () { return validator_1.SpecValidator; } });
28
46
  // 项目配置加载器
29
- __exportStar(require("./project-config-loader"), exports);
47
+ var project_config_loader_1 = require("./project-config-loader");
48
+ Object.defineProperty(exports, "ProjectConfigLoader", { enumerable: true, get: function () { return project_config_loader_1.ProjectConfigLoader; } });
49
+ Object.defineProperty(exports, "loadRawProjectConfig", { enumerable: true, get: function () { return project_config_loader_1.loadRawProjectConfig; } });
50
+ Object.defineProperty(exports, "getCapabilitiesMode", { enumerable: true, get: function () { return project_config_loader_1.getCapabilitiesMode; } });
30
51
  // 生效约束集(ADR-0001:唯一生效集来源)
31
- __exportStar(require("./effective-constraints"), exports);
52
+ var effective_constraints_1 = require("./effective-constraints");
53
+ Object.defineProperty(exports, "getEffectiveConstraints", { enumerable: true, get: function () { return effective_constraints_1.getEffectiveConstraints; } });
54
+ Object.defineProperty(exports, "lintEffectiveConfig", { enumerable: true, get: function () { return effective_constraints_1.lintEffectiveConfig; } });
32
55
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;AAEH,yCAAyC;AAEzC,gDAA8B;AAE9B,+CAA6B;AAC7B,4CAA0B;AAE1B,WAAW;AACX,8CAAiD;AAAxC,0GAAA,aAAa,OAAA;AAStB,UAAU;AACV,0DAAwC;AAExC,0BAA0B;AAC1B,0DAAwC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,yCAAyC;AACzC,6CAkBuB;AAjBrB,wGAAA,SAAS,OAAA;AACT,yGAAA,UAAU,OAAA;AACV,sGAAA,OAAO,OAAA;AACP,gHAAA,iBAAiB,OAAA;AACjB,uHAAA,wBAAwB,OAAA;AACxB,4GAAA,aAAa,OAAA;AACb,gHAAA,iBAAiB,OAAA;AACjB,8GAAA,eAAe,OAAA;AACf,+GAAA,gBAAgB,OAAA;AAChB,mHAAA,oBAAoB,OAAA;AACpB,gHAAA,iBAAiB,OAAA;AACjB,uHAAA,wBAAwB,OAAA;AACxB,qHAAA,sBAAsB,OAAA;AACtB,uHAAA,wBAAwB,OAAA;AACxB,yGAAA,UAAU,OAAA;AACV,yHAAA,0BAA0B,OAAA;AAC1B,uHAAA,wBAAwB,OAAA;AAkB1B,8BAA8B;AAC9B,2CAKsB;AAJpB,iHAAA,mBAAmB,OAAA;AACnB,wGAAA,UAAU,OAAA;AACV,8GAAA,gBAAgB,OAAA;AAChB,0GAAA,YAAY,OAAA;AAkBd,cAAc;AACd,qCAOmB;AANjB,yGAAA,cAAc,OAAA;AACd,+GAAA,oBAAoB,OAAA;AACpB,mHAAA,wBAAwB,OAAA;AACxB,8GAAA,mBAAmB,OAAA;AACnB,4GAAA,iBAAiB,OAAA;AACjB,kHAAA,uBAAuB,OAAA;AAGzB,WAAW;AACX,8CAAiD;AAAxC,0GAAA,aAAa,OAAA;AAStB,UAAU;AACV,iEAIiC;AAH/B,4HAAA,mBAAmB,OAAA;AACnB,6HAAA,oBAAoB,OAAA;AACpB,4HAAA,mBAAmB,OAAA;AAIrB,0BAA0B;AAC1B,iEAGiC;AAF/B,gIAAA,uBAAuB,OAAA;AACvB,4HAAA,mBAAmB,OAAA"}
@@ -41,22 +41,19 @@ export declare class ProjectConfigLoader {
41
41
  * 合并内置约束和自定义约束(ADR-0001 生效集完整链路)
42
42
  *
43
43
  * 合并顺序:内置 → preset 裁剪 → config.yml `constraints.<id>.enabled:false`
44
- * 删除(对内置与 custom 同效)→ custom-constraints 追加/extend_exceptions
44
+ * 删除(对内置与 custom 同效)→ custom-constraints 追加
45
45
  * (禁用/已退役的 custom 不追加)→ scenes 过滤
46
46
  * (带 appliesTo 的 prompt 仅当 scenes 交集非空时保留)。
47
47
  *
48
48
  * config.yml 中未知约束 id(如已移除约束的禁用残留)静默忽略,
49
49
  * 记录在结果 unknownIds 中供诊断。
50
50
  *
51
- * @param options.preset 覆盖 config.yml 的 preset(CLI --preset 用)
51
+ * @param options.preset 覆盖 config.yml 的 preset(CLI --preset 用);
52
+ * 未知预设名回落 standard + stderr 警告
52
53
  */
53
54
  mergeConstraints(options?: {
54
55
  preset?: string;
55
56
  }): MergedConstraintsConfig;
56
- /**
57
- * 在合并结果中查找内置约束
58
- */
59
- private findBuiltInConstraint;
60
57
  /**
61
58
  * 将自定义约束定义转换为 Constraint
62
59
  *
@@ -1 +1 @@
1
- {"version":3,"file":"project-config-loader.d.ts","sourceRoot":"","sources":["../../src/core/project-config-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EACV,aAAa,EACb,0BAA0B,EAC1B,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAoBjC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CA8B7F;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;AAEvE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,CAWzE;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,iBAAiB,CAA6C;gBAE1D,WAAW,CAAC,EAAE,MAAM;IAMhC;;OAEG;IACH,IAAI,IAAI,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;;;;;;;;;;;OAYG;IACH,gBAAgB,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,uBAAuB;IA2GxE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAO7B;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAiBpB;;OAEG;IACH,SAAS,IAAI,aAAa;IAI1B;;OAEG;IACH,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC;IAIlE;;OAEG;IACH,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAclD;;OAEG;IACH,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU;IAU7E;;OAEG;IACH,eAAe,IAAI,OAAO;CAM3B"}
1
+ {"version":3,"file":"project-config-loader.d.ts","sourceRoot":"","sources":["../../src/core/project-config-loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EACV,aAAa,EACb,0BAA0B,EAC1B,uBAAuB,EACvB,kBAAkB,EACnB,MAAM,yBAAyB,CAAC;AAqBjC;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CA8B7F;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC;AAEvE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,gBAAgB,CAWzE;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,iBAAiB,CAA6C;gBAE1D,WAAW,CAAC,EAAE,MAAM;IAMhC;;OAEG;IACH,IAAI,IAAI,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;;;;;;;;;;;;OAaG;IACH,gBAAgB,CAAC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,uBAAuB;IAqGxE;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAgBpB;;OAEG;IACH,SAAS,IAAI,aAAa;IAI1B;;OAEG;IACH,oBAAoB,IAAI,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC;IAIlE;;OAEG;IACH,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAclD;;OAEG;IACH,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU;IAU7E;;OAEG;IACH,eAAe,IAAI,OAAO;CAM3B"}
@@ -47,6 +47,7 @@ const path = __importStar(require("path"));
47
47
  const yaml = __importStar(require("js-yaml"));
48
48
  const definitions_1 = require("./constraints/definitions");
49
49
  const presets_1 = require("../presets");
50
+ const effective_set_1 = require("./effective-set");
50
51
  /**
51
52
  * 默认配置
52
53
  */
@@ -163,45 +164,66 @@ class ProjectConfigLoader {
163
164
  * 合并内置约束和自定义约束(ADR-0001 生效集完整链路)
164
165
  *
165
166
  * 合并顺序:内置 → preset 裁剪 → config.yml `constraints.<id>.enabled:false`
166
- * 删除(对内置与 custom 同效)→ custom-constraints 追加/extend_exceptions
167
+ * 删除(对内置与 custom 同效)→ custom-constraints 追加
167
168
  * (禁用/已退役的 custom 不追加)→ scenes 过滤
168
169
  * (带 appliesTo 的 prompt 仅当 scenes 交集非空时保留)。
169
170
  *
170
171
  * config.yml 中未知约束 id(如已移除约束的禁用残留)静默忽略,
171
172
  * 记录在结果 unknownIds 中供诊断。
172
173
  *
173
- * @param options.preset 覆盖 config.yml 的 preset(CLI --preset 用)
174
+ * @param options.preset 覆盖 config.yml 的 preset(CLI --preset 用);
175
+ * 未知预设名回落 standard + stderr 警告
174
176
  */
175
177
  mergeConstraints(options) {
176
- // 0. preset 裁剪(未知预设名由 applyPreset 回落 standard)
177
- const presetMerged = (0, presets_1.applyPreset)(options?.preset ?? this.config.preset ?? 'standard');
178
+ // 0. preset 裁剪(strict standard 的别名;未知名回落 standard)
179
+ const presetName = options?.preset ?? this.config.preset ?? 'standard';
180
+ let preset = presets_1.PRESETS_BY_NAME[presetName];
181
+ if (!preset) {
182
+ console.error(`[harness] 未知预设 "${presetName}",已回落 standard`);
183
+ preset = presets_1.STANDARD_PRESET;
184
+ }
185
+ const pick = (source, ids) => {
186
+ if (ids === null)
187
+ return { ...source };
188
+ const filtered = {};
189
+ for (const id of ids) {
190
+ if (source[id])
191
+ filtered[id] = source[id];
192
+ }
193
+ return filtered;
194
+ };
195
+ const presetDisabled = (source, ids) => (ids === null ? [] : Object.keys(source).filter(id => !ids.includes(id)));
178
196
  const unknownIds = [];
179
197
  const result = {
180
- ironLaws: presetMerged.ironLaws,
181
- guidelines: presetMerged.guidelines,
182
- prompts: presetMerged.prompts ?? {},
183
- disabled: [...presetMerged.disabled],
198
+ ironLaws: pick(definitions_1.IRON_LAWS, preset.ironLaws),
199
+ guidelines: pick(definitions_1.GUIDELINES, preset.guidelines),
200
+ prompts: pick(definitions_1.PROMPTS, preset.prompts),
201
+ disabled: [
202
+ ...presetDisabled(definitions_1.IRON_LAWS, preset.ironLaws),
203
+ ...presetDisabled(definitions_1.GUIDELINES, preset.guidelines),
204
+ ...presetDisabled(definitions_1.PROMPTS, preset.prompts),
205
+ ],
184
206
  custom: [],
185
207
  unknownIds,
186
208
  };
187
- // 1. 处理启用/禁用配置
209
+ // 1. 处理启用/禁用配置(未知 id 静默忽略,记录供诊断)
188
210
  if (this.config.constraints) {
189
- for (const [constraintId, config] of Object.entries(this.config.constraints)) {
190
- const isKnown = !!definitions_1.IRON_LAWS[constraintId] ||
191
- !!definitions_1.GUIDELINES[constraintId] ||
192
- !!definitions_1.PROMPTS[constraintId] ||
193
- !!this.customConstraints[constraintId];
194
- if (!isKnown) {
195
- // 未知 id(如已移除约束的禁用残留):不报错,记录供诊断
196
- unknownIds.push(constraintId);
197
- }
198
- if (config.enabled === false) {
199
- result.disabled.push(constraintId);
200
- // 从对应层级中移除
201
- delete result.ironLaws[constraintId];
202
- delete result.guidelines[constraintId];
203
- delete result.prompts[constraintId];
204
- }
211
+ const knownIds = new Set([
212
+ ...Object.keys(definitions_1.IRON_LAWS),
213
+ ...Object.keys(definitions_1.GUIDELINES),
214
+ ...Object.keys(definitions_1.PROMPTS),
215
+ ...Object.keys(this.customConstraints),
216
+ ]);
217
+ const filtered = (0, effective_set_1.filterEnabledEntries)(knownIds, this.config.constraints, {
218
+ onUnknownId: 'collect',
219
+ });
220
+ unknownIds.push(...filtered.unknownIds);
221
+ for (const constraintId of filtered.disabledIds) {
222
+ result.disabled.push(constraintId);
223
+ // 从对应层级中移除
224
+ delete result.ironLaws[constraintId];
225
+ delete result.guidelines[constraintId];
226
+ delete result.prompts[constraintId];
205
227
  }
206
228
  }
207
229
  // 2. 添加自定义约束(config.yml 禁用的 id 不追加:step 1 已将其
@@ -211,36 +233,7 @@ class ProjectConfigLoader {
211
233
  if (result.disabled.includes(id) || customDef.retired) {
212
234
  continue;
213
235
  }
214
- const extendExceptions = customDef.extend_exceptions;
215
- const isExtendOnly = !!extendExceptions && extendExceptions.length > 0 &&
216
- !customDef.rule &&
217
- !customDef.exceptions;
218
- if (isExtendOnly) {
219
- const builtIn = this.findBuiltInConstraint(id, result);
220
- if (builtIn) {
221
- const constraint = { ...builtIn };
222
- constraint.exceptions = [
223
- ...(builtIn.exceptions || []),
224
- ...extendExceptions,
225
- ];
226
- if (result.ironLaws[id])
227
- result.ironLaws[id] = constraint;
228
- if (result.guidelines[id])
229
- result.guidelines[id] = constraint;
230
- if (result.prompts[id])
231
- result.prompts[id] = constraint;
232
- continue;
233
- }
234
- }
235
236
  const constraint = this.toConstraint(customDef, id);
236
- if (extendExceptions && extendExceptions.length > 0) {
237
- const builtIn = this.findBuiltInConstraint(id, result);
238
- constraint.exceptions = [
239
- ...(builtIn?.exceptions || []),
240
- ...(customDef.exceptions || []),
241
- ...extendExceptions,
242
- ];
243
- }
244
237
  result.custom.push(id);
245
238
  const level = customDef.level || 'guideline';
246
239
  switch (level) {
@@ -268,12 +261,6 @@ class ProjectConfigLoader {
268
261
  }
269
262
  return result;
270
263
  }
271
- /**
272
- * 在合并结果中查找内置约束
273
- */
274
- findBuiltInConstraint(id, merged) {
275
- return merged.ironLaws[id] || merged.guidelines[id] || merged.prompts?.[id];
276
- }
277
264
  /**
278
265
  * 将自定义约束定义转换为 Constraint
279
266
  *
@@ -290,7 +277,6 @@ class ProjectConfigLoader {
290
277
  rule: def.rule || '',
291
278
  message: def.message || '',
292
279
  trigger: (def.trigger || 'manual'),
293
- exceptions: def.exceptions,
294
280
  description: def.description,
295
281
  promptInjection: def.promptInjection,
296
282
  enabled: def.enabled !== false,