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
|
@@ -26,62 +26,83 @@ class GovernanceManager {
|
|
|
26
26
|
async performAudit() {
|
|
27
27
|
const issues = [];
|
|
28
28
|
// Fetch active policies
|
|
29
|
-
const policies = await this.db
|
|
29
|
+
const policies = (await this.db
|
|
30
30
|
.selectFrom(this.policiesTable)
|
|
31
31
|
.selectAll()
|
|
32
32
|
.where('is_enabled', '=', true)
|
|
33
|
-
.execute();
|
|
33
|
+
.execute());
|
|
34
34
|
const getPolicyValue = (name, type, fallback) => {
|
|
35
|
-
const p = policies.find(p => p.name === name || p.type === type);
|
|
35
|
+
const p = policies.find((p) => p.name === name || p.type === type);
|
|
36
36
|
if (!p)
|
|
37
37
|
return fallback;
|
|
38
|
-
const def = typeof p.definition === 'string'
|
|
38
|
+
const def = typeof p.definition === 'string'
|
|
39
|
+
? JSON.parse(p.definition)
|
|
40
|
+
: p.definition;
|
|
39
41
|
return def.threshold ?? fallback;
|
|
40
42
|
};
|
|
41
|
-
// 1. Check for cost spikes in
|
|
42
|
-
const
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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)})`);
|
|
52
62
|
}
|
|
53
|
-
// 2.
|
|
54
|
-
const
|
|
55
|
-
|
|
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
|
|
56
67
|
.selectFrom(this.metricsTable)
|
|
57
68
|
.select((eb) => eb.fn.avg('metric_value').as('avg'))
|
|
58
69
|
.where('metric_name', '=', 'success_rate')
|
|
70
|
+
.orderBy('created_at', 'desc')
|
|
71
|
+
.limit(100)
|
|
59
72
|
.executeTakeFirst();
|
|
60
|
-
const success = Number(
|
|
61
|
-
if (success <
|
|
62
|
-
issues.push(`
|
|
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})`);
|
|
63
88
|
}
|
|
64
89
|
if (issues.length > 0) {
|
|
65
|
-
console.warn(`[GovernanceManager]
|
|
66
|
-
//
|
|
90
|
+
console.warn(`[GovernanceManager] AUDIT FAILED [${new Date().toISOString()}]: ${issues.length} compliance issues detected.`);
|
|
91
|
+
// Phase 1: Emergency Rollbacks
|
|
67
92
|
const activePersona = await this.getActivePersona();
|
|
68
|
-
if (activePersona) {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
console.error(`[GovernanceManager] ${reason} detected. Triggering emergency rollback for persona ${activePersona.id}`);
|
|
73
|
-
await this.cortex.strategy.rollbackPersona(activePersona.id);
|
|
74
|
-
issues.push(`Self-Healed: Triggered emergency rollback for persona ${activePersona.id} (${reason})`);
|
|
75
|
-
}
|
|
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}`);
|
|
76
97
|
}
|
|
77
|
-
//
|
|
78
|
-
await this.cortex.reflections.reflect(null, 'failure', '
|
|
79
|
-
//
|
|
98
|
+
// Phase 2: Systemic Reflections
|
|
99
|
+
await this.cortex.reflections.reflect(null, 'failure', 'Governance Compliance Audit', issues);
|
|
100
|
+
// Phase 3: Remediation Rituals
|
|
80
101
|
await this.triggerRemediation(issues);
|
|
81
102
|
}
|
|
82
103
|
return {
|
|
83
104
|
healthy: issues.length === 0,
|
|
84
|
-
issues
|
|
105
|
+
issues,
|
|
85
106
|
};
|
|
86
107
|
}
|
|
87
108
|
/**
|
|
@@ -91,28 +112,39 @@ class GovernanceManager {
|
|
|
91
112
|
const active = await this.db
|
|
92
113
|
.selectFrom(this.personasTable)
|
|
93
114
|
.selectAll()
|
|
94
|
-
.where('
|
|
115
|
+
.where('status', '=', 'active')
|
|
95
116
|
.executeTakeFirst();
|
|
96
117
|
if (!active)
|
|
97
118
|
return null;
|
|
98
119
|
return {
|
|
99
120
|
...active,
|
|
100
|
-
metadata: typeof active.metadata === 'string'
|
|
121
|
+
metadata: typeof active.metadata === 'string'
|
|
122
|
+
? JSON.parse(active.metadata)
|
|
123
|
+
: active.metadata || {},
|
|
101
124
|
};
|
|
102
125
|
}
|
|
103
126
|
/**
|
|
104
|
-
* Trigger autonomous remediation steps
|
|
127
|
+
* Trigger autonomous remediation steps based on specific failure modes
|
|
105
128
|
*/
|
|
106
129
|
async triggerRemediation(issues) {
|
|
107
|
-
console.log(`[GovernanceManager] Triggering automated remediation for ${issues.length} issues...`);
|
|
108
130
|
for (const issue of issues) {
|
|
109
|
-
if (issue.includes('
|
|
110
|
-
|
|
111
|
-
|
|
131
|
+
if (issue.includes('Budget Violations')) {
|
|
132
|
+
await this.cortex.rituals.scheduleRitual('Budget Remediation', 'compression', 'hourly', `Automated response to: ${issue}`, { priority: 'critical', enforce_limits: true });
|
|
133
|
+
}
|
|
134
|
+
if (issue.includes('Performance Degradation')) {
|
|
135
|
+
await this.cortex.rituals.scheduleRitual('Reliability Sweep', 'pruning', 'daily', `Sanitizing high-noise memories due to: ${issue}`, { priority: 'medium', target: 'longtail' });
|
|
112
136
|
}
|
|
113
|
-
if (issue.includes('
|
|
114
|
-
//
|
|
115
|
-
|
|
137
|
+
if (issue.includes('Integrity Failure')) {
|
|
138
|
+
// Force demotion of the specific skill back to sandbox or experimental
|
|
139
|
+
const skillName = issue.match(/'([^']+)'/)?.[1];
|
|
140
|
+
if (skillName) {
|
|
141
|
+
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();
|
|
147
|
+
}
|
|
116
148
|
}
|
|
117
149
|
}
|
|
118
150
|
}
|
|
@@ -137,11 +169,15 @@ class GovernanceManager {
|
|
|
137
169
|
const slowTables = new Set();
|
|
138
170
|
for (const q of recentSlowQueries) {
|
|
139
171
|
try {
|
|
140
|
-
const meta = typeof q.metadata === 'string'
|
|
172
|
+
const meta = typeof q.metadata === 'string'
|
|
173
|
+
? JSON.parse(q.metadata)
|
|
174
|
+
: q.metadata || {};
|
|
141
175
|
if (meta.table)
|
|
142
176
|
slowTables.add(meta.table);
|
|
143
177
|
}
|
|
144
|
-
catch (e) {
|
|
178
|
+
catch (e) {
|
|
179
|
+
/* ignore parse errors */
|
|
180
|
+
}
|
|
145
181
|
}
|
|
146
182
|
for (const table of slowTables) {
|
|
147
183
|
repairs.push(`Table '${table}' is experiencing periodic latency spikes. Suggesting 'CREATE INDEX' for common filters.`);
|
|
@@ -154,11 +190,11 @@ class GovernanceManager {
|
|
|
154
190
|
// 3. Check for cold storage candidates
|
|
155
191
|
const sessionsTable = this.config.sessionsTable || 'agent_sessions';
|
|
156
192
|
const oldThreshold = new Date(Date.now() - 30 * 24 * 60 * 60 * 1000); // 30 days
|
|
157
|
-
const oldSessions = await this.db
|
|
193
|
+
const oldSessions = (await this.db
|
|
158
194
|
.selectFrom(sessionsTable)
|
|
159
195
|
.select((eb) => eb.fn.count('id').as('count'))
|
|
160
196
|
.where('created_at', '<', oldThreshold)
|
|
161
|
-
.executeTakeFirst();
|
|
197
|
+
.executeTakeFirst());
|
|
162
198
|
if (Number(oldSessions?.count || 0) > 100) {
|
|
163
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.`);
|
|
164
200
|
}
|
|
@@ -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,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HiveLink = void 0;
|
|
4
|
+
const sql_js_1 = require("../../raw-builder/sql.js");
|
|
4
5
|
/**
|
|
5
6
|
* HiveLink facilitates "Collective Intelligence" by synchronizing
|
|
6
7
|
* knowledge and lessons learned across different agent personas.
|
|
@@ -26,12 +27,12 @@ class HiveLink {
|
|
|
26
27
|
async broadcastKnowledge(minConfidence = 0.9) {
|
|
27
28
|
console.log(`[HiveLink] Broadcasting knowledge with confidence >= ${minConfidence}`);
|
|
28
29
|
// Find high-confidence items that are "local" (have a source_session_id)
|
|
29
|
-
const items = await this.typedDb
|
|
30
|
+
const items = (await this.typedDb
|
|
30
31
|
.selectFrom(this.knowledgeTable)
|
|
31
32
|
.selectAll()
|
|
32
33
|
.where('confidence', '>=', minConfidence)
|
|
33
34
|
.where('source_session_id', 'is not', null) // Only local items
|
|
34
|
-
.execute();
|
|
35
|
+
.execute());
|
|
35
36
|
let promotedCount = 0;
|
|
36
37
|
for (const item of items) {
|
|
37
38
|
// Check if a global version already exists
|
|
@@ -50,7 +51,7 @@ class HiveLink {
|
|
|
50
51
|
.updateTable(this.knowledgeTable)
|
|
51
52
|
.set({
|
|
52
53
|
confidence: newConfidence,
|
|
53
|
-
updated_at: new Date()
|
|
54
|
+
updated_at: new Date(),
|
|
54
55
|
})
|
|
55
56
|
.where('id', '=', existingGlobal.id)
|
|
56
57
|
.execute();
|
|
@@ -71,10 +72,10 @@ class HiveLink {
|
|
|
71
72
|
metadata: JSON.stringify({
|
|
72
73
|
...item.metadata,
|
|
73
74
|
promoted_from: item.id,
|
|
74
|
-
promoted_at: new Date()
|
|
75
|
+
promoted_at: new Date(),
|
|
75
76
|
}),
|
|
76
77
|
created_at: new Date(),
|
|
77
|
-
updated_at: new Date()
|
|
78
|
+
updated_at: new Date(),
|
|
78
79
|
})
|
|
79
80
|
.execute();
|
|
80
81
|
promotedCount++;
|
|
@@ -87,30 +88,123 @@ class HiveLink {
|
|
|
87
88
|
* Increases confidence of all items with this tag, representing "domain mastery".
|
|
88
89
|
*/
|
|
89
90
|
async syncDomain(domainTag, boostFactor = 0.05) {
|
|
90
|
-
console.log(`[HiveLink] Syncing/Boosting domain '${domainTag}'`);
|
|
91
|
-
//
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
.
|
|
95
|
-
.
|
|
91
|
+
console.log(`[HiveLink] Syncing/Boosting domain '${domainTag}' (Set-Based)`);
|
|
92
|
+
// Use a single SQL update for high throughput
|
|
93
|
+
const result = await this.db
|
|
94
|
+
.updateTable(this.knowledgeTable)
|
|
95
|
+
.set({
|
|
96
|
+
confidence: (0, sql_js_1.sql) `MIN(1.0, confidence + ${boostFactor})`,
|
|
97
|
+
updated_at: new Date(),
|
|
98
|
+
})
|
|
96
99
|
.where('tags', 'like', `%"${domainTag}"%`)
|
|
100
|
+
.where('confidence', '<', 1.0)
|
|
97
101
|
.execute();
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
102
|
+
// Kysely update .execute() returns an array of results or similar depending on adapter
|
|
103
|
+
// For simple update, we might just return the count if supported or 1
|
|
104
|
+
return Number(result[0]?.numUpdatedRows ?? 1);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Propagate high-performing capabilities globally and block known-bad ones.
|
|
108
|
+
* High-Throughput Refactor: Batch updates and optimized set-based checks.
|
|
109
|
+
*/
|
|
110
|
+
async broadcastSkills() {
|
|
111
|
+
if (!this.config.evolution?.enableHiveLink &&
|
|
112
|
+
this.config.evolution !== undefined) {
|
|
113
|
+
console.log('[HiveLink] Skill broadcasting disabled by config.');
|
|
114
|
+
return 0;
|
|
115
|
+
}
|
|
116
|
+
console.log(`[HiveLink] Broadcasting emergent skills across the Hive (Performance-Aware)...`);
|
|
117
|
+
let broadcastCount = 0;
|
|
118
|
+
const capTable = this.config.capabilitiesTable || 'agent_capabilities';
|
|
119
|
+
await this.db.transaction().execute(async (trx) => {
|
|
120
|
+
// 1. Resolve Verified Skills with "Survival of the Fittest" logic
|
|
121
|
+
const verifiedSkills = await this.cortex.capabilities.getCapabilities('verified');
|
|
122
|
+
for (const skill of verifiedSkills) {
|
|
123
|
+
const meta = typeof skill.metadata === 'string'
|
|
124
|
+
? JSON.parse(skill.metadata)
|
|
125
|
+
: skill.metadata || {};
|
|
126
|
+
if (meta.broadcasted)
|
|
127
|
+
continue;
|
|
128
|
+
// Check for competing global versions
|
|
129
|
+
const baseName = meta.mutatedFrom || skill.name;
|
|
130
|
+
const competitor = await trx
|
|
131
|
+
.selectFrom(capTable)
|
|
132
|
+
.selectAll()
|
|
133
|
+
.where('name', 'like', `%${baseName}%`)
|
|
134
|
+
.where('status', '=', 'verified')
|
|
135
|
+
.where('id', '!=', skill.id)
|
|
136
|
+
.executeTakeFirst();
|
|
137
|
+
let shouldBroadcast = true;
|
|
138
|
+
if (competitor) {
|
|
139
|
+
const comp = competitor;
|
|
140
|
+
const compRel = comp.reliability || 0;
|
|
141
|
+
// Performance-Based Conflict Resolution: Only broadcast if reliability is strictly better
|
|
142
|
+
// or if it's a direct version upgrade with equal/better reliability
|
|
143
|
+
const isNewer = this.compareVersions(skill.version, comp.version) > 0;
|
|
144
|
+
if (compRel > skill.reliability) {
|
|
145
|
+
shouldBroadcast = false;
|
|
146
|
+
}
|
|
147
|
+
else if (compRel === skill.reliability && !isNewer) {
|
|
148
|
+
shouldBroadcast = false;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
if (shouldBroadcast) {
|
|
152
|
+
await trx
|
|
153
|
+
.updateTable(capTable)
|
|
154
|
+
.set({
|
|
155
|
+
metadata: JSON.stringify({
|
|
156
|
+
...meta,
|
|
157
|
+
broadcasted: true,
|
|
158
|
+
hive_verified: true,
|
|
159
|
+
broadcasted_at: new Date(),
|
|
160
|
+
conflict_resolved: !!competitor,
|
|
161
|
+
}),
|
|
162
|
+
})
|
|
163
|
+
.where('id', '=', skill.id)
|
|
164
|
+
.execute();
|
|
165
|
+
broadcastCount++;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
// 2. Broadcast Blacklisted Skills (Immediate Immune Propagations)
|
|
169
|
+
const blacklisted = await this.cortex.capabilities.getCapabilities('blacklisted');
|
|
170
|
+
for (const skill of blacklisted) {
|
|
171
|
+
const meta = typeof skill.metadata === 'string'
|
|
172
|
+
? JSON.parse(skill.metadata)
|
|
173
|
+
: skill.metadata || {};
|
|
174
|
+
if (!meta.broadcasted) {
|
|
175
|
+
await trx
|
|
176
|
+
.updateTable(capTable)
|
|
177
|
+
.set({
|
|
178
|
+
metadata: JSON.stringify({
|
|
179
|
+
...meta,
|
|
180
|
+
broadcasted: true,
|
|
181
|
+
hive_blacklisted: true,
|
|
182
|
+
blocked_at: new Date(),
|
|
183
|
+
}),
|
|
184
|
+
})
|
|
185
|
+
.where('id', '=', skill.id)
|
|
186
|
+
.execute();
|
|
187
|
+
broadcastCount++;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
return broadcastCount;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Simple semver-style version comparison.
|
|
195
|
+
*/
|
|
196
|
+
compareVersions(v1, v2) {
|
|
197
|
+
const p1 = v1.split('.').map(Number);
|
|
198
|
+
const p2 = v2.split('.').map(Number);
|
|
199
|
+
for (let i = 0; i < Math.max(p1.length, p2.length); i++) {
|
|
200
|
+
const num1 = p1[i] || 0;
|
|
201
|
+
const num2 = p2[i] || 0;
|
|
202
|
+
if (num1 > num2)
|
|
203
|
+
return 1;
|
|
204
|
+
if (num2 > num1)
|
|
205
|
+
return -1;
|
|
112
206
|
}
|
|
113
|
-
return
|
|
207
|
+
return 0;
|
|
114
208
|
}
|
|
115
209
|
}
|
|
116
210
|
exports.HiveLink = HiveLink;
|
|
@@ -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
|
}
|