@dommaker/harness 0.16.9 → 0.17.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/README.md +33 -32
  3. package/bin/harness.js +33 -20
  4. package/dist/cli/commands/check.d.ts +3 -2
  5. package/dist/cli/commands/check.d.ts.map +1 -1
  6. package/dist/cli/commands/check.js +69 -36
  7. package/dist/cli/commands/check.js.map +1 -1
  8. package/dist/cli/commands/constraints-report.d.ts +42 -0
  9. package/dist/cli/commands/constraints-report.d.ts.map +1 -0
  10. package/dist/cli/commands/constraints-report.js +233 -0
  11. package/dist/cli/commands/constraints-report.js.map +1 -0
  12. package/dist/cli/commands/constraints-retire.d.ts +71 -0
  13. package/dist/cli/commands/constraints-retire.d.ts.map +1 -0
  14. package/dist/cli/commands/constraints-retire.js +384 -0
  15. package/dist/cli/commands/constraints-retire.js.map +1 -0
  16. package/dist/cli/commands/constraints.d.ts +1 -1
  17. package/dist/cli/commands/constraints.d.ts.map +1 -1
  18. package/dist/cli/commands/constraints.js +4 -4
  19. package/dist/cli/commands/constraints.js.map +1 -1
  20. package/dist/cli/commands/index.d.ts +2 -1
  21. package/dist/cli/commands/index.d.ts.map +1 -1
  22. package/dist/cli/commands/index.js +10 -4
  23. package/dist/cli/commands/index.js.map +1 -1
  24. package/dist/cli/commands/init.d.ts +20 -0
  25. package/dist/cli/commands/init.d.ts.map +1 -1
  26. package/dist/cli/commands/init.js +81 -59
  27. package/dist/cli/commands/init.js.map +1 -1
  28. package/dist/cli/commands/report.js +4 -4
  29. package/dist/cli/commands/report.js.map +1 -1
  30. package/dist/cli/commands/status.d.ts.map +1 -1
  31. package/dist/cli/commands/status.js +3 -4
  32. package/dist/cli/commands/status.js.map +1 -1
  33. package/dist/cli/commands/sync-docs/capabilities-syncer.d.ts +5 -1
  34. package/dist/cli/commands/sync-docs/capabilities-syncer.d.ts.map +1 -1
  35. package/dist/cli/commands/sync-docs/capabilities-syncer.js +2 -10
  36. package/dist/cli/commands/sync-docs/capabilities-syncer.js.map +1 -1
  37. package/dist/cli/commands/validate.d.ts.map +1 -1
  38. package/dist/cli/commands/validate.js +1 -5
  39. package/dist/cli/commands/validate.js.map +1 -1
  40. package/dist/core/constraints/capabilities-parser.d.ts +7 -0
  41. package/dist/core/constraints/capabilities-parser.d.ts.map +1 -1
  42. package/dist/core/constraints/capabilities-parser.js +13 -0
  43. package/dist/core/constraints/capabilities-parser.js.map +1 -1
  44. package/dist/core/constraints/checker.d.ts +13 -5
  45. package/dist/core/constraints/checker.d.ts.map +1 -1
  46. package/dist/core/constraints/checker.js +62 -25
  47. package/dist/core/constraints/checker.js.map +1 -1
  48. package/dist/core/constraints/checkers/capability-sync.d.ts +9 -2
  49. package/dist/core/constraints/checkers/capability-sync.d.ts.map +1 -1
  50. package/dist/core/constraints/checkers/capability-sync.js +55 -22
  51. package/dist/core/constraints/checkers/capability-sync.js.map +1 -1
  52. package/dist/core/constraints/checkers/context-doc-sync.d.ts +3 -0
  53. package/dist/core/constraints/checkers/context-doc-sync.d.ts.map +1 -1
  54. package/dist/core/constraints/checkers/context-doc-sync.js +8 -2
  55. package/dist/core/constraints/checkers/context-doc-sync.js.map +1 -1
  56. package/dist/core/constraints/checkers/docs-freshness.d.ts +1 -0
  57. package/dist/core/constraints/checkers/docs-freshness.d.ts.map +1 -1
  58. package/dist/core/constraints/checkers/docs-freshness.js +39 -0
  59. package/dist/core/constraints/checkers/docs-freshness.js.map +1 -1
  60. package/dist/core/constraints/checkers/index.d.ts +8 -4
  61. package/dist/core/constraints/checkers/index.d.ts.map +1 -1
  62. package/dist/core/constraints/checkers/index.js +29 -46
  63. package/dist/core/constraints/checkers/index.js.map +1 -1
  64. package/dist/core/constraints/checkers/iron-flags.d.ts +6 -7
  65. package/dist/core/constraints/checkers/iron-flags.d.ts.map +1 -1
  66. package/dist/core/constraints/checkers/iron-flags.js +10 -17
  67. package/dist/core/constraints/checkers/iron-flags.js.map +1 -1
  68. package/dist/core/constraints/checkers/no-hardcoded-credentials.d.ts +13 -0
  69. package/dist/core/constraints/checkers/no-hardcoded-credentials.d.ts.map +1 -0
  70. package/dist/core/constraints/checkers/no-hardcoded-credentials.js +91 -0
  71. package/dist/core/constraints/checkers/no-hardcoded-credentials.js.map +1 -0
  72. package/dist/core/constraints/checkers/types.d.ts +15 -4
  73. package/dist/core/constraints/checkers/types.d.ts.map +1 -1
  74. package/dist/core/constraints/checkers/types.js +16 -4
  75. package/dist/core/constraints/checkers/types.js.map +1 -1
  76. package/dist/core/constraints/context-builder.d.ts +6 -3
  77. package/dist/core/constraints/context-builder.d.ts.map +1 -1
  78. package/dist/core/constraints/context-builder.js +29 -20
  79. package/dist/core/constraints/context-builder.js.map +1 -1
  80. package/dist/core/constraints/definitions/guidelines.d.ts +6 -2
  81. package/dist/core/constraints/definitions/guidelines.d.ts.map +1 -1
  82. package/dist/core/constraints/definitions/guidelines.js +29 -572
  83. package/dist/core/constraints/definitions/guidelines.js.map +1 -1
  84. package/dist/core/constraints/definitions/iron-laws.d.ts +6 -2
  85. package/dist/core/constraints/definitions/iron-laws.d.ts.map +1 -1
  86. package/dist/core/constraints/definitions/iron-laws.js +48 -231
  87. package/dist/core/constraints/definitions/iron-laws.js.map +1 -1
  88. package/dist/core/constraints/definitions/prompts.d.ts +12 -0
  89. package/dist/core/constraints/definitions/prompts.d.ts.map +1 -0
  90. package/dist/core/constraints/definitions/prompts.js +405 -0
  91. package/dist/core/constraints/definitions/prompts.js.map +1 -0
  92. package/dist/core/constraints/definitions.d.ts +15 -9
  93. package/dist/core/constraints/definitions.d.ts.map +1 -1
  94. package/dist/core/constraints/definitions.js +18 -12
  95. package/dist/core/constraints/definitions.js.map +1 -1
  96. package/dist/core/constraints/index.d.ts +3 -2
  97. package/dist/core/constraints/index.d.ts.map +1 -1
  98. package/dist/core/constraints/index.js +8 -2
  99. package/dist/core/constraints/index.js.map +1 -1
  100. package/dist/core/constraints/injection-drift.d.ts +48 -0
  101. package/dist/core/constraints/injection-drift.d.ts.map +1 -0
  102. package/dist/core/constraints/injection-drift.js +140 -0
  103. package/dist/core/constraints/injection-drift.js.map +1 -0
  104. package/dist/core/constraints/injection-renderer.d.ts +23 -0
  105. package/dist/core/constraints/injection-renderer.d.ts.map +1 -0
  106. package/dist/core/constraints/injection-renderer.js +44 -0
  107. package/dist/core/constraints/injection-renderer.js.map +1 -0
  108. package/dist/core/constraints/interceptor.d.ts.map +1 -1
  109. package/dist/core/constraints/interceptor.js +3 -2
  110. package/dist/core/constraints/interceptor.js.map +1 -1
  111. package/dist/core/constraints/usage-report.d.ts +95 -0
  112. package/dist/core/constraints/usage-report.d.ts.map +1 -0
  113. package/dist/core/constraints/usage-report.js +206 -0
  114. package/dist/core/constraints/usage-report.js.map +1 -0
  115. package/dist/core/effective-constraints.d.ts +47 -0
  116. package/dist/core/effective-constraints.d.ts.map +1 -0
  117. package/dist/core/effective-constraints.js +60 -0
  118. package/dist/core/effective-constraints.js.map +1 -0
  119. package/dist/core/index.d.ts +1 -0
  120. package/dist/core/index.d.ts.map +1 -1
  121. package/dist/core/index.js +2 -0
  122. package/dist/core/index.js.map +1 -1
  123. package/dist/core/project-config-loader.d.ts +17 -2
  124. package/dist/core/project-config-loader.d.ts.map +1 -1
  125. package/dist/core/project-config-loader.js +55 -8
  126. package/dist/core/project-config-loader.js.map +1 -1
  127. package/dist/dashboard/data.d.ts +1 -9
  128. package/dist/dashboard/data.d.ts.map +1 -1
  129. package/dist/dashboard/data.js +7 -15
  130. package/dist/dashboard/data.js.map +1 -1
  131. package/dist/dashboard/types.d.ts +13 -1
  132. package/dist/dashboard/types.d.ts.map +1 -1
  133. package/dist/index.d.ts +0 -4
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/index.js +1 -13
  136. package/dist/index.js.map +1 -1
  137. package/dist/monitoring/index.d.ts +0 -2
  138. package/dist/monitoring/index.d.ts.map +1 -1
  139. package/dist/monitoring/index.js +0 -2
  140. package/dist/monitoring/index.js.map +1 -1
  141. package/dist/monitoring/knowledge-evolver.d.ts +1 -1
  142. package/dist/monitoring/knowledge-evolver.js +1 -1
  143. package/dist/monitoring/trace-analyzer.d.ts +1 -1
  144. package/dist/monitoring/trace-analyzer.d.ts.map +1 -1
  145. package/dist/monitoring/trace-analyzer.js +16 -10
  146. package/dist/monitoring/trace-analyzer.js.map +1 -1
  147. package/dist/monitoring/traces.d.ts +2 -1
  148. package/dist/monitoring/traces.d.ts.map +1 -1
  149. package/dist/monitoring/traces.js +5 -3
  150. package/dist/monitoring/traces.js.map +1 -1
  151. package/dist/presets/standard.d.ts +3 -1
  152. package/dist/presets/standard.d.ts.map +1 -1
  153. package/dist/presets/standard.js +18 -8
  154. package/dist/presets/standard.js.map +1 -1
  155. package/dist/types/constraint.d.ts +51 -11
  156. package/dist/types/constraint.d.ts.map +1 -1
  157. package/dist/types/constraint.js +8 -4
  158. package/dist/types/constraint.js.map +1 -1
  159. package/dist/types/index.d.ts +1 -1
  160. package/dist/types/index.d.ts.map +1 -1
  161. package/dist/types/index.js.map +1 -1
  162. package/dist/types/monitoring-types.d.ts +2 -63
  163. package/dist/types/monitoring-types.d.ts.map +1 -1
  164. package/dist/types/monitoring-types.js +2 -2
  165. package/dist/types/project-config.d.ts +26 -1
  166. package/dist/types/project-config.d.ts.map +1 -1
  167. package/dist/types/trace.d.ts +16 -7
  168. package/dist/types/trace.d.ts.map +1 -1
  169. package/dist/types/trace.js +8 -0
  170. package/dist/types/trace.js.map +1 -1
  171. package/package.json +1 -1
  172. package/src/CONTEXT.md +2 -2
  173. package/src/__tests__/checker-extra.test.ts +228 -333
  174. package/src/__tests__/checker.test.ts +87 -724
  175. package/src/__tests__/constraint-doctor.test.ts +5 -5
  176. package/src/__tests__/doctor-extra.test.ts +164 -0
  177. package/src/__tests__/effective-constraints.test.ts +147 -0
  178. package/src/__tests__/extend-exceptions.test.ts +3 -3
  179. package/src/__tests__/iron-laws.test.ts +115 -91
  180. package/src/__tests__/no-hardcoded-credentials.test.ts +90 -0
  181. package/src/__tests__/presets.test.ts +7 -7
  182. package/src/__tests__/project-config-loader-extra.test.ts +41 -4
  183. package/src/__tests__/skip-semantics.test.ts +322 -0
  184. package/src/cli/commands/CONTEXT.md +5 -3
  185. package/src/cli/commands/__tests__/check-drift.test.ts +127 -0
  186. package/src/cli/commands/__tests__/check-skip-output.test.ts +128 -0
  187. package/src/cli/commands/__tests__/check.test.ts +14 -25
  188. package/src/cli/commands/__tests__/constraints-report.test.ts +327 -0
  189. package/src/cli/commands/__tests__/constraints-retire.test.ts +283 -0
  190. package/src/cli/commands/__tests__/init-injection.test.ts +234 -0
  191. package/src/cli/commands/__tests__/status-extra.test.ts +11 -11
  192. package/src/cli/commands/__tests__/status.test.ts +1 -1
  193. package/src/cli/commands/check.ts +72 -38
  194. package/src/cli/commands/constraints-report.ts +234 -0
  195. package/src/cli/commands/constraints-retire.ts +443 -0
  196. package/src/cli/commands/constraints.ts +5 -5
  197. package/src/cli/commands/index.ts +2 -1
  198. package/src/cli/commands/init.ts +94 -66
  199. package/src/cli/commands/report.ts +6 -6
  200. package/src/cli/commands/status.ts +3 -4
  201. package/src/cli/commands/sync-docs/capabilities-syncer.ts +5 -7
  202. package/src/cli/commands/validate.ts +1 -5
  203. package/src/core/CONTEXT.md +7 -4
  204. package/src/core/constraints/__tests__/injection-drift.test.ts +164 -0
  205. package/src/core/constraints/__tests__/interceptor.test.ts +4 -0
  206. package/src/core/constraints/capabilities-parser.ts +13 -0
  207. package/src/core/constraints/checker.ts +73 -28
  208. package/src/core/constraints/checkers/capability-sync.ts +72 -29
  209. package/src/core/constraints/checkers/context-doc-sync.ts +9 -2
  210. package/src/core/constraints/checkers/docs-freshness.ts +43 -0
  211. package/src/core/constraints/checkers/index.ts +38 -71
  212. package/src/core/constraints/checkers/iron-flags.ts +13 -49
  213. package/src/core/constraints/checkers/no-hardcoded-credentials.ts +93 -0
  214. package/src/core/constraints/checkers/types.ts +27 -5
  215. package/src/core/constraints/context-builder.ts +28 -19
  216. package/src/core/constraints/definitions/guidelines.ts +29 -597
  217. package/src/core/constraints/definitions/iron-laws.ts +48 -239
  218. package/src/core/constraints/definitions/prompts.ts +419 -0
  219. package/src/core/constraints/definitions.ts +18 -11
  220. package/src/core/constraints/index.ts +10 -1
  221. package/src/core/constraints/injection-drift.ts +139 -0
  222. package/src/core/constraints/injection-renderer.ts +44 -0
  223. package/src/core/constraints/interceptor.ts +3 -2
  224. package/src/core/constraints/usage-report.ts +254 -0
  225. package/src/core/effective-constraints.ts +85 -0
  226. package/src/core/index.ts +4 -1
  227. package/src/core/project-config-loader.ts +59 -9
  228. package/src/dashboard/__tests__/data.test.ts +5 -12
  229. package/src/dashboard/data.ts +9 -19
  230. package/src/dashboard/types.ts +18 -1
  231. package/src/index.ts +0 -12
  232. package/src/knowledge/CONTEXT.md +2 -2
  233. package/src/monitoring/CONTEXT.md +3 -4
  234. package/src/monitoring/index.ts +0 -2
  235. package/src/monitoring/knowledge-evolver.ts +1 -1
  236. package/src/monitoring/trace-analyzer.ts +15 -10
  237. package/src/monitoring/traces.ts +10 -6
  238. package/src/presets/__tests__/standard.test.ts +11 -9
  239. package/src/presets/standard.ts +24 -15
  240. package/src/types/constraint.ts +59 -14
  241. package/src/types/index.ts +1 -3
  242. package/src/types/monitoring-types.ts +2 -84
  243. package/src/types/project-config.ts +30 -1
  244. package/src/types/trace.ts +18 -7
  245. package/src/verification/CONTEXT.md +1 -1
  246. package/dist/cli/commands/flow.d.ts +0 -22
  247. package/dist/cli/commands/flow.d.ts.map +0 -1
  248. package/dist/cli/commands/flow.js +0 -275
  249. package/dist/cli/commands/flow.js.map +0 -1
  250. package/dist/constraints/lifecycle-runner.d.ts +0 -52
  251. package/dist/constraints/lifecycle-runner.d.ts.map +0 -1
  252. package/dist/constraints/lifecycle-runner.js +0 -151
  253. package/dist/constraints/lifecycle-runner.js.map +0 -1
  254. package/dist/constraints/registry.d.ts +0 -27
  255. package/dist/constraints/registry.d.ts.map +0 -1
  256. package/dist/constraints/registry.js +0 -128
  257. package/dist/constraints/registry.js.map +0 -1
  258. package/dist/constraints/types.d.ts +0 -53
  259. package/dist/constraints/types.d.ts.map +0 -1
  260. package/dist/constraints/types.js +0 -8
  261. package/dist/constraints/types.js.map +0 -1
  262. package/dist/core/constraints/checkers/always-pass.d.ts +0 -17
  263. package/dist/core/constraints/checkers/always-pass.d.ts.map +0 -1
  264. package/dist/core/constraints/checkers/always-pass.js +0 -23
  265. package/dist/core/constraints/checkers/always-pass.js.map +0 -1
  266. package/dist/core/constraints/checkers/guideline-flags.d.ts +0 -9
  267. package/dist/core/constraints/checkers/guideline-flags.d.ts.map +0 -1
  268. package/dist/core/constraints/checkers/guideline-flags.js +0 -13
  269. package/dist/core/constraints/checkers/guideline-flags.js.map +0 -1
  270. package/dist/core/constraints/checkers/no-any-type.d.ts +0 -6
  271. package/dist/core/constraints/checkers/no-any-type.d.ts.map +0 -1
  272. package/dist/core/constraints/checkers/no-any-type.js +0 -42
  273. package/dist/core/constraints/checkers/no-any-type.js.map +0 -1
  274. package/dist/core/constraints/checkers/no-excuse-patterns.d.ts +0 -6
  275. package/dist/core/constraints/checkers/no-excuse-patterns.d.ts.map +0 -1
  276. package/dist/core/constraints/checkers/no-excuse-patterns.js +0 -25
  277. package/dist/core/constraints/checkers/no-excuse-patterns.js.map +0 -1
  278. package/dist/core/constraints/checkers/no-fuzzy-completion-claim.d.ts +0 -6
  279. package/dist/core/constraints/checkers/no-fuzzy-completion-claim.d.ts.map +0 -1
  280. package/dist/core/constraints/checkers/no-fuzzy-completion-claim.js +0 -34
  281. package/dist/core/constraints/checkers/no-fuzzy-completion-claim.js.map +0 -1
  282. package/dist/core/constraints/checkers/no-performative-agreement.d.ts +0 -8
  283. package/dist/core/constraints/checkers/no-performative-agreement.d.ts.map +0 -1
  284. package/dist/core/constraints/checkers/no-performative-agreement.js +0 -23
  285. package/dist/core/constraints/checkers/no-performative-agreement.js.map +0 -1
  286. package/dist/core/constraints/checkers/no-simplification-without-approval.d.ts +0 -6
  287. package/dist/core/constraints/checkers/no-simplification-without-approval.d.ts.map +0 -1
  288. package/dist/core/constraints/checkers/no-simplification-without-approval.js +0 -30
  289. package/dist/core/constraints/checkers/no-simplification-without-approval.js.map +0 -1
  290. package/dist/core/constraints/checkers/test-coverage.d.ts +0 -6
  291. package/dist/core/constraints/checkers/test-coverage.d.ts.map +0 -1
  292. package/dist/core/constraints/checkers/test-coverage.js +0 -33
  293. package/dist/core/constraints/checkers/test-coverage.js.map +0 -1
  294. package/dist/core/constraints/checkers/yagni.d.ts +0 -8
  295. package/dist/core/constraints/checkers/yagni.d.ts.map +0 -1
  296. package/dist/core/constraints/checkers/yagni.js +0 -96
  297. package/dist/core/constraints/checkers/yagni.js.map +0 -1
  298. package/dist/core/constraints/definitions/tips.d.ts +0 -7
  299. package/dist/core/constraints/definitions/tips.d.ts.map +0 -1
  300. package/dist/core/constraints/definitions/tips.js +0 -62
  301. package/dist/core/constraints/definitions/tips.js.map +0 -1
  302. package/dist/evolution/auto-evolve.d.ts +0 -35
  303. package/dist/evolution/auto-evolve.d.ts.map +0 -1
  304. package/dist/evolution/auto-evolve.js +0 -64
  305. package/dist/evolution/auto-evolve.js.map +0 -1
  306. package/dist/evolution/index.d.ts +0 -2
  307. package/dist/evolution/index.d.ts.map +0 -1
  308. package/dist/evolution/index.js +0 -18
  309. package/dist/evolution/index.js.map +0 -1
  310. package/dist/monitoring/constraint-evolver.d.ts +0 -120
  311. package/dist/monitoring/constraint-evolver.d.ts.map +0 -1
  312. package/dist/monitoring/constraint-evolver.js +0 -410
  313. package/dist/monitoring/constraint-evolver.js.map +0 -1
  314. package/src/__tests__/constraint-evolver.test.ts +0 -405
  315. package/src/__tests__/doctor-evolver.test.ts +0 -381
  316. package/src/cli/commands/__tests__/flow.test.ts +0 -343
  317. package/src/cli/commands/flow.ts +0 -277
  318. package/src/constraints/__tests__/lifecycle-runner.test.ts +0 -246
  319. package/src/constraints/__tests__/registry.test.ts +0 -196
  320. package/src/constraints/lifecycle-runner.ts +0 -184
  321. package/src/constraints/registry.ts +0 -134
  322. package/src/constraints/types.ts +0 -59
  323. package/src/core/constraints/checkers/always-pass.ts +0 -22
  324. package/src/core/constraints/checkers/guideline-flags.ts +0 -30
  325. package/src/core/constraints/checkers/no-any-type.ts +0 -42
  326. package/src/core/constraints/checkers/no-excuse-patterns.ts +0 -24
  327. package/src/core/constraints/checkers/no-fuzzy-completion-claim.ts +0 -33
  328. package/src/core/constraints/checkers/no-performative-agreement.ts +0 -22
  329. package/src/core/constraints/checkers/no-simplification-without-approval.ts +0 -29
  330. package/src/core/constraints/checkers/test-coverage.ts +0 -35
  331. package/src/core/constraints/checkers/yagni.ts +0 -65
  332. package/src/core/constraints/definitions/tips.ts +0 -63
  333. package/src/evolution/CONTEXT.md +0 -22
  334. package/src/evolution/__tests__/auto-evolve.test.ts +0 -319
  335. package/src/evolution/auto-evolve.ts +0 -98
  336. package/src/evolution/index.ts +0 -1
  337. package/src/monitoring/constraint-evolver.ts +0 -501
@@ -34,6 +34,15 @@ export interface CustomConstraintDefinition {
34
34
  /** 描述(可选) */
35
35
  description?: string;
36
36
 
37
+ /**
38
+ * Prompt 注入文本(可选)
39
+ *
40
+ * 自定义约束统一 kind='prompt'(无 checker),该字段是进入 CLAUDE.md
41
+ * 注入段(renderConstraintsSection)的唯一通道——缺省不出现在注入段,
42
+ * 与内置无 promptInjection 的 check 条目行为一致。
43
+ */
44
+ promptInjection?: string;
45
+
37
46
  /** 是否启用(可选,默认 true) */
38
47
  enabled?: boolean;
39
48
  }
@@ -221,6 +230,14 @@ export interface ProjectConfig {
221
230
  /** 使用预设 */
222
231
  preset?: 'strict' | 'standard' | 'relaxed';
223
232
 
233
+ /**
234
+ * 项目适用场景标签(ADR-0001,如 'agent-skill'、'llm-app')
235
+ *
236
+ * 带 appliesTo 标签的 prompt 仅当 scenes 与其交集非空时进入生效集;
237
+ * 无 appliesTo 的条目不受影响。缺省为空 = 场景专属 prompt 默认不注入。
238
+ */
239
+ scenes?: string[];
240
+
224
241
  /** 治理配置 */
225
242
  governance?: GovernanceConfig;
226
243
 
@@ -256,12 +273,24 @@ export interface MergedConstraintsConfig {
256
273
  /** Guidelines(合并后) */
257
274
  guidelines: Record<string, Constraint>;
258
275
 
259
- /** Tips(合并后) */
276
+ /** Tips(合并后)—— 已退役(ADR-0001),内置侧恒为空表,仅兼容历史调用方 */
260
277
  tips: Record<string, Constraint>;
261
278
 
279
+ /** Prompts(合并后,ADR-0001 新增;可选以兼容旧调用方,缺省回落内置 PROMPTS) */
280
+ prompts?: Record<string, Constraint>;
281
+
262
282
  /** 禁用的约束 ID */
263
283
  disabled: string[];
264
284
 
265
285
  /** 自定义约束 ID */
266
286
  custom: string[];
287
+
288
+ /**
289
+ * config.yml `constraints.<id>` 中既非内置也非自定义的未知 id(ADR-0001)
290
+ *
291
+ * 例如禁用了已被本版移除的约束 id 的残留配置。生效集计算静默忽略,
292
+ * 在此列出供诊断(lintEffectiveConfig / report)使用。
293
+ * 可选以兼容手工构造 MergedConstraintsConfig 的历史调用方。
294
+ */
295
+ unknownIds?: string[];
267
296
  }
@@ -4,6 +4,14 @@
4
4
  * 轻量设计:只记录核心信息,零 Token 成本
5
5
  */
6
6
 
7
+ /**
8
+ * 默认 trace 文件路径(相对项目根目录)
9
+ *
10
+ * 读写双方必须统一引用此常量;
11
+ * 需要自定义路径时使用 configureTraceCollector / TraceCollectorConfig.traceFile
12
+ */
13
+ export const DEFAULT_TRACE_FILE = '.harness/logs/traces.log';
14
+
7
15
  /**
8
16
  * 约束执行 Trace
9
17
  *
@@ -21,13 +29,13 @@ export interface ExecutionTrace {
21
29
  constraintId: string;
22
30
 
23
31
  /** 约束层级 */
24
- level: 'iron_law' | 'guideline' | 'tip';
32
+ level: 'iron_law' | 'guideline' | 'prompt' | 'tip';
25
33
 
26
34
  /** 检查时间(Unix timestamp) */
27
35
  timestamp: number;
28
36
 
29
- /** 检查结果 */
30
- result: 'pass' | 'fail' | 'bypassed';
37
+ /** 检查结果(skip = 约定未采用/证据未接线,未评估;不计 pass/fail 分母) */
38
+ result: 'pass' | 'fail' | 'bypassed' | 'skip';
31
39
 
32
40
  // ========================================
33
41
  // 轻量上下文(可选)
@@ -69,7 +77,7 @@ export interface TraceSummary {
69
77
  constraintId: string;
70
78
 
71
79
  /** 约束层级 */
72
- level: 'iron_law' | 'guideline' | 'tip';
80
+ level: 'iron_law' | 'guideline' | 'prompt' | 'tip';
73
81
 
74
82
  /** 统计时间范围 */
75
83
  timeRange: {
@@ -93,6 +101,9 @@ export interface TraceSummary {
93
101
  /** 绕过次数 */
94
102
  bypassCount: number;
95
103
 
104
+ /** 跳过次数(ADR-0001:约定未采用/证据未接线;不计入 pass/fail/bypass 率分母) */
105
+ skipCount?: number;
106
+
96
107
  /** 用户忽略次数 */
97
108
  ignoreCount: number;
98
109
 
@@ -150,7 +161,7 @@ export interface TraceAnomaly {
150
161
  constraintId: string;
151
162
 
152
163
  /** 约束层级 */
153
- level: 'iron_law' | 'guideline' | 'tip';
164
+ level: 'iron_law' | 'guideline' | 'prompt' | 'tip';
154
165
 
155
166
  /** 异常描述 */
156
167
  message: string;
@@ -177,10 +188,10 @@ export interface TraceFilter {
177
188
  constraintId?: string;
178
189
 
179
190
  /** 约束层级(可选) */
180
- level?: 'iron_law' | 'guideline' | 'tip';
191
+ level?: 'iron_law' | 'guideline' | 'prompt' | 'tip';
181
192
 
182
193
  /** 结果类型(可选) */
183
- result?: 'pass' | 'fail' | 'bypassed';
194
+ result?: 'pass' | 'fail' | 'bypassed' | 'skip';
184
195
 
185
196
  /** 时间范围(可选) */
186
197
  timeRange?: {
@@ -11,7 +11,7 @@
11
11
  ## 依赖关系
12
12
  - 依赖 `src/core/constraints/` 约束检查
13
13
  - 依赖 `src/core/validators/` 验证器
14
- - CLI flow 命令消费
14
+ - `src/index.ts` 导出供外部调用方消费(无内置 CLI 命令)
15
15
 
16
16
  ## 约定
17
17
  - 验证规则可配置
@@ -1,22 +0,0 @@
1
- /**
2
- * harness flow 命令
3
- *
4
- * 一键执行诊断 + 提案流程
5
- */
6
- export interface FlowOptions {
7
- /** 项目路径 */
8
- projectPath?: string;
9
- /** 从哪个步骤开始 */
10
- from?: 'analyze' | 'diagnose' | 'propose';
11
- /** 自动应用低风险提案 */
12
- autoApply?: boolean;
13
- /** 自动执行已接受的提案(调用 ConstraintLifecycleRunner) */
14
- autoExecute?: boolean;
15
- /** 时间范围(小时) */
16
- hours?: number;
17
- }
18
- /**
19
- * 执行流程
20
- */
21
- export declare function flow(options: FlowOptions): Promise<void>;
22
- //# sourceMappingURL=flow.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/flow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAeH,MAAM,WAAW,WAAW;IAC1B,WAAW;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc;IACd,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1C,gBAAgB;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuBD;;GAEG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA4N9D"}
@@ -1,275 +0,0 @@
1
- "use strict";
2
- /**
3
- * harness flow 命令
4
- *
5
- * 一键执行诊断 + 提案流程
6
- */
7
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
- if (k2 === undefined) k2 = k;
9
- var desc = Object.getOwnPropertyDescriptor(m, k);
10
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
- desc = { enumerable: true, get: function() { return m[k]; } };
12
- }
13
- Object.defineProperty(o, k2, desc);
14
- }) : (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- o[k2] = m[k];
17
- }));
18
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
- Object.defineProperty(o, "default", { enumerable: true, value: v });
20
- }) : function(o, v) {
21
- o["default"] = v;
22
- });
23
- var __importStar = (this && this.__importStar) || (function () {
24
- var ownKeys = function(o) {
25
- ownKeys = Object.getOwnPropertyNames || function (o) {
26
- var ar = [];
27
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
- return ar;
29
- };
30
- return ownKeys(o);
31
- };
32
- return function (mod) {
33
- if (mod && mod.__esModule) return mod;
34
- var result = {};
35
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
- __setModuleDefault(result, mod);
37
- return result;
38
- };
39
- })();
40
- var __importDefault = (this && this.__importDefault) || function (mod) {
41
- return (mod && mod.__esModule) ? mod : { "default": mod };
42
- };
43
- Object.defineProperty(exports, "__esModule", { value: true });
44
- exports.flow = flow;
45
- const chalk_1 = __importDefault(require("chalk"));
46
- const fs = __importStar(require("fs"));
47
- const path = __importStar(require("path"));
48
- const readline = __importStar(require("readline"));
49
- const traces_1 = require("../../monitoring/traces");
50
- const trace_analyzer_1 = require("../../monitoring/trace-analyzer");
51
- const constraint_doctor_1 = require("../../monitoring/constraint-doctor");
52
- const constraint_evolver_1 = require("../../monitoring/constraint-evolver");
53
- const definitions_1 = require("../../core/constraints/definitions");
54
- const lifecycle_runner_1 = require("../../constraints/lifecycle-runner");
55
- /**
56
- * 创建 readline 接口
57
- */
58
- function createReadlineInterface() {
59
- return readline.createInterface({
60
- input: process.stdin,
61
- output: process.stdout,
62
- });
63
- }
64
- /**
65
- * 询问用户
66
- */
67
- function ask(rl, question) {
68
- return new Promise(resolve => {
69
- rl.question(question, answer => {
70
- resolve(answer.trim().toLowerCase());
71
- });
72
- });
73
- }
74
- /**
75
- * 执行流程
76
- */
77
- async function flow(options) {
78
- const projectPath = options.projectPath || process.cwd();
79
- const harnessDir = path.join(projectPath, '.harness');
80
- const tracesPath = path.join(harnessDir, 'traces', 'execution.log');
81
- const diagnosesDir = path.join(harnessDir, 'diagnoses');
82
- const proposalsDir = path.join(harnessDir, 'proposals');
83
- console.log(chalk_1.default.blue('🔄 Harness 自动化流程'));
84
- console.log();
85
- // 检查前置条件
86
- if (!fs.existsSync(tracesPath)) {
87
- console.log(chalk_1.default.yellow('⚠️ 暂无 Trace 记录'));
88
- console.log(chalk_1.default.gray('💡 运行 harness check 开始记录'));
89
- return;
90
- }
91
- // 读取 traces
92
- const tracesContent = fs.readFileSync(tracesPath, 'utf-8');
93
- const lines = tracesContent.trim().split('\n').filter(Boolean);
94
- const traces = lines.map(line => {
95
- try {
96
- return JSON.parse(line);
97
- }
98
- catch {
99
- return null;
100
- }
101
- }).filter(Boolean);
102
- // 创建收集器和分析器
103
- const collector = new traces_1.TraceCollector({ traceFile: tracesPath });
104
- const analyzer = new trace_analyzer_1.TraceAnalyzer(collector);
105
- const summaries = analyzer.summarize(traces);
106
- let anomalies = analyzer.detectAnomalies(summaries);
107
- const rl = createReadlineInterface();
108
- try {
109
- // 步骤 1: 分析统计
110
- if (!options.from || options.from === 'analyze') {
111
- console.log(chalk_1.default.blue('📊 步骤 1/4: 分析统计'));
112
- console.log(chalk_1.default.gray('────────────────────────────'));
113
- console.log(chalk_1.default.gray(`约束统计: ${summaries.length} 条`));
114
- console.log(chalk_1.default.gray(`检测异常: ${anomalies.length} 个`));
115
- if (anomalies.length === 0) {
116
- console.log(chalk_1.default.green('✅ 未发现异常'));
117
- rl.close();
118
- return;
119
- }
120
- console.log(chalk_1.default.yellow('发现异常:'));
121
- anomalies.forEach((a) => {
122
- console.log(chalk_1.default.yellow(` - ${a.constraintId}: ${a.type}`));
123
- });
124
- console.log();
125
- // 询问是否继续
126
- const continue1 = await ask(rl, '是否继续运行诊断? [Y/n] ');
127
- if (continue1 === 'n') {
128
- console.log(chalk_1.default.gray('已取消'));
129
- rl.close();
130
- return;
131
- }
132
- console.log();
133
- }
134
- // 步骤 2: 运行诊断
135
- console.log(chalk_1.default.blue('🔍 步骤 2/4: 运行诊断'));
136
- console.log(chalk_1.default.gray('────────────────────────────'));
137
- const doctor = new constraint_doctor_1.ConstraintDoctor();
138
- const diagnoses = [];
139
- for (const anomaly of anomalies) {
140
- try {
141
- const diagnosis = await doctor.diagnose(anomaly);
142
- diagnoses.push(diagnosis);
143
- }
144
- catch (e) {
145
- console.log(chalk_1.default.yellow(` ⚠️ ${anomaly.constraintId} 诊断失败`));
146
- }
147
- }
148
- console.log(chalk_1.default.gray(`诊断数量: ${diagnoses.length}`));
149
- if (diagnoses.length > 0) {
150
- console.log();
151
- diagnoses.forEach((d) => {
152
- console.log(chalk_1.default.yellow(` ${d.constraintId}`));
153
- console.log(chalk_1.default.gray(` 根因: ${d.rootCause.primary}`));
154
- console.log(chalk_1.default.gray(` 严重度: ${d.impact.severity}`));
155
- });
156
- }
157
- // 保存诊断结果
158
- if (diagnoses.length > 0) {
159
- fs.mkdirSync(diagnosesDir, { recursive: true });
160
- const diagnosisFile = path.join(diagnosesDir, `${new Date().toISOString().split('T')[0]}.json`);
161
- fs.writeFileSync(diagnosisFile, JSON.stringify(diagnoses, null, 2));
162
- console.log(chalk_1.default.green(`✅ 诊断已保存: ${diagnosisFile}`));
163
- }
164
- console.log();
165
- // 询问是否继续
166
- const continue2 = await ask(rl, '是否继续生成优化提案? [Y/n] ');
167
- if (continue2 === 'n') {
168
- console.log(chalk_1.default.gray('已取消'));
169
- rl.close();
170
- return;
171
- }
172
- console.log();
173
- // 步骤 3: 生成提案
174
- console.log(chalk_1.default.blue('💡 步骤 3/4: 生成提案'));
175
- console.log(chalk_1.default.gray('────────────────────────────'));
176
- const evolver = new constraint_evolver_1.ConstraintEvolver(undefined, definitions_1.getConstraint);
177
- const proposals = [];
178
- for (const diagnosis of diagnoses) {
179
- try {
180
- const proposal = await evolver.propose(diagnosis);
181
- if (proposal) {
182
- proposals.push(proposal);
183
- }
184
- }
185
- catch (e) {
186
- console.log(chalk_1.default.yellow(` ⚠️ ${diagnosis.constraintId} 提案生成失败`));
187
- }
188
- }
189
- console.log(chalk_1.default.gray(`提案数量: ${proposals.length}`));
190
- if (proposals.length === 0) {
191
- console.log(chalk_1.default.green('✅ 无需优化'));
192
- rl.close();
193
- return;
194
- }
195
- console.log();
196
- proposals.forEach((p, i) => {
197
- console.log(chalk_1.default.yellow(`提案 ${i + 1}:`));
198
- console.log(chalk_1.default.gray(` 约束: ${p.constraintId}`));
199
- console.log(chalk_1.default.gray(` 操作: ${p.type}`));
200
- console.log(chalk_1.default.gray(` 风险: ${p.risk.level}`));
201
- console.log();
202
- });
203
- // 保存提案
204
- fs.mkdirSync(proposalsDir, { recursive: true });
205
- const proposalFile = path.join(proposalsDir, `${new Date().toISOString().split('T')[0]}.json`);
206
- fs.writeFileSync(proposalFile, JSON.stringify({ proposals, timestamp: new Date().toISOString() }, null, 2));
207
- console.log(chalk_1.default.green(`✅ 提案已保存: ${proposalFile}`));
208
- console.log();
209
- // 步骤 4: 审核提案
210
- console.log(chalk_1.default.blue('📝 步骤 4/4: 审核提案'));
211
- console.log(chalk_1.default.gray('────────────────────────────'));
212
- const runner = options.autoExecute ? new lifecycle_runner_1.ConstraintLifecycleRunner() : null;
213
- const executionResults = [];
214
- for (let i = 0; i < proposals.length; i++) {
215
- const p = proposals[i];
216
- // 低风险 → 可自动应用
217
- if (options.autoApply && p.risk.level === 'low') {
218
- console.log(chalk_1.default.green(`✅ 自动应用提案 ${i + 1} (低风险)`));
219
- if (runner) {
220
- const result = runner.execute(p);
221
- executionResults.push(result);
222
- if (result.success) {
223
- console.log(chalk_1.default.green(` ✅ 已执行: ${result.details}`));
224
- }
225
- else {
226
- console.log(chalk_1.default.yellow(` ⚠️ 执行失败: ${result.details}`));
227
- }
228
- }
229
- continue;
230
- }
231
- // 需要人工审核
232
- const answer = await ask(rl, `是否应用提案 ${i + 1}? [y/N] `);
233
- if (answer === 'y') {
234
- console.log(chalk_1.default.green(`✅ 提案 ${i + 1} 已标记为应用`));
235
- if (runner) {
236
- const result = runner.execute(p);
237
- executionResults.push(result);
238
- if (result.success) {
239
- console.log(chalk_1.default.green(` ✅ 已执行: ${result.details}`));
240
- }
241
- else {
242
- console.log(chalk_1.default.yellow(` ⚠️ 执行失败: ${result.details}`));
243
- }
244
- }
245
- else {
246
- console.log(chalk_1.default.gray(' 请手动更新约束配置'));
247
- }
248
- }
249
- else {
250
- console.log(chalk_1.default.gray(`⏭️ 跳过提案 ${i + 1}`));
251
- }
252
- }
253
- // 显示执行摘要
254
- if (executionResults.length > 0) {
255
- console.log();
256
- console.log(chalk_1.default.blue('📊 执行摘要:'));
257
- const succeeded = executionResults.filter(r => r.success).length;
258
- const failed = executionResults.filter(r => !r.success).length;
259
- console.log(chalk_1.default.gray(` 成功: ${succeeded}, 失败: ${failed}`));
260
- }
261
- console.log();
262
- console.log(chalk_1.default.green('✅ 流程完成!'));
263
- console.log();
264
- console.log(chalk_1.default.blue('💡 下一步:'));
265
- console.log(chalk_1.default.gray(' 1. 查看提案文件确认变更'));
266
- if (!runner) {
267
- console.log(chalk_1.default.gray(' 2. 手动更新约束配置'));
268
- }
269
- console.log(chalk_1.default.gray(` ${runner ? '2' : '3'}. 运行 harness status 查看效果`));
270
- }
271
- finally {
272
- rl.close();
273
- }
274
- }
275
- //# sourceMappingURL=flow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flow.js","sourceRoot":"","sources":["../../../src/cli/commands/flow.ts"],"names":[],"mappings":"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"}
@@ -1,52 +0,0 @@
1
- /**
2
- * 约束生命周期执行器
3
- *
4
- * 将 ConstraintEvolver 生成的提案转化为 ConstraintRegistry 实际操作。
5
- * 连接 monitoring 层(proposal)和 constraints 层(registry)。
6
- */
7
- import { ConstraintRegistry } from './registry';
8
- import type { ConstraintProposal } from '../types/monitoring-types';
9
- import type { ConstraintLevel } from '../types/constraint';
10
- import type { DeprecationSchedule } from './types';
11
- /**
12
- * 提案执行结果
13
- */
14
- export interface ExecutionResult {
15
- proposalId: string;
16
- constraintId: string;
17
- action: string;
18
- success: boolean;
19
- details: string;
20
- }
21
- /**
22
- * 约束生命周期执行器
23
- *
24
- * 将 evolver 的提案(proposal)转化为 registry 的实际操作(degrade/rollback/scheduleDeprecation)
25
- */
26
- export declare class ConstraintLifecycleRunner {
27
- private registry;
28
- constructor(registry?: ConstraintRegistry);
29
- getRegistry(): ConstraintRegistry;
30
- /**
31
- * 执行单个已接受的提案
32
- */
33
- execute(proposal: ConstraintProposal): ExecutionResult;
34
- /**
35
- * 批量执行提案
36
- */
37
- executeBatch(proposals: ConstraintProposal[]): ExecutionResult[];
38
- /**
39
- * 回滚已降级的约束
40
- */
41
- rollbackConstraint(constraintId: string, originalLevel: ConstraintLevel): boolean;
42
- /**
43
- * 设置约束的弃用计划
44
- */
45
- scheduleDeprecation(constraintId: string, schedule: DeprecationSchedule): boolean;
46
- private executeLevelChange;
47
- private executeAddException;
48
- private executeAdjustTrigger;
49
- private executeModifyMessage;
50
- private failResult;
51
- }
52
- //# sourceMappingURL=lifecycle-runner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lifecycle-runner.d.ts","sourceRoot":"","sources":["../../src/constraints/lifecycle-runner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAqB;gBAEzB,QAAQ,CAAC,EAAE,kBAAkB;IAIzC,WAAW,IAAI,kBAAkB;IAIjC;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,kBAAkB,GAAG,eAAe;IAqBtD;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,kBAAkB,EAAE,GAAG,eAAe,EAAE;IAIhE;;OAEG;IACH,kBAAkB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,GAAG,OAAO;IAIjF;;OAEG;IACH,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,mBAAmB,GAAG,OAAO;IAIjF,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,oBAAoB;IAkB5B,OAAO,CAAC,oBAAoB;IAiB5B,OAAO,CAAC,UAAU;CASnB"}
@@ -1,151 +0,0 @@
1
- "use strict";
2
- /**
3
- * 约束生命周期执行器
4
- *
5
- * 将 ConstraintEvolver 生成的提案转化为 ConstraintRegistry 实际操作。
6
- * 连接 monitoring 层(proposal)和 constraints 层(registry)。
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.ConstraintLifecycleRunner = void 0;
10
- const registry_1 = require("./registry");
11
- /**
12
- * 约束生命周期执行器
13
- *
14
- * 将 evolver 的提案(proposal)转化为 registry 的实际操作(degrade/rollback/scheduleDeprecation)
15
- */
16
- class ConstraintLifecycleRunner {
17
- registry;
18
- constructor(registry) {
19
- this.registry = registry || new registry_1.ConstraintRegistry();
20
- }
21
- getRegistry() {
22
- return this.registry;
23
- }
24
- /**
25
- * 执行单个已接受的提案
26
- */
27
- execute(proposal) {
28
- switch (proposal.type) {
29
- case 'change_level':
30
- return this.executeLevelChange(proposal);
31
- case 'add_exception':
32
- return this.executeAddException(proposal);
33
- case 'adjust_trigger':
34
- return this.executeAdjustTrigger(proposal);
35
- case 'modify_message':
36
- return this.executeModifyMessage(proposal);
37
- default:
38
- return {
39
- proposalId: proposal.id,
40
- constraintId: proposal.constraintId,
41
- action: proposal.type,
42
- success: false,
43
- details: `Unsupported proposal type: ${proposal.type}`,
44
- };
45
- }
46
- }
47
- /**
48
- * 批量执行提案
49
- */
50
- executeBatch(proposals) {
51
- return proposals.map(p => this.execute(p));
52
- }
53
- /**
54
- * 回滚已降级的约束
55
- */
56
- rollbackConstraint(constraintId, originalLevel) {
57
- return this.registry.rollback(constraintId, originalLevel);
58
- }
59
- /**
60
- * 设置约束的弃用计划
61
- */
62
- scheduleDeprecation(constraintId, schedule) {
63
- return this.registry.scheduleDeprecation(constraintId, schedule);
64
- }
65
- executeLevelChange(proposal) {
66
- const constraint = this.registry.get(proposal.constraintId);
67
- if (!constraint) {
68
- return this.failResult(proposal, `Constraint ${proposal.constraintId} not found`);
69
- }
70
- if (constraint.layer === 'safety') {
71
- return this.failResult(proposal, 'Cannot change level of safety-layer constraint');
72
- }
73
- const targetLevel = proposal.content.proposed;
74
- const currentLevel = constraint.level;
75
- const levelOrder = { iron_law: 0, guideline: 1, tip: 2 };
76
- if ((levelOrder[targetLevel] ?? 99) > (levelOrder[currentLevel] ?? 0)) {
77
- const success = this.registry.degrade(proposal.constraintId);
78
- return {
79
- proposalId: proposal.id,
80
- constraintId: proposal.constraintId,
81
- action: 'degrade',
82
- success,
83
- details: success
84
- ? `Degraded from ${currentLevel} to ${targetLevel}`
85
- : 'Degradation failed',
86
- };
87
- }
88
- return this.failResult(proposal, 'Level change direction not supported via registry');
89
- }
90
- executeAddException(proposal) {
91
- const constraint = this.registry.get(proposal.constraintId);
92
- if (!constraint) {
93
- return this.failResult(proposal, `Constraint ${proposal.constraintId} not found`);
94
- }
95
- const exception = proposal.content.proposed;
96
- const currentExceptions = constraint.exceptions || [];
97
- if (currentExceptions.includes(exception)) {
98
- return this.failResult(proposal, `Exception ${exception} already exists`);
99
- }
100
- if (!constraint.exceptions)
101
- constraint.exceptions = [];
102
- constraint.exceptions.push(exception);
103
- return {
104
- proposalId: proposal.id,
105
- constraintId: proposal.constraintId,
106
- action: 'add_exception',
107
- success: true,
108
- details: `Added exception: ${exception}`,
109
- };
110
- }
111
- executeAdjustTrigger(proposal) {
112
- const constraint = this.registry.get(proposal.constraintId);
113
- if (!constraint) {
114
- return this.failResult(proposal, `Constraint ${proposal.constraintId} not found`);
115
- }
116
- const oldTrigger = constraint.trigger;
117
- constraint.trigger = proposal.content.proposed;
118
- return {
119
- proposalId: proposal.id,
120
- constraintId: proposal.constraintId,
121
- action: 'adjust_trigger',
122
- success: true,
123
- details: `Changed trigger from ${JSON.stringify(oldTrigger)} to ${JSON.stringify(proposal.content.proposed)}`,
124
- };
125
- }
126
- executeModifyMessage(proposal) {
127
- const constraint = this.registry.get(proposal.constraintId);
128
- if (!constraint) {
129
- return this.failResult(proposal, `Constraint ${proposal.constraintId} not found`);
130
- }
131
- constraint.message = proposal.content.proposed;
132
- return {
133
- proposalId: proposal.id,
134
- constraintId: proposal.constraintId,
135
- action: 'modify_message',
136
- success: true,
137
- details: 'Updated message',
138
- };
139
- }
140
- failResult(proposal, details) {
141
- return {
142
- proposalId: proposal.id,
143
- constraintId: proposal.constraintId,
144
- action: proposal.type,
145
- success: false,
146
- details,
147
- };
148
- }
149
- }
150
- exports.ConstraintLifecycleRunner = ConstraintLifecycleRunner;
151
- //# sourceMappingURL=lifecycle-runner.js.map