@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
@@ -1,115 +0,0 @@
1
- "use strict";
2
- /**
3
- * Dashboard 统计计算
4
- *
5
- * 纯函数,从原始数据计算统计指标
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.computeKnowledgeOverview = computeKnowledgeOverview;
9
- exports.computeKnowledgeFlow = computeKnowledgeFlow;
10
- exports.computeInterceptRate = computeInterceptRate;
11
- /**
12
- * 计算知识库概览
13
- */
14
- function computeKnowledgeOverview(entries) {
15
- const byType = computeByType(entries);
16
- const total = entries.length;
17
- const proven = entries.filter(e => e.maturity === 'proven').length;
18
- const verified = entries.filter(e => e.maturity === 'verified').length;
19
- const draft = entries.filter(e => e.maturity === 'draft').length;
20
- return {
21
- byType,
22
- total,
23
- maturityDistribution: {
24
- proven,
25
- verified,
26
- draft,
27
- provenPercent: total > 0 ? Math.round((proven / total) * 100) : 0,
28
- verifiedPercent: total > 0 ? Math.round((verified / total) * 100) : 0,
29
- draftPercent: total > 0 ? Math.round((draft / total) * 100) : 0,
30
- },
31
- decayWarning: computeDecayWarning(entries),
32
- };
33
- }
34
- /**
35
- * 按类型分组统计
36
- */
37
- function computeByType(entries) {
38
- const typeMap = new Map();
39
- for (const entry of entries) {
40
- const existing = typeMap.get(entry.type) || { total: 0, proven: 0, verified: 0, draft: 0 };
41
- existing.total++;
42
- if (entry.maturity === 'proven')
43
- existing.proven++;
44
- else if (entry.maturity === 'verified')
45
- existing.verified++;
46
- else if (entry.maturity === 'draft')
47
- existing.draft++;
48
- typeMap.set(entry.type, existing);
49
- }
50
- return [...typeMap.entries()].map(([type, stats]) => ({ type, ...stats }));
51
- }
52
- /**
53
- * 计算衰减预警
54
- */
55
- function computeDecayWarning(entries) {
56
- const now = new Date();
57
- const sixMonthsAgo = new Date(now);
58
- sixMonthsAgo.setMonth(sixMonthsAgo.getMonth() - 6);
59
- const threeMonthsAgo = new Date(now);
60
- threeMonthsAgo.setMonth(threeMonthsAgo.getMonth() - 3);
61
- let provenUnused6m = 0;
62
- let verifiedUnused3m = 0;
63
- for (const entry of entries) {
64
- const lastRef = entry.lastReferenced ? new Date(entry.lastReferenced) : new Date(entry.created);
65
- if (entry.maturity === 'proven' && lastRef < sixMonthsAgo) {
66
- provenUnused6m++;
67
- }
68
- if (entry.maturity === 'verified' && lastRef < threeMonthsAgo) {
69
- verifiedUnused3m++;
70
- }
71
- }
72
- return { provenUnused6m, verifiedUnused3m };
73
- }
74
- /**
75
- * 计算知识流转统计
76
- */
77
- function computeKnowledgeFlow(entries, referenceCounts, topN = 5) {
78
- // 成熟度转换统计(基于当前状态推断)
79
- const transitions = {
80
- draftToVerified: entries.filter(e => e.maturity === 'verified' && e.lastReferenced).length,
81
- verifiedToProven: entries.filter(e => e.maturity === 'proven').length,
82
- provenToVerified: 0, // 需要历史数据
83
- verifiedToDraft: 0, // 需要历史数据
84
- };
85
- // Top N 高频引用
86
- const topReferenced = [...referenceCounts.entries()]
87
- .map(([id, count]) => {
88
- const entry = entries.find(e => e.id === id);
89
- return { id, title: entry?.title ?? id, referenceCount: count };
90
- })
91
- .sort((a, b) => b.referenceCount - a.referenceCount)
92
- .slice(0, topN);
93
- const referenced = entries.filter(e => e.lastReferenced).length;
94
- return {
95
- period: '近 30 天',
96
- pipeline: {
97
- extracted: 0, // 需要 ingestion 日志
98
- ingested: 0, // 需要 ingestion 日志
99
- referenced,
100
- upgraded: transitions.draftToVerified + transitions.verifiedToProven,
101
- downgraded: transitions.provenToVerified + transitions.verifiedToDraft,
102
- },
103
- transitions,
104
- topReferenced,
105
- };
106
- }
107
- /**
108
- * 计算约束拦截率
109
- */
110
- function computeInterceptRate(triggerCount, interceptCount) {
111
- if (triggerCount === 0)
112
- return 0;
113
- return Math.round((interceptCount / triggerCount) * 100);
114
- }
115
- //# sourceMappingURL=stats.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/dashboard/stats.ts"],"names":[],"mappings":"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"}
@@ -1,110 +0,0 @@
1
- /**
2
- * Dashboard 数据类型定义
3
- *
4
- * harness 提供数据,studio 负责渲染
5
- */
6
- import type { KnowledgeSubsystem } from '../knowledge/types';
7
- /** 约束分层 */
8
- export type ConstraintLayer = 'safety' | 'quality';
9
- /** 退化状态(生命周期机制已删除,保留字段供消费方兼容,恒为 active) */
10
- export type DeprecationStatus = 'active' | 'scheduled' | 'deprecated' | 'removed';
11
- /** 约束拦截统计(generate/getConstraintHeatmap 的输入) */
12
- export interface ConstraintStats {
13
- constraintId: string;
14
- triggerCount: number;
15
- passCount: number;
16
- interceptCount: number;
17
- interceptRate: number;
18
- lastTriggered?: string;
19
- }
20
- export interface KnowledgeOverview {
21
- byType: Array<{
22
- type: KnowledgeSubsystem;
23
- total: number;
24
- proven: number;
25
- verified: number;
26
- draft: number;
27
- }>;
28
- total: number;
29
- maturityDistribution: {
30
- proven: number;
31
- verified: number;
32
- draft: number;
33
- provenPercent: number;
34
- verifiedPercent: number;
35
- draftPercent: number;
36
- };
37
- decayWarning: {
38
- provenUnused6m: number;
39
- verifiedUnused3m: number;
40
- };
41
- }
42
- export interface ConstraintHeatmap {
43
- period: string;
44
- constraints: Array<{
45
- id: string;
46
- layer: ConstraintLayer;
47
- trigger: number;
48
- pass: number;
49
- intercept: number;
50
- interceptRate: number;
51
- deprecationStatus: DeprecationStatus;
52
- permanent?: boolean;
53
- }>;
54
- neverTriggered: string[];
55
- decliningInterceptRate: Array<{
56
- id: string;
57
- from: number;
58
- to: number;
59
- }>;
60
- }
61
- export interface KnowledgeFlow {
62
- period: string;
63
- pipeline: {
64
- extracted: number;
65
- ingested: number;
66
- referenced: number;
67
- upgraded: number;
68
- downgraded: number;
69
- };
70
- transitions: {
71
- draftToVerified: number;
72
- verifiedToProven: number;
73
- provenToVerified: number;
74
- verifiedToDraft: number;
75
- };
76
- topReferenced: Array<{
77
- id: string;
78
- title: string;
79
- referenceCount: number;
80
- }>;
81
- }
82
- export interface FeedbackLoopStatus {
83
- local: {
84
- active: number;
85
- lastFeedback?: string;
86
- lastType?: string;
87
- };
88
- push: {
89
- active: number;
90
- lastFeedback?: string;
91
- lastType?: string;
92
- };
93
- external: {
94
- active: number;
95
- lastFeedback?: string;
96
- lastType?: string;
97
- };
98
- feedbackToKnowledge: {
99
- total: number;
100
- pending: number;
101
- };
102
- }
103
- export interface HarnessDashboardData {
104
- timestamp: string;
105
- knowledgeOverview: KnowledgeOverview;
106
- constraintHeatmap: ConstraintHeatmap;
107
- knowledgeFlow: KnowledgeFlow;
108
- feedbackLoop: FeedbackLoopStatus;
109
- }
110
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dashboard/types.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- "use strict";
2
- /**
3
- * Dashboard 数据类型定义
4
- *
5
- * harness 提供数据,studio 负责渲染
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/dashboard/types.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
@@ -1,76 +0,0 @@
1
- /**
2
- * 约束诊断器
3
- *
4
- * 当检测到异常时,基于预设规则分析 traces 给出诊断(零 Token,不调用 LLM)。
5
- */
6
- import type { ExecutionTrace, TraceAnomaly, TraceSummary } from '../types/trace';
7
- import type { Diagnosis } from '../types/monitoring-types';
8
- export type { Diagnosis };
9
- /**
10
- * 诊断配置
11
- */
12
- export interface ConstraintDoctorConfig {
13
- /** 最大 traces 数量(用于构造诊断证据) */
14
- maxTraces?: number;
15
- }
16
- /**
17
- * Constraint Doctor - 约束诊断器
18
- *
19
- * 使用方式:
20
- * ```typescript
21
- * const doctor = new ConstraintDoctor(analyzer);
22
- * const diagnosis = await doctor.diagnose(anomaly);
23
- *
24
- * if (diagnosis.needsChange) {
25
- * const proposal = await evolver.propose(diagnosis);
26
- * }
27
- * ```
28
- */
29
- export declare class ConstraintDoctor {
30
- private config;
31
- private traces;
32
- constructor(config?: ConstraintDoctorConfig);
33
- /**
34
- * 设置诊断数据
35
- */
36
- setData(traces: ExecutionTrace[], _summary?: TraceSummary): void;
37
- /**
38
- * 诊断异常
39
- *
40
- * 如果 Agent 未启用,返回基于规则的诊断
41
- */
42
- diagnose(anomaly: TraceAnomaly): Promise<Diagnosis>;
43
- /**
44
- * 基于规则的诊断(零 Token)
45
- *
46
- * 根据异常类型应用预设的诊断规则
47
- */
48
- private ruleBasedDiagnose;
49
- /**
50
- * 过滤相关 traces
51
- *
52
- * 只保留与异常相关的 traces,减少 prompt 内容
53
- */
54
- private filterRelevantTraces;
55
- /**
56
- * 批量诊断多个异常
57
- */
58
- diagnoseBatch(anomalies: TraceAnomaly[]): Promise<Diagnosis[]>;
59
- /**
60
- * 生成诊断报告(文本格式)
61
- */
62
- generateReport(diagnosis: Diagnosis): string;
63
- /**
64
- * 保存诊断结果
65
- */
66
- saveDiagnosis(diagnosis: Diagnosis, outputPath: string): void;
67
- /**
68
- * 加载诊断结果
69
- */
70
- loadDiagnosis(inputPath: string): Diagnosis;
71
- }
72
- /**
73
- * 创建诊断器
74
- */
75
- export declare function createDoctor(config?: ConstraintDoctorConfig): ConstraintDoctor;
76
- //# sourceMappingURL=constraint-doctor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constraint-doctor.d.ts","sourceRoot":"","sources":["../../src/monitoring/constraint-doctor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EACZ,YAAY,EACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAI3D,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,6BAA6B;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,MAAM,CAAmB;gBAErB,MAAM,CAAC,EAAE,sBAAsB;IAQ3C;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,QAAQ,CAAC,EAAE,YAAY,GAAG,IAAI;IAIhE;;;;OAIG;IACG,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC;IAQzD;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IA2CzB;;;;OAIG;IACH,OAAO,CAAC,oBAAoB;IAa5B;;OAEG;IACG,aAAa,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAIpE;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM;IAmD5C;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAY7D;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;CAK5C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,sBAAsB,GAAG,gBAAgB,CAE9E"}
@@ -1,189 +0,0 @@
1
- "use strict";
2
- /**
3
- * 约束诊断器
4
- *
5
- * 当检测到异常时,基于预设规则分析 traces 给出诊断(零 Token,不调用 LLM)。
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.ConstraintDoctor = void 0;
9
- exports.createDoctor = createDoctor;
10
- const diagnosis_rules_1 = require("./diagnosis-rules");
11
- /**
12
- * Constraint Doctor - 约束诊断器
13
- *
14
- * 使用方式:
15
- * ```typescript
16
- * const doctor = new ConstraintDoctor(analyzer);
17
- * const diagnosis = await doctor.diagnose(anomaly);
18
- *
19
- * if (diagnosis.needsChange) {
20
- * const proposal = await evolver.propose(diagnosis);
21
- * }
22
- * ```
23
- */
24
- class ConstraintDoctor {
25
- config;
26
- traces;
27
- constructor(config) {
28
- this.config = {
29
- maxTraces: 20,
30
- ...config,
31
- };
32
- this.traces = [];
33
- }
34
- /**
35
- * 设置诊断数据
36
- */
37
- setData(traces, _summary) {
38
- this.traces = traces;
39
- }
40
- /**
41
- * 诊断异常
42
- *
43
- * 如果 Agent 未启用,返回基于规则的诊断
44
- */
45
- async diagnose(anomaly) {
46
- // 过滤相关 traces
47
- const relevantTraces = this.filterRelevantTraces(anomaly);
48
- // 基于规则的诊断(不消耗 Token)
49
- return this.ruleBasedDiagnose(anomaly, relevantTraces);
50
- }
51
- /**
52
- * 基于规则的诊断(零 Token)
53
- *
54
- * 根据异常类型应用预设的诊断规则
55
- */
56
- ruleBasedDiagnose(anomaly, traces) {
57
- const diagnosis = {
58
- anomalyId: `${anomaly.constraintId}-${anomaly.type}-${Date.now()}`,
59
- constraintId: anomaly.constraintId,
60
- diagnosedAt: Date.now(),
61
- rootCause: {
62
- primary: '',
63
- secondary: [],
64
- evidence: traces.slice(0, this.config.maxTraces),
65
- },
66
- impact: {
67
- severity: 'medium',
68
- scope: 'single_project',
69
- userImpact: '',
70
- },
71
- recommendations: [],
72
- needsChange: false,
73
- urgency: 'low',
74
- };
75
- // 根据异常类型诊断(工单 23-B:规则数据化,见 diagnosis-rules.ts)
76
- const rule = diagnosis_rules_1.DIAGNOSIS_RULES[anomaly.type];
77
- if (rule) {
78
- diagnosis.rootCause.primary = rule.primary;
79
- diagnosis.rootCause.secondary = rule.secondary;
80
- diagnosis.impact.userImpact = rule.userImpact;
81
- diagnosis.recommendations = rule.recommendations(anomaly);
82
- diagnosis.needsChange = rule.needsChange;
83
- diagnosis.urgency = rule.urgency(anomaly);
84
- }
85
- // 根据约束层级调整严重性
86
- if (anomaly.level === 'iron_law') {
87
- diagnosis.impact.severity = 'high';
88
- diagnosis.urgency = 'medium'; // Iron law 总是至少 medium
89
- }
90
- return diagnosis;
91
- }
92
- /**
93
- * 过滤相关 traces
94
- *
95
- * 只保留与异常相关的 traces,减少 prompt 内容
96
- */
97
- filterRelevantTraces(anomaly) {
98
- return this.traces.filter(t => {
99
- // 必须是同一个约束
100
- if (t.constraintId !== anomaly.constraintId)
101
- return false;
102
- // 失败或绕过的更有诊断价值
103
- if (t.result === 'fail' || t.result === 'bypassed')
104
- return true;
105
- // 保留少量通过的作为对比
106
- return true;
107
- });
108
- }
109
- /**
110
- * 批量诊断多个异常
111
- */
112
- async diagnoseBatch(anomalies) {
113
- return Promise.all(anomalies.map(a => this.diagnose(a)));
114
- }
115
- /**
116
- * 生成诊断报告(文本格式)
117
- */
118
- generateReport(diagnosis) {
119
- const lines = [];
120
- lines.push(`# Diagnosis Report`);
121
- lines.push(`Constraint: ${diagnosis.constraintId}`);
122
- lines.push(`Anomaly: ${diagnosis.anomalyId}`);
123
- lines.push(`Diagnosed: ${new Date(diagnosis.diagnosedAt).toISOString()}`);
124
- lines.push('');
125
- // 根因
126
- lines.push(`## Root Cause`);
127
- lines.push('');
128
- lines.push(`**Primary**: ${diagnosis.rootCause.primary}`);
129
- if (diagnosis.rootCause.secondary?.length) {
130
- lines.push('');
131
- lines.push('**Secondary**:');
132
- for (const s of diagnosis.rootCause.secondary) {
133
- lines.push(`- ${s}`);
134
- }
135
- }
136
- lines.push('');
137
- // 影响
138
- lines.push(`## Impact`);
139
- lines.push('');
140
- lines.push(`- Severity: ${diagnosis.impact.severity}`);
141
- lines.push(`- Scope: ${diagnosis.impact.scope}`);
142
- lines.push(`- User Impact: ${diagnosis.impact.userImpact}`);
143
- lines.push('');
144
- // 建议
145
- lines.push(`## Recommendations`);
146
- lines.push('');
147
- for (const r of diagnosis.recommendations) {
148
- lines.push(`### ${r.type}`);
149
- lines.push(`- Content: ${r.content}`);
150
- lines.push(`- Expected: ${r.expectedOutcome}`);
151
- lines.push(`- Cost: ${r.implementationCost}`);
152
- lines.push('');
153
- }
154
- // 决策
155
- lines.push(`## Decision`);
156
- lines.push('');
157
- lines.push(`- Needs Change: ${diagnosis.needsChange ? '✅ Yes' : '❌ No'}`);
158
- lines.push(`- Urgency: ${diagnosis.urgency}`);
159
- return lines.join('\n');
160
- }
161
- /**
162
- * 保存诊断结果
163
- */
164
- saveDiagnosis(diagnosis, outputPath) {
165
- const fs = require('fs');
166
- const path = require('path');
167
- const dir = path.dirname(outputPath);
168
- if (!fs.existsSync(dir)) {
169
- fs.mkdirSync(dir, { recursive: true });
170
- }
171
- fs.writeFileSync(outputPath, JSON.stringify(diagnosis, null, 2), 'utf-8');
172
- }
173
- /**
174
- * 加载诊断结果
175
- */
176
- loadDiagnosis(inputPath) {
177
- const fs = require('fs');
178
- const content = fs.readFileSync(inputPath, 'utf-8');
179
- return JSON.parse(content);
180
- }
181
- }
182
- exports.ConstraintDoctor = ConstraintDoctor;
183
- /**
184
- * 创建诊断器
185
- */
186
- function createDoctor(config) {
187
- return new ConstraintDoctor(config);
188
- }
189
- //# sourceMappingURL=constraint-doctor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constraint-doctor.js","sourceRoot":"","sources":["../../src/monitoring/constraint-doctor.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- /**
2
- * 诊断规则表(工单 23-B)
3
- *
4
- * constraint-doctor.ruleBasedDiagnose 的巨型 switch 数据化:
5
- * 每种异常类型一条规则(根因/影响/建议/紧急度),新增异常类型只需加表项。
6
- */
7
- import type { TraceAnomaly } from '../types/trace';
8
- import type { Diagnosis } from '../types/monitoring-types';
9
- export interface DiagnosisRule {
10
- primary: string;
11
- secondary: string[];
12
- userImpact: string;
13
- recommendations: (anomaly: TraceAnomaly) => Diagnosis['recommendations'];
14
- needsChange: boolean;
15
- urgency: (anomaly: TraceAnomaly) => Diagnosis['urgency'];
16
- }
17
- export declare const DIAGNOSIS_RULES: Record<string, DiagnosisRule>;
18
- //# sourceMappingURL=diagnosis-rules.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diagnosis-rules.d.ts","sourceRoot":"","sources":["../../src/monitoring/diagnosis-rules.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,SAAS,CAAC,iBAAiB,CAAC,CAAC;IACzE,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,SAAS,CAAC,SAAS,CAAC,CAAC;CAC1D;AAED,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAgHzD,CAAC"}
@@ -1,119 +0,0 @@
1
- "use strict";
2
- /**
3
- * 诊断规则表(工单 23-B)
4
- *
5
- * constraint-doctor.ruleBasedDiagnose 的巨型 switch 数据化:
6
- * 每种异常类型一条规则(根因/影响/建议/紧急度),新增异常类型只需加表项。
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.DIAGNOSIS_RULES = void 0;
10
- exports.DIAGNOSIS_RULES = {
11
- high_bypass_rate: {
12
- primary: '约束过于严格,用户频繁绕过',
13
- secondary: [
14
- '约束触发条件过于宽泛',
15
- '缺乏必要的例外条件',
16
- '约束定义与实际场景不匹配',
17
- ],
18
- userImpact: '用户被迫绕过约束,降低信任度',
19
- recommendations: (anomaly) => [
20
- {
21
- type: 'add_exception',
22
- content: `为约束 ${anomaly.constraintId} 添加常见例外条件`,
23
- expectedOutcome: '绕过率降低至 20% 以下',
24
- implementationCost: 'low',
25
- },
26
- {
27
- type: 'adjust_threshold',
28
- content: '调整触发条件,减少误触发',
29
- expectedOutcome: '减少不必要的约束检查',
30
- implementationCost: 'medium',
31
- },
32
- ],
33
- needsChange: true,
34
- urgency: (anomaly) => (anomaly.data.currentRate > 0.5 ? 'high' : 'medium'),
35
- },
36
- rising_fail_rate: {
37
- primary: '约束失败率呈上升趋势',
38
- secondary: [
39
- '代码质量下降',
40
- '约束检查逻辑存在 bug',
41
- '环境变化导致约束不再适用',
42
- ],
43
- userImpact: '开发效率下降,约束频繁阻止正常操作',
44
- recommendations: () => [
45
- {
46
- type: 'modify_constraint',
47
- content: '审查约束逻辑,确认是否符合预期',
48
- expectedOutcome: '恢复正常的失败率水平',
49
- implementationCost: 'medium',
50
- },
51
- {
52
- type: 'user_training',
53
- content: '指导用户正确理解约束要求',
54
- expectedOutcome: '减少因误解导致的失败',
55
- implementationCost: 'low',
56
- },
57
- ],
58
- needsChange: true,
59
- urgency: () => 'medium',
60
- },
61
- rising_bypass_rate: {
62
- primary: '绕过率呈上升趋势',
63
- secondary: [
64
- '用户对约束的接受度下降',
65
- '约束规则逐渐不适应新的开发模式',
66
- '用户发现了绕过约束的"捷径"',
67
- ],
68
- userImpact: '约束逐渐失去约束力',
69
- recommendations: () => [
70
- {
71
- type: 'modify_constraint',
72
- content: '重新评估约束的必要性',
73
- expectedOutcome: '恢复约束的权威性',
74
- implementationCost: 'high',
75
- },
76
- ],
77
- needsChange: true,
78
- urgency: () => 'high',
79
- },
80
- low_pass_rate: {
81
- primary: '约束通过率过低',
82
- secondary: [
83
- '约束要求过于严格',
84
- '实际代码质量不达标',
85
- '约束定义存在歧义',
86
- ],
87
- userImpact: '几乎所有操作都被阻止,开发受阻',
88
- recommendations: () => [
89
- {
90
- type: 'adjust_threshold',
91
- content: '放宽约束要求,设置合理阈值',
92
- expectedOutcome: '通过率提升至 50% 以上',
93
- implementationCost: 'low',
94
- },
95
- ],
96
- needsChange: true,
97
- urgency: () => 'high',
98
- },
99
- exception_overuse: {
100
- primary: '例外条件被过度使用',
101
- secondary: [
102
- '例外条件过于宽泛',
103
- '例外条件定义不够精确',
104
- '用户习惯性申请例外',
105
- ],
106
- userImpact: '例外成为常态,约束失去意义',
107
- recommendations: () => [
108
- {
109
- type: 'modify_constraint',
110
- content: '缩小例外条件范围,提高例外门槛',
111
- expectedOutcome: '例外使用率降低至 20% 以下',
112
- implementationCost: 'medium',
113
- },
114
- ],
115
- needsChange: true,
116
- urgency: () => 'medium',
117
- },
118
- };
119
- //# sourceMappingURL=diagnosis-rules.js.map