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.
Files changed (249) hide show
  1. package/README.md +92 -63
  2. package/dist/cjs/agentic/ActionJournal.js +13 -9
  3. package/dist/cjs/agentic/CapabilityManager.d.ts +9 -4
  4. package/dist/cjs/agentic/CapabilityManager.js +113 -17
  5. package/dist/cjs/agentic/CognitiveRepository.js +19 -9
  6. package/dist/cjs/agentic/ContextBuffer.js +24 -12
  7. package/dist/cjs/agentic/Cortex.d.ts +8 -1
  8. package/dist/cjs/agentic/Cortex.js +30 -7
  9. package/dist/cjs/agentic/EpisodicMemory.js +7 -5
  10. package/dist/cjs/agentic/PersonaManager.js +16 -8
  11. package/dist/cjs/agentic/PolicyEnforcer.js +31 -12
  12. package/dist/cjs/agentic/ResourceMonitor.js +4 -4
  13. package/dist/cjs/agentic/SessionCompressor.js +22 -14
  14. package/dist/cjs/agentic/SessionManager.js +36 -18
  15. package/dist/cjs/agentic/VectorIndexer.js +22 -18
  16. package/dist/cjs/agentic/improvement/AblationEngine.js +22 -15
  17. package/dist/cjs/agentic/improvement/ActionRefiner.js +12 -10
  18. package/dist/cjs/agentic/improvement/ConflictResolver.js +5 -5
  19. package/dist/cjs/agentic/improvement/CortexJanitor.d.ts +1 -1
  20. package/dist/cjs/agentic/improvement/CortexJanitor.js +64 -27
  21. package/dist/cjs/agentic/improvement/CuriosityEngine.d.ts +2 -2
  22. package/dist/cjs/agentic/improvement/CuriosityEngine.js +68 -59
  23. package/dist/cjs/agentic/improvement/EvolutionRitual.d.ts +24 -0
  24. package/dist/cjs/agentic/improvement/EvolutionRitual.js +91 -0
  25. package/dist/cjs/agentic/improvement/EvolutionaryPilot.d.ts +5 -0
  26. package/dist/cjs/agentic/improvement/EvolutionaryPilot.js +80 -7
  27. package/dist/cjs/agentic/improvement/GoalArchitect.d.ts +2 -2
  28. package/dist/cjs/agentic/improvement/GoalArchitect.js +20 -18
  29. package/dist/cjs/agentic/improvement/GovernanceManager.d.ts +1 -1
  30. package/dist/cjs/agentic/improvement/GovernanceManager.js +85 -49
  31. package/dist/cjs/agentic/improvement/HiveLink.d.ts +9 -0
  32. package/dist/cjs/agentic/improvement/HiveLink.js +120 -26
  33. package/dist/cjs/agentic/improvement/KnowledgeDistiller.d.ts +2 -0
  34. package/dist/cjs/agentic/improvement/KnowledgeDistiller.js +101 -47
  35. package/dist/cjs/agentic/improvement/RecursiveReasoner.d.ts +7 -1
  36. package/dist/cjs/agentic/improvement/RecursiveReasoner.js +106 -22
  37. package/dist/cjs/agentic/improvement/ReflectionEngine.js +10 -8
  38. package/dist/cjs/agentic/improvement/RitualOrchestrator.js +34 -22
  39. package/dist/cjs/agentic/improvement/RuleEngine.js +22 -17
  40. package/dist/cjs/agentic/improvement/SelfEvolution.js +24 -18
  41. package/dist/cjs/agentic/improvement/SelfTestRegistry.js +18 -15
  42. package/dist/cjs/agentic/improvement/SkillSynthesizer.d.ts +48 -0
  43. package/dist/cjs/agentic/improvement/SkillSynthesizer.js +288 -0
  44. package/dist/cjs/agentic/improvement/SovereignMetrics.js +19 -17
  45. package/dist/cjs/agentic/improvement/StrategicPlanner.d.ts +1 -1
  46. package/dist/cjs/agentic/improvement/StrategicPlanner.js +129 -55
  47. package/dist/cjs/agentic/telemetry/CognitiveSynthesizer.js +26 -12
  48. package/dist/cjs/agentic/telemetry/EventHarvester.js +3 -2
  49. package/dist/cjs/agentic/telemetry/ResearchAlchemist.js +13 -4
  50. package/dist/cjs/cache/cache-manager.js +7 -4
  51. package/dist/cjs/cli/commands/analyze.js +5 -4
  52. package/dist/cjs/cli/commands/generate.js +81 -44
  53. package/dist/cjs/cli/commands/init.js +7 -3
  54. package/dist/cjs/cli/commands/inspect.js +139 -36
  55. package/dist/cjs/cli/commands/migrate.js +5 -4
  56. package/dist/cjs/cli/commands/optimize.js +4 -4
  57. package/dist/cjs/cli/commands/status.js +9 -7
  58. package/dist/cjs/cli/commands/watch.js +7 -6
  59. package/dist/cjs/cli/index.js +2 -2
  60. package/dist/cjs/cli/ui/spinner.d.ts +15 -0
  61. package/dist/cjs/cli/ui/spinner.js +76 -0
  62. package/dist/cjs/dialect/database-introspector.js +3 -1
  63. package/dist/cjs/dialect/postgresql/postgresql-driver.js +3 -1
  64. package/dist/cjs/dialect/postgresql/postgresql-features.js +18 -8
  65. package/dist/cjs/dialect/postgresql/postgresql-introspector.js +2 -2
  66. package/dist/cjs/dialect/sqlite/sqlite-auto-indexer.js +47 -33
  67. package/dist/cjs/dialect/sqlite/sqlite-auto-optimizer.js +8 -7
  68. package/dist/cjs/dialect/sqlite/sqlite-driver.js +2 -2
  69. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +15 -12
  70. package/dist/cjs/edge-runtime/edge-config.js +21 -19
  71. package/dist/cjs/errors/NoormError.js +22 -20
  72. package/dist/cjs/helpers/agent-schema.js +3 -0
  73. package/dist/cjs/helpers/postgresql.js +7 -4
  74. package/dist/cjs/helpers/schema-evolution.js +31 -6
  75. package/dist/cjs/index.d.ts +18 -16
  76. package/dist/cjs/logging/logger.js +8 -4
  77. package/dist/cjs/migration/data_migrator.js +12 -11
  78. package/dist/cjs/migration/database_migration_manager.js +17 -13
  79. package/dist/cjs/migration/schema_differ.js +22 -14
  80. package/dist/cjs/migration/schema_introspector.js +8 -8
  81. package/dist/cjs/migration/type_mapper.js +68 -67
  82. package/dist/cjs/noormme.js +54 -37
  83. package/dist/cjs/performance/index.js +5 -5
  84. package/dist/cjs/performance/query-optimizer.js +26 -21
  85. package/dist/cjs/performance/services/cache-service.js +26 -16
  86. package/dist/cjs/performance/services/connection-factory.js +28 -23
  87. package/dist/cjs/performance/services/metrics-collector.js +41 -36
  88. package/dist/cjs/performance/utils/query-parser.js +15 -16
  89. package/dist/cjs/relationships/relationship-engine.js +10 -8
  90. package/dist/cjs/repository/repository-factory.js +97 -38
  91. package/dist/cjs/schema/core/coordinators/schema-discovery.coordinator.js +1 -3
  92. package/dist/cjs/schema/core/discovery/relationship-discovery.js +16 -16
  93. package/dist/cjs/schema/core/discovery/table-metadata-discovery.js +9 -9
  94. package/dist/cjs/schema/core/discovery/view-discovery.js +5 -4
  95. package/dist/cjs/schema/core/factories/discovery-factory.js +4 -4
  96. package/dist/cjs/schema/core/utils/name-generator.js +14 -5
  97. package/dist/cjs/schema/core/utils/type-mapper.js +24 -24
  98. package/dist/cjs/schema/dialects/postgresql/postgresql-discovery.coordinator.js +8 -7
  99. package/dist/cjs/schema/dialects/sqlite/discovery/sqlite-constraint-discovery.js +17 -15
  100. package/dist/cjs/schema/dialects/sqlite/discovery/sqlite-index-discovery.js +8 -8
  101. package/dist/cjs/schema/dialects/sqlite/introspection/sqlite-schema-introspector.js +6 -11
  102. package/dist/cjs/schema/dialects/sqlite/sqlite-discovery.coordinator.js +14 -13
  103. package/dist/cjs/schema/test/basic-schema-test.js +11 -9
  104. package/dist/cjs/schema/test/dialect-capabilities.test.js +6 -6
  105. package/dist/cjs/schema/test/discovery-factory.test.js +2 -2
  106. package/dist/cjs/schema/test/error-handling.test.js +8 -6
  107. package/dist/cjs/schema/test/integration.test.js +24 -18
  108. package/dist/cjs/schema/test/schema-discovery-coordinator.test.js +9 -9
  109. package/dist/cjs/schema/test/simple-schema-test.js +9 -9
  110. package/dist/cjs/schema/test/sqlite-discovery-coordinator.test.js +64 -48
  111. package/dist/cjs/schema/test/test-runner.js +3 -3
  112. package/dist/cjs/sqlite-migration/index.d.ts +2 -2
  113. package/dist/cjs/sqlite-migration/sqlite-migration-manager.js +21 -17
  114. package/dist/cjs/sqlite-migration/sqlite-migration-provider.js +38 -34
  115. package/dist/cjs/testing/test-utils.js +36 -34
  116. package/dist/cjs/types/index.d.ts +61 -4
  117. package/dist/cjs/types/index.js +6 -3
  118. package/dist/cjs/types/type-generator.js +46 -42
  119. package/dist/cjs/util/safe-sql-helpers.js +1 -1
  120. package/dist/cjs/util/security-validator.js +20 -9
  121. package/dist/cjs/utils/errorHelpers.js +20 -10
  122. package/dist/cjs/watch/schema-watcher.js +22 -23
  123. package/dist/esm/agentic/ActionJournal.js +13 -9
  124. package/dist/esm/agentic/CapabilityManager.d.ts +9 -4
  125. package/dist/esm/agentic/CapabilityManager.js +113 -17
  126. package/dist/esm/agentic/CognitiveRepository.js +19 -9
  127. package/dist/esm/agentic/ContextBuffer.js +24 -12
  128. package/dist/esm/agentic/Cortex.d.ts +8 -1
  129. package/dist/esm/agentic/Cortex.js +30 -7
  130. package/dist/esm/agentic/EpisodicMemory.js +7 -5
  131. package/dist/esm/agentic/PersonaManager.js +16 -8
  132. package/dist/esm/agentic/PolicyEnforcer.js +31 -12
  133. package/dist/esm/agentic/ResourceMonitor.js +4 -4
  134. package/dist/esm/agentic/SessionCompressor.js +22 -14
  135. package/dist/esm/agentic/SessionManager.js +36 -18
  136. package/dist/esm/agentic/VectorIndexer.js +22 -18
  137. package/dist/esm/agentic/improvement/AblationEngine.js +22 -15
  138. package/dist/esm/agentic/improvement/ActionRefiner.js +12 -10
  139. package/dist/esm/agentic/improvement/ConflictResolver.js +5 -5
  140. package/dist/esm/agentic/improvement/CortexJanitor.d.ts +1 -1
  141. package/dist/esm/agentic/improvement/CortexJanitor.js +64 -27
  142. package/dist/esm/agentic/improvement/CuriosityEngine.d.ts +2 -2
  143. package/dist/esm/agentic/improvement/CuriosityEngine.js +68 -59
  144. package/dist/esm/agentic/improvement/EvolutionRitual.d.ts +24 -0
  145. package/dist/esm/agentic/improvement/EvolutionRitual.js +88 -0
  146. package/dist/esm/agentic/improvement/EvolutionaryPilot.d.ts +5 -0
  147. package/dist/esm/agentic/improvement/EvolutionaryPilot.js +80 -7
  148. package/dist/esm/agentic/improvement/GoalArchitect.d.ts +2 -2
  149. package/dist/esm/agentic/improvement/GoalArchitect.js +20 -18
  150. package/dist/esm/agentic/improvement/GovernanceManager.d.ts +1 -1
  151. package/dist/esm/agentic/improvement/GovernanceManager.js +85 -49
  152. package/dist/esm/agentic/improvement/HiveLink.d.ts +9 -0
  153. package/dist/esm/agentic/improvement/HiveLink.js +120 -26
  154. package/dist/esm/agentic/improvement/KnowledgeDistiller.d.ts +2 -0
  155. package/dist/esm/agentic/improvement/KnowledgeDistiller.js +101 -47
  156. package/dist/esm/agentic/improvement/RecursiveReasoner.d.ts +7 -1
  157. package/dist/esm/agentic/improvement/RecursiveReasoner.js +106 -22
  158. package/dist/esm/agentic/improvement/ReflectionEngine.js +10 -8
  159. package/dist/esm/agentic/improvement/RitualOrchestrator.js +34 -22
  160. package/dist/esm/agentic/improvement/RuleEngine.js +22 -17
  161. package/dist/esm/agentic/improvement/SelfEvolution.js +24 -18
  162. package/dist/esm/agentic/improvement/SelfTestRegistry.js +18 -15
  163. package/dist/esm/agentic/improvement/SkillSynthesizer.d.ts +48 -0
  164. package/dist/esm/agentic/improvement/SkillSynthesizer.js +285 -0
  165. package/dist/esm/agentic/improvement/SovereignMetrics.js +19 -17
  166. package/dist/esm/agentic/improvement/StrategicPlanner.d.ts +1 -1
  167. package/dist/esm/agentic/improvement/StrategicPlanner.js +129 -55
  168. package/dist/esm/agentic/telemetry/CognitiveSynthesizer.js +26 -12
  169. package/dist/esm/agentic/telemetry/EventHarvester.js +3 -2
  170. package/dist/esm/agentic/telemetry/ResearchAlchemist.js +13 -4
  171. package/dist/esm/cache/cache-manager.js +7 -4
  172. package/dist/esm/cli/commands/analyze.js +5 -4
  173. package/dist/esm/cli/commands/generate.js +82 -45
  174. package/dist/esm/cli/commands/init.js +8 -4
  175. package/dist/esm/cli/commands/inspect.js +140 -37
  176. package/dist/esm/cli/commands/migrate.js +5 -4
  177. package/dist/esm/cli/commands/optimize.js +4 -4
  178. package/dist/esm/cli/commands/status.js +9 -7
  179. package/dist/esm/cli/commands/watch.js +7 -6
  180. package/dist/esm/cli/index.js +2 -2
  181. package/dist/esm/cli/ui/spinner.d.ts +15 -0
  182. package/dist/esm/cli/ui/spinner.js +70 -0
  183. package/dist/esm/dialect/database-introspector.js +3 -1
  184. package/dist/esm/dialect/postgresql/postgresql-driver.js +3 -1
  185. package/dist/esm/dialect/postgresql/postgresql-features.js +18 -8
  186. package/dist/esm/dialect/postgresql/postgresql-introspector.js +2 -2
  187. package/dist/esm/dialect/sqlite/sqlite-auto-indexer.js +47 -33
  188. package/dist/esm/dialect/sqlite/sqlite-auto-optimizer.js +8 -7
  189. package/dist/esm/dialect/sqlite/sqlite-driver.js +2 -2
  190. package/dist/esm/dialect/sqlite/sqlite-introspector.js +15 -12
  191. package/dist/esm/dynamic/dynamic.js +1 -1
  192. package/dist/esm/edge-runtime/edge-config.js +21 -19
  193. package/dist/esm/errors/NoormError.js +22 -20
  194. package/dist/esm/helpers/agent-schema.js +3 -0
  195. package/dist/esm/helpers/postgresql.js +7 -4
  196. package/dist/esm/helpers/schema-evolution.js +31 -6
  197. package/dist/esm/index.d.ts +18 -16
  198. package/dist/esm/index.js +2 -2
  199. package/dist/esm/logging/logger.js +8 -4
  200. package/dist/esm/migration/data_migrator.js +12 -11
  201. package/dist/esm/migration/database_migration_manager.js +18 -14
  202. package/dist/esm/migration/schema_differ.js +22 -14
  203. package/dist/esm/migration/schema_introspector.js +8 -8
  204. package/dist/esm/migration/type_mapper.js +68 -67
  205. package/dist/esm/noormme.js +54 -37
  206. package/dist/esm/performance/index.js +5 -5
  207. package/dist/esm/performance/query-optimizer.js +26 -21
  208. package/dist/esm/performance/services/cache-service.js +26 -16
  209. package/dist/esm/performance/services/connection-factory.js +28 -23
  210. package/dist/esm/performance/services/metrics-collector.js +41 -36
  211. package/dist/esm/performance/utils/query-parser.js +15 -16
  212. package/dist/esm/raw-builder/sql.js +1 -1
  213. package/dist/esm/relationships/relationship-engine.js +10 -8
  214. package/dist/esm/repository/repository-factory.js +98 -39
  215. package/dist/esm/schema/builders/alter-table-add-index-builder.js +1 -1
  216. package/dist/esm/schema/builders/create-index-builder.js +2 -2
  217. package/dist/esm/schema/core/coordinators/schema-discovery.coordinator.js +1 -3
  218. package/dist/esm/schema/core/discovery/relationship-discovery.js +16 -16
  219. package/dist/esm/schema/core/discovery/table-metadata-discovery.js +9 -9
  220. package/dist/esm/schema/core/discovery/view-discovery.js +5 -4
  221. package/dist/esm/schema/core/factories/discovery-factory.js +4 -4
  222. package/dist/esm/schema/core/utils/name-generator.js +14 -5
  223. package/dist/esm/schema/core/utils/type-mapper.js +24 -24
  224. package/dist/esm/schema/dialects/postgresql/postgresql-discovery.coordinator.js +8 -7
  225. package/dist/esm/schema/dialects/sqlite/discovery/sqlite-constraint-discovery.js +17 -15
  226. package/dist/esm/schema/dialects/sqlite/discovery/sqlite-index-discovery.js +8 -8
  227. package/dist/esm/schema/dialects/sqlite/introspection/sqlite-schema-introspector.js +6 -11
  228. package/dist/esm/schema/dialects/sqlite/sqlite-discovery.coordinator.js +14 -13
  229. package/dist/esm/schema/test/basic-schema-test.js +11 -9
  230. package/dist/esm/schema/test/dialect-capabilities.test.js +6 -6
  231. package/dist/esm/schema/test/discovery-factory.test.js +2 -2
  232. package/dist/esm/schema/test/error-handling.test.js +8 -6
  233. package/dist/esm/schema/test/integration.test.js +24 -18
  234. package/dist/esm/schema/test/schema-discovery-coordinator.test.js +9 -9
  235. package/dist/esm/schema/test/simple-schema-test.js +9 -9
  236. package/dist/esm/schema/test/sqlite-discovery-coordinator.test.js +64 -48
  237. package/dist/esm/schema/test/test-runner.js +3 -3
  238. package/dist/esm/sqlite-migration/index.d.ts +2 -2
  239. package/dist/esm/sqlite-migration/sqlite-migration-manager.js +21 -17
  240. package/dist/esm/sqlite-migration/sqlite-migration-provider.js +38 -34
  241. package/dist/esm/testing/test-utils.js +36 -34
  242. package/dist/esm/types/index.d.ts +61 -4
  243. package/dist/esm/types/index.js +6 -3
  244. package/dist/esm/types/type-generator.js +46 -42
  245. package/dist/esm/util/safe-sql-helpers.js +1 -1
  246. package/dist/esm/util/security-validator.js +20 -9
  247. package/dist/esm/utils/errorHelpers.js +21 -11
  248. package/dist/esm/watch/schema-watcher.js +22 -23
  249. 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' ? JSON.parse(p.definition) : p.definition;
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 the last hour
40
- const budgetThreshold = getPolicyValue('hourly_budget', 'budget', 1.0);
41
- const recentCost = await this.db
42
- .selectFrom(this.metricsTable)
43
- .select((eb) => eb.fn.sum('metric_value').as('total'))
44
- .where('metric_name', '=', 'total_cost')
45
- .where('created_at', '>', new Date(Date.now() - 3600000))
46
- .executeTakeFirst();
47
- const cost = Number(recentCost?.total || 0);
48
- if (cost > budgetThreshold) {
49
- issues.push(`Critical: High cost detected ($${cost.toFixed(2)} vs limit $${budgetThreshold})`);
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. Check for success rate drop
52
- const successThreshold = getPolicyValue('min_success_rate', 'safety', 0.5);
53
- const avgSuccess = await this.db
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(avgSuccess?.avg || 1);
59
- if (success < successThreshold) {
60
- issues.push(`Critical: Success rate dropped to ${Math.round(success * 100)}% (limit ${successThreshold * 100}%)`);
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] Audit failed: ${issues.join(', ')}`);
64
- // Critical Self-Healing: If persona is in verification or success rate is catastrophically low
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
- const isVerifying = activePersona.metadata?.evolution_status === 'verifying';
68
- if (isVerifying || success < 0.3) {
69
- const reason = isVerifying ? `Verification failed` : `Catastrophic failure`;
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
- // Automatically record a "Panic" reflection
76
- await this.cortex.reflections.reflect(null, 'failure', 'Infrastructure Audit Failure', [`Issues found: ${issues.join('; ')}`]);
77
- // Trigger remediation rituals (compression, pruning)
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('name', '=', 'default') // Or however we track the "active" one
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' ? JSON.parse(active.metadata) : (active.metadata || {})
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('High cost')) {
108
- // Immediate remediation: schedule emergency compression ritual
109
- await this.cortex.rituals.scheduleRitual('Emergency Compression', 'compression', 'hourly', 'Governance triggered emergency compression due to high cost.', { priority: 'high', reason: issue });
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('Success rate')) {
112
- // Immediate remediation: prune zombies and zombies
113
- await this.cortex.rituals.scheduleRitual('Emergency Pruning', 'pruning', 'hourly', 'Governance triggered emergency pruning due to low success rate.', { priority: 'high', reason: issue });
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' ? JSON.parse(q.metadata) : (q.metadata || {});
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) { /* ignore parse errors */ }
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
- // Find items with this tag
90
- // Note: simplified tag matching using LIKE for JSON array
91
- const items = await this.typedDb
92
- .selectFrom(this.knowledgeTable)
93
- .selectAll()
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
- let updatedCount = 0;
97
- for (const item of items) {
98
- if (item.confidence >= 1.0)
99
- continue;
100
- const newConfidence = Math.min(1.0, item.confidence + boostFactor);
101
- await this.db
102
- .updateTable(this.knowledgeTable)
103
- .set({
104
- confidence: newConfidence,
105
- updated_at: new Date()
106
- })
107
- .where('id', '=', item.id)
108
- .execute();
109
- updatedCount++;
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 updatedCount;
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
  }