noormme 1.0.6 → 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.
- package/README.md +92 -63
- package/dist/cjs/agentic/ActionJournal.js +13 -9
- package/dist/cjs/agentic/CapabilityManager.d.ts +9 -4
- package/dist/cjs/agentic/CapabilityManager.js +113 -17
- package/dist/cjs/agentic/CognitiveRepository.js +19 -9
- package/dist/cjs/agentic/ContextBuffer.js +24 -12
- package/dist/cjs/agentic/Cortex.d.ts +8 -1
- package/dist/cjs/agentic/Cortex.js +30 -7
- package/dist/cjs/agentic/EpisodicMemory.js +7 -5
- package/dist/cjs/agentic/PersonaManager.js +16 -8
- package/dist/cjs/agentic/PolicyEnforcer.js +31 -12
- package/dist/cjs/agentic/ResourceMonitor.js +4 -4
- package/dist/cjs/agentic/SessionCompressor.js +22 -14
- package/dist/cjs/agentic/SessionManager.js +36 -18
- package/dist/cjs/agentic/VectorIndexer.js +22 -18
- package/dist/cjs/agentic/improvement/AblationEngine.js +22 -15
- package/dist/cjs/agentic/improvement/ActionRefiner.js +12 -10
- package/dist/cjs/agentic/improvement/ConflictResolver.js +5 -5
- package/dist/cjs/agentic/improvement/CortexJanitor.d.ts +1 -1
- package/dist/cjs/agentic/improvement/CortexJanitor.js +64 -27
- package/dist/cjs/agentic/improvement/CuriosityEngine.d.ts +2 -2
- package/dist/cjs/agentic/improvement/CuriosityEngine.js +68 -59
- package/dist/cjs/agentic/improvement/EvolutionRitual.d.ts +24 -0
- package/dist/cjs/agentic/improvement/EvolutionRitual.js +91 -0
- package/dist/cjs/agentic/improvement/EvolutionaryPilot.d.ts +5 -0
- package/dist/cjs/agentic/improvement/EvolutionaryPilot.js +80 -7
- package/dist/cjs/agentic/improvement/GoalArchitect.d.ts +2 -2
- package/dist/cjs/agentic/improvement/GoalArchitect.js +20 -18
- package/dist/cjs/agentic/improvement/GovernanceManager.d.ts +1 -1
- package/dist/cjs/agentic/improvement/GovernanceManager.js +85 -49
- package/dist/cjs/agentic/improvement/HiveLink.d.ts +9 -0
- package/dist/cjs/agentic/improvement/HiveLink.js +120 -26
- package/dist/cjs/agentic/improvement/KnowledgeDistiller.d.ts +2 -0
- package/dist/cjs/agentic/improvement/KnowledgeDistiller.js +101 -47
- package/dist/cjs/agentic/improvement/RecursiveReasoner.d.ts +7 -1
- package/dist/cjs/agentic/improvement/RecursiveReasoner.js +106 -22
- package/dist/cjs/agentic/improvement/ReflectionEngine.js +10 -8
- package/dist/cjs/agentic/improvement/RitualOrchestrator.js +34 -22
- package/dist/cjs/agentic/improvement/RuleEngine.js +22 -17
- package/dist/cjs/agentic/improvement/SelfEvolution.js +24 -18
- package/dist/cjs/agentic/improvement/SelfTestRegistry.js +18 -15
- package/dist/cjs/agentic/improvement/SkillSynthesizer.d.ts +48 -0
- package/dist/cjs/agentic/improvement/SkillSynthesizer.js +288 -0
- package/dist/cjs/agentic/improvement/SovereignMetrics.js +19 -17
- package/dist/cjs/agentic/improvement/StrategicPlanner.d.ts +1 -1
- package/dist/cjs/agentic/improvement/StrategicPlanner.js +129 -55
- package/dist/cjs/agentic/telemetry/CognitiveSynthesizer.js +26 -12
- package/dist/cjs/agentic/telemetry/EventHarvester.js +3 -2
- package/dist/cjs/agentic/telemetry/ResearchAlchemist.js +13 -4
- package/dist/cjs/cache/cache-manager.js +7 -4
- package/dist/cjs/cli/commands/analyze.js +5 -4
- package/dist/cjs/cli/commands/generate.js +81 -44
- package/dist/cjs/cli/commands/init.js +7 -3
- package/dist/cjs/cli/commands/inspect.js +139 -36
- package/dist/cjs/cli/commands/migrate.js +5 -4
- package/dist/cjs/cli/commands/optimize.js +4 -4
- package/dist/cjs/cli/commands/status.js +9 -7
- package/dist/cjs/cli/commands/watch.js +7 -6
- package/dist/cjs/cli/index.js +2 -2
- package/dist/cjs/cli/ui/spinner.d.ts +15 -0
- package/dist/cjs/cli/ui/spinner.js +76 -0
- package/dist/cjs/dialect/database-introspector.js +3 -1
- package/dist/cjs/dialect/postgresql/postgresql-driver.js +3 -1
- package/dist/cjs/dialect/postgresql/postgresql-features.js +18 -8
- package/dist/cjs/dialect/postgresql/postgresql-introspector.js +2 -2
- package/dist/cjs/dialect/sqlite/sqlite-auto-indexer.js +47 -33
- package/dist/cjs/dialect/sqlite/sqlite-auto-optimizer.js +8 -7
- package/dist/cjs/dialect/sqlite/sqlite-driver.js +2 -2
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +15 -12
- package/dist/cjs/edge-runtime/edge-config.js +21 -19
- package/dist/cjs/errors/NoormError.js +22 -20
- package/dist/cjs/helpers/agent-schema.js +3 -0
- package/dist/cjs/helpers/postgresql.js +7 -4
- package/dist/cjs/helpers/schema-evolution.js +31 -6
- package/dist/cjs/index.d.ts +18 -16
- package/dist/cjs/logging/logger.js +8 -4
- package/dist/cjs/migration/data_migrator.js +12 -11
- package/dist/cjs/migration/database_migration_manager.js +17 -13
- package/dist/cjs/migration/schema_differ.js +22 -14
- package/dist/cjs/migration/schema_introspector.js +8 -8
- package/dist/cjs/migration/type_mapper.js +68 -67
- package/dist/cjs/noormme.js +54 -37
- package/dist/cjs/performance/index.js +5 -5
- package/dist/cjs/performance/query-optimizer.js +26 -21
- package/dist/cjs/performance/services/cache-service.js +26 -16
- package/dist/cjs/performance/services/connection-factory.js +28 -23
- package/dist/cjs/performance/services/metrics-collector.js +41 -36
- package/dist/cjs/performance/utils/query-parser.js +15 -16
- package/dist/cjs/relationships/relationship-engine.js +10 -8
- package/dist/cjs/repository/repository-factory.js +97 -38
- package/dist/cjs/schema/core/coordinators/schema-discovery.coordinator.js +1 -3
- package/dist/cjs/schema/core/discovery/relationship-discovery.js +16 -16
- package/dist/cjs/schema/core/discovery/table-metadata-discovery.js +9 -9
- package/dist/cjs/schema/core/discovery/view-discovery.js +5 -4
- package/dist/cjs/schema/core/factories/discovery-factory.js +4 -4
- package/dist/cjs/schema/core/utils/name-generator.js +14 -5
- package/dist/cjs/schema/core/utils/type-mapper.js +24 -24
- package/dist/cjs/schema/dialects/postgresql/postgresql-discovery.coordinator.js +8 -7
- package/dist/cjs/schema/dialects/sqlite/discovery/sqlite-constraint-discovery.js +17 -15
- package/dist/cjs/schema/dialects/sqlite/discovery/sqlite-index-discovery.js +8 -8
- package/dist/cjs/schema/dialects/sqlite/introspection/sqlite-schema-introspector.js +6 -11
- package/dist/cjs/schema/dialects/sqlite/sqlite-discovery.coordinator.js +14 -13
- package/dist/cjs/schema/test/basic-schema-test.js +11 -9
- package/dist/cjs/schema/test/dialect-capabilities.test.js +6 -6
- package/dist/cjs/schema/test/discovery-factory.test.js +2 -2
- package/dist/cjs/schema/test/error-handling.test.js +8 -6
- package/dist/cjs/schema/test/integration.test.js +24 -18
- package/dist/cjs/schema/test/schema-discovery-coordinator.test.js +9 -9
- package/dist/cjs/schema/test/simple-schema-test.js +9 -9
- package/dist/cjs/schema/test/sqlite-discovery-coordinator.test.js +64 -48
- package/dist/cjs/schema/test/test-runner.js +3 -3
- package/dist/cjs/sqlite-migration/index.d.ts +2 -2
- package/dist/cjs/sqlite-migration/sqlite-migration-manager.js +21 -17
- package/dist/cjs/sqlite-migration/sqlite-migration-provider.js +38 -34
- package/dist/cjs/testing/test-utils.js +36 -34
- package/dist/cjs/types/index.d.ts +61 -4
- package/dist/cjs/types/index.js +6 -3
- package/dist/cjs/types/type-generator.js +46 -42
- package/dist/cjs/util/safe-sql-helpers.js +1 -1
- package/dist/cjs/util/security-validator.js +20 -9
- package/dist/cjs/utils/errorHelpers.js +20 -10
- package/dist/cjs/watch/schema-watcher.js +22 -23
- package/dist/esm/agentic/ActionJournal.js +13 -9
- package/dist/esm/agentic/CapabilityManager.d.ts +9 -4
- package/dist/esm/agentic/CapabilityManager.js +113 -17
- package/dist/esm/agentic/CognitiveRepository.js +19 -9
- package/dist/esm/agentic/ContextBuffer.js +24 -12
- package/dist/esm/agentic/Cortex.d.ts +8 -1
- package/dist/esm/agentic/Cortex.js +30 -7
- package/dist/esm/agentic/EpisodicMemory.js +7 -5
- package/dist/esm/agentic/PersonaManager.js +16 -8
- package/dist/esm/agentic/PolicyEnforcer.js +31 -12
- package/dist/esm/agentic/ResourceMonitor.js +4 -4
- package/dist/esm/agentic/SessionCompressor.js +22 -14
- package/dist/esm/agentic/SessionManager.js +36 -18
- package/dist/esm/agentic/VectorIndexer.js +22 -18
- package/dist/esm/agentic/improvement/AblationEngine.js +22 -15
- package/dist/esm/agentic/improvement/ActionRefiner.js +12 -10
- package/dist/esm/agentic/improvement/ConflictResolver.js +5 -5
- package/dist/esm/agentic/improvement/CortexJanitor.d.ts +1 -1
- package/dist/esm/agentic/improvement/CortexJanitor.js +64 -27
- package/dist/esm/agentic/improvement/CuriosityEngine.d.ts +2 -2
- package/dist/esm/agentic/improvement/CuriosityEngine.js +68 -59
- package/dist/esm/agentic/improvement/EvolutionRitual.d.ts +24 -0
- package/dist/esm/agentic/improvement/EvolutionRitual.js +88 -0
- package/dist/esm/agentic/improvement/EvolutionaryPilot.d.ts +5 -0
- package/dist/esm/agentic/improvement/EvolutionaryPilot.js +80 -7
- package/dist/esm/agentic/improvement/GoalArchitect.d.ts +2 -2
- package/dist/esm/agentic/improvement/GoalArchitect.js +20 -18
- package/dist/esm/agentic/improvement/GovernanceManager.d.ts +1 -1
- package/dist/esm/agentic/improvement/GovernanceManager.js +85 -49
- package/dist/esm/agentic/improvement/HiveLink.d.ts +9 -0
- package/dist/esm/agentic/improvement/HiveLink.js +120 -26
- package/dist/esm/agentic/improvement/KnowledgeDistiller.d.ts +2 -0
- package/dist/esm/agentic/improvement/KnowledgeDistiller.js +101 -47
- package/dist/esm/agentic/improvement/RecursiveReasoner.d.ts +7 -1
- package/dist/esm/agentic/improvement/RecursiveReasoner.js +106 -22
- package/dist/esm/agentic/improvement/ReflectionEngine.js +10 -8
- package/dist/esm/agentic/improvement/RitualOrchestrator.js +34 -22
- package/dist/esm/agentic/improvement/RuleEngine.js +22 -17
- package/dist/esm/agentic/improvement/SelfEvolution.js +24 -18
- package/dist/esm/agentic/improvement/SelfTestRegistry.js +18 -15
- package/dist/esm/agentic/improvement/SkillSynthesizer.d.ts +48 -0
- package/dist/esm/agentic/improvement/SkillSynthesizer.js +285 -0
- package/dist/esm/agentic/improvement/SovereignMetrics.js +19 -17
- package/dist/esm/agentic/improvement/StrategicPlanner.d.ts +1 -1
- package/dist/esm/agentic/improvement/StrategicPlanner.js +129 -55
- package/dist/esm/agentic/telemetry/CognitiveSynthesizer.js +26 -12
- package/dist/esm/agentic/telemetry/EventHarvester.js +3 -2
- package/dist/esm/agentic/telemetry/ResearchAlchemist.js +13 -4
- package/dist/esm/cache/cache-manager.js +7 -4
- package/dist/esm/cli/commands/analyze.js +5 -4
- package/dist/esm/cli/commands/generate.js +82 -45
- package/dist/esm/cli/commands/init.js +8 -4
- package/dist/esm/cli/commands/inspect.js +140 -37
- package/dist/esm/cli/commands/migrate.js +5 -4
- package/dist/esm/cli/commands/optimize.js +4 -4
- package/dist/esm/cli/commands/status.js +9 -7
- package/dist/esm/cli/commands/watch.js +7 -6
- package/dist/esm/cli/index.js +2 -2
- package/dist/esm/cli/ui/spinner.d.ts +15 -0
- package/dist/esm/cli/ui/spinner.js +70 -0
- package/dist/esm/dialect/database-introspector.js +3 -1
- package/dist/esm/dialect/postgresql/postgresql-driver.js +3 -1
- package/dist/esm/dialect/postgresql/postgresql-features.js +18 -8
- package/dist/esm/dialect/postgresql/postgresql-introspector.js +2 -2
- package/dist/esm/dialect/sqlite/sqlite-auto-indexer.js +47 -33
- package/dist/esm/dialect/sqlite/sqlite-auto-optimizer.js +8 -7
- package/dist/esm/dialect/sqlite/sqlite-driver.js +2 -2
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +15 -12
- package/dist/esm/dynamic/dynamic.js +1 -1
- package/dist/esm/edge-runtime/edge-config.js +21 -19
- package/dist/esm/errors/NoormError.js +22 -20
- package/dist/esm/helpers/agent-schema.js +3 -0
- package/dist/esm/helpers/postgresql.js +7 -4
- package/dist/esm/helpers/schema-evolution.js +31 -6
- package/dist/esm/index.d.ts +18 -16
- package/dist/esm/index.js +2 -2
- package/dist/esm/logging/logger.js +8 -4
- package/dist/esm/migration/data_migrator.js +12 -11
- package/dist/esm/migration/database_migration_manager.js +18 -14
- package/dist/esm/migration/schema_differ.js +22 -14
- package/dist/esm/migration/schema_introspector.js +8 -8
- package/dist/esm/migration/type_mapper.js +68 -67
- package/dist/esm/noormme.js +54 -37
- package/dist/esm/performance/index.js +5 -5
- package/dist/esm/performance/query-optimizer.js +26 -21
- package/dist/esm/performance/services/cache-service.js +26 -16
- package/dist/esm/performance/services/connection-factory.js +28 -23
- package/dist/esm/performance/services/metrics-collector.js +41 -36
- package/dist/esm/performance/utils/query-parser.js +15 -16
- package/dist/esm/raw-builder/sql.js +1 -1
- package/dist/esm/relationships/relationship-engine.js +10 -8
- package/dist/esm/repository/repository-factory.js +98 -39
- package/dist/esm/schema/builders/alter-table-add-index-builder.js +1 -1
- package/dist/esm/schema/builders/create-index-builder.js +2 -2
- package/dist/esm/schema/core/coordinators/schema-discovery.coordinator.js +1 -3
- package/dist/esm/schema/core/discovery/relationship-discovery.js +16 -16
- package/dist/esm/schema/core/discovery/table-metadata-discovery.js +9 -9
- package/dist/esm/schema/core/discovery/view-discovery.js +5 -4
- package/dist/esm/schema/core/factories/discovery-factory.js +4 -4
- package/dist/esm/schema/core/utils/name-generator.js +14 -5
- package/dist/esm/schema/core/utils/type-mapper.js +24 -24
- package/dist/esm/schema/dialects/postgresql/postgresql-discovery.coordinator.js +8 -7
- package/dist/esm/schema/dialects/sqlite/discovery/sqlite-constraint-discovery.js +17 -15
- package/dist/esm/schema/dialects/sqlite/discovery/sqlite-index-discovery.js +8 -8
- package/dist/esm/schema/dialects/sqlite/introspection/sqlite-schema-introspector.js +6 -11
- package/dist/esm/schema/dialects/sqlite/sqlite-discovery.coordinator.js +14 -13
- package/dist/esm/schema/test/basic-schema-test.js +11 -9
- package/dist/esm/schema/test/dialect-capabilities.test.js +6 -6
- package/dist/esm/schema/test/discovery-factory.test.js +2 -2
- package/dist/esm/schema/test/error-handling.test.js +8 -6
- package/dist/esm/schema/test/integration.test.js +24 -18
- package/dist/esm/schema/test/schema-discovery-coordinator.test.js +9 -9
- package/dist/esm/schema/test/simple-schema-test.js +9 -9
- package/dist/esm/schema/test/sqlite-discovery-coordinator.test.js +64 -48
- package/dist/esm/schema/test/test-runner.js +3 -3
- package/dist/esm/sqlite-migration/index.d.ts +2 -2
- package/dist/esm/sqlite-migration/sqlite-migration-manager.js +21 -17
- package/dist/esm/sqlite-migration/sqlite-migration-provider.js +38 -34
- package/dist/esm/testing/test-utils.js +36 -34
- package/dist/esm/types/index.d.ts +61 -4
- package/dist/esm/types/index.js +6 -3
- package/dist/esm/types/type-generator.js +46 -42
- package/dist/esm/util/safe-sql-helpers.js +1 -1
- package/dist/esm/util/security-validator.js +20 -9
- package/dist/esm/utils/errorHelpers.js +21 -11
- package/dist/esm/watch/schema-watcher.js +22 -23
- package/package.json +40 -44
|
@@ -24,62 +24,83 @@ export class GovernanceManager {
|
|
|
24
24
|
async performAudit() {
|
|
25
25
|
const issues = [];
|
|
26
26
|
// Fetch active policies
|
|
27
|
-
const policies = await this.db
|
|
27
|
+
const policies = (await this.db
|
|
28
28
|
.selectFrom(this.policiesTable)
|
|
29
29
|
.selectAll()
|
|
30
30
|
.where('is_enabled', '=', true)
|
|
31
|
-
.execute();
|
|
31
|
+
.execute());
|
|
32
32
|
const getPolicyValue = (name, type, fallback) => {
|
|
33
|
-
const p = policies.find(p => p.name === name || p.type === type);
|
|
33
|
+
const p = policies.find((p) => p.name === name || p.type === type);
|
|
34
34
|
if (!p)
|
|
35
35
|
return fallback;
|
|
36
|
-
const def = typeof p.definition === 'string'
|
|
36
|
+
const def = typeof p.definition === 'string'
|
|
37
|
+
? JSON.parse(p.definition)
|
|
38
|
+
: p.definition;
|
|
37
39
|
return def.threshold ?? fallback;
|
|
38
40
|
};
|
|
39
|
-
// 1. Check for cost spikes in
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
41
|
+
// 1. Budgetary Governance: Check for cost spikes in various windows
|
|
42
|
+
const hourlyLimit = getPolicyValue('hourly_budget', 'budget', 1.0);
|
|
43
|
+
const dailyLimit = getPolicyValue('daily_budget', 'budget', 10.0);
|
|
44
|
+
const getCostInWindow = async (ms) => {
|
|
45
|
+
const result = await this.db
|
|
46
|
+
.selectFrom(this.metricsTable)
|
|
47
|
+
.select((eb) => eb.fn.sum('metric_value').as('total'))
|
|
48
|
+
.where('metric_name', '=', 'total_cost')
|
|
49
|
+
.where('created_at', '>', new Date(Date.now() - ms))
|
|
50
|
+
.executeTakeFirst();
|
|
51
|
+
return Number(result?.total || 0);
|
|
52
|
+
};
|
|
53
|
+
const hCost = await getCostInWindow(3600000);
|
|
54
|
+
if (hCost > hourlyLimit) {
|
|
55
|
+
issues.push(`Budget Violations: Hourly cost ($${hCost.toFixed(2)}) exceeded policy ($${hourlyLimit.toFixed(2)})`);
|
|
56
|
+
}
|
|
57
|
+
const dCost = await getCostInWindow(86400000);
|
|
58
|
+
if (dCost > dailyLimit) {
|
|
59
|
+
issues.push(`Budget Violations: Daily cumulative cost ($${dCost.toFixed(2)}) exceeded safety ceiling ($${dailyLimit.toFixed(2)})`);
|
|
50
60
|
}
|
|
51
|
-
// 2.
|
|
52
|
-
const
|
|
53
|
-
|
|
61
|
+
// 2. Performance Governance: Success Rates & Success Stability
|
|
62
|
+
const minSuccess = getPolicyValue('min_success_rate', 'safety', 0.6);
|
|
63
|
+
// Statistical Success Rate (last 100 events)
|
|
64
|
+
const recentSuccess = await this.db
|
|
54
65
|
.selectFrom(this.metricsTable)
|
|
55
66
|
.select((eb) => eb.fn.avg('metric_value').as('avg'))
|
|
56
67
|
.where('metric_name', '=', 'success_rate')
|
|
68
|
+
.orderBy('created_at', 'desc')
|
|
69
|
+
.limit(100)
|
|
57
70
|
.executeTakeFirst();
|
|
58
|
-
const success = Number(
|
|
59
|
-
if (success <
|
|
60
|
-
issues.push(`
|
|
71
|
+
const success = Number(recentSuccess?.avg || 1);
|
|
72
|
+
if (success < minSuccess) {
|
|
73
|
+
issues.push(`Performance Degradation: Rolling success rate (${Math.round(success * 100)}%) is below policy requirement (${minSuccess * 100}%)`);
|
|
74
|
+
}
|
|
75
|
+
// 3. Infrastructure Integrity: Reliability of Verified Skills
|
|
76
|
+
// Detect if any "verified" skills are participating in "failure" loops
|
|
77
|
+
const reliabiltyLimit = getPolicyValue('reliability_floor', 'integrity', 0.7);
|
|
78
|
+
const failingVerified = await this.db
|
|
79
|
+
.selectFrom(this.config.capabilitiesTable || 'agent_capabilities')
|
|
80
|
+
.select(['name', 'reliability'])
|
|
81
|
+
.where('status', '=', 'verified')
|
|
82
|
+
.where('reliability', '<', reliabiltyLimit)
|
|
83
|
+
.execute();
|
|
84
|
+
for (const cap of failingVerified) {
|
|
85
|
+
issues.push(`Integrity Failure: Verified skill '${cap.name}' reliability (${cap.reliability.toFixed(2)}) dropped below floor (${reliabiltyLimit})`);
|
|
61
86
|
}
|
|
62
87
|
if (issues.length > 0) {
|
|
63
|
-
console.warn(`[GovernanceManager]
|
|
64
|
-
//
|
|
88
|
+
console.warn(`[GovernanceManager] AUDIT FAILED [${new Date().toISOString()}]: ${issues.length} compliance issues detected.`);
|
|
89
|
+
// Phase 1: Emergency Rollbacks
|
|
65
90
|
const activePersona = await this.getActivePersona();
|
|
66
|
-
if (activePersona) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
console.error(`[GovernanceManager] ${reason} detected. Triggering emergency rollback for persona ${activePersona.id}`);
|
|
71
|
-
await this.cortex.strategy.rollbackPersona(activePersona.id);
|
|
72
|
-
issues.push(`Self-Healed: Triggered emergency rollback for persona ${activePersona.id} (${reason})`);
|
|
73
|
-
}
|
|
91
|
+
if (activePersona && (success < 0.4 || hCost > hourlyLimit * 1.5)) {
|
|
92
|
+
console.error(`[GovernanceManager] CRITICAL THRESHOLD BREACH. Initiating emergency containment for persona ${activePersona.id}`);
|
|
93
|
+
await this.cortex.strategy.rollbackPersona(activePersona.id);
|
|
94
|
+
issues.push(`Containment: Emergency rollback triggered for persona ${activePersona.id}`);
|
|
74
95
|
}
|
|
75
|
-
//
|
|
76
|
-
await this.cortex.reflections.reflect(null, 'failure', '
|
|
77
|
-
//
|
|
96
|
+
// Phase 2: Systemic Reflections
|
|
97
|
+
await this.cortex.reflections.reflect(null, 'failure', 'Governance Compliance Audit', issues);
|
|
98
|
+
// Phase 3: Remediation Rituals
|
|
78
99
|
await this.triggerRemediation(issues);
|
|
79
100
|
}
|
|
80
101
|
return {
|
|
81
102
|
healthy: issues.length === 0,
|
|
82
|
-
issues
|
|
103
|
+
issues,
|
|
83
104
|
};
|
|
84
105
|
}
|
|
85
106
|
/**
|
|
@@ -89,28 +110,39 @@ export class GovernanceManager {
|
|
|
89
110
|
const active = await this.db
|
|
90
111
|
.selectFrom(this.personasTable)
|
|
91
112
|
.selectAll()
|
|
92
|
-
.where('
|
|
113
|
+
.where('status', '=', 'active')
|
|
93
114
|
.executeTakeFirst();
|
|
94
115
|
if (!active)
|
|
95
116
|
return null;
|
|
96
117
|
return {
|
|
97
118
|
...active,
|
|
98
|
-
metadata: typeof active.metadata === 'string'
|
|
119
|
+
metadata: typeof active.metadata === 'string'
|
|
120
|
+
? JSON.parse(active.metadata)
|
|
121
|
+
: active.metadata || {},
|
|
99
122
|
};
|
|
100
123
|
}
|
|
101
124
|
/**
|
|
102
|
-
* Trigger autonomous remediation steps
|
|
125
|
+
* Trigger autonomous remediation steps based on specific failure modes
|
|
103
126
|
*/
|
|
104
127
|
async triggerRemediation(issues) {
|
|
105
|
-
console.log(`[GovernanceManager] Triggering automated remediation for ${issues.length} issues...`);
|
|
106
128
|
for (const issue of issues) {
|
|
107
|
-
if (issue.includes('
|
|
108
|
-
|
|
109
|
-
|
|
129
|
+
if (issue.includes('Budget Violations')) {
|
|
130
|
+
await this.cortex.rituals.scheduleRitual('Budget Remediation', 'compression', 'hourly', `Automated response to: ${issue}`, { priority: 'critical', enforce_limits: true });
|
|
131
|
+
}
|
|
132
|
+
if (issue.includes('Performance Degradation')) {
|
|
133
|
+
await this.cortex.rituals.scheduleRitual('Reliability Sweep', 'pruning', 'daily', `Sanitizing high-noise memories due to: ${issue}`, { priority: 'medium', target: 'longtail' });
|
|
110
134
|
}
|
|
111
|
-
if (issue.includes('
|
|
112
|
-
//
|
|
113
|
-
|
|
135
|
+
if (issue.includes('Integrity Failure')) {
|
|
136
|
+
// Force demotion of the specific skill back to sandbox or experimental
|
|
137
|
+
const skillName = issue.match(/'([^']+)'/)?.[1];
|
|
138
|
+
if (skillName) {
|
|
139
|
+
console.log(`[GovernanceManager] Demoting tainted skill out of verified pool: ${skillName}`);
|
|
140
|
+
await this.db
|
|
141
|
+
.updateTable(this.config.capabilitiesTable || 'agent_capabilities')
|
|
142
|
+
.set({ status: 'experimental', updated_at: new Date() })
|
|
143
|
+
.where('name', '=', skillName)
|
|
144
|
+
.execute();
|
|
145
|
+
}
|
|
114
146
|
}
|
|
115
147
|
}
|
|
116
148
|
}
|
|
@@ -135,11 +167,15 @@ export class GovernanceManager {
|
|
|
135
167
|
const slowTables = new Set();
|
|
136
168
|
for (const q of recentSlowQueries) {
|
|
137
169
|
try {
|
|
138
|
-
const meta = typeof q.metadata === 'string'
|
|
170
|
+
const meta = typeof q.metadata === 'string'
|
|
171
|
+
? JSON.parse(q.metadata)
|
|
172
|
+
: q.metadata || {};
|
|
139
173
|
if (meta.table)
|
|
140
174
|
slowTables.add(meta.table);
|
|
141
175
|
}
|
|
142
|
-
catch (e) {
|
|
176
|
+
catch (e) {
|
|
177
|
+
/* ignore parse errors */
|
|
178
|
+
}
|
|
143
179
|
}
|
|
144
180
|
for (const table of slowTables) {
|
|
145
181
|
repairs.push(`Table '${table}' is experiencing periodic latency spikes. Suggesting 'CREATE INDEX' for common filters.`);
|
|
@@ -152,11 +188,11 @@ export class GovernanceManager {
|
|
|
152
188
|
// 3. Check for cold storage candidates
|
|
153
189
|
const sessionsTable = this.config.sessionsTable || 'agent_sessions';
|
|
154
190
|
const oldThreshold = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000); // 30 days
|
|
155
|
-
const oldSessions = await this.db
|
|
191
|
+
const oldSessions = (await this.db
|
|
156
192
|
.selectFrom(sessionsTable)
|
|
157
193
|
.select((eb) => eb.fn.count('id').as('count'))
|
|
158
194
|
.where('created_at', '<', oldThreshold)
|
|
159
|
-
.executeTakeFirst();
|
|
195
|
+
.executeTakeFirst());
|
|
160
196
|
if (Number(oldSessions?.count || 0) > 100) {
|
|
161
197
|
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.`);
|
|
162
198
|
}
|
|
@@ -22,4 +22,13 @@ export declare class HiveLink {
|
|
|
22
22
|
* Increases confidence of all items with this tag, representing "domain mastery".
|
|
23
23
|
*/
|
|
24
24
|
syncDomain(domainTag: string, boostFactor?: number): Promise<number>;
|
|
25
|
+
/**
|
|
26
|
+
* Propagate high-performing capabilities globally and block known-bad ones.
|
|
27
|
+
* High-Throughput Refactor: Batch updates and optimized set-based checks.
|
|
28
|
+
*/
|
|
29
|
+
broadcastSkills(): Promise<number>;
|
|
30
|
+
/**
|
|
31
|
+
* Simple semver-style version comparison.
|
|
32
|
+
*/
|
|
33
|
+
private compareVersions;
|
|
25
34
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/// <reference types="./HiveLink.d.ts" />
|
|
2
|
+
import { sql } from '../../raw-builder/sql.js';
|
|
2
3
|
/**
|
|
3
4
|
* HiveLink facilitates "Collective Intelligence" by synchronizing
|
|
4
5
|
* knowledge and lessons learned across different agent personas.
|
|
@@ -24,12 +25,12 @@ export class HiveLink {
|
|
|
24
25
|
async broadcastKnowledge(minConfidence = 0.9) {
|
|
25
26
|
console.log(`[HiveLink] Broadcasting knowledge with confidence >= ${minConfidence}`);
|
|
26
27
|
// Find high-confidence items that are "local" (have a source_session_id)
|
|
27
|
-
const items = await this.typedDb
|
|
28
|
+
const items = (await this.typedDb
|
|
28
29
|
.selectFrom(this.knowledgeTable)
|
|
29
30
|
.selectAll()
|
|
30
31
|
.where('confidence', '>=', minConfidence)
|
|
31
32
|
.where('source_session_id', 'is not', null) // Only local items
|
|
32
|
-
.execute();
|
|
33
|
+
.execute());
|
|
33
34
|
let promotedCount = 0;
|
|
34
35
|
for (const item of items) {
|
|
35
36
|
// Check if a global version already exists
|
|
@@ -48,7 +49,7 @@ export class HiveLink {
|
|
|
48
49
|
.updateTable(this.knowledgeTable)
|
|
49
50
|
.set({
|
|
50
51
|
confidence: newConfidence,
|
|
51
|
-
updated_at: new Date()
|
|
52
|
+
updated_at: new Date(),
|
|
52
53
|
})
|
|
53
54
|
.where('id', '=', existingGlobal.id)
|
|
54
55
|
.execute();
|
|
@@ -69,10 +70,10 @@ export class HiveLink {
|
|
|
69
70
|
metadata: JSON.stringify({
|
|
70
71
|
...item.metadata,
|
|
71
72
|
promoted_from: item.id,
|
|
72
|
-
promoted_at: new Date()
|
|
73
|
+
promoted_at: new Date(),
|
|
73
74
|
}),
|
|
74
75
|
created_at: new Date(),
|
|
75
|
-
updated_at: new Date()
|
|
76
|
+
updated_at: new Date(),
|
|
76
77
|
})
|
|
77
78
|
.execute();
|
|
78
79
|
promotedCount++;
|
|
@@ -85,29 +86,122 @@ export class HiveLink {
|
|
|
85
86
|
* Increases confidence of all items with this tag, representing "domain mastery".
|
|
86
87
|
*/
|
|
87
88
|
async syncDomain(domainTag, boostFactor = 0.05) {
|
|
88
|
-
console.log(`[HiveLink] Syncing/Boosting domain '${domainTag}'`);
|
|
89
|
-
//
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
.
|
|
93
|
-
.
|
|
89
|
+
console.log(`[HiveLink] Syncing/Boosting domain '${domainTag}' (Set-Based)`);
|
|
90
|
+
// Use a single SQL update for high throughput
|
|
91
|
+
const result = await this.db
|
|
92
|
+
.updateTable(this.knowledgeTable)
|
|
93
|
+
.set({
|
|
94
|
+
confidence: sql `MIN(1.0, confidence + ${boostFactor})`,
|
|
95
|
+
updated_at: new Date(),
|
|
96
|
+
})
|
|
94
97
|
.where('tags', 'like', `%"${domainTag}"%`)
|
|
98
|
+
.where('confidence', '<', 1.0)
|
|
95
99
|
.execute();
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
100
|
+
// Kysely update .execute() returns an array of results or similar depending on adapter
|
|
101
|
+
// For simple update, we might just return the count if supported or 1
|
|
102
|
+
return Number(result[0]?.numUpdatedRows ?? 1);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Propagate high-performing capabilities globally and block known-bad ones.
|
|
106
|
+
* High-Throughput Refactor: Batch updates and optimized set-based checks.
|
|
107
|
+
*/
|
|
108
|
+
async broadcastSkills() {
|
|
109
|
+
if (!this.config.evolution?.enableHiveLink &&
|
|
110
|
+
this.config.evolution !== undefined) {
|
|
111
|
+
console.log('[HiveLink] Skill broadcasting disabled by config.');
|
|
112
|
+
return 0;
|
|
113
|
+
}
|
|
114
|
+
console.log(`[HiveLink] Broadcasting emergent skills across the Hive (Performance-Aware)...`);
|
|
115
|
+
let broadcastCount = 0;
|
|
116
|
+
const capTable = this.config.capabilitiesTable || 'agent_capabilities';
|
|
117
|
+
await this.db.transaction().execute(async (trx) => {
|
|
118
|
+
// 1. Resolve Verified Skills with "Survival of the Fittest" logic
|
|
119
|
+
const verifiedSkills = await this.cortex.capabilities.getCapabilities('verified');
|
|
120
|
+
for (const skill of verifiedSkills) {
|
|
121
|
+
const meta = typeof skill.metadata === 'string'
|
|
122
|
+
? JSON.parse(skill.metadata)
|
|
123
|
+
: skill.metadata || {};
|
|
124
|
+
if (meta.broadcasted)
|
|
125
|
+
continue;
|
|
126
|
+
// Check for competing global versions
|
|
127
|
+
const baseName = meta.mutatedFrom || skill.name;
|
|
128
|
+
const competitor = await trx
|
|
129
|
+
.selectFrom(capTable)
|
|
130
|
+
.selectAll()
|
|
131
|
+
.where('name', 'like', `%${baseName}%`)
|
|
132
|
+
.where('status', '=', 'verified')
|
|
133
|
+
.where('id', '!=', skill.id)
|
|
134
|
+
.executeTakeFirst();
|
|
135
|
+
let shouldBroadcast = true;
|
|
136
|
+
if (competitor) {
|
|
137
|
+
const comp = competitor;
|
|
138
|
+
const compRel = comp.reliability || 0;
|
|
139
|
+
// Performance-Based Conflict Resolution: Only broadcast if reliability is strictly better
|
|
140
|
+
// or if it's a direct version upgrade with equal/better reliability
|
|
141
|
+
const isNewer = this.compareVersions(skill.version, comp.version) > 0;
|
|
142
|
+
if (compRel > skill.reliability) {
|
|
143
|
+
shouldBroadcast = false;
|
|
144
|
+
}
|
|
145
|
+
else if (compRel === skill.reliability && !isNewer) {
|
|
146
|
+
shouldBroadcast = false;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (shouldBroadcast) {
|
|
150
|
+
await trx
|
|
151
|
+
.updateTable(capTable)
|
|
152
|
+
.set({
|
|
153
|
+
metadata: JSON.stringify({
|
|
154
|
+
...meta,
|
|
155
|
+
broadcasted: true,
|
|
156
|
+
hive_verified: true,
|
|
157
|
+
broadcasted_at: new Date(),
|
|
158
|
+
conflict_resolved: !!competitor,
|
|
159
|
+
}),
|
|
160
|
+
})
|
|
161
|
+
.where('id', '=', skill.id)
|
|
162
|
+
.execute();
|
|
163
|
+
broadcastCount++;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// 2. Broadcast Blacklisted Skills (Immediate Immune Propagations)
|
|
167
|
+
const blacklisted = await this.cortex.capabilities.getCapabilities('blacklisted');
|
|
168
|
+
for (const skill of blacklisted) {
|
|
169
|
+
const meta = typeof skill.metadata === 'string'
|
|
170
|
+
? JSON.parse(skill.metadata)
|
|
171
|
+
: skill.metadata || {};
|
|
172
|
+
if (!meta.broadcasted) {
|
|
173
|
+
await trx
|
|
174
|
+
.updateTable(capTable)
|
|
175
|
+
.set({
|
|
176
|
+
metadata: JSON.stringify({
|
|
177
|
+
...meta,
|
|
178
|
+
broadcasted: true,
|
|
179
|
+
hive_blacklisted: true,
|
|
180
|
+
blocked_at: new Date(),
|
|
181
|
+
}),
|
|
182
|
+
})
|
|
183
|
+
.where('id', '=', skill.id)
|
|
184
|
+
.execute();
|
|
185
|
+
broadcastCount++;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
return broadcastCount;
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Simple semver-style version comparison.
|
|
193
|
+
*/
|
|
194
|
+
compareVersions(v1, v2) {
|
|
195
|
+
const p1 = v1.split('.').map(Number);
|
|
196
|
+
const p2 = v2.split('.').map(Number);
|
|
197
|
+
for (let i = 0; i < Math.max(p1.length, p2.length); i++) {
|
|
198
|
+
const num1 = p1[i] || 0;
|
|
199
|
+
const num2 = p2[i] || 0;
|
|
200
|
+
if (num1 > num2)
|
|
201
|
+
return 1;
|
|
202
|
+
if (num2 > num1)
|
|
203
|
+
return -1;
|
|
110
204
|
}
|
|
111
|
-
return
|
|
205
|
+
return 0;
|
|
112
206
|
}
|
|
113
207
|
}
|
|
@@ -34,6 +34,7 @@ export declare class KnowledgeDistiller {
|
|
|
34
34
|
private config;
|
|
35
35
|
private knowledgeTable;
|
|
36
36
|
private linksTable;
|
|
37
|
+
private bloomFilter;
|
|
37
38
|
constructor(db: Kysely<any>, // accepting any Kysely but casting internally for our specific tables
|
|
38
39
|
config?: AgenticConfig);
|
|
39
40
|
/**
|
|
@@ -100,5 +101,6 @@ export declare class KnowledgeDistiller {
|
|
|
100
101
|
*/
|
|
101
102
|
consolidateKnowledge(): Promise<number>;
|
|
102
103
|
private mergeItems;
|
|
104
|
+
private bloomHash;
|
|
103
105
|
private parseKnowledge;
|
|
104
106
|
}
|