noormme 1.2.3 → 1.2.5

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 (144) hide show
  1. package/dist/cjs/agentic/ActionJournal.d.ts +6 -6
  2. package/dist/cjs/agentic/ActionJournal.js +10 -10
  3. package/dist/cjs/agentic/CapabilityManager.d.ts +5 -5
  4. package/dist/cjs/agentic/CapabilityManager.js +35 -24
  5. package/dist/cjs/agentic/Cortex.js +12 -13
  6. package/dist/cjs/agentic/EpisodicMemory.js +4 -3
  7. package/dist/cjs/agentic/PersonaManager.d.ts +4 -4
  8. package/dist/cjs/agentic/PersonaManager.js +19 -15
  9. package/dist/cjs/agentic/PolicyEnforcer.d.ts +4 -8
  10. package/dist/cjs/agentic/PolicyEnforcer.js +26 -26
  11. package/dist/cjs/agentic/ResourceMonitor.js +2 -1
  12. package/dist/cjs/agentic/SessionManager.js +7 -6
  13. package/dist/cjs/agentic/improvement/AblationEngine.d.ts +3 -3
  14. package/dist/cjs/agentic/improvement/AblationEngine.js +41 -24
  15. package/dist/cjs/agentic/improvement/ActionRefiner.d.ts +1 -1
  16. package/dist/cjs/agentic/improvement/ActionRefiner.js +21 -15
  17. package/dist/cjs/agentic/improvement/ConflictResolver.js +4 -3
  18. package/dist/cjs/agentic/improvement/EvolutionRitual.js +2 -1
  19. package/dist/cjs/agentic/improvement/EvolutionaryPilot.d.ts +1 -1
  20. package/dist/cjs/agentic/improvement/EvolutionaryPilot.js +17 -19
  21. package/dist/cjs/agentic/improvement/GoalArchitect.js +10 -9
  22. package/dist/cjs/agentic/improvement/GovernanceManager.d.ts +5 -5
  23. package/dist/cjs/agentic/improvement/GovernanceManager.js +12 -22
  24. package/dist/cjs/agentic/improvement/HiveLink.d.ts +3 -3
  25. package/dist/cjs/agentic/improvement/HiveLink.js +15 -157
  26. package/dist/cjs/agentic/improvement/KnowledgeDistiller.d.ts +15 -29
  27. package/dist/cjs/agentic/improvement/KnowledgeDistiller.js +69 -351
  28. package/dist/cjs/agentic/improvement/QuotaManager.d.ts +1 -1
  29. package/dist/cjs/agentic/improvement/QuotaManager.js +11 -11
  30. package/dist/cjs/agentic/improvement/RecursiveReasoner.d.ts +4 -4
  31. package/dist/cjs/agentic/improvement/RecursiveReasoner.js +10 -10
  32. package/dist/cjs/agentic/improvement/ReflectionEngine.d.ts +2 -2
  33. package/dist/cjs/agentic/improvement/ReflectionEngine.js +2 -2
  34. package/dist/cjs/agentic/improvement/RitualOrchestrator.d.ts +3 -3
  35. package/dist/cjs/agentic/improvement/RitualOrchestrator.js +12 -9
  36. package/dist/cjs/agentic/improvement/SelfEvolution.d.ts +1 -1
  37. package/dist/cjs/agentic/improvement/SelfEvolution.js +21 -18
  38. package/dist/cjs/agentic/improvement/SelfTestRegistry.d.ts +1 -1
  39. package/dist/cjs/agentic/improvement/SelfTestRegistry.js +27 -19
  40. package/dist/cjs/agentic/improvement/SovereignMetrics.d.ts +6 -6
  41. package/dist/cjs/agentic/improvement/SovereignMetrics.js +12 -12
  42. package/dist/cjs/agentic/improvement/StrategicPlanner.d.ts +10 -54
  43. package/dist/cjs/agentic/improvement/StrategicPlanner.js +43 -396
  44. package/dist/cjs/agentic/improvement/distillation/ConflictChallenger.d.ts +3 -0
  45. package/dist/cjs/agentic/improvement/distillation/ConflictChallenger.js +54 -0
  46. package/dist/cjs/agentic/improvement/distillation/FactDistiller.d.ts +10 -0
  47. package/dist/cjs/agentic/improvement/distillation/FactDistiller.js +115 -0
  48. package/dist/cjs/agentic/improvement/distillation/KnowledgeConsolidator.d.ts +6 -0
  49. package/dist/cjs/agentic/improvement/distillation/KnowledgeConsolidator.js +63 -0
  50. package/dist/cjs/agentic/improvement/distillation/RelationshipArchitect.d.ts +6 -0
  51. package/dist/cjs/agentic/improvement/distillation/RelationshipArchitect.js +73 -0
  52. package/dist/cjs/agentic/improvement/governance/MaintenanceOracle.js +5 -5
  53. package/dist/cjs/agentic/improvement/governance/PersonaAuditor.js +7 -11
  54. package/dist/cjs/agentic/improvement/governance/RemediationEngine.js +8 -3
  55. package/dist/cjs/agentic/improvement/hive/DomainMaster.d.ts +4 -0
  56. package/dist/cjs/agentic/improvement/hive/DomainMaster.js +19 -0
  57. package/dist/cjs/agentic/improvement/hive/KnowledgePromoter.d.ts +6 -0
  58. package/dist/cjs/agentic/improvement/hive/KnowledgePromoter.js +57 -0
  59. package/dist/cjs/agentic/improvement/hive/SkillPropagator.d.ts +6 -0
  60. package/dist/cjs/agentic/improvement/hive/SkillPropagator.js +91 -0
  61. package/dist/cjs/agentic/improvement/strategy/EvolutionVerificator.d.ts +6 -0
  62. package/dist/cjs/agentic/improvement/strategy/EvolutionVerificator.js +48 -0
  63. package/dist/cjs/agentic/improvement/strategy/MutationEngine.d.ts +10 -0
  64. package/dist/cjs/agentic/improvement/strategy/MutationEngine.js +119 -0
  65. package/dist/cjs/agentic/improvement/strategy/PerformanceAnalyst.d.ts +6 -0
  66. package/dist/cjs/agentic/improvement/strategy/PerformanceAnalyst.js +84 -0
  67. package/dist/cjs/agentic/util/db-utils.d.ts +4 -0
  68. package/dist/cjs/agentic/util/db-utils.js +27 -0
  69. package/dist/cjs/cli/index.js +0 -0
  70. package/dist/cjs/helpers/agent-schema.js +1 -0
  71. package/dist/cjs/testing/test-utils.js +2 -0
  72. package/dist/cjs/types/index.d.ts +8 -0
  73. package/dist/esm/agentic/ActionJournal.d.ts +6 -6
  74. package/dist/esm/agentic/ActionJournal.js +10 -10
  75. package/dist/esm/agentic/CapabilityManager.d.ts +5 -5
  76. package/dist/esm/agentic/CapabilityManager.js +35 -24
  77. package/dist/esm/agentic/Cortex.js +12 -13
  78. package/dist/esm/agentic/EpisodicMemory.js +4 -3
  79. package/dist/esm/agentic/PersonaManager.d.ts +4 -4
  80. package/dist/esm/agentic/PersonaManager.js +19 -15
  81. package/dist/esm/agentic/PolicyEnforcer.d.ts +4 -8
  82. package/dist/esm/agentic/PolicyEnforcer.js +26 -26
  83. package/dist/esm/agentic/ResourceMonitor.js +2 -1
  84. package/dist/esm/agentic/SessionManager.js +7 -6
  85. package/dist/esm/agentic/improvement/AblationEngine.d.ts +3 -3
  86. package/dist/esm/agentic/improvement/AblationEngine.js +41 -24
  87. package/dist/esm/agentic/improvement/ActionRefiner.d.ts +1 -1
  88. package/dist/esm/agentic/improvement/ActionRefiner.js +21 -15
  89. package/dist/esm/agentic/improvement/ConflictResolver.js +4 -3
  90. package/dist/esm/agentic/improvement/EvolutionRitual.js +2 -1
  91. package/dist/esm/agentic/improvement/EvolutionaryPilot.d.ts +1 -1
  92. package/dist/esm/agentic/improvement/EvolutionaryPilot.js +17 -19
  93. package/dist/esm/agentic/improvement/GoalArchitect.js +10 -9
  94. package/dist/esm/agentic/improvement/GovernanceManager.d.ts +5 -5
  95. package/dist/esm/agentic/improvement/GovernanceManager.js +12 -22
  96. package/dist/esm/agentic/improvement/HiveLink.d.ts +3 -3
  97. package/dist/esm/agentic/improvement/HiveLink.js +15 -157
  98. package/dist/esm/agentic/improvement/KnowledgeDistiller.d.ts +15 -29
  99. package/dist/esm/agentic/improvement/KnowledgeDistiller.js +69 -351
  100. package/dist/esm/agentic/improvement/QuotaManager.d.ts +1 -1
  101. package/dist/esm/agentic/improvement/QuotaManager.js +11 -11
  102. package/dist/esm/agentic/improvement/RecursiveReasoner.d.ts +4 -4
  103. package/dist/esm/agentic/improvement/RecursiveReasoner.js +10 -10
  104. package/dist/esm/agentic/improvement/ReflectionEngine.d.ts +2 -2
  105. package/dist/esm/agentic/improvement/ReflectionEngine.js +2 -2
  106. package/dist/esm/agentic/improvement/RitualOrchestrator.d.ts +3 -3
  107. package/dist/esm/agentic/improvement/RitualOrchestrator.js +12 -9
  108. package/dist/esm/agentic/improvement/SelfEvolution.d.ts +1 -1
  109. package/dist/esm/agentic/improvement/SelfEvolution.js +21 -18
  110. package/dist/esm/agentic/improvement/SelfTestRegistry.d.ts +1 -1
  111. package/dist/esm/agentic/improvement/SelfTestRegistry.js +27 -19
  112. package/dist/esm/agentic/improvement/SovereignMetrics.d.ts +6 -6
  113. package/dist/esm/agentic/improvement/SovereignMetrics.js +12 -12
  114. package/dist/esm/agentic/improvement/StrategicPlanner.d.ts +10 -54
  115. package/dist/esm/agentic/improvement/StrategicPlanner.js +43 -396
  116. package/dist/esm/agentic/improvement/distillation/ConflictChallenger.d.ts +3 -0
  117. package/dist/esm/agentic/improvement/distillation/ConflictChallenger.js +51 -0
  118. package/dist/esm/agentic/improvement/distillation/FactDistiller.d.ts +10 -0
  119. package/dist/esm/agentic/improvement/distillation/FactDistiller.js +112 -0
  120. package/dist/esm/agentic/improvement/distillation/KnowledgeConsolidator.d.ts +6 -0
  121. package/dist/esm/agentic/improvement/distillation/KnowledgeConsolidator.js +60 -0
  122. package/dist/esm/agentic/improvement/distillation/RelationshipArchitect.d.ts +6 -0
  123. package/dist/esm/agentic/improvement/distillation/RelationshipArchitect.js +70 -0
  124. package/dist/esm/agentic/improvement/governance/MaintenanceOracle.js +5 -5
  125. package/dist/esm/agentic/improvement/governance/PersonaAuditor.js +7 -11
  126. package/dist/esm/agentic/improvement/governance/RemediationEngine.js +8 -3
  127. package/dist/esm/agentic/improvement/hive/DomainMaster.d.ts +4 -0
  128. package/dist/esm/agentic/improvement/hive/DomainMaster.js +16 -0
  129. package/dist/esm/agentic/improvement/hive/KnowledgePromoter.d.ts +6 -0
  130. package/dist/esm/agentic/improvement/hive/KnowledgePromoter.js +54 -0
  131. package/dist/esm/agentic/improvement/hive/SkillPropagator.d.ts +6 -0
  132. package/dist/esm/agentic/improvement/hive/SkillPropagator.js +88 -0
  133. package/dist/esm/agentic/improvement/strategy/EvolutionVerificator.d.ts +6 -0
  134. package/dist/esm/agentic/improvement/strategy/EvolutionVerificator.js +45 -0
  135. package/dist/esm/agentic/improvement/strategy/MutationEngine.d.ts +10 -0
  136. package/dist/esm/agentic/improvement/strategy/MutationEngine.js +116 -0
  137. package/dist/esm/agentic/improvement/strategy/PerformanceAnalyst.d.ts +6 -0
  138. package/dist/esm/agentic/improvement/strategy/PerformanceAnalyst.js +81 -0
  139. package/dist/esm/agentic/util/db-utils.d.ts +4 -0
  140. package/dist/esm/agentic/util/db-utils.js +25 -0
  141. package/dist/esm/helpers/agent-schema.js +1 -0
  142. package/dist/esm/testing/test-utils.js +2 -0
  143. package/dist/esm/types/index.d.ts +8 -0
  144. package/package.json +40 -44
@@ -1,5 +1,7 @@
1
1
  /// <reference types="./StrategicPlanner.d.ts" />
2
- import { sql } from '../../raw-builder/sql.js';
2
+ import { PerformanceAnalyst } from './strategy/PerformanceAnalyst.js';
3
+ import { MutationEngine } from './strategy/MutationEngine.js';
4
+ import { EvolutionVerificator } from './strategy/EvolutionVerificator.js';
3
5
  /**
4
6
  * StrategicPlanner proactively suggests mutation to agent personas
5
7
  * based on performance trends observed in SovereignMetrics.
@@ -10,447 +12,92 @@ export class StrategicPlanner {
10
12
  config;
11
13
  personasTable;
12
14
  metricsTable;
15
+ analyst;
16
+ engine;
17
+ verificator;
13
18
  constructor(db, cortex, config = {}) {
14
19
  this.db = db;
15
20
  this.cortex = cortex;
16
21
  this.config = config;
17
22
  this.personasTable = config.personasTable || 'agent_personas';
18
23
  this.metricsTable = config.metricsTable || 'agent_metrics';
19
- }
20
- get typedDb() {
21
- return this.db;
24
+ this.analyst = new PerformanceAnalyst();
25
+ this.engine = new MutationEngine(this.personasTable);
26
+ this.verificator = new EvolutionVerificator();
22
27
  }
23
28
  /**
24
29
  * Analyze performance for all personas and apply mutations where necessary.
25
30
  */
26
- async mutateStrategy() {
31
+ async mutateStrategy(trxOrDb = this.db) {
27
32
  const mutations = [];
28
- // 0. Pre-Flight System Health Check (Phase 4)
29
- const tests = await this.cortex.tests.runAllProbes();
30
- const failedTests = tests.filter((t) => !t.success);
31
- if (failedTests.length > 0) {
32
- console.warn(`[StrategicPlanner] Mutation cycle aborted. System health probes failed: ${failedTests.map((t) => t.name).join(', ')}`);
33
+ // System Health Check
34
+ const tests = await this.cortex.tests.runAllProbes(trxOrDb);
35
+ if (tests.some((t) => !t.success)) {
36
+ console.warn('[StrategicPlanner] Mutation cycle aborted. System health probes failed.');
33
37
  return [];
34
38
  }
35
- const personas = await this.typedDb
36
- .selectFrom(this.personasTable)
37
- .selectAll()
38
- .execute();
39
- const allParsedPersonas = personas.map((p) => this.parsePersona(p));
40
- const globalBlacklistDuration = this.config.strategy?.globalBlacklistDuration || 3600000; // 1 hour
41
- const localBlacklistDuration = this.config.strategy?.localBlacklistDuration || 86400000; // 24 hours
42
- for (const p of personas) {
43
- const persona = this.parsePersona(p);
39
+ const personaRows = await trxOrDb.selectFrom(this.personasTable).selectAll().execute();
40
+ const allPersonas = personaRows.map((p) => this.parsePersona(p));
41
+ const configStrategy = this.config.strategy || {};
42
+ const globalBlacklistDuration = configStrategy.globalBlacklistDuration || 3600000;
43
+ const localBlacklistDuration = configStrategy.localBlacklistDuration || 86400000;
44
+ for (const persona of allPersonas) {
45
+ const report = await this.analyst.analyze(trxOrDb, this.cortex, this.metricsTable, persona.id);
44
46
  // 1. Verification Monitor
45
47
  if (persona.metadata?.evolution_status === 'verifying') {
46
- const result = await this.verifyEvolution(persona, allParsedPersonas);
48
+ const result = await this.verificator.verify(trxOrDb, this.cortex, this.personasTable, persona, report, allPersonas, (id, trx) => this.rollbackPersona(id, trx));
47
49
  if (result)
48
50
  mutations.push(result);
49
51
  continue;
50
52
  }
51
- // 2. Failure Analysis (Intelligence Refinement)
52
- const failures = await this.analyzeFailurePatterns(persona.id);
53
- const report = await this.analyzePersona(persona.id);
54
- // 3. Blacklist Check (Local & Global Phase 5)
53
+ // 2. Failure Analysis
54
+ const failures = await this.analyst.analyzeFailurePatterns(this.cortex, persona.id, trxOrDb);
55
+ // 3. Blacklist Check
55
56
  const lastMutation = persona.metadata?.last_failed_mutation;
56
- const isGloballyBlacklisted = allParsedPersonas.some((mp) => {
57
+ const isGloballyBlacklisted = allPersonas.some((mp) => {
57
58
  return (mp.metadata?.last_failed_mutation?.type === report.recommendation &&
58
- Date.now() - (mp.metadata?.last_failed_mutation?.timestamp || 0) <
59
- globalBlacklistDuration);
59
+ Date.now() - (mp.metadata?.last_failed_mutation?.timestamp || 0) < globalBlacklistDuration);
60
60
  });
61
- if (isGloballyBlacklisted ||
62
- (lastMutation &&
63
- report.recommendation === lastMutation.type &&
64
- Date.now() - lastMutation.timestamp < localBlacklistDuration)) {
65
- console.log(`[StrategicPlanner] Skipping blacklisted mutation ${report.recommendation} for persona ${persona.id} (Global=${isGloballyBlacklisted})`);
61
+ if (isGloballyBlacklisted || (lastMutation && report.recommendation === lastMutation.type && Date.now() - lastMutation.timestamp < localBlacklistDuration)) {
66
62
  continue;
67
63
  }
68
64
  if (report.recommendation !== 'maintain' || failures.length > 0) {
69
- const result = await this.applyDirectMutation(persona, report, failures);
70
- if (result) {
65
+ const result = await this.engine.applyMutation(trxOrDb, this.cortex, persona, report, failures, (r) => this.sanitizeRole(r), (p) => this.parsePersona(p));
66
+ if (result)
71
67
  mutations.push(result);
72
- }
73
68
  }
74
69
  }
75
70
  return mutations;
76
71
  }
77
72
  /**
78
- * Directly mutate a persona and put it into 'verifying' status.
79
- * Performs a pre-flight conflict check and injects distilled lessons.
80
- */
81
- async applyDirectMutation(persona, report, failures = []) {
82
- return await this.db.transaction().execute(async (trx) => {
83
- const reason = failures.length > 0
84
- ? `Failure Patterns: ${failures.join(', ')}`
85
- : report.recommendation;
86
- console.log(`[StrategicPlanner] Applying direct mutation to persona ${persona.id} (Reason: ${reason})`);
87
- let updates = {};
88
- let mutationType = 'role_update';
89
- if (failures.length > 0) {
90
- // Lesson-Driven Synthesis: Pull categories of lessons
91
- const lessons = await this.cortex.reasoner.synthesizeLessons();
92
- const relevantLessons = updates.role
93
- ? []
94
- : (lessons['general'] || []).slice(0, 2);
95
- updates = {
96
- role: `${persona.role || ''} (Optimized for: ${failures.join(', ')}. Patterns: ${relevantLessons.join('; ')})`.trim(),
97
- };
98
- }
99
- else {
100
- // Evolutionary Cross-Pollination (Phase 5)
101
- const allPersonas = await trx
102
- .selectFrom(this.personasTable)
103
- .selectAll()
104
- .execute();
105
- const winningMutations = allPersonas
106
- .map((p) => this.parsePersona(p))
107
- .filter((p) => (p.metadata?.evolution_status === 'stable' ||
108
- !p.metadata?.evolution_status) &&
109
- p.metadata?.mutation_reason?.includes(report.recommendation));
110
- if (winningMutations.length > 0) {
111
- // PRODUCTION HARDENING: Deterministic Alpha Selection
112
- // Instead of Math.random(), pick the variant with the highest anchored reliability
113
- const sorted = winningMutations.sort((a, b) => (b.metadata?.anchored_reliability || 0) - (a.metadata?.anchored_reliability || 0));
114
- const alphaMatch = sorted[0];
115
- console.log(`[StrategicPlanner] Cross-Pollinating success from Alpha Persona ${alphaMatch.id} (Reliability: ${alphaMatch.metadata?.anchored_reliability || 0})`);
116
- updates = { role: this.sanitizeRole(alphaMatch.role || persona.role || 'Agent') };
117
- }
118
- else {
119
- switch (report.recommendation) {
120
- case 'optimize_accuracy':
121
- updates = {
122
- role: this.sanitizeRole(`${persona.role || ''} (Focus strictly on accuracy and detailed verification)`),
123
- };
124
- break;
125
- case 'optimize_efficiency':
126
- updates = {
127
- policies: [
128
- ...(persona.policies || []),
129
- 'timeout_reduction',
130
- 'concise_output',
131
- ],
132
- };
133
- mutationType = 'policy_update';
134
- break;
135
- case 'critical_intervention':
136
- return await this.rollbackPersona(persona.id);
137
- default:
138
- return null;
139
- }
140
- }
141
- }
142
- if (updates.role) {
143
- updates.role = this.sanitizeRole(updates.role);
144
- }
145
- // 1. Predictive Conflict Detection (Pre-flight)
146
- const proposedState = { ...persona, ...updates };
147
- const contradictions = await this.cortex.reasoner.detectContradictions();
148
- // If the new role contradicts existing goals, block mutation
149
- for (const contradiction of contradictions) {
150
- if (updates.role && contradiction.includes(updates.role.slice(0, 20))) {
151
- console.warn(`[StrategicPlanner] Mutation blocked due to goal contradiction: ${contradiction}`);
152
- return null;
153
- }
154
- }
155
- // Record mutation in history
156
- const mutation = {
157
- id: `mut_${Date.now()}`,
158
- timestamp: Date.now(),
159
- type: mutationType,
160
- previousState: {
161
- role: persona.role,
162
- policies: persona.policies,
163
- capabilities: persona.capabilities,
164
- },
165
- newState: { ...updates },
166
- reason: `Auto-mutation triggered by ${report.recommendation}`,
167
- };
168
- const history = [...(persona.metadata?.mutationHistory || []), mutation];
169
- if (history.length > 5)
170
- history.shift();
171
- const newMetadata = {
172
- ...persona.metadata,
173
- mutationHistory: history,
174
- evolution_status: 'verifying',
175
- mutation_reason: report.recommendation, // Hive Signal (Phase 5)
176
- verification_started_at: Date.now(),
177
- verification_baseline: {
178
- successRate: report.successRate,
179
- averageLatency: report.averageLatency,
180
- },
181
- };
182
- await trx
183
- .updateTable(this.personasTable)
184
- .set({
185
- role: updates.role || persona.role,
186
- policies: updates.policies
187
- ? JSON.stringify(updates.policies)
188
- : undefined,
189
- capabilities: updates.capabilities
190
- ? JSON.stringify(updates.capabilities)
191
- : undefined,
192
- metadata: JSON.stringify(newMetadata),
193
- updated_at: new Date(),
194
- })
195
- .where('id', '=', persona.id)
196
- .execute();
197
- return `Persona ${persona.id} mutated and entering verification window for ${mutationType}.`;
198
- });
199
- }
200
- /**
201
- * Check if a persona in verification should be stabilized or rolled back.
202
- * Uses dynamic statistical variance and adaptive meta-tuning.
203
- */
204
- async verifyEvolution(persona, allPersonas = []) {
205
- const report = await this.analyzePersona(persona.id);
206
- // Adaptive Meta-Tuning: Increase window based on rollback history (Phase 4)
207
- const rollbackHistory = persona.metadata?.rollbackHistory || [];
208
- const recentRollbacks = rollbackHistory.filter((ts) => Date.now() - ts < 604800000).length;
209
- // Hive-Mind Verification Speedups (Phase 5)
210
- const hiveTrusted = allPersonas
211
- .filter((p) => p.metadata?.evolution_status === 'stable' &&
212
- p.metadata?.mutation_reason === persona.metadata?.mutation_reason).length;
213
- let sampleSizeThreshold = 10 + recentRollbacks * 10;
214
- // Pass 5: Adaptive Verification Windows
215
- // If a mutation is performing exceptionally well early on (Z-score check), accelerate stabilization.
216
- const earlyStats = await this.analyzePersona(persona.id);
217
- const earlyBaseline = persona.metadata?.verification_baseline || {
218
- successRate: 0.8,
219
- };
220
- const earlyZ = (earlyStats.successRate - earlyBaseline.successRate) / 0.1; // Use nominal stdDev for early check
221
- if (earlyZ > 3.0 && earlyStats.sampleSize >= 5) {
222
- console.log(`[StrategicPlanner] High Performance Detected (Z=${earlyZ.toFixed(2)}). Accelerating stabilization threshold.`);
223
- sampleSizeThreshold = 5; // Accelerated Stabilization
224
- }
225
- if (hiveTrusted >= 3) {
226
- console.log(`[StrategicPlanner] Accelerating verification for Persona ${persona.id} (Hive-Mind Trusted)`);
227
- sampleSizeThreshold = Math.max(5, Math.floor(sampleSizeThreshold / 2));
228
- }
229
- if (report.sampleSize < sampleSizeThreshold)
230
- return null;
231
- const baseline = persona.metadata?.verification_baseline || {
232
- successRate: 0.8,
233
- averageLatency: 500,
234
- };
235
- // Dynamic Variance Calculation (Intelligence Refinement)
236
- const recentMetrics = await this.cortex.metrics.getRecentMetrics(100);
237
- const values = recentMetrics
238
- .filter((m) => m.metricName === 'success_rate')
239
- .map((m) => Number(m.metricValue));
240
- const mean = values.reduce((a, b) => a + b, 0) / (values.length || 1);
241
- const variance = values.reduce((a, b) => a + Math.pow(b - mean, 2), 0) /
242
- (values.length || 1);
243
- const stdDev = Math.sqrt(variance) || 0.1;
244
- const zScore = (report.successRate - baseline.successRate) / (stdDev || 1);
245
- console.log(`[StrategicPlanner] Verifying persona ${persona.id}: Success=${report.successRate.toFixed(2)} (Baseline=${baseline.successRate.toFixed(2)}, σ=${stdDev.toFixed(3)}, Z-Score=${zScore.toFixed(2)}, Threshold=${sampleSizeThreshold})`);
246
- // 1. Early Rollback (Critical statistical drop)
247
- if (zScore < -2.0) {
248
- console.warn(`[StrategicPlanner] STATISTICAL DEGRADATION detected for persona ${persona.id} (Z-Score: ${zScore.toFixed(2)}). Rolling back early.`);
249
- return await this.rollbackPersona(persona.id);
250
- }
251
- // 2. Stabilization (Proven improvement or stability)
252
- if (report.sampleSize >= sampleSizeThreshold * 2 && zScore >= -0.5) {
253
- console.log(`[StrategicPlanner] Evolution for persona ${persona.id} STABILIZED.`);
254
- // Cognitive Rule Distillation (Phase 4)
255
- if (persona.metadata?.mutation_reason?.includes('optimize_efficiency')) {
256
- await this.cortex.rules.defineRule('all', 'all', 'audit', {
257
- condition: 'latency > 500',
258
- priority: 10,
259
- metadata: {
260
- reason: `Distilled from successful persona ${persona.id} optimization`,
261
- },
262
- });
263
- }
264
- await this.db
265
- .updateTable(this.personasTable)
266
- .set({
267
- metadata: JSON.stringify({
268
- ...persona.metadata,
269
- evolution_status: 'stable',
270
- }),
271
- })
272
- .where('id', '=', persona.id)
273
- .execute();
274
- return `Evolution stabilized for persona ${persona.id}`;
275
- }
276
- // 3. Time-out or persistent mild degradation
277
- const timeInVerification = (Date.now() - (persona.metadata?.verification_started_at || 0)) / 1000;
278
- if (timeInVerification > 86400 * 3) {
279
- console.warn(`[StrategicPlanner] Verification period timed out for ${persona.id}. Rolling back to safety.`);
280
- return await this.rollbackPersona(persona.id);
281
- }
282
- return null;
283
- }
284
- /**
285
- * Analyze recent actions for specific failure patterns.
73
+ * Directly mutate a persona.
286
74
  */
287
- async analyzeFailurePatterns(personaId) {
288
- const patterns = [];
289
- // Use ActionJournal if available to find failing tools
290
- try {
291
- const failureReport = await this.cortex.actions.getFailureReport();
292
- // Only consider tools that failed more than once
293
- const frequentFailures = failureReport.filter((f) => f.failureCount > 1);
294
- for (const fail of frequentFailures) {
295
- patterns.push(`tool_failure_${fail.toolName}`);
296
- }
297
- }
298
- catch (e) {
299
- // Fallback to basic metrics if ActionJournal is not reachable
300
- }
301
- return patterns;
302
- }
303
- /**
304
- * Generate a performance report for a specific persona.
305
- * Uses dynamic satisfaction thresholds based on global population stats (Phase 6).
306
- */
307
- async analyzePersona(id) {
308
- const recentMetrics = await this.typedDb
309
- .selectFrom(this.metricsTable)
310
- .selectAll()
311
- .where((eb) => eb.or([
312
- eb(sql `json_extract(metadata, '$.persona_id')`, '=', id),
313
- eb(sql `metadata->>'persona_id'`, '=', String(id)),
314
- ]))
315
- .orderBy('created_at', 'desc')
316
- .limit(50)
317
- .execute();
318
- // 1. Fetch Global Baseline for Dynamic Thresholds
319
- const globalMetrics = await this.cortex.metrics.getRecentMetrics(200);
320
- const calcStats = (metricName) => {
321
- const vals = globalMetrics
322
- .filter((m) => m.metricName === metricName)
323
- .map((m) => Number(m.metricValue));
324
- if (vals.length < 10)
325
- return { mean: metricName === 'query_latency' ? 500 : 0.9, stdDev: 0.1 };
326
- const mean = vals.reduce((a, b) => a + b, 0) / vals.length;
327
- const variance = vals.reduce((a, b) => a + Math.pow(b - mean, 2), 0) / vals.length;
328
- return { mean, stdDev: Math.sqrt(variance) || 0.05 };
329
- };
330
- const successStats = calcStats('task_success_rate');
331
- const latencyStats = calcStats('query_latency');
332
- if (recentMetrics.length === 0) {
333
- return {
334
- personaId: id,
335
- successRate: successStats.mean,
336
- averageLatency: latencyStats.mean,
337
- sampleSize: 0,
338
- recommendation: 'maintain',
339
- };
340
- }
341
- const successMetrics = recentMetrics.filter((m) => m.metric_name === 'task_success_rate');
342
- const latencyMetrics = recentMetrics.filter((m) => m.metric_name === 'query_latency');
343
- const avgSuccess = successMetrics.length > 0
344
- ? successMetrics.reduce((sum, m) => sum + Number(m.metric_value), 0) /
345
- successMetrics.length
346
- : successStats.mean;
347
- const avgLatency = latencyMetrics.length > 0
348
- ? latencyMetrics.reduce((sum, m) => sum + Number(m.metric_value), 0) /
349
- latencyMetrics.length
350
- : latencyStats.mean;
351
- let recommendation = 'maintain';
352
- // 2. Map Dynamic Thresholds to Recommendations
353
- // Critical: Worse than 2.5 standard deviations from mean
354
- const criticalThreshold = successStats.mean - 2.5 * successStats.stdDev;
355
- // Optimize: Worse than 1.0 standard deviations from mean
356
- const accuracyThreshold = successStats.mean - 1.0 * successStats.stdDev;
357
- // Efficiency: Latency > 2 standard deviations above mean
358
- const efficiencyThreshold = latencyStats.mean + 2.0 * latencyStats.stdDev;
359
- if (avgSuccess < criticalThreshold) {
360
- recommendation = 'critical_intervention';
361
- }
362
- else if (avgSuccess < accuracyThreshold) {
363
- recommendation = 'optimize_accuracy';
364
- }
365
- else if (avgLatency > efficiencyThreshold) {
366
- recommendation = 'optimize_efficiency';
367
- }
368
- console.log(`[StrategicPlanner] Analysis for ${id}: Success=${avgSuccess.toFixed(3)} (Min=${accuracyThreshold.toFixed(3)}), Latency=${avgLatency.toFixed(0)} (Max=${efficiencyThreshold.toFixed(0)})`);
369
- return {
370
- personaId: id,
371
- successRate: avgSuccess,
372
- averageLatency: avgLatency,
373
- sampleSize: recentMetrics.length,
374
- recommendation,
375
- };
75
+ async evolvePersona(persona, report, trxOrDb = this.db) {
76
+ return this.engine.applyMutation(trxOrDb, this.cortex, persona, report, [], (r) => this.sanitizeRole(r), (p) => this.parsePersona(p));
376
77
  }
377
78
  /**
378
- * Evolve a persona directly based on performance.
79
+ * Revert the last mutation for a persona.
379
80
  */
380
- async evolvePersona(persona, report) {
381
- return await this.applyDirectMutation(persona, report);
81
+ async rollbackPersona(id, trxOrDb = this.db) {
82
+ return this.engine.rollback(trxOrDb, id, (p) => this.parsePersona(p));
382
83
  }
383
84
  /**
384
- * Revert the last mutation for a persona.
85
+ * Analyze a persona's performance report.
385
86
  */
386
- async rollbackPersona(id) {
387
- return await this.db.transaction().execute(async (trx) => {
388
- const current = await trx
389
- .selectFrom(this.personasTable)
390
- .selectAll()
391
- .where('id', '=', id)
392
- .executeTakeFirst();
393
- if (!current)
394
- throw new Error(`Persona ${id} not found`);
395
- const persona = this.parsePersona(current);
396
- const history = persona.metadata?.mutationHistory || [];
397
- const lastMutation = history.pop();
398
- if (!lastMutation) {
399
- return `No mutations to rollback for persona ${id}`;
400
- }
401
- const previous = lastMutation.previousState;
402
- const rollbackHistory = persona.metadata?.rollbackHistory || [];
403
- rollbackHistory.push(Date.now());
404
- const newMetadata = {
405
- ...persona.metadata,
406
- mutationHistory: history,
407
- rollbackHistory: rollbackHistory,
408
- last_failed_mutation: {
409
- type: lastMutation.type,
410
- timestamp: Date.now(),
411
- },
412
- evolution_status: 'stable',
413
- lastRollback: Date.now(),
414
- };
415
- await trx
416
- .updateTable(this.personasTable)
417
- .set({
418
- role: previous.role,
419
- policies: previous.policies
420
- ? JSON.stringify(previous.policies)
421
- : undefined,
422
- capabilities: previous.capabilities
423
- ? JSON.stringify(previous.capabilities)
424
- : undefined,
425
- metadata: JSON.stringify(newMetadata),
426
- updated_at: new Date(),
427
- })
428
- .where('id', '=', id)
429
- .execute();
430
- return `Rolled back mutation ${lastMutation.id} for persona ${id}`;
431
- });
87
+ async analyzePersona(id, trxOrDb = this.db) {
88
+ return this.analyst.analyze(trxOrDb, this.cortex, this.metricsTable, id);
432
89
  }
433
90
  sanitizeRole(role) {
434
- // Audit Phase 7: Semantic Security
435
- // Truncate to prevent context-window exhaustion/bloat
436
- const truncated = role.slice(0, 500).trim();
437
- // Sanitize: remove potentially dangerous prompt-injection markers or control chars
438
- return truncated.replace(/[\u0000-\u001F\u007F-\u009F]/g, '').replace(/<\|.*?\|>/g, '');
91
+ return role.slice(0, 500).trim().replace(/[\u0000-\u001F\u007F-\u009F]/g, '').replace(/<\|.*?\|>/g, '');
439
92
  }
440
93
  parsePersona(p) {
441
94
  return {
442
95
  id: p.id,
443
96
  name: p.name,
444
97
  role: p.role,
445
- capabilities: typeof p.capabilities === 'string'
446
- ? JSON.parse(p.capabilities)
447
- : p.capabilities || [],
448
- policies: typeof p.policies === 'string'
449
- ? JSON.parse(p.policies)
450
- : p.policies || [],
451
- metadata: typeof p.metadata === 'string'
452
- ? JSON.parse(p.metadata)
453
- : p.metadata || {},
98
+ capabilities: typeof p.capabilities === 'string' ? JSON.parse(p.capabilities) : p.capabilities || [],
99
+ policies: typeof p.policies === 'string' ? JSON.parse(p.policies) : p.policies || [],
100
+ metadata: typeof p.metadata === 'string' ? JSON.parse(p.metadata) : p.metadata || {},
454
101
  createdAt: new Date(p.created_at),
455
102
  updatedAt: new Date(p.updated_at),
456
103
  };
@@ -0,0 +1,3 @@
1
+ export declare class ConflictChallenger {
2
+ challenge(trxOrDb: any, knowledgeTable: string, entity: string, competingFact: string, confidence: number, parseKnowledgeFn: (item: any) => any): Promise<void>;
3
+ }
@@ -0,0 +1,51 @@
1
+ /// <reference types="./ConflictChallenger.d.ts" />
2
+ export class ConflictChallenger {
3
+ async challenge(trxOrDb, knowledgeTable, entity, competingFact, confidence, parseKnowledgeFn) {
4
+ // Semantic sanitization
5
+ const safeFact = competingFact.slice(0, 500).replace(/[\u0000-\u001F\u007F-\u009F]/g, '').replace(/<\|.*?\|>/g, '');
6
+ const existingItems = await trxOrDb
7
+ .selectFrom(knowledgeTable)
8
+ .selectAll()
9
+ .where('entity', '=', entity)
10
+ .orderBy('confidence', 'desc')
11
+ .execute();
12
+ for (const item of existingItems) {
13
+ const parsedItem = parseKnowledgeFn(item);
14
+ if (parsedItem.fact === competingFact)
15
+ continue;
16
+ // Deep Hardening: Conflict detection
17
+ if (confidence > 0.8) {
18
+ let newMeta = { ...parsedItem.metadata };
19
+ let penalty = 0.2;
20
+ let newStatus = parsedItem.status;
21
+ if (parsedItem.confidence > 0.7) {
22
+ newStatus = 'disputed';
23
+ newMeta = {
24
+ ...newMeta,
25
+ status_reason: `Contradicted by: ${safeFact}`,
26
+ };
27
+ penalty = 0.1;
28
+ }
29
+ else {
30
+ newStatus = 'deprecated';
31
+ newMeta = {
32
+ ...newMeta,
33
+ status_reason: `Superseded by: ${safeFact}`,
34
+ };
35
+ penalty = 0.4;
36
+ }
37
+ const newConfidence = Math.max(0, parsedItem.confidence - penalty);
38
+ await trxOrDb
39
+ .updateTable(knowledgeTable)
40
+ .set({
41
+ confidence: newConfidence,
42
+ status: newStatus,
43
+ metadata: JSON.stringify(newMeta),
44
+ updated_at: new Date(),
45
+ })
46
+ .where('id', '=', parsedItem.id)
47
+ .execute();
48
+ }
49
+ }
50
+ }
51
+ }
@@ -0,0 +1,10 @@
1
+ import type { Kysely } from '../../../kysely.js';
2
+ export declare class FactDistiller {
3
+ /**
4
+ * typedDb helper (internal use)
5
+ */
6
+ private getTypedDb;
7
+ distillExact(trx: any, knowledgeTable: string, entity: string, fact: string, confidence: number, sourceSessionId?: string | number, tags?: string[], metadata?: Record<string, any>, source?: 'user' | 'assistant' | 'system'): Promise<any | null>;
8
+ createInitial(trx: any, knowledgeTable: string, entity: string, fact: string, confidence: number, sourceSessionId?: string | number, tags?: string[], metadata?: Record<string, any>, source?: 'user' | 'assistant' | 'system'): Promise<any>;
9
+ verify(db: Kysely<any>, knowledgeTable: string, id: number | string, reinforcement?: number): Promise<any | null>;
10
+ }