@hongmaple0820/scale-engine 0.21.2 → 0.24.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 (135) hide show
  1. package/README.en.md +35 -11
  2. package/README.md +54 -23
  3. package/dist/api/cli.js +476 -5
  4. package/dist/api/cli.js.map +1 -1
  5. package/dist/api/doctor.d.ts +1 -0
  6. package/dist/api/doctor.js +83 -0
  7. package/dist/api/doctor.js.map +1 -1
  8. package/dist/artifact/types.d.ts +1 -1
  9. package/dist/artifact/types.js.map +1 -1
  10. package/dist/cli/phaseCommands.js +22 -6
  11. package/dist/cli/phaseCommands.js.map +1 -1
  12. package/dist/cli/runCommand.d.ts +39 -0
  13. package/dist/cli/runCommand.js +113 -0
  14. package/dist/cli/runCommand.js.map +1 -0
  15. package/dist/config/profiles.d.ts +52 -0
  16. package/dist/config/profiles.js +162 -0
  17. package/dist/config/profiles.js.map +1 -0
  18. package/dist/context/ContextBudget.d.ts +25 -1
  19. package/dist/context/ContextBudget.js +72 -7
  20. package/dist/context/ContextBudget.js.map +1 -1
  21. package/dist/context/ProjectAnatomy.d.ts +18 -0
  22. package/dist/context/ProjectAnatomy.js +287 -0
  23. package/dist/context/ProjectAnatomy.js.map +1 -0
  24. package/dist/dashboard/DashboardServer.d.ts +3 -0
  25. package/dist/dashboard/DashboardServer.js +114 -0
  26. package/dist/dashboard/DashboardServer.js.map +1 -1
  27. package/dist/dashboard/MetricsAggregator.d.ts +38 -0
  28. package/dist/dashboard/MetricsAggregator.js +99 -0
  29. package/dist/dashboard/MetricsAggregator.js.map +1 -0
  30. package/dist/dashboard/index.d.ts +2 -0
  31. package/dist/dashboard/index.js +1 -0
  32. package/dist/dashboard/index.js.map +1 -1
  33. package/dist/dashboard/server.js +1 -1
  34. package/dist/dashboard/server.js.map +1 -1
  35. package/dist/evolution/AutoDefectCreator.d.ts +11 -2
  36. package/dist/evolution/AutoDefectCreator.js +46 -2
  37. package/dist/evolution/AutoDefectCreator.js.map +1 -1
  38. package/dist/evolution/EvolutionEngine.d.ts +3 -0
  39. package/dist/evolution/EvolutionEngine.js +18 -2
  40. package/dist/evolution/EvolutionEngine.js.map +1 -1
  41. package/dist/evolution/RuleMaturity.d.ts +39 -0
  42. package/dist/evolution/RuleMaturity.js +70 -0
  43. package/dist/evolution/RuleMaturity.js.map +1 -0
  44. package/dist/guardrails/ActiveRedTeam.d.ts +46 -0
  45. package/dist/guardrails/ActiveRedTeam.js +203 -0
  46. package/dist/guardrails/ActiveRedTeam.js.map +1 -0
  47. package/dist/guardrails/DependencyAuditor.d.ts +68 -0
  48. package/dist/guardrails/DependencyAuditor.js +331 -0
  49. package/dist/guardrails/DependencyAuditor.js.map +1 -0
  50. package/dist/hooks/BugPatternDetector.d.ts +36 -0
  51. package/dist/hooks/BugPatternDetector.js +207 -0
  52. package/dist/hooks/BugPatternDetector.js.map +1 -0
  53. package/dist/hooks/HookGeneratorEnhanced.js +301 -5
  54. package/dist/hooks/HookGeneratorEnhanced.js.map +1 -1
  55. package/dist/hooks/WorkflowHooksManager.js +24 -0
  56. package/dist/hooks/WorkflowHooksManager.js.map +1 -1
  57. package/dist/index.d.ts +10 -0
  58. package/dist/index.js +7 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/knowledge/CerebrumManager.d.ts +25 -0
  61. package/dist/knowledge/CerebrumManager.js +127 -0
  62. package/dist/knowledge/CerebrumManager.js.map +1 -0
  63. package/dist/knowledge/SQLiteKnowledgeBase.d.ts +1 -0
  64. package/dist/knowledge/SQLiteKnowledgeBase.js +31 -3
  65. package/dist/knowledge/SQLiteKnowledgeBase.js.map +1 -1
  66. package/dist/knowledge/TfidfIndex.d.ts +50 -0
  67. package/dist/knowledge/TfidfIndex.js +177 -0
  68. package/dist/knowledge/TfidfIndex.js.map +1 -0
  69. package/dist/output/GovernanceDashboard.d.ts +2 -0
  70. package/dist/output/GovernanceDashboard.js +31 -0
  71. package/dist/output/GovernanceDashboard.js.map +1 -1
  72. package/dist/routing/PromptCachePolicy.d.ts +37 -0
  73. package/dist/routing/PromptCachePolicy.js +97 -0
  74. package/dist/routing/PromptCachePolicy.js.map +1 -0
  75. package/dist/runtime/ModelUsageLedger.d.ts +50 -0
  76. package/dist/runtime/ModelUsageLedger.js +92 -0
  77. package/dist/runtime/ModelUsageLedger.js.map +1 -0
  78. package/dist/runtime/index.d.ts +1 -0
  79. package/dist/runtime/index.js +1 -0
  80. package/dist/runtime/index.js.map +1 -1
  81. package/dist/skills/SkillDiscovery.js +1 -1
  82. package/dist/skills/SkillDiscovery.js.map +1 -1
  83. package/dist/tools/CommandOutputCompressor.d.ts +28 -0
  84. package/dist/tools/CommandOutputCompressor.js +242 -0
  85. package/dist/tools/CommandOutputCompressor.js.map +1 -0
  86. package/dist/tools/CommandRunLedger.d.ts +77 -0
  87. package/dist/tools/CommandRunLedger.js +111 -0
  88. package/dist/tools/CommandRunLedger.js.map +1 -0
  89. package/dist/tools/index.d.ts +2 -0
  90. package/dist/tools/index.js +2 -0
  91. package/dist/tools/index.js.map +1 -1
  92. package/dist/workflow/EngineeringStandards.js +91 -2
  93. package/dist/workflow/EngineeringStandards.js.map +1 -1
  94. package/dist/workflow/GovernanceTemplatePacks.js +2 -2
  95. package/dist/workflow/GovernanceTemplates.js +93 -92
  96. package/dist/workflow/GovernanceTemplates.js.map +1 -1
  97. package/dist/workflow/TaskLevelDetector.d.ts +41 -0
  98. package/dist/workflow/TaskLevelDetector.js +219 -0
  99. package/dist/workflow/TaskLevelDetector.js.map +1 -0
  100. package/dist/workflow/WorkflowOrchestrator.d.ts +59 -0
  101. package/dist/workflow/WorkflowOrchestrator.js +326 -0
  102. package/dist/workflow/WorkflowOrchestrator.js.map +1 -0
  103. package/dist/workflow/autonomous/BackgroundHunter.d.ts +74 -0
  104. package/dist/workflow/autonomous/BackgroundHunter.js +220 -0
  105. package/dist/workflow/autonomous/BackgroundHunter.js.map +1 -0
  106. package/dist/workflow/autonomous/index.d.ts +1 -0
  107. package/dist/workflow/autonomous/index.js +1 -0
  108. package/dist/workflow/autonomous/index.js.map +1 -1
  109. package/dist/workflow/gates/GateSystem.d.ts +33 -6
  110. package/dist/workflow/gates/GateSystem.js +176 -25
  111. package/dist/workflow/gates/GateSystem.js.map +1 -1
  112. package/dist/workflow/gates/MetaGovernanceGates.d.ts +70 -0
  113. package/dist/workflow/gates/MetaGovernanceGates.js +617 -0
  114. package/dist/workflow/gates/MetaGovernanceGates.js.map +1 -0
  115. package/dist/workflow/gates/VisualGate.d.ts +41 -0
  116. package/dist/workflow/gates/VisualGate.js +174 -0
  117. package/dist/workflow/gates/VisualGate.js.map +1 -0
  118. package/dist/workflow/index.d.ts +1 -0
  119. package/dist/workflow/index.js +1 -0
  120. package/dist/workflow/index.js.map +1 -1
  121. package/dist/workflow/types.d.ts +6 -1
  122. package/docs/ACTIVE_SECURITY_VISUAL_GATES.md +87 -0
  123. package/docs/BACKGROUND_HUNTER.md +62 -0
  124. package/docs/CONTEXT_BUDGET.md +32 -6
  125. package/docs/DEPENDENCY_AUDIT.md +89 -0
  126. package/docs/EVOLUTION_SHADOW_MODE.md +63 -0
  127. package/docs/GOVERNANCE_DASHBOARD.md +21 -5
  128. package/docs/README.md +24 -12
  129. package/docs/start/README.md +29 -3
  130. package/docs/start/artifact-lifecycle.md +326 -0
  131. package/docs/start/workflow-upgrade.md +150 -0
  132. package/image/wechat-public.jpg +0 -0
  133. package/image/wxPay.jpg +0 -0
  134. package/image/zfb.jpg +0 -0
  135. package/package.json +7 -2
@@ -0,0 +1,617 @@
1
+ // SCALE Engine — Meta-Governance Gates (G9-G15)
2
+ // 检查治理能力是否被有效使用,而非仅检查代码质量
3
+ import { existsSync, readFileSync, readdirSync } from 'node:fs';
4
+ import { join } from 'node:path';
5
+ function createEvidence(input) {
6
+ return {
7
+ id: `EVID-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
8
+ ...input,
9
+ };
10
+ }
11
+ function textEvidence(items) {
12
+ return items.map(item => `${item.label}: ${item.detail}`).join('\n');
13
+ }
14
+ // ============================================================================
15
+ // G9: Knowledge Utilization — 知识库是否被有效使用
16
+ // ============================================================================
17
+ export class KnowledgeUtilizationGate {
18
+ constructor(scaleDir = '.scale') {
19
+ this.scaleDir = scaleDir;
20
+ this.stage = 'G9';
21
+ this.name = 'Knowledge Utilization';
22
+ this.description = 'Checks whether the knowledge base is actively used and lessons are extracted';
23
+ this.requiredLevel = 'M';
24
+ }
25
+ async execute() {
26
+ const evidenceItems = [];
27
+ let passed = true;
28
+ // 检查1: 知识库是否存在
29
+ const kbPath = join(this.scaleDir, 'knowledge.db');
30
+ if (!existsSync(kbPath)) {
31
+ evidenceItems.push(createEvidence({ kind: 'manual', label: 'Knowledge Base', passed: false, detail: '知识库不存在,无法沉淀经验' }));
32
+ passed = false;
33
+ }
34
+ else {
35
+ evidenceItems.push(createEvidence({ kind: 'manual', label: 'Knowledge Base', passed: true, detail: '知识库已创建' }));
36
+ }
37
+ // 检查2: 是否有 Lesson 产出
38
+ const artifactsDir = join(this.scaleDir, 'artifacts');
39
+ if (existsSync(artifactsDir)) {
40
+ const files = readdirSync(artifactsDir).filter(f => f.endsWith('.json'));
41
+ const lessons = files.filter(f => {
42
+ try {
43
+ const content = JSON.parse(readFileSync(join(artifactsDir, f), 'utf-8'));
44
+ return content.type === 'Lesson';
45
+ }
46
+ catch {
47
+ return false;
48
+ }
49
+ });
50
+ if (lessons.length === 0) {
51
+ evidenceItems.push(createEvidence({ kind: 'manual', label: 'Lesson Extraction', passed: false, detail: '未提取任何 Lesson,经验未沉淀' }));
52
+ passed = false;
53
+ }
54
+ else {
55
+ evidenceItems.push(createEvidence({ kind: 'manual', label: 'Lesson Extraction', passed: true, detail: `已提取 ${lessons.length} 个 Lesson` }));
56
+ }
57
+ // 检查3: Defect 是否有对应的 Lesson
58
+ const defects = files.filter(f => {
59
+ try {
60
+ const content = JSON.parse(readFileSync(join(artifactsDir, f), 'utf-8'));
61
+ return content.type === 'Defect';
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ });
67
+ if (defects.length > 0 && lessons.length === 0) {
68
+ evidenceItems.push(createEvidence({ kind: 'manual', label: 'Defect-Lesson Ratio', passed: false, detail: `有 ${defects.length} 个 Defect 但无 Lesson,未从错误中学习` }));
69
+ passed = false;
70
+ }
71
+ }
72
+ return {
73
+ gate: this.stage,
74
+ status: passed ? 'PASSED' : 'FAILED',
75
+ passed,
76
+ evidence: textEvidence(evidenceItems),
77
+ evidenceItems,
78
+ blockers: passed ? [] : ['知识库未有效使用,经验未沉淀'],
79
+ durationMs: 0
80
+ };
81
+ }
82
+ }
83
+ // ============================================================================
84
+ // G10: Evolution Effectiveness — 进化机制是否生效
85
+ // ============================================================================
86
+ export class EvolutionEffectivenessGate {
87
+ constructor(scaleDir = '.scale') {
88
+ this.scaleDir = scaleDir;
89
+ this.stage = 'G10';
90
+ this.name = 'Evolution Effectiveness';
91
+ this.description = 'Checks whether repeated defects trigger rule proposals and hook generation';
92
+ this.requiredLevel = 'M';
93
+ }
94
+ async execute() {
95
+ const evidenceItems = [];
96
+ let passed = true;
97
+ // 检查1: 是否有重复 Defect(应触发 Lesson 提取)
98
+ const artifactsDir = join(this.scaleDir, 'artifacts');
99
+ if (existsSync(artifactsDir)) {
100
+ const files = readdirSync(artifactsDir).filter(f => f.endsWith('.json'));
101
+ const defects = {};
102
+ for (const f of files) {
103
+ try {
104
+ const content = JSON.parse(readFileSync(join(artifactsDir, f), 'utf-8'));
105
+ if (content.type === 'Defect' && content.payload?.rootCauseCategory) {
106
+ const cause = content.payload.rootCauseCategory;
107
+ defects[cause] = (defects[cause] || 0) + 1;
108
+ }
109
+ }
110
+ catch {
111
+ continue;
112
+ }
113
+ }
114
+ // 检查2: 重复 Defect 是否触发了规则提议
115
+ const repeatedCauses = Object.entries(defects).filter(([_, count]) => count >= 3);
116
+ if (repeatedCauses.length > 0) {
117
+ evidenceItems.push(createEvidence({
118
+ kind: 'manual',
119
+ label: 'Repeated Defects',
120
+ passed: false,
121
+ detail: `发现 ${repeatedCauses.length} 类重复 Defect (≥3次),应触发 Rule 提议`
122
+ }));
123
+ passed = false;
124
+ }
125
+ // 检查3: 是否有 Rule 产出
126
+ const rulesPath = join(this.scaleDir, 'rules');
127
+ if (existsSync(rulesPath)) {
128
+ const rules = readdirSync(rulesPath).filter(f => f.endsWith('.json'));
129
+ if (rules.length === 0 && repeatedCauses.length > 0) {
130
+ evidenceItems.push(createEvidence({ kind: 'manual', label: 'Rule Generation', passed: false, detail: '有重复 Defect 但未生成 Rule' }));
131
+ passed = false;
132
+ }
133
+ else if (rules.length > 0) {
134
+ evidenceItems.push(createEvidence({ kind: 'manual', label: 'Rule Generation', passed: true, detail: `已生成 ${rules.length} 个 Rule` }));
135
+ }
136
+ }
137
+ }
138
+ // 检查4: 是否有 Hook 从 Rule 生成
139
+ const hooksDir = join(this.scaleDir, 'hooks');
140
+ if (existsSync(hooksDir)) {
141
+ const hooks = readdirSync(hooksDir).filter(f => f.endsWith('.js') || f.endsWith('.sh'));
142
+ evidenceItems.push(createEvidence({
143
+ kind: 'manual',
144
+ label: 'Hook Generation',
145
+ passed: hooks.length > 0,
146
+ detail: hooks.length > 0 ? `已生成 ${hooks.length} 个 Hook` : '未生成任何 Hook'
147
+ }));
148
+ }
149
+ return {
150
+ gate: this.stage,
151
+ status: passed ? 'PASSED' : 'FAILED',
152
+ passed,
153
+ evidence: textEvidence(evidenceItems),
154
+ evidenceItems,
155
+ blockers: passed ? [] : ['进化机制未生效,未从重复错误中学习'],
156
+ durationMs: 0
157
+ };
158
+ }
159
+ }
160
+ // ============================================================================
161
+ // G11: Guardrail Effectiveness — 护栏是否有效运行
162
+ // ============================================================================
163
+ export class GuardrailEffectivenessGate {
164
+ constructor(scaleDir = '.scale') {
165
+ this.scaleDir = scaleDir;
166
+ this.stage = 'G11';
167
+ this.name = 'Guardrail Effectiveness';
168
+ this.description = 'Checks whether detectors are configured, triggered, and blocking invalid transitions';
169
+ this.requiredLevel = 'M';
170
+ }
171
+ async execute() {
172
+ const evidenceItems = [];
173
+ let passed = true;
174
+ // 检查1: 检测器是否配置
175
+ const settingsPath = join(this.scaleDir, 'settings.json');
176
+ if (!existsSync(settingsPath)) {
177
+ evidenceItems.push(createEvidence({ kind: 'manual', label: 'Detector Config', passed: false, detail: '未找到 settings.json' }));
178
+ passed = false;
179
+ }
180
+ // 检查2: 是否有检测器触发记录
181
+ const eventsDir = join(this.scaleDir, 'events');
182
+ if (existsSync(eventsDir)) {
183
+ const eventFiles = readdirSync(eventsDir).filter(f => f.endsWith('.jsonl'));
184
+ let detectorTriggers = 0;
185
+ for (const f of eventFiles) {
186
+ try {
187
+ const content = readFileSync(join(eventsDir, f), 'utf-8');
188
+ const lines = content.split('\n').filter(l => l.trim());
189
+ for (const line of lines) {
190
+ const event = JSON.parse(line);
191
+ if (event.type?.includes('detector') || event.type?.includes('guard')) {
192
+ detectorTriggers++;
193
+ }
194
+ }
195
+ }
196
+ catch {
197
+ continue;
198
+ }
199
+ }
200
+ evidenceItems.push(createEvidence({
201
+ kind: 'manual',
202
+ label: 'Detector Activity',
203
+ passed: true,
204
+ detail: `检测器触发 ${detectorTriggers} 次`
205
+ }));
206
+ // 检查3: 是否有被阻断的转换
207
+ let blockedTransitions = 0;
208
+ for (const f of readdirSync(eventsDir).filter(f => f.endsWith('.jsonl'))) {
209
+ try {
210
+ const content = readFileSync(join(eventsDir, f), 'utf-8');
211
+ const lines = content.split('\n').filter(l => l.trim());
212
+ for (const line of lines) {
213
+ const event = JSON.parse(line);
214
+ if (event.type === 'artifact.transitioned' && event.payload?.blockedBy) {
215
+ blockedTransitions++;
216
+ }
217
+ }
218
+ }
219
+ catch {
220
+ continue;
221
+ }
222
+ }
223
+ if (blockedTransitions > 0) {
224
+ evidenceItems.push(createEvidence({
225
+ kind: 'manual',
226
+ label: 'Blocked Transitions',
227
+ passed: true,
228
+ detail: `有 ${blockedTransitions} 次转换被护栏阻断`
229
+ }));
230
+ }
231
+ }
232
+ return {
233
+ gate: this.stage,
234
+ status: passed ? 'PASSED' : 'FAILED',
235
+ passed,
236
+ evidence: textEvidence(evidenceItems),
237
+ evidenceItems,
238
+ blockers: passed ? [] : ['护栏配置不完整'],
239
+ durationMs: 0
240
+ };
241
+ }
242
+ }
243
+ // ============================================================================
244
+ // G12: Workflow Thoroughness — 工作流是否完整执行
245
+ // ============================================================================
246
+ export class WorkflowThoroughnessGate {
247
+ constructor(scaleDir = '.scale') {
248
+ this.scaleDir = scaleDir;
249
+ this.stage = 'G12';
250
+ this.name = 'Workflow Thoroughness';
251
+ this.description = 'Checks whether all workflow phases are completed and artifacts produced';
252
+ this.requiredLevel = 'M';
253
+ }
254
+ async execute() {
255
+ const evidenceItems = [];
256
+ let passed = true;
257
+ // 检查1: 各阶段是否有产出物
258
+ const phases = ['explore', 'plan', 'verify', 'review'];
259
+ const phaseDir = join(this.scaleDir, 'phases');
260
+ for (const phase of phases) {
261
+ const phaseFile = join(phaseDir, `.phase-${phase}`);
262
+ const exists = existsSync(phaseFile);
263
+ evidenceItems.push(createEvidence({
264
+ kind: 'manual',
265
+ label: `Phase: ${phase}`,
266
+ passed: exists,
267
+ detail: exists ? '已完成' : '未完成'
268
+ }));
269
+ if (!exists)
270
+ passed = false;
271
+ }
272
+ // 检查2: 是否有 Artifact 产出
273
+ const artifactsDir = join(this.scaleDir, 'artifacts');
274
+ if (existsSync(artifactsDir)) {
275
+ const artifacts = readdirSync(artifactsDir).filter(f => f.endsWith('.json'));
276
+ const types = new Set();
277
+ for (const f of artifacts) {
278
+ try {
279
+ const content = JSON.parse(readFileSync(join(artifactsDir, f), 'utf-8'));
280
+ types.add(content.type);
281
+ }
282
+ catch {
283
+ continue;
284
+ }
285
+ }
286
+ const expectedTypes = ['Need', 'Spec', 'Plan', 'Task', 'Change', 'Evidence'];
287
+ const missingTypes = expectedTypes.filter(t => !types.has(t));
288
+ if (missingTypes.length > 0) {
289
+ evidenceItems.push(createEvidence({
290
+ kind: 'manual',
291
+ label: 'Artifact Coverage',
292
+ passed: false,
293
+ detail: `缺少以下 Artifact 类型: ${missingTypes.join(', ')}`
294
+ }));
295
+ passed = false;
296
+ }
297
+ else {
298
+ evidenceItems.push(createEvidence({
299
+ kind: 'manual',
300
+ label: 'Artifact Coverage',
301
+ passed: true,
302
+ detail: '所有核心 Artifact 类型已覆盖'
303
+ }));
304
+ }
305
+ }
306
+ // 检查3: 是否有验证证据
307
+ const evidenceDir = join(this.scaleDir, 'evidence');
308
+ if (existsSync(evidenceDir)) {
309
+ const evidenceFiles = readdirSync(evidenceDir).filter(f => f.endsWith('.json'));
310
+ evidenceItems.push(createEvidence({
311
+ kind: 'manual',
312
+ label: 'Verification Evidence',
313
+ passed: evidenceFiles.length > 0,
314
+ detail: evidenceFiles.length > 0 ? `有 ${evidenceFiles.length} 份验证证据` : '无验证证据'
315
+ }));
316
+ }
317
+ return {
318
+ gate: this.stage,
319
+ status: passed ? 'PASSED' : 'FAILED',
320
+ passed,
321
+ evidence: textEvidence(evidenceItems),
322
+ evidenceItems,
323
+ blockers: passed ? [] : ['工作流执行不完整'],
324
+ durationMs: 0
325
+ };
326
+ }
327
+ }
328
+ // ============================================================================
329
+ // G13: Multi-Agent Coordination — 多 Agent 协同是否有效
330
+ // ============================================================================
331
+ export class MultiAgentCoordinationGate {
332
+ constructor(scaleDir = '.scale') {
333
+ this.scaleDir = scaleDir;
334
+ this.stage = 'G13';
335
+ this.name = 'Multi-Agent Coordination';
336
+ this.description = 'Checks whether multi-agent configuration, communication, and task assignment are effective';
337
+ this.requiredLevel = 'M';
338
+ }
339
+ async execute() {
340
+ const evidenceItems = [];
341
+ let passed = true;
342
+ // 检查1: Agent 配置是否存在
343
+ const agentsDir = join(this.scaleDir, 'agents');
344
+ if (!existsSync(agentsDir)) {
345
+ evidenceItems.push(createEvidence({
346
+ kind: 'manual',
347
+ label: 'Agent Config',
348
+ passed: false,
349
+ detail: '未配置多 Agent,无法协同'
350
+ }));
351
+ // 这不是硬性失败,单 Agent 项目可以跳过
352
+ return {
353
+ gate: this.stage,
354
+ status: 'PASSED',
355
+ passed: true,
356
+ evidence: '单 Agent 模式,跳过协同检查',
357
+ evidenceItems,
358
+ blockers: [],
359
+ durationMs: 0
360
+ };
361
+ }
362
+ // 检查2: 是否有 Agent 间通信记录
363
+ const eventsDir = join(this.scaleDir, 'events');
364
+ if (existsSync(eventsDir)) {
365
+ let agentEvents = 0;
366
+ for (const f of readdirSync(eventsDir).filter(f => f.endsWith('.jsonl'))) {
367
+ try {
368
+ const content = readFileSync(join(eventsDir, f), 'utf-8');
369
+ const lines = content.split('\n').filter(l => l.trim());
370
+ for (const line of lines) {
371
+ const event = JSON.parse(line);
372
+ if (event.type?.includes('agent') || event.payload?.agent) {
373
+ agentEvents++;
374
+ }
375
+ }
376
+ }
377
+ catch {
378
+ continue;
379
+ }
380
+ }
381
+ evidenceItems.push(createEvidence({
382
+ kind: 'manual',
383
+ label: 'Agent Communication',
384
+ passed: agentEvents > 0,
385
+ detail: agentEvents > 0 ? `有 ${agentEvents} 次 Agent 间交互` : '无 Agent 间交互记录'
386
+ }));
387
+ }
388
+ // 检查3: 任务是否被合理分配
389
+ const artifactsDir = join(this.scaleDir, 'artifacts');
390
+ if (existsSync(artifactsDir)) {
391
+ const tasks = readdirSync(artifactsDir).filter(f => f.endsWith('.json')).filter(f => {
392
+ try {
393
+ const content = JSON.parse(readFileSync(join(artifactsDir, f), 'utf-8'));
394
+ return content.type === 'Task';
395
+ }
396
+ catch {
397
+ return false;
398
+ }
399
+ });
400
+ if (tasks.length > 0) {
401
+ let assignedCount = 0;
402
+ for (const f of tasks) {
403
+ try {
404
+ const content = JSON.parse(readFileSync(join(artifactsDir, f), 'utf-8'));
405
+ if (content.payload?.assignedTo)
406
+ assignedCount++;
407
+ }
408
+ catch {
409
+ continue;
410
+ }
411
+ }
412
+ evidenceItems.push(createEvidence({
413
+ kind: 'manual',
414
+ label: 'Task Assignment',
415
+ passed: assignedCount > 0,
416
+ detail: assignedCount > 0 ? `${assignedCount}/${tasks.length} 任务已分配` : '任务未分配给具体 Agent'
417
+ }));
418
+ }
419
+ }
420
+ return {
421
+ gate: this.stage,
422
+ status: passed ? 'PASSED' : 'FAILED',
423
+ passed,
424
+ evidence: textEvidence(evidenceItems),
425
+ evidenceItems,
426
+ blockers: passed ? [] : ['多 Agent 协同未有效配置'],
427
+ durationMs: 0
428
+ };
429
+ }
430
+ }
431
+ // ============================================================================
432
+ // G14: Skill Utilization — 技能是否被合理使用
433
+ // ============================================================================
434
+ export class SkillUtilizationGate {
435
+ constructor(scaleDir = '.scale') {
436
+ this.scaleDir = scaleDir;
437
+ this.stage = 'G14';
438
+ this.name = 'Skill Utilization';
439
+ this.description = 'Checks whether skill routing is configured and skills are being executed';
440
+ this.requiredLevel = 'M';
441
+ }
442
+ async execute() {
443
+ const evidenceItems = [];
444
+ let passed = true;
445
+ // 检查1: 技能路由策略是否存在
446
+ const skillsPath = join(this.scaleDir, 'skills.json');
447
+ if (!existsSync(skillsPath)) {
448
+ evidenceItems.push(createEvidence({
449
+ kind: 'manual',
450
+ label: 'Skill Routing',
451
+ passed: false,
452
+ detail: '未配置技能路由策略'
453
+ }));
454
+ passed = false;
455
+ }
456
+ else {
457
+ evidenceItems.push(createEvidence({
458
+ kind: 'manual',
459
+ label: 'Skill Routing',
460
+ passed: true,
461
+ detail: '技能路由策略已配置'
462
+ }));
463
+ }
464
+ // 检查2: 是否有技能执行记录
465
+ const eventsDir = join(this.scaleDir, 'events');
466
+ if (existsSync(eventsDir)) {
467
+ let skillEvents = 0;
468
+ for (const f of readdirSync(eventsDir).filter(f => f.endsWith('.jsonl'))) {
469
+ try {
470
+ const content = readFileSync(join(eventsDir, f), 'utf-8');
471
+ const lines = content.split('\n').filter(l => l.trim());
472
+ for (const line of lines) {
473
+ const event = JSON.parse(line);
474
+ if (event.type?.includes('skill')) {
475
+ skillEvents++;
476
+ }
477
+ }
478
+ }
479
+ catch {
480
+ continue;
481
+ }
482
+ }
483
+ evidenceItems.push(createEvidence({
484
+ kind: 'manual',
485
+ label: 'Skill Execution',
486
+ passed: skillEvents > 0,
487
+ detail: skillEvents > 0 ? `技能执行 ${skillEvents} 次` : '无技能执行记录'
488
+ }));
489
+ }
490
+ return {
491
+ gate: this.stage,
492
+ status: passed ? 'PASSED' : 'FAILED',
493
+ passed,
494
+ evidence: textEvidence(evidenceItems),
495
+ evidenceItems,
496
+ blockers: passed ? [] : ['技能系统未有效使用'],
497
+ durationMs: 0
498
+ };
499
+ }
500
+ }
501
+ // ============================================================================
502
+ // G15: Self-Improvement — 系统是否在自我改进
503
+ // ============================================================================
504
+ export class SelfImprovementGate {
505
+ constructor(scaleDir = '.scale') {
506
+ this.scaleDir = scaleDir;
507
+ this.stage = 'G15';
508
+ this.name = 'Self-Improvement';
509
+ this.description = 'Checks defect trends, lesson conversion rate, and active rules';
510
+ this.requiredLevel = 'M';
511
+ }
512
+ async execute() {
513
+ const evidenceItems = [];
514
+ let passed = true;
515
+ // 检查1: 是否有重复错误被修复
516
+ const artifactsDir = join(this.scaleDir, 'artifacts');
517
+ if (existsSync(artifactsDir)) {
518
+ const files = readdirSync(artifactsDir).filter(f => f.endsWith('.json'));
519
+ // 统计 Defect 趋势
520
+ const defectsByTime = [];
521
+ const lessonsByTime = [];
522
+ for (const f of files) {
523
+ try {
524
+ const content = JSON.parse(readFileSync(join(artifactsDir, f), 'utf-8'));
525
+ if (content.type === 'Defect') {
526
+ defectsByTime.push(content.createdAt || 0);
527
+ }
528
+ if (content.type === 'Lesson') {
529
+ lessonsByTime.push(content.createdAt || 0);
530
+ }
531
+ }
532
+ catch {
533
+ continue;
534
+ }
535
+ }
536
+ // 检查2: Defect 是否在减少
537
+ if (defectsByTime.length >= 4) {
538
+ const mid = Math.floor(defectsByTime.length / 2);
539
+ const firstHalf = defectsByTime.slice(0, mid).length;
540
+ const secondHalf = defectsByTime.slice(mid).length;
541
+ if (secondHalf > firstHalf) {
542
+ evidenceItems.push(createEvidence({
543
+ kind: 'manual',
544
+ label: 'Defect Trend',
545
+ passed: false,
546
+ detail: `Defect 数量在增加 (${firstHalf} → ${secondHalf}),未有效改进`
547
+ }));
548
+ passed = false;
549
+ }
550
+ else {
551
+ evidenceItems.push(createEvidence({
552
+ kind: 'manual',
553
+ label: 'Defect Trend',
554
+ passed: true,
555
+ detail: `Defect 数量在减少 (${firstHalf} → ${secondHalf})`
556
+ }));
557
+ }
558
+ }
559
+ // 检查3: Lesson 转化率
560
+ if (defectsByTime.length > 0) {
561
+ const conversionRate = lessonsByTime.length / defectsByTime.length;
562
+ evidenceItems.push(createEvidence({
563
+ kind: 'manual',
564
+ label: 'Lesson Conversion',
565
+ passed: conversionRate >= 0.3,
566
+ detail: `Defect → Lesson 转化率: ${(conversionRate * 100).toFixed(0)}% (目标: ≥30%)`
567
+ }));
568
+ if (conversionRate < 0.3)
569
+ passed = false;
570
+ }
571
+ }
572
+ // 检查4: 是否有 Rule 被验证生效
573
+ const rulesDir = join(this.scaleDir, 'rules');
574
+ if (existsSync(rulesDir)) {
575
+ const rules = readdirSync(rulesDir).filter(f => f.endsWith('.json'));
576
+ let activeRules = 0;
577
+ for (const f of rules) {
578
+ try {
579
+ const content = JSON.parse(readFileSync(join(rulesDir, f), 'utf-8'));
580
+ if (content.status === 'active' || content.verified)
581
+ activeRules++;
582
+ }
583
+ catch {
584
+ continue;
585
+ }
586
+ }
587
+ evidenceItems.push(createEvidence({
588
+ kind: 'manual',
589
+ label: 'Active Rules',
590
+ passed: activeRules > 0,
591
+ detail: activeRules > 0 ? `有 ${activeRules} 个活跃 Rule` : '无活跃 Rule'
592
+ }));
593
+ }
594
+ return {
595
+ gate: this.stage,
596
+ status: passed ? 'PASSED' : 'FAILED',
597
+ passed,
598
+ evidence: textEvidence(evidenceItems),
599
+ evidenceItems,
600
+ blockers: passed ? [] : ['系统未有效自我改进'],
601
+ durationMs: 0
602
+ };
603
+ }
604
+ }
605
+ // ============================================================================
606
+ // 注册所有元治理门禁
607
+ // ============================================================================
608
+ export function registerMetaGovernanceGates(gateSystem, scaleDir = '.scale') {
609
+ gateSystem.registerGate(new KnowledgeUtilizationGate(scaleDir));
610
+ gateSystem.registerGate(new EvolutionEffectivenessGate(scaleDir));
611
+ gateSystem.registerGate(new GuardrailEffectivenessGate(scaleDir));
612
+ gateSystem.registerGate(new WorkflowThoroughnessGate(scaleDir));
613
+ gateSystem.registerGate(new MultiAgentCoordinationGate(scaleDir));
614
+ gateSystem.registerGate(new SkillUtilizationGate(scaleDir));
615
+ gateSystem.registerGate(new SelfImprovementGate(scaleDir));
616
+ }
617
+ //# sourceMappingURL=MetaGovernanceGates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MetaGovernanceGates.js","sourceRoot":"","sources":["../../../src/workflow/gates/MetaGovernanceGates.ts"],"names":[],"mappings":"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"}