noormme 1.2.0 → 1.2.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 (132) hide show
  1. package/README.md +60 -6
  2. package/dist/cjs/agentic/ActionJournal.d.ts +5 -2
  3. package/dist/cjs/agentic/ActionJournal.js +13 -5
  4. package/dist/cjs/agentic/CapabilityManager.d.ts +7 -0
  5. package/dist/cjs/agentic/CapabilityManager.js +84 -7
  6. package/dist/cjs/agentic/CognitiveRepository.js +3 -6
  7. package/dist/cjs/agentic/Cortex.d.ts +4 -0
  8. package/dist/cjs/agentic/Cortex.js +38 -17
  9. package/dist/cjs/agentic/EpisodicMemory.d.ts +5 -1
  10. package/dist/cjs/agentic/EpisodicMemory.js +11 -4
  11. package/dist/cjs/agentic/PersonaManager.js +37 -31
  12. package/dist/cjs/agentic/PolicyEnforcer.d.ts +6 -1
  13. package/dist/cjs/agentic/PolicyEnforcer.js +74 -17
  14. package/dist/cjs/agentic/ResourceMonitor.d.ts +9 -0
  15. package/dist/cjs/agentic/ResourceMonitor.js +36 -2
  16. package/dist/cjs/agentic/SessionManager.js +24 -17
  17. package/dist/cjs/agentic/VectorIndexer.d.ts +1 -0
  18. package/dist/cjs/agentic/VectorIndexer.js +26 -17
  19. package/dist/cjs/agentic/improvement/AblationEngine.d.ts +4 -6
  20. package/dist/cjs/agentic/improvement/AblationEngine.js +57 -37
  21. package/dist/cjs/agentic/improvement/ActionRefiner.js +30 -14
  22. package/dist/cjs/agentic/improvement/ConflictResolver.d.ts +3 -1
  23. package/dist/cjs/agentic/improvement/ConflictResolver.js +59 -47
  24. package/dist/cjs/agentic/improvement/CortexJanitor.js +11 -0
  25. package/dist/cjs/agentic/improvement/CuriosityEngine.d.ts +1 -1
  26. package/dist/cjs/agentic/improvement/CuriosityEngine.js +48 -21
  27. package/dist/cjs/agentic/improvement/EvolutionRitual.js +26 -14
  28. package/dist/cjs/agentic/improvement/EvolutionaryPilot.js +16 -4
  29. package/dist/cjs/agentic/improvement/GoalArchitect.d.ts +6 -2
  30. package/dist/cjs/agentic/improvement/GoalArchitect.js +72 -34
  31. package/dist/cjs/agentic/improvement/GovernanceManager.d.ts +9 -3
  32. package/dist/cjs/agentic/improvement/GovernanceManager.js +232 -92
  33. package/dist/cjs/agentic/improvement/HiveLink.d.ts +7 -3
  34. package/dist/cjs/agentic/improvement/HiveLink.js +135 -113
  35. package/dist/cjs/agentic/improvement/KnowledgeDistiller.js +43 -35
  36. package/dist/cjs/agentic/improvement/QuotaManager.d.ts +41 -0
  37. package/dist/cjs/agentic/improvement/QuotaManager.js +185 -0
  38. package/dist/cjs/agentic/improvement/RecursiveReasoner.js +50 -25
  39. package/dist/cjs/agentic/improvement/ReflectionEngine.d.ts +4 -1
  40. package/dist/cjs/agentic/improvement/ReflectionEngine.js +3 -1
  41. package/dist/cjs/agentic/improvement/RitualOrchestrator.js +27 -16
  42. package/dist/cjs/agentic/improvement/RuleEngine.d.ts +1 -1
  43. package/dist/cjs/agentic/improvement/RuleEngine.js +10 -4
  44. package/dist/cjs/agentic/improvement/SelfEvolution.js +21 -17
  45. package/dist/cjs/agentic/improvement/SelfTestRegistry.d.ts +5 -0
  46. package/dist/cjs/agentic/improvement/SelfTestRegistry.js +129 -109
  47. package/dist/cjs/agentic/improvement/SkillSynthesizer.d.ts +1 -0
  48. package/dist/cjs/agentic/improvement/SkillSynthesizer.js +22 -13
  49. package/dist/cjs/agentic/improvement/StrategicPlanner.d.ts +1 -0
  50. package/dist/cjs/agentic/improvement/StrategicPlanner.js +26 -19
  51. package/dist/cjs/agentic/telemetry/CognitiveSynthesizer.d.ts +5 -0
  52. package/dist/cjs/agentic/telemetry/CognitiveSynthesizer.js +54 -12
  53. package/dist/cjs/agentic/telemetry/EventHarvester.d.ts +1 -1
  54. package/dist/cjs/agentic/telemetry/EventHarvester.js +10 -3
  55. package/dist/cjs/agentic/telemetry/ResearchAlchemist.d.ts +7 -2
  56. package/dist/cjs/agentic/telemetry/ResearchAlchemist.js +49 -8
  57. package/dist/cjs/agentic/telemetry/TelemetryOrchestrator.d.ts +4 -1
  58. package/dist/cjs/agentic/telemetry/TelemetryOrchestrator.js +38 -11
  59. package/dist/cjs/cli/commands/inspect.js +40 -1
  60. package/dist/cjs/cli/commands/watch.js +31 -25
  61. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +15 -5
  62. package/dist/cjs/helpers/agent-schema.js +1 -0
  63. package/dist/cjs/migration/data_migrator.js +4 -4
  64. package/dist/cjs/migration/schema_differ.js +37 -15
  65. package/dist/cjs/types/index.d.ts +12 -0
  66. package/dist/cjs/util/safe-sql-helpers.js +7 -10
  67. package/dist/esm/agentic/ActionJournal.d.ts +5 -2
  68. package/dist/esm/agentic/ActionJournal.js +13 -5
  69. package/dist/esm/agentic/CapabilityManager.d.ts +7 -0
  70. package/dist/esm/agentic/CapabilityManager.js +84 -7
  71. package/dist/esm/agentic/CognitiveRepository.js +3 -6
  72. package/dist/esm/agentic/Cortex.d.ts +4 -0
  73. package/dist/esm/agentic/Cortex.js +38 -17
  74. package/dist/esm/agentic/EpisodicMemory.d.ts +5 -1
  75. package/dist/esm/agentic/EpisodicMemory.js +11 -4
  76. package/dist/esm/agentic/PersonaManager.js +37 -31
  77. package/dist/esm/agentic/PolicyEnforcer.d.ts +6 -1
  78. package/dist/esm/agentic/PolicyEnforcer.js +74 -17
  79. package/dist/esm/agentic/ResourceMonitor.d.ts +9 -0
  80. package/dist/esm/agentic/ResourceMonitor.js +36 -2
  81. package/dist/esm/agentic/SessionManager.js +24 -17
  82. package/dist/esm/agentic/VectorIndexer.d.ts +1 -0
  83. package/dist/esm/agentic/VectorIndexer.js +26 -17
  84. package/dist/esm/agentic/improvement/AblationEngine.d.ts +4 -6
  85. package/dist/esm/agentic/improvement/AblationEngine.js +57 -37
  86. package/dist/esm/agentic/improvement/ActionRefiner.js +30 -14
  87. package/dist/esm/agentic/improvement/ConflictResolver.d.ts +3 -1
  88. package/dist/esm/agentic/improvement/ConflictResolver.js +59 -47
  89. package/dist/esm/agentic/improvement/CortexJanitor.js +11 -0
  90. package/dist/esm/agentic/improvement/CuriosityEngine.d.ts +1 -1
  91. package/dist/esm/agentic/improvement/CuriosityEngine.js +48 -21
  92. package/dist/esm/agentic/improvement/EvolutionRitual.js +26 -14
  93. package/dist/esm/agentic/improvement/EvolutionaryPilot.js +16 -4
  94. package/dist/esm/agentic/improvement/GoalArchitect.d.ts +6 -2
  95. package/dist/esm/agentic/improvement/GoalArchitect.js +72 -34
  96. package/dist/esm/agentic/improvement/GovernanceManager.d.ts +9 -3
  97. package/dist/esm/agentic/improvement/GovernanceManager.js +232 -92
  98. package/dist/esm/agentic/improvement/HiveLink.d.ts +7 -3
  99. package/dist/esm/agentic/improvement/HiveLink.js +135 -113
  100. package/dist/esm/agentic/improvement/KnowledgeDistiller.js +43 -35
  101. package/dist/esm/agentic/improvement/QuotaManager.d.ts +41 -0
  102. package/dist/esm/agentic/improvement/QuotaManager.js +182 -0
  103. package/dist/esm/agentic/improvement/RecursiveReasoner.js +50 -25
  104. package/dist/esm/agentic/improvement/ReflectionEngine.d.ts +4 -1
  105. package/dist/esm/agentic/improvement/ReflectionEngine.js +3 -1
  106. package/dist/esm/agentic/improvement/RitualOrchestrator.js +27 -16
  107. package/dist/esm/agentic/improvement/RuleEngine.d.ts +1 -1
  108. package/dist/esm/agentic/improvement/RuleEngine.js +10 -4
  109. package/dist/esm/agentic/improvement/SelfEvolution.js +21 -17
  110. package/dist/esm/agentic/improvement/SelfTestRegistry.d.ts +5 -0
  111. package/dist/esm/agentic/improvement/SelfTestRegistry.js +129 -109
  112. package/dist/esm/agentic/improvement/SkillSynthesizer.d.ts +1 -0
  113. package/dist/esm/agentic/improvement/SkillSynthesizer.js +22 -13
  114. package/dist/esm/agentic/improvement/StrategicPlanner.d.ts +1 -0
  115. package/dist/esm/agentic/improvement/StrategicPlanner.js +26 -19
  116. package/dist/esm/agentic/telemetry/CognitiveSynthesizer.d.ts +5 -0
  117. package/dist/esm/agentic/telemetry/CognitiveSynthesizer.js +54 -12
  118. package/dist/esm/agentic/telemetry/EventHarvester.d.ts +1 -1
  119. package/dist/esm/agentic/telemetry/EventHarvester.js +10 -3
  120. package/dist/esm/agentic/telemetry/ResearchAlchemist.d.ts +7 -2
  121. package/dist/esm/agentic/telemetry/ResearchAlchemist.js +49 -8
  122. package/dist/esm/agentic/telemetry/TelemetryOrchestrator.d.ts +4 -1
  123. package/dist/esm/agentic/telemetry/TelemetryOrchestrator.js +38 -11
  124. package/dist/esm/cli/commands/inspect.js +40 -1
  125. package/dist/esm/cli/commands/watch.js +31 -25
  126. package/dist/esm/dialect/sqlite/sqlite-introspector.js +15 -5
  127. package/dist/esm/helpers/agent-schema.js +1 -0
  128. package/dist/esm/migration/data_migrator.js +4 -4
  129. package/dist/esm/migration/schema_differ.js +37 -15
  130. package/dist/esm/types/index.d.ts +12 -0
  131. package/dist/esm/util/safe-sql-helpers.js +7 -10
  132. package/package.json +1 -1
@@ -25,91 +25,122 @@ class GovernanceManager {
25
25
  */
26
26
  async performAudit() {
27
27
  const issues = [];
28
- // Fetch active policies
29
- const policies = (await this.db
30
- .selectFrom(this.policiesTable)
31
- .selectAll()
32
- .where('is_enabled', '=', true)
33
- .execute());
34
- const getPolicyValue = (name, type, fallback) => {
35
- const p = policies.find((p) => p.name === name || p.type === type);
36
- if (!p)
37
- return fallback;
38
- const def = typeof p.definition === 'string'
39
- ? JSON.parse(p.definition)
40
- : p.definition;
41
- return def.threshold ?? fallback;
42
- };
43
- // 1. Budgetary Governance: Check for cost spikes in various windows
44
- const hourlyLimit = getPolicyValue('hourly_budget', 'budget', 1.0);
45
- const dailyLimit = getPolicyValue('daily_budget', 'budget', 10.0);
46
- const getCostInWindow = async (ms) => {
47
- const result = await this.db
48
- .selectFrom(this.metricsTable)
49
- .select((eb) => eb.fn.sum('metric_value').as('total'))
50
- .where('metric_name', '=', 'total_cost')
51
- .where('created_at', '>', new Date(Date.now() - ms))
52
- .executeTakeFirst();
53
- return Number(result?.total || 0);
54
- };
55
- const hCost = await getCostInWindow(3600000);
56
- if (hCost > hourlyLimit) {
57
- issues.push(`Budget Violations: Hourly cost ($${hCost.toFixed(2)}) exceeded policy ($${hourlyLimit.toFixed(2)})`);
58
- }
59
- const dCost = await getCostInWindow(86400000);
60
- if (dCost > dailyLimit) {
61
- issues.push(`Budget Violations: Daily cumulative cost ($${dCost.toFixed(2)}) exceeded safety ceiling ($${dailyLimit.toFixed(2)})`);
62
- }
63
- // 2. Performance Governance: Success Rates & Success Stability
64
- const minSuccess = getPolicyValue('min_success_rate', 'safety', 0.6);
65
- // Statistical Success Rate (last 100 events)
66
- const recentSuccess = await this.db
67
- .selectFrom(this.metricsTable)
68
- .select((eb) => eb.fn.avg('metric_value').as('avg'))
69
- .where('metric_name', '=', 'success_rate')
70
- .orderBy('created_at', 'desc')
71
- .limit(100)
72
- .executeTakeFirst();
73
- const success = Number(recentSuccess?.avg || 1);
74
- if (success < minSuccess) {
75
- issues.push(`Performance Degradation: Rolling success rate (${Math.round(success * 100)}%) is below policy requirement (${minSuccess * 100}%)`);
76
- }
77
- // 3. Infrastructure Integrity: Reliability of Verified Skills
78
- // Detect if any "verified" skills are participating in "failure" loops
79
- const reliabiltyLimit = getPolicyValue('reliability_floor', 'integrity', 0.7);
80
- const failingVerified = await this.db
81
- .selectFrom(this.config.capabilitiesTable || 'agent_capabilities')
82
- .select(['name', 'reliability'])
83
- .where('status', '=', 'verified')
84
- .where('reliability', '<', reliabiltyLimit)
85
- .execute();
86
- for (const cap of failingVerified) {
87
- issues.push(`Integrity Failure: Verified skill '${cap.name}' reliability (${cap.reliability.toFixed(2)}) dropped below floor (${reliabiltyLimit})`);
88
- }
89
- if (issues.length > 0) {
90
- console.warn(`[GovernanceManager] AUDIT FAILED [${new Date().toISOString()}]: ${issues.length} compliance issues detected.`);
91
- // Phase 1: Emergency Rollbacks
92
- const activePersona = await this.getActivePersona();
93
- if (activePersona && (success < 0.4 || hCost > hourlyLimit * 1.5)) {
94
- console.error(`[GovernanceManager] CRITICAL THRESHOLD BREACH. Initiating emergency containment for persona ${activePersona.id}`);
95
- await this.cortex.strategy.rollbackPersona(activePersona.id);
96
- issues.push(`Containment: Emergency rollback triggered for persona ${activePersona.id}`);
28
+ return await this.db.transaction().execute(async (trx) => {
29
+ // 0. Emergent Behavior Validation (Phase 2 Safety)
30
+ const emergentIssues = await this.validateEmergentBehavior(trx);
31
+ issues.push(...emergentIssues);
32
+ // Fetch active policies within transaction
33
+ const policies = (await trx
34
+ .selectFrom(this.policiesTable)
35
+ .selectAll()
36
+ .where('is_enabled', '=', true)
37
+ .execute());
38
+ const getPolicyValue = (name, type, strict = true) => {
39
+ const p = policies.find((p) => p.name === name || p.type === type);
40
+ if (!p) {
41
+ if (strict)
42
+ throw new Error(`Governance Violation: Required policy '${name}' or type '${type}' not found.`);
43
+ return null;
44
+ }
45
+ const def = typeof p.definition === 'string'
46
+ ? JSON.parse(p.definition)
47
+ : p.definition;
48
+ return def.threshold ?? def.limit ?? 0;
49
+ };
50
+ try {
51
+ // 1. Budgetary Governance: Check for cost spikes in various windows
52
+ const hourlyLimit = getPolicyValue('hourly_budget', 'budget');
53
+ const dailyLimit = getPolicyValue('daily_budget', 'budget');
54
+ const getCostInWindow = async (ms) => {
55
+ const result = await trx
56
+ .selectFrom(this.metricsTable)
57
+ .select((eb) => eb.fn.sum('metric_value').as('total'))
58
+ .where('metric_name', '=', 'total_cost')
59
+ .where('created_at', '>', new Date(Date.now() - ms))
60
+ .executeTakeFirst();
61
+ return Number(result?.total || 0);
62
+ };
63
+ const hCost = await getCostInWindow(3600000);
64
+ if (hCost > hourlyLimit && hourlyLimit > 0) {
65
+ issues.push(`Budget Violations: Hourly cost ($${hCost.toFixed(2)}) exceeded policy ($${hourlyLimit.toFixed(2)})`);
66
+ }
67
+ const dCost = await getCostInWindow(86400000);
68
+ if (dCost > dailyLimit && dailyLimit > 0) {
69
+ issues.push(`Budget Violations: Daily cumulative cost ($${dCost.toFixed(2)}) exceeded safety ceiling ($${dailyLimit.toFixed(2)})`);
70
+ }
71
+ // 2. Performance Governance: Success Rates & Success Stability
72
+ const minSuccess = getPolicyValue('min_success_rate', 'safety');
73
+ // Statistical Success Rate (last 100 events)
74
+ const recentSuccess = await trx
75
+ .selectFrom(this.metricsTable)
76
+ .select((eb) => eb.fn.avg('metric_value').as('avg'))
77
+ .where('metric_name', '=', 'success_rate')
78
+ .orderBy('created_at', 'desc')
79
+ .limit(100)
80
+ .executeTakeFirst();
81
+ const success = Number(recentSuccess?.avg || 1);
82
+ if (success < minSuccess) {
83
+ issues.push(`Performance Degradation: Rolling success rate (${Math.round(success * 100)}%) is below policy requirement (${minSuccess * 100}%)`);
84
+ }
85
+ // 2b. Swarm Quota Governance: Real-time quota validation
86
+ const activePersona = await this.getActivePersona(trx);
87
+ if (activePersona) {
88
+ const quotaCheck = await this.cortex.quotas.checkQuota('persona', activePersona.id);
89
+ if (!quotaCheck.allowed) {
90
+ issues.push(`Quota Breach: ${quotaCheck.reason}`);
91
+ }
92
+ // Check for swarm-level quotas if part of a swarm
93
+ const swarmId = activePersona.metadata?.swarm_id;
94
+ if (swarmId) {
95
+ const swarmCheck = await this.cortex.quotas.checkQuota('swarm', swarmId);
96
+ if (!swarmCheck.allowed) {
97
+ issues.push(`Swarm Quota Breach [${swarmId}]: ${swarmCheck.reason}`);
98
+ }
99
+ }
100
+ }
101
+ // 3. Infrastructure Integrity: Reliability of Verified Skills
102
+ const reliabiltyLimit = getPolicyValue('reliability_floor', 'integrity');
103
+ const failingVerified = await trx
104
+ .selectFrom(this.config.capabilitiesTable || 'agent_capabilities')
105
+ .select(['name', 'reliability'])
106
+ .where('status', '=', 'verified')
107
+ .where('reliability', '<', reliabiltyLimit)
108
+ .execute();
109
+ for (const cap of failingVerified) {
110
+ issues.push(`Integrity Failure: Verified skill '${cap.name}' reliability (${cap.reliability.toFixed(2)}) dropped below floor (${reliabiltyLimit})`);
111
+ }
112
+ if (issues.length > 0) {
113
+ console.warn(`[GovernanceManager] AUDIT FAILED [${new Date().toISOString()}]: ${issues.length} compliance issues detected.`);
114
+ // Phase 1: Emergency Rollbacks
115
+ if (activePersona && (success < 0.4 || hCost > hourlyLimit * 1.5)) {
116
+ console.error(`[GovernanceManager] CRITICAL THRESHOLD BREACH. Initiating emergency containment for persona ${activePersona.id}`);
117
+ await this.cortex.strategy.rollbackPersona(activePersona.id);
118
+ issues.push(`Containment: Emergency rollback triggered for persona ${activePersona.id}`);
119
+ }
120
+ // Phase 2: Systemic Reflections
121
+ await this.cortex.reflections.reflect(null, 'failure', 'Governance Compliance Audit', issues);
122
+ // Phase 3: Remediation Rituals (Transactional)
123
+ await this.triggerRemediation(issues, trx);
124
+ }
125
+ return {
126
+ healthy: issues.length === 0,
127
+ issues,
128
+ };
97
129
  }
98
- // Phase 2: Systemic Reflections
99
- await this.cortex.reflections.reflect(null, 'failure', 'Governance Compliance Audit', issues);
100
- // Phase 3: Remediation Rituals
101
- await this.triggerRemediation(issues);
102
- }
130
+ catch (e) {
131
+ console.error(`[GovernanceManager] STRICT AUDIT FAILURE: ${String(e)}`);
132
+ issues.push(`Strict Mode Failure: ${String(e)}`);
133
+ return { healthy: false, issues };
134
+ }
135
+ });
103
136
  return {
104
137
  healthy: issues.length === 0,
105
138
  issues,
106
139
  };
107
140
  }
108
- /**
109
- * Retrieves the currently active persona.
110
- */
111
- async getActivePersona() {
112
- const active = await this.db
141
+ async getActivePersona(trx) {
142
+ const db = trx || this.db;
143
+ const active = await db
113
144
  .selectFrom(this.personasTable)
114
145
  .selectAll()
115
146
  .where('status', '=', 'active')
@@ -124,9 +155,93 @@ class GovernanceManager {
124
155
  };
125
156
  }
126
157
  /**
127
- * Trigger autonomous remediation steps based on specific failure modes
158
+ * Quarantine a persona that is behaving outside safety parameters.
159
+ */
160
+ async quarantinePersona(id, reason) {
161
+ console.warn(`[GovernanceManager] QUARANTINING Persona ${id}: ${reason}`);
162
+ await this.db.transaction().execute(async (trx) => {
163
+ let query = trx
164
+ .selectFrom(this.personasTable)
165
+ .selectAll()
166
+ .where('id', '=', id);
167
+ // Audit Phase 13: Atomic identity lock (Skip for SQLite)
168
+ if (this.db.getExecutor().adapter?.constructor.name !== 'SqliteAdapter') {
169
+ query = query.forUpdate();
170
+ }
171
+ const persona = await query.executeTakeFirst();
172
+ if (persona) {
173
+ const metadata = typeof persona.metadata === 'string'
174
+ ? JSON.parse(persona.metadata)
175
+ : persona.metadata || {};
176
+ await trx
177
+ .updateTable(this.personasTable)
178
+ .set({
179
+ status: 'quarantined',
180
+ metadata: JSON.stringify({
181
+ ...metadata,
182
+ quarantine_reason: reason,
183
+ quarantined_at: new Date(),
184
+ }),
185
+ updated_at: new Date(),
186
+ })
187
+ .where('id', '=', id)
188
+ .execute();
189
+ // Phase 3: Rollback most recent changes
190
+ await this.cortex.strategy.rollbackPersona(id);
191
+ }
192
+ });
193
+ }
194
+ /**
195
+ * Blacklist a skill that is causing systemic issues.
196
+ */
197
+ async quarantineSkill(name, reason) {
198
+ const capTable = this.config.capabilitiesTable || 'agent_capabilities';
199
+ console.warn(`[GovernanceManager] BLACKLISTING Skill ${name}: ${reason}`);
200
+ await this.db
201
+ .updateTable(capTable)
202
+ .set({
203
+ status: 'blacklisted',
204
+ metadata: JSON.stringify({ blacklist_reason: reason, blacklisted_at: new Date() }),
205
+ updated_at: new Date()
206
+ })
207
+ .where('name', '=', name)
208
+ .execute();
209
+ }
210
+ /**
211
+ * Monitor cross-node behaviors and flag sudden spikes or malicious patterns.
128
212
  */
129
- async triggerRemediation(issues) {
213
+ async validateEmergentBehavior(trx) {
214
+ const issues = [];
215
+ const db = trx || this.db;
216
+ // 1. Check for rapid propagation of new skills (Potential poisoning)
217
+ const capTable = this.config.capabilitiesTable || 'agent_capabilities';
218
+ const recentSkills = await db
219
+ .selectFrom(capTable)
220
+ .select(['name', 'created_at'])
221
+ .where('created_at', '>', new Date(Date.now() - 3600000)) // Last hour
222
+ .execute();
223
+ if (recentSkills.length > 10) {
224
+ issues.push(`Emergent Warning: Rapid skill propagation detected (${recentSkills.length} new skills in 1hr). Potential rogue behavior.`);
225
+ }
226
+ // 2. Check for high variance in task success across swarm
227
+ const recentTaskMetrics = await db
228
+ .selectFrom(this.metricsTable)
229
+ .select(['metric_value', 'metadata'])
230
+ .where('metric_name', '=', 'task_success_rate')
231
+ .where('created_at', '>', new Date(Date.now() - 1800000)) // Last 30m
232
+ .execute();
233
+ if (recentTaskMetrics.length >= 5) {
234
+ const values = recentTaskMetrics.map((m) => Number(m.metric_value));
235
+ const mean = values.reduce((a, b) => a + b, 0) / values.length;
236
+ const variance = values.reduce((a, b) => a + Math.pow(b - mean, 2), 0) / values.length;
237
+ if (variance > 0.2) {
238
+ issues.push(`Emergent Warning: High variance in swarm success rate (${(variance * 100).toFixed(1)}%). Potential node instability.`);
239
+ }
240
+ }
241
+ return issues;
242
+ }
243
+ async triggerRemediation(issues, trx) {
244
+ const db = trx || this.db;
130
245
  for (const issue of issues) {
131
246
  if (issue.includes('Budget Violations')) {
132
247
  await this.cortex.rituals.scheduleRitual('Budget Remediation', 'compression', 'hourly', `Automated response to: ${issue}`, { priority: 'critical', enforce_limits: true });
@@ -135,17 +250,36 @@ class GovernanceManager {
135
250
  await this.cortex.rituals.scheduleRitual('Reliability Sweep', 'pruning', 'daily', `Sanitizing high-noise memories due to: ${issue}`, { priority: 'medium', target: 'longtail' });
136
251
  }
137
252
  if (issue.includes('Integrity Failure')) {
138
- // Force demotion of the specific skill back to sandbox or experimental
253
+ // Audit Phase 10: Atomic demotion lock
139
254
  const skillName = issue.match(/'([^']+)'/)?.[1];
140
255
  if (skillName) {
141
256
  console.log(`[GovernanceManager] Demoting tainted skill out of verified pool: ${skillName}`);
142
- await this.db
143
- .updateTable(this.config.capabilitiesTable || 'agent_capabilities')
144
- .set({ status: 'experimental', updated_at: new Date() })
145
- .where('name', '=', skillName)
146
- .execute();
257
+ const remediationStep = async (t) => {
258
+ const skill = await t
259
+ .selectFrom(this.config.capabilitiesTable || 'agent_capabilities')
260
+ .select('id')
261
+ .where('name', '=', skillName)
262
+ .forUpdate() // Lock the skill row
263
+ .executeTakeFirst();
264
+ if (skill) {
265
+ await t
266
+ .updateTable(this.config.capabilitiesTable || 'agent_capabilities')
267
+ .set({ status: 'experimental', updated_at: new Date() })
268
+ .where('id', '=', skill.id)
269
+ .execute();
270
+ }
271
+ };
272
+ if (trx) {
273
+ await remediationStep(trx);
274
+ }
275
+ else {
276
+ await this.db.transaction().execute(remediationStep);
277
+ }
147
278
  }
148
279
  }
280
+ if (issue.includes('Quota Breach') || issue.includes('Swarm Quota Breach')) {
281
+ await this.cortex.rituals.scheduleRitual('Resource Throttling', 'pruning', 'hourly', `Critical resource containment: ${issue}`, { priority: 'critical', active_containment: true });
282
+ }
149
283
  }
150
284
  }
151
285
  /**
@@ -155,7 +289,13 @@ class GovernanceManager {
155
289
  const repairs = [];
156
290
  // 1. Check for chronic high latency
157
291
  const latencyStats = await this.cortex.metrics.getMetricStats('query_latency');
158
- if (latencyStats.avg > 500 && latencyStats.count > 10) {
292
+ const latencyThreshold = (await this.cortex.policies.checkPolicy('query_latency_threshold', 0)).reason ? 500 : 500; // Logic to pull from policy if possible, else 500
293
+ // PRODUCTION HARDENING: Pull thresholds from explicit governance policies
294
+ const policies = await this.cortex.policies.getActivePolicies();
295
+ const latencyPolicy = policies.find(p => p.name === 'latency_repair_threshold')?.definition?.threshold || 500;
296
+ const costPolicy = policies.find(p => p.name === 'high_cost_threshold')?.definition?.threshold || 0.5;
297
+ const storagePolicy = policies.find(p => p.name === 'cold_storage_threshold')?.definition?.days || 30;
298
+ if (latencyStats.avg > latencyPolicy && latencyStats.count > 10) {
159
299
  repairs.push(`Average latency is high (${latencyStats.avg.toFixed(2)}ms). Suggesting index audit across hit tables.`);
160
300
  }
161
301
  // 2. Detect specific slow tables from recent metrics
@@ -163,7 +303,7 @@ class GovernanceManager {
163
303
  .selectFrom(this.metricsTable)
164
304
  .select('metadata')
165
305
  .where('metric_name', '=', 'query_latency')
166
- .where('metric_value', '>', 1000)
306
+ .where('metric_value', '>', latencyPolicy * 2)
167
307
  .limit(20)
168
308
  .execute();
169
309
  const slowTables = new Set();
@@ -184,19 +324,19 @@ class GovernanceManager {
184
324
  }
185
325
  // 3. Check for high cost accumulation
186
326
  const totalCost = await this.cortex.metrics.getAverageMetric('total_cost');
187
- if (totalCost > 0.5) {
327
+ if (totalCost > costPolicy) {
188
328
  repairs.push('Average query cost is high. Suggesting prompt compression or model switching (e.g., to a smaller model).');
189
329
  }
190
330
  // 3. Check for cold storage candidates
191
331
  const sessionsTable = this.config.sessionsTable || 'agent_sessions';
192
- const oldThreshold = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000); // 30 days
332
+ const oldThreshold = new Date(Date.now() - storagePolicy * 24 * 60 * 60 * 1000);
193
333
  const oldSessions = (await this.db
194
334
  .selectFrom(sessionsTable)
195
335
  .select((eb) => eb.fn.count('id').as('count'))
196
336
  .where('created_at', '<', oldThreshold)
197
337
  .executeTakeFirst());
198
338
  if (Number(oldSessions?.count || 0) > 100) {
199
- repairs.push(`[STORAGE OPTIMIZATION] Found ${oldSessions.count} sessions older than 30 days. Consider moving to cold storage to reduce primary database size and improve backup speed.`);
339
+ repairs.push(`[STORAGE OPTIMIZATION] Found ${oldSessions.count} sessions older than ${storagePolicy} days. Consider moving to cold storage to reduce primary database size and improve backup speed.`);
200
340
  }
201
341
  return repairs;
202
342
  }
@@ -16,15 +16,19 @@ export declare class HiveLink {
16
16
  * Promote high-confidence local knowledge to global "Hive" knowledge.
17
17
  * This creates a new, session-agnostic entry or updates an existing global one.
18
18
  */
19
- broadcastKnowledge(minConfidence?: number): Promise<number>;
19
+ broadcastKnowledge(options?: {
20
+ minConfidence?: number;
21
+ limit?: number;
22
+ offset?: number;
23
+ }): Promise<number>;
20
24
  /**
21
25
  * Strengthen knowledge related to a specific domain (tag).
22
26
  * Increases confidence of all items with this tag, representing "domain mastery".
23
27
  */
24
28
  syncDomain(domainTag: string, boostFactor?: number): Promise<number>;
25
29
  /**
26
- * Propagate high-performing capabilities globally and block known-bad ones.
27
- * High-Throughput Refactor: Batch updates and optimized set-based checks.
30
+ * Propagate high-performing capabilities globally using the "Sovereign Draft" protocol.
31
+ * Uses Bayesian Convergence and Shadow Promotion to avoid deadlocks.
28
32
  */
29
33
  broadcastSkills(): Promise<number>;
30
34
  /**