noormme 1.2.3 → 1.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/dist/cjs/agentic/ActionJournal.d.ts +6 -6
  2. package/dist/cjs/agentic/ActionJournal.js +10 -10
  3. package/dist/cjs/agentic/CapabilityManager.d.ts +5 -5
  4. package/dist/cjs/agentic/CapabilityManager.js +35 -24
  5. package/dist/cjs/agentic/Cortex.js +12 -13
  6. package/dist/cjs/agentic/EpisodicMemory.js +4 -3
  7. package/dist/cjs/agentic/PersonaManager.d.ts +4 -4
  8. package/dist/cjs/agentic/PersonaManager.js +19 -15
  9. package/dist/cjs/agentic/PolicyEnforcer.d.ts +4 -8
  10. package/dist/cjs/agentic/PolicyEnforcer.js +26 -26
  11. package/dist/cjs/agentic/ResourceMonitor.js +2 -1
  12. package/dist/cjs/agentic/SessionManager.js +7 -6
  13. package/dist/cjs/agentic/improvement/AblationEngine.d.ts +3 -3
  14. package/dist/cjs/agentic/improvement/AblationEngine.js +41 -24
  15. package/dist/cjs/agentic/improvement/ActionRefiner.d.ts +1 -1
  16. package/dist/cjs/agentic/improvement/ActionRefiner.js +21 -15
  17. package/dist/cjs/agentic/improvement/ConflictResolver.js +4 -3
  18. package/dist/cjs/agentic/improvement/EvolutionRitual.js +2 -1
  19. package/dist/cjs/agentic/improvement/EvolutionaryPilot.d.ts +1 -1
  20. package/dist/cjs/agentic/improvement/EvolutionaryPilot.js +17 -19
  21. package/dist/cjs/agentic/improvement/GoalArchitect.js +10 -9
  22. package/dist/cjs/agentic/improvement/GovernanceManager.d.ts +5 -5
  23. package/dist/cjs/agentic/improvement/GovernanceManager.js +12 -22
  24. package/dist/cjs/agentic/improvement/HiveLink.d.ts +3 -3
  25. package/dist/cjs/agentic/improvement/HiveLink.js +15 -157
  26. package/dist/cjs/agentic/improvement/KnowledgeDistiller.d.ts +15 -29
  27. package/dist/cjs/agentic/improvement/KnowledgeDistiller.js +69 -351
  28. package/dist/cjs/agentic/improvement/QuotaManager.d.ts +1 -1
  29. package/dist/cjs/agentic/improvement/QuotaManager.js +11 -11
  30. package/dist/cjs/agentic/improvement/RecursiveReasoner.d.ts +4 -4
  31. package/dist/cjs/agentic/improvement/RecursiveReasoner.js +10 -10
  32. package/dist/cjs/agentic/improvement/ReflectionEngine.d.ts +2 -2
  33. package/dist/cjs/agentic/improvement/ReflectionEngine.js +2 -2
  34. package/dist/cjs/agentic/improvement/RitualOrchestrator.d.ts +3 -3
  35. package/dist/cjs/agentic/improvement/RitualOrchestrator.js +12 -9
  36. package/dist/cjs/agentic/improvement/SelfEvolution.d.ts +1 -1
  37. package/dist/cjs/agentic/improvement/SelfEvolution.js +21 -18
  38. package/dist/cjs/agentic/improvement/SelfTestRegistry.d.ts +1 -1
  39. package/dist/cjs/agentic/improvement/SelfTestRegistry.js +27 -19
  40. package/dist/cjs/agentic/improvement/SovereignMetrics.d.ts +6 -6
  41. package/dist/cjs/agentic/improvement/SovereignMetrics.js +12 -12
  42. package/dist/cjs/agentic/improvement/StrategicPlanner.d.ts +10 -54
  43. package/dist/cjs/agentic/improvement/StrategicPlanner.js +43 -396
  44. package/dist/cjs/agentic/improvement/distillation/ConflictChallenger.d.ts +3 -0
  45. package/dist/cjs/agentic/improvement/distillation/ConflictChallenger.js +54 -0
  46. package/dist/cjs/agentic/improvement/distillation/FactDistiller.d.ts +10 -0
  47. package/dist/cjs/agentic/improvement/distillation/FactDistiller.js +115 -0
  48. package/dist/cjs/agentic/improvement/distillation/KnowledgeConsolidator.d.ts +6 -0
  49. package/dist/cjs/agentic/improvement/distillation/KnowledgeConsolidator.js +63 -0
  50. package/dist/cjs/agentic/improvement/distillation/RelationshipArchitect.d.ts +6 -0
  51. package/dist/cjs/agentic/improvement/distillation/RelationshipArchitect.js +73 -0
  52. package/dist/cjs/agentic/improvement/governance/MaintenanceOracle.js +5 -5
  53. package/dist/cjs/agentic/improvement/governance/PersonaAuditor.js +7 -11
  54. package/dist/cjs/agentic/improvement/governance/RemediationEngine.js +8 -3
  55. package/dist/cjs/agentic/improvement/hive/DomainMaster.d.ts +4 -0
  56. package/dist/cjs/agentic/improvement/hive/DomainMaster.js +19 -0
  57. package/dist/cjs/agentic/improvement/hive/KnowledgePromoter.d.ts +6 -0
  58. package/dist/cjs/agentic/improvement/hive/KnowledgePromoter.js +57 -0
  59. package/dist/cjs/agentic/improvement/hive/SkillPropagator.d.ts +6 -0
  60. package/dist/cjs/agentic/improvement/hive/SkillPropagator.js +91 -0
  61. package/dist/cjs/agentic/improvement/strategy/EvolutionVerificator.d.ts +6 -0
  62. package/dist/cjs/agentic/improvement/strategy/EvolutionVerificator.js +48 -0
  63. package/dist/cjs/agentic/improvement/strategy/MutationEngine.d.ts +10 -0
  64. package/dist/cjs/agentic/improvement/strategy/MutationEngine.js +119 -0
  65. package/dist/cjs/agentic/improvement/strategy/PerformanceAnalyst.d.ts +6 -0
  66. package/dist/cjs/agentic/improvement/strategy/PerformanceAnalyst.js +84 -0
  67. package/dist/cjs/agentic/util/db-utils.d.ts +4 -0
  68. package/dist/cjs/agentic/util/db-utils.js +27 -0
  69. package/dist/cjs/cli/index.js +0 -0
  70. package/dist/cjs/helpers/agent-schema.js +1 -0
  71. package/dist/cjs/testing/test-utils.js +2 -0
  72. package/dist/cjs/types/index.d.ts +8 -0
  73. package/dist/esm/agentic/ActionJournal.d.ts +6 -6
  74. package/dist/esm/agentic/ActionJournal.js +10 -10
  75. package/dist/esm/agentic/CapabilityManager.d.ts +5 -5
  76. package/dist/esm/agentic/CapabilityManager.js +35 -24
  77. package/dist/esm/agentic/Cortex.js +12 -13
  78. package/dist/esm/agentic/EpisodicMemory.js +4 -3
  79. package/dist/esm/agentic/PersonaManager.d.ts +4 -4
  80. package/dist/esm/agentic/PersonaManager.js +19 -15
  81. package/dist/esm/agentic/PolicyEnforcer.d.ts +4 -8
  82. package/dist/esm/agentic/PolicyEnforcer.js +26 -26
  83. package/dist/esm/agentic/ResourceMonitor.js +2 -1
  84. package/dist/esm/agentic/SessionManager.js +7 -6
  85. package/dist/esm/agentic/improvement/AblationEngine.d.ts +3 -3
  86. package/dist/esm/agentic/improvement/AblationEngine.js +41 -24
  87. package/dist/esm/agentic/improvement/ActionRefiner.d.ts +1 -1
  88. package/dist/esm/agentic/improvement/ActionRefiner.js +21 -15
  89. package/dist/esm/agentic/improvement/ConflictResolver.js +4 -3
  90. package/dist/esm/agentic/improvement/EvolutionRitual.js +2 -1
  91. package/dist/esm/agentic/improvement/EvolutionaryPilot.d.ts +1 -1
  92. package/dist/esm/agentic/improvement/EvolutionaryPilot.js +17 -19
  93. package/dist/esm/agentic/improvement/GoalArchitect.js +10 -9
  94. package/dist/esm/agentic/improvement/GovernanceManager.d.ts +5 -5
  95. package/dist/esm/agentic/improvement/GovernanceManager.js +12 -22
  96. package/dist/esm/agentic/improvement/HiveLink.d.ts +3 -3
  97. package/dist/esm/agentic/improvement/HiveLink.js +15 -157
  98. package/dist/esm/agentic/improvement/KnowledgeDistiller.d.ts +15 -29
  99. package/dist/esm/agentic/improvement/KnowledgeDistiller.js +69 -351
  100. package/dist/esm/agentic/improvement/QuotaManager.d.ts +1 -1
  101. package/dist/esm/agentic/improvement/QuotaManager.js +11 -11
  102. package/dist/esm/agentic/improvement/RecursiveReasoner.d.ts +4 -4
  103. package/dist/esm/agentic/improvement/RecursiveReasoner.js +10 -10
  104. package/dist/esm/agentic/improvement/ReflectionEngine.d.ts +2 -2
  105. package/dist/esm/agentic/improvement/ReflectionEngine.js +2 -2
  106. package/dist/esm/agentic/improvement/RitualOrchestrator.d.ts +3 -3
  107. package/dist/esm/agentic/improvement/RitualOrchestrator.js +12 -9
  108. package/dist/esm/agentic/improvement/SelfEvolution.d.ts +1 -1
  109. package/dist/esm/agentic/improvement/SelfEvolution.js +21 -18
  110. package/dist/esm/agentic/improvement/SelfTestRegistry.d.ts +1 -1
  111. package/dist/esm/agentic/improvement/SelfTestRegistry.js +27 -19
  112. package/dist/esm/agentic/improvement/SovereignMetrics.d.ts +6 -6
  113. package/dist/esm/agentic/improvement/SovereignMetrics.js +12 -12
  114. package/dist/esm/agentic/improvement/StrategicPlanner.d.ts +10 -54
  115. package/dist/esm/agentic/improvement/StrategicPlanner.js +43 -396
  116. package/dist/esm/agentic/improvement/distillation/ConflictChallenger.d.ts +3 -0
  117. package/dist/esm/agentic/improvement/distillation/ConflictChallenger.js +51 -0
  118. package/dist/esm/agentic/improvement/distillation/FactDistiller.d.ts +10 -0
  119. package/dist/esm/agentic/improvement/distillation/FactDistiller.js +112 -0
  120. package/dist/esm/agentic/improvement/distillation/KnowledgeConsolidator.d.ts +6 -0
  121. package/dist/esm/agentic/improvement/distillation/KnowledgeConsolidator.js +60 -0
  122. package/dist/esm/agentic/improvement/distillation/RelationshipArchitect.d.ts +6 -0
  123. package/dist/esm/agentic/improvement/distillation/RelationshipArchitect.js +70 -0
  124. package/dist/esm/agentic/improvement/governance/MaintenanceOracle.js +5 -5
  125. package/dist/esm/agentic/improvement/governance/PersonaAuditor.js +7 -11
  126. package/dist/esm/agentic/improvement/governance/RemediationEngine.js +8 -3
  127. package/dist/esm/agentic/improvement/hive/DomainMaster.d.ts +4 -0
  128. package/dist/esm/agentic/improvement/hive/DomainMaster.js +16 -0
  129. package/dist/esm/agentic/improvement/hive/KnowledgePromoter.d.ts +6 -0
  130. package/dist/esm/agentic/improvement/hive/KnowledgePromoter.js +54 -0
  131. package/dist/esm/agentic/improvement/hive/SkillPropagator.d.ts +6 -0
  132. package/dist/esm/agentic/improvement/hive/SkillPropagator.js +88 -0
  133. package/dist/esm/agentic/improvement/strategy/EvolutionVerificator.d.ts +6 -0
  134. package/dist/esm/agentic/improvement/strategy/EvolutionVerificator.js +45 -0
  135. package/dist/esm/agentic/improvement/strategy/MutationEngine.d.ts +10 -0
  136. package/dist/esm/agentic/improvement/strategy/MutationEngine.js +116 -0
  137. package/dist/esm/agentic/improvement/strategy/PerformanceAnalyst.d.ts +6 -0
  138. package/dist/esm/agentic/improvement/strategy/PerformanceAnalyst.js +81 -0
  139. package/dist/esm/agentic/util/db-utils.d.ts +4 -0
  140. package/dist/esm/agentic/util/db-utils.js +25 -0
  141. package/dist/esm/helpers/agent-schema.js +1 -0
  142. package/dist/esm/testing/test-utils.js +2 -0
  143. package/dist/esm/types/index.d.ts +8 -0
  144. package/package.json +40 -44
@@ -0,0 +1,112 @@
1
+ /// <reference types="./FactDistiller.d.ts" />
2
+ export class FactDistiller {
3
+ /**
4
+ * typedDb helper (internal use)
5
+ */
6
+ getTypedDb(db) {
7
+ return db;
8
+ }
9
+ async distillExact(trx, knowledgeTable, entity, fact, confidence, sourceSessionId, tags = [], metadata = {}, source = 'assistant') {
10
+ // Check for exact match
11
+ const existing = await trx
12
+ .selectFrom(knowledgeTable)
13
+ .selectAll()
14
+ .where('entity', '=', entity)
15
+ .where('fact', '=', fact)
16
+ .executeTakeFirst();
17
+ if (existing) {
18
+ // Merge tags
19
+ const existingTags = existing.tags ? JSON.parse(existing.tags) : [];
20
+ const mergedTags = Array.from(new Set([...existingTags, ...tags]));
21
+ // Merge metadata
22
+ const existingMeta = existing.metadata ? JSON.parse(existing.metadata) : {};
23
+ const sessions = new Set(existingMeta.sessions || []);
24
+ if (sourceSessionId)
25
+ sessions.add(sourceSessionId);
26
+ const mergedMeta = {
27
+ ...existingMeta,
28
+ ...metadata,
29
+ sessions: Array.from(sessions),
30
+ session_count: sessions.size,
31
+ };
32
+ // Source weighting
33
+ const boost = source === 'user' ? 0.2 : 0.05;
34
+ const finalConfidence = Math.min(1.0, existing.confidence + boost);
35
+ // Status Lifecycle
36
+ let finalStatus = existing.status || 'proposed';
37
+ if (source === 'user' || mergedMeta.session_count >= 3) {
38
+ finalStatus = 'verified';
39
+ }
40
+ return await trx
41
+ .updateTable(knowledgeTable)
42
+ .set({
43
+ confidence: finalConfidence,
44
+ status: finalStatus,
45
+ tags: JSON.stringify(mergedTags),
46
+ metadata: JSON.stringify(mergedMeta),
47
+ updated_at: new Date(),
48
+ source_session_id: sourceSessionId ?? existing.source_session_id,
49
+ })
50
+ .where('id', '=', existing.id)
51
+ .returningAll()
52
+ .executeTakeFirstOrThrow();
53
+ }
54
+ return null;
55
+ }
56
+ async createInitial(trx, knowledgeTable, entity, fact, confidence, sourceSessionId, tags = [], metadata = {}, source = 'assistant') {
57
+ const initialMeta = {
58
+ ...metadata,
59
+ source,
60
+ sessions: sourceSessionId ? [sourceSessionId] : [],
61
+ session_count: sourceSessionId ? 1 : 0,
62
+ };
63
+ return await trx
64
+ .insertInto(knowledgeTable)
65
+ .values({
66
+ entity,
67
+ fact,
68
+ confidence: source === 'user' ? Math.max(confidence, 0.8) : confidence,
69
+ status: source === 'user' ? 'verified' : 'proposed',
70
+ source_session_id: sourceSessionId ?? null,
71
+ tags: JSON.stringify(tags),
72
+ metadata: JSON.stringify(initialMeta),
73
+ created_at: new Date(),
74
+ updated_at: new Date(),
75
+ })
76
+ .returningAll()
77
+ .executeTakeFirstOrThrow();
78
+ }
79
+ async verify(db, knowledgeTable, id, reinforcement = 0.1) {
80
+ const existing = await db
81
+ .selectFrom(knowledgeTable)
82
+ .selectAll()
83
+ .where('id', '=', id)
84
+ .executeTakeFirst();
85
+ if (!existing)
86
+ return null;
87
+ const metadata = typeof existing.metadata === 'string'
88
+ ? JSON.parse(existing.metadata)
89
+ : existing.metadata || {};
90
+ // Hallucination Guard
91
+ let maxConfidence = 1.0;
92
+ if (metadata.source !== 'user' && (metadata.session_count || 0) < 3) {
93
+ maxConfidence = 0.85;
94
+ }
95
+ const newConfidence = Math.min(maxConfidence, existing.confidence + reinforcement);
96
+ // Promotion Lifecycle
97
+ let newStatus = existing.status || 'proposed';
98
+ if (newConfidence >= 0.9 || metadata.session_count >= 3) {
99
+ newStatus = 'verified';
100
+ }
101
+ return await db
102
+ .updateTable(knowledgeTable)
103
+ .set({
104
+ confidence: newConfidence,
105
+ status: newStatus,
106
+ updated_at: new Date(),
107
+ })
108
+ .where('id', '=', id)
109
+ .returningAll()
110
+ .executeTakeFirstOrThrow();
111
+ }
112
+ }
@@ -0,0 +1,6 @@
1
+ import type { Kysely } from '../../../kysely.js';
2
+ import type { KnowledgeItem } from '../../../types/index.js';
3
+ export declare class KnowledgeConsolidator {
4
+ consolidate(db: Kysely<any>, knowledgeTable: string, getKnowledgeByEntityFn: (entity: string) => Promise<KnowledgeItem[]>): Promise<number>;
5
+ private mergeItems;
6
+ }
@@ -0,0 +1,60 @@
1
+ /// <reference types="./KnowledgeConsolidator.d.ts" />
2
+ import { calculateSimilarity } from '../../../util/similarity.js';
3
+ export class KnowledgeConsolidator {
4
+ async consolidate(db, knowledgeTable, getKnowledgeByEntityFn) {
5
+ let totalMerged = 0;
6
+ const candidates = await db
7
+ .selectFrom(knowledgeTable)
8
+ .select('entity')
9
+ .groupBy('entity')
10
+ .having((eb) => eb.fn.count('id'), '>', 1)
11
+ .limit(500)
12
+ .execute();
13
+ for (const cand of candidates) {
14
+ const entity = cand.entity;
15
+ const items = await getKnowledgeByEntityFn(entity);
16
+ const mergedIds = new Set();
17
+ const iterLimit = Math.min(items.length, 100);
18
+ for (let i = 0; i < iterLimit; i++) {
19
+ if (mergedIds.has(items[i].id))
20
+ continue;
21
+ for (let j = i + 1; j < iterLimit; j++) {
22
+ if (mergedIds.has(items[j].id))
23
+ continue;
24
+ const sim = calculateSimilarity(items[i].fact, items[j].fact);
25
+ if (sim > 0.85) {
26
+ await this.mergeItems(db, knowledgeTable, items[i], items[j]);
27
+ mergedIds.add(items[j].id);
28
+ totalMerged++;
29
+ }
30
+ }
31
+ }
32
+ }
33
+ return totalMerged;
34
+ }
35
+ async mergeItems(db, knowledgeTable, primary, secondary) {
36
+ const mergedMeta = {
37
+ ...secondary.metadata,
38
+ ...primary.metadata,
39
+ consolidated_from: secondary.id,
40
+ consolidated_at: new Date().toISOString(),
41
+ };
42
+ const mergedTags = Array.from(new Set([...(primary.tags || []), ...(secondary.tags || [])]));
43
+ await db.transaction().execute(async (trx) => {
44
+ await trx
45
+ .updateTable(knowledgeTable)
46
+ .set({
47
+ confidence: Math.max(primary.confidence, secondary.confidence),
48
+ metadata: JSON.stringify(mergedMeta),
49
+ tags: JSON.stringify(mergedTags),
50
+ updated_at: new Date(),
51
+ })
52
+ .where('id', '=', primary.id)
53
+ .execute();
54
+ await trx
55
+ .deleteFrom(knowledgeTable)
56
+ .where('id', '=', secondary.id)
57
+ .execute();
58
+ });
59
+ }
60
+ }
@@ -0,0 +1,6 @@
1
+ import type { Transaction } from '../../../kysely.js';
2
+ import type { KnowledgeItem } from '../../../types/index.js';
3
+ export declare class RelationshipArchitect {
4
+ autoLink(item: KnowledgeItem, trx: Transaction<any>, knowledgeTable: string, linksTable: string): Promise<void>;
5
+ link(sourceId: number | string, targetId: number | string, relationship: string, metadata: Record<string, any> | undefined, trxOrDb: any, linksTable: string): Promise<void>;
6
+ }
@@ -0,0 +1,70 @@
1
+ /// <reference types="./RelationshipArchitect.d.ts" />
2
+ import { calculateSimilarity } from '../../../util/similarity.js';
3
+ export class RelationshipArchitect {
4
+ async autoLink(item, trx, knowledgeTable, linksTable) {
5
+ // 1. Structural Extraction (NER-style)
6
+ const tokens = item.fact.match(/([A-Z][a-z]+(?:\s[A-Z][a-z]+)*)|("[^"]+")|([a-z]+[A-Z][a-z]+)/g) || [];
7
+ const potentialEntities = Array.from(new Set(tokens.map((t) => t.replace(/"/g, '').trim())))
8
+ .filter((t) => t.length > 2 && t !== item.entity);
9
+ if (potentialEntities.length > 0) {
10
+ const matches = await trx
11
+ .selectFrom(knowledgeTable)
12
+ .select(['id', 'entity'])
13
+ .where('entity', 'in', potentialEntities)
14
+ .execute();
15
+ for (const match of matches) {
16
+ await this.link(item.id, match.id, 'mentions', { auto: true, source: 'structural_extraction' }, trx, linksTable);
17
+ }
18
+ }
19
+ // 2. Semantic Similarity Pass
20
+ const candidates = await trx
21
+ .selectFrom(knowledgeTable)
22
+ .selectAll()
23
+ .where('id', '!=', item.id)
24
+ .where('confidence', '>', 0.4)
25
+ .orderBy('updated_at', 'desc')
26
+ .limit(50)
27
+ .execute();
28
+ const linksToCreate = [];
29
+ for (const other of candidates) {
30
+ const otherFact = other.fact;
31
+ const sim = calculateSimilarity(item.fact, otherFact);
32
+ if (sim > 0.75) {
33
+ linksToCreate.push({ targetId: other.id, sim });
34
+ }
35
+ }
36
+ for (const l of linksToCreate) {
37
+ await this.link(item.id, l.targetId, 'semantically_related', { similarity: l.sim, version: '2.0' }, trx, linksTable);
38
+ }
39
+ }
40
+ async link(sourceId, targetId, relationship, metadata, trxOrDb, linksTable) {
41
+ if (sourceId === targetId)
42
+ return;
43
+ const existing = await trxOrDb
44
+ .selectFrom(linksTable)
45
+ .select('id')
46
+ .where('source_id', '=', sourceId)
47
+ .where('target_id', '=', targetId)
48
+ .where('relationship', '=', relationship)
49
+ .executeTakeFirst();
50
+ if (existing) {
51
+ await trxOrDb
52
+ .updateTable(linksTable)
53
+ .set({ metadata: metadata ? JSON.stringify(metadata) : null })
54
+ .where('id', '=', existing.id)
55
+ .execute();
56
+ }
57
+ else {
58
+ await trxOrDb
59
+ .insertInto(linksTable)
60
+ .values({
61
+ source_id: sourceId,
62
+ target_id: targetId,
63
+ relationship,
64
+ metadata: metadata ? JSON.stringify(metadata) : null,
65
+ created_at: new Date(),
66
+ })
67
+ .execute();
68
+ }
69
+ }
70
+ }
@@ -3,7 +3,7 @@ export class MaintenanceOracle {
3
3
  async suggestRepairs(ctx) {
4
4
  const repairs = [];
5
5
  // Fetch maintenance policies
6
- const policies = (await ctx.db
6
+ const policies = (await ctx.trx
7
7
  .selectFrom(ctx.policiesTable)
8
8
  .selectAll()
9
9
  .where('is_enabled', '=', true)
@@ -19,12 +19,12 @@ export class MaintenanceOracle {
19
19
  const costPolicy = getPolicyValue('high_cost_threshold', 0.5);
20
20
  const storagePolicy = getPolicyValue('cold_storage_threshold', 30);
21
21
  // 1. Check for chronic high latency
22
- const latencyStats = await ctx.cortex.metrics.getMetricStats('query_latency');
22
+ const latencyStats = await ctx.cortex.metrics.getMetricStats('query_latency', {}, ctx.trx);
23
23
  if (latencyStats.avg > latencyPolicy && latencyStats.count > 10) {
24
24
  repairs.push(`Average latency is high (${latencyStats.avg.toFixed(2)}ms). Suggesting index audit across hit tables.`);
25
25
  }
26
26
  // 2. Detect specific slow tables
27
- const recentSlowQueries = await ctx.db
27
+ const recentSlowQueries = await ctx.trx
28
28
  .selectFrom(ctx.metricsTable)
29
29
  .select('metadata')
30
30
  .where('metric_name', '=', 'query_latency')
@@ -44,14 +44,14 @@ export class MaintenanceOracle {
44
44
  repairs.push(`Table '${table}' is experiencing periodic latency spikes. Suggesting 'CREATE INDEX' for common filters.`);
45
45
  }
46
46
  // 3. Check for high cost
47
- const totalCost = await ctx.cortex.metrics.getAverageMetric('total_cost');
47
+ const totalCost = await ctx.cortex.metrics.getAverageMetric('total_cost', ctx.trx);
48
48
  if (totalCost > costPolicy) {
49
49
  repairs.push('Average query cost is high. Suggesting prompt compression or model switching (e.g., to a smaller model).');
50
50
  }
51
51
  // 4. Cold storage candidates
52
52
  const oldThreshold = new Date(Date.now() - storagePolicy * 24 * 60 * 60 * 1000);
53
53
  const sessionsTable = ctx.config.sessionsTable || 'agent_sessions';
54
- const oldSessions = (await ctx.db
54
+ const oldSessions = (await ctx.trx
55
55
  .selectFrom(sessionsTable)
56
56
  .select((eb) => eb.fn.count('id').as('count'))
57
57
  .where('created_at', '<', oldThreshold)
@@ -1,17 +1,18 @@
1
1
  /// <reference types="./PersonaAuditor.d.ts" />
2
+ import { withLock } from '../../util/db-utils.js';
2
3
  export class PersonaAuditor {
3
4
  async audit(ctx) {
4
5
  const issues = [];
5
6
  const activePersona = await this.getActivePersona(ctx);
6
7
  if (activePersona) {
7
- const quotaCheck = await ctx.cortex.quotas.checkQuota('persona', activePersona.id);
8
+ const quotaCheck = await ctx.cortex.quotas.checkQuota('persona', activePersona.id, ctx.trx);
8
9
  if (!quotaCheck.allowed) {
9
10
  issues.push(`Quota Breach: ${quotaCheck.reason}`);
10
11
  }
11
12
  // Check for swarm-level quotas if part of a swarm
12
13
  const swarmId = activePersona.metadata?.swarm_id;
13
14
  if (swarmId) {
14
- const swarmCheck = await ctx.cortex.quotas.checkQuota('swarm', swarmId);
15
+ const swarmCheck = await ctx.cortex.quotas.checkQuota('swarm', swarmId, ctx.trx);
15
16
  if (!swarmCheck.allowed) {
16
17
  issues.push(`Swarm Quota Breach [${swarmId}]: ${swarmCheck.reason}`);
17
18
  }
@@ -41,17 +42,12 @@ export class PersonaAuditor {
41
42
  console.warn(`[PersonaAuditor] QUARANTINING Persona ${id}: ${reason}`);
42
43
  // Use the provided transaction or start a new one to ensure atomicity
43
44
  const runner = async (trx) => {
44
- let query = trx
45
+ const query = trx
45
46
  .selectFrom(ctx.personasTable)
46
47
  .selectAll()
47
48
  .where('id', '=', id);
48
- // Audit Phase 16: Exclusive lock for containment (Skip for SQLite)
49
- const executor = ctx.db.getExecutor();
50
- const adapterName = executor?.adapter?.constructor?.name || executor?.dialect?.constructor?.name || '';
51
- if (!adapterName.toLowerCase().includes('sqlite')) {
52
- query = query.forUpdate();
53
- }
54
- const persona = await query.executeTakeFirst();
49
+ const persona = await withLock(query, trx)
50
+ .executeTakeFirst();
55
51
  if (persona) {
56
52
  const metadata = typeof persona.metadata === 'string'
57
53
  ? JSON.parse(persona.metadata)
@@ -70,7 +66,7 @@ export class PersonaAuditor {
70
66
  .where('id', '=', id)
71
67
  .execute();
72
68
  // Rollback most recent changes via strategy engine
73
- await ctx.cortex.strategy.rollbackPersona(id);
69
+ await ctx.cortex.strategy.rollbackPersona(id, trx);
74
70
  }
75
71
  };
76
72
  if (ctx.trx && ctx.trx !== ctx.db) {
@@ -21,8 +21,7 @@ export class RemediationEngine {
21
21
  if (!skillName)
22
22
  return;
23
23
  console.log(`[RemediationEngine] Demoting tainted skill out of verified pool: ${skillName}`);
24
- // Use a fresh transaction for remediation if possible, or use ctx.trx
25
- await ctx.db.transaction().execute(async (trx) => {
24
+ const runner = async (trx) => {
26
25
  const skill = await trx
27
26
  .selectFrom(ctx.skillsTable)
28
27
  .select('id')
@@ -35,6 +34,12 @@ export class RemediationEngine {
35
34
  .where('id', '=', skill.id)
36
35
  .execute();
37
36
  }
38
- });
37
+ };
38
+ if (ctx.trx && ctx.trx !== ctx.db) {
39
+ await runner(ctx.trx);
40
+ }
41
+ else {
42
+ await ctx.db.transaction().execute((trx) => runner(trx));
43
+ }
39
44
  }
40
45
  }
@@ -0,0 +1,4 @@
1
+ import type { Kysely } from '../../../kysely.js';
2
+ export declare class DomainMaster {
3
+ boostDomain(db: Kysely<any>, knowledgeTable: string, domainTag: string, boostFactor?: number): Promise<number>;
4
+ }
@@ -0,0 +1,16 @@
1
+ /// <reference types="./DomainMaster.d.ts" />
2
+ import { sql } from '../../../raw-builder/sql.js';
3
+ export class DomainMaster {
4
+ async boostDomain(db, knowledgeTable, domainTag, boostFactor = 0.05) {
5
+ const result = await db
6
+ .updateTable(knowledgeTable)
7
+ .set({
8
+ confidence: sql `MIN(1.0, confidence + ${boostFactor})`,
9
+ updated_at: new Date(),
10
+ })
11
+ .where('tags', 'like', `%"${domainTag}"%`)
12
+ .where('confidence', '<', 1.0)
13
+ .execute();
14
+ return Number(result[0]?.numUpdatedRows ?? 1);
15
+ }
16
+ }
@@ -0,0 +1,6 @@
1
+ import type { Kysely } from '../../../kysely.js';
2
+ import type { AgenticConfig, KnowledgeItem } from '../../../types/index.js';
3
+ import type { Cortex } from '../../Cortex.js';
4
+ export declare class KnowledgePromoter {
5
+ promote(db: Kysely<any>, cortex: Cortex, config: AgenticConfig, knowledgeTable: string, item: KnowledgeItem): Promise<boolean>;
6
+ }
@@ -0,0 +1,54 @@
1
+ /// <reference types="./KnowledgePromoter.d.ts" />
2
+ import { withLock } from '../../util/db-utils.js';
3
+ export class KnowledgePromoter {
4
+ async promote(db, cortex, config, knowledgeTable, item) {
5
+ return await db.transaction().execute(async (trx) => {
6
+ // Check if a global version already exists
7
+ const query = trx
8
+ .selectFrom(knowledgeTable)
9
+ .selectAll()
10
+ .where('entity', '=', item.entity)
11
+ .where('fact', '=', item.fact)
12
+ .where('source_session_id', 'is', null);
13
+ const existingGlobal = await withLock(query, trx) // Prevent concurrent promotion duplication
14
+ .executeTakeFirst();
15
+ if (existingGlobal) {
16
+ // Reinforce existing global knowledge
17
+ const newConfidence = Math.min(0.99, Math.max(existingGlobal.confidence, item.confidence) + 0.01);
18
+ await trx
19
+ .updateTable(knowledgeTable)
20
+ .set({
21
+ confidence: newConfidence,
22
+ updated_at: new Date(),
23
+ })
24
+ .where('id', '=', existingGlobal.id)
25
+ .execute();
26
+ return false;
27
+ }
28
+ else {
29
+ // Create new global knowledge
30
+ const tags = item.tags ? [...item.tags] : [];
31
+ if (!tags.includes('hive_mind'))
32
+ tags.push('hive_mind');
33
+ await trx
34
+ .insertInto(knowledgeTable)
35
+ .values({
36
+ entity: item.entity,
37
+ fact: item.fact,
38
+ confidence: item.confidence,
39
+ source_session_id: null,
40
+ tags: JSON.stringify(tags),
41
+ metadata: JSON.stringify({
42
+ ...item.metadata,
43
+ promoted_from: item.id,
44
+ promoted_at: new Date(),
45
+ }),
46
+ created_at: new Date(),
47
+ updated_at: new Date(),
48
+ })
49
+ .execute();
50
+ return true;
51
+ }
52
+ });
53
+ }
54
+ }
@@ -0,0 +1,6 @@
1
+ import type { Kysely } from '../../../kysely.js';
2
+ import type { AgenticConfig } from '../../../types/index.js';
3
+ import type { Cortex } from '../../Cortex.js';
4
+ export declare class SkillPropagator {
5
+ propagate(db: Kysely<any>, cortex: Cortex, config: AgenticConfig): Promise<number>;
6
+ }
@@ -0,0 +1,88 @@
1
+ /// <reference types="./SkillPropagator.d.ts" />
2
+ export class SkillPropagator {
3
+ async propagate(db, cortex, config) {
4
+ let broadcastCount = 0;
5
+ const capTable = config.capabilitiesTable || 'agent_capabilities';
6
+ // 1. Regular Skill Propagation (Verified Alpha/Shadow)
7
+ const verifiedSkills = await cortex.capabilities.getCapabilities('verified');
8
+ const lineageGroups = new Map();
9
+ for (const skill of verifiedSkills) {
10
+ const meta = typeof skill.metadata === 'string' ? JSON.parse(skill.metadata) : (skill.metadata || {});
11
+ const lineage = meta.lineage || skill.name;
12
+ if (!lineageGroups.has(lineage))
13
+ lineageGroups.set(lineage, []);
14
+ lineageGroups.get(lineage).push({ skill, meta });
15
+ }
16
+ for (const [_, variants] of lineageGroups.entries()) {
17
+ const alphaCandidate = variants.reduce((prev, curr) => {
18
+ const getScore = (v) => {
19
+ const r = v.skill.reliability ?? 0.5;
20
+ const n = (typeof v.meta === 'string' ? JSON.parse(v.meta) : v.meta)?.usages ?? 1;
21
+ const K = 5;
22
+ const prior = 0.5;
23
+ return (r * n + K * prior) / (n + K);
24
+ };
25
+ return getScore(curr) > getScore(prev) ? curr : prev;
26
+ });
27
+ await db.transaction().execute(async (trx) => {
28
+ const currentMeta = alphaCandidate.meta || {};
29
+ const updatedMeta = {
30
+ ...currentMeta,
31
+ is_alpha: true,
32
+ broadcasted: true,
33
+ broadcasted_at: new Date()
34
+ };
35
+ await trx
36
+ .updateTable(capTable)
37
+ .set({ metadata: JSON.stringify(updatedMeta) })
38
+ .where('id', '=', alphaCandidate.skill.id)
39
+ .execute();
40
+ const shadowIds = variants
41
+ .filter(v => v.skill.id !== alphaCandidate.skill.id)
42
+ .map(v => v.skill.id);
43
+ for (const sid of shadowIds) {
44
+ const sMatch = variants.find(v => v.skill.id === sid);
45
+ const sMeta = sMatch?.meta || {};
46
+ await trx.updateTable(capTable)
47
+ .set({
48
+ metadata: JSON.stringify({ ...sMeta, is_alpha: false, is_shadow: true }),
49
+ status: 'experimental'
50
+ })
51
+ .where('id', '=', sid)
52
+ .execute();
53
+ }
54
+ });
55
+ broadcastCount++;
56
+ }
57
+ // 2. Blacklisted Skill Propagation (Immune Prophet)
58
+ const blacklisted = await cortex.capabilities.getCapabilities('blacklisted');
59
+ const blackIDs = blacklisted
60
+ .filter(s => {
61
+ const meta = typeof s.metadata === 'string' ? JSON.parse(s.metadata) : (s.metadata || {});
62
+ return !meta.broadcasted || !meta.hive_blacklisted;
63
+ })
64
+ .map(s => s.id);
65
+ if (blackIDs.length > 0) {
66
+ await db.transaction().execute(async (trx) => {
67
+ for (const bid of blackIDs) {
68
+ const skill = await trx.selectFrom(capTable)
69
+ .select('metadata')
70
+ .where('id', '=', bid)
71
+ .executeTakeFirst();
72
+ if (skill) {
73
+ const meta = typeof skill.metadata === 'string' ? JSON.parse(skill.metadata) : (skill.metadata || {});
74
+ await trx.updateTable(capTable)
75
+ .set({
76
+ metadata: JSON.stringify({ ...meta, broadcasted: true, hive_blacklisted: true }),
77
+ updated_at: new Date()
78
+ })
79
+ .where('id', '=', bid)
80
+ .execute();
81
+ }
82
+ }
83
+ });
84
+ broadcastCount += blackIDs.length;
85
+ }
86
+ return broadcastCount;
87
+ }
88
+ }
@@ -0,0 +1,6 @@
1
+ import type { AgentPersona } from '../../../types/index.js';
2
+ import type { Cortex } from '../../Cortex.js';
3
+ import type { PerformanceReport } from '../StrategicPlanner.js';
4
+ export declare class EvolutionVerificator {
5
+ verify(trxOrDb: any, cortex: Cortex, personasTable: string, persona: AgentPersona, report: PerformanceReport, allPersonas: AgentPersona[], rollbackFn: (id: string | number, trx: any) => Promise<string>): Promise<string | null>;
6
+ }
@@ -0,0 +1,45 @@
1
+ /// <reference types="./EvolutionVerificator.d.ts" />
2
+ export class EvolutionVerificator {
3
+ async verify(trxOrDb, cortex, personasTable, persona, report, allPersonas, rollbackFn) {
4
+ const rollbackHistory = persona.metadata?.rollbackHistory || [];
5
+ const recentRollbacks = rollbackHistory.filter((ts) => Date.now() - ts < 604800000).length;
6
+ const hiveTrusted = allPersonas.filter((p) => p.metadata?.evolution_status === 'stable' && p.metadata?.mutation_reason === persona.metadata?.mutation_reason).length;
7
+ let sampleSizeThreshold = 10 + recentRollbacks * 10;
8
+ const baseline = persona.metadata?.verification_baseline || { successRate: 0.8, averageLatency: 500 };
9
+ // Accelerated Stabilization
10
+ const earlyZ = (report.successRate - baseline.successRate) / 0.1;
11
+ if (earlyZ > 3.0 && report.sampleSize >= 5)
12
+ sampleSizeThreshold = 5;
13
+ if (hiveTrusted >= 3)
14
+ sampleSizeThreshold = Math.max(5, Math.floor(sampleSizeThreshold / 2));
15
+ if (report.sampleSize < sampleSizeThreshold)
16
+ return null;
17
+ // Dynamic Variance
18
+ const recentMetrics = await cortex.metrics.getRecentMetrics(100, trxOrDb);
19
+ const values = recentMetrics.filter((m) => m.metricName === 'success_rate').map((m) => Number(m.metricValue));
20
+ const mean = values.reduce((a, b) => a + b, 0) / (values.length || 1);
21
+ const variance = values.reduce((a, b) => a + Math.pow(b - mean, 2), 0) / (values.length || 1);
22
+ const stdDev = Math.sqrt(variance) || 0.1;
23
+ const zScore = (report.successRate - baseline.successRate) / (stdDev || 1);
24
+ if (zScore < -2.0)
25
+ return await rollbackFn(persona.id, trxOrDb);
26
+ if (report.sampleSize >= sampleSizeThreshold * 2 && zScore >= -0.5) {
27
+ if (persona.metadata?.mutation_reason?.includes('optimize_efficiency')) {
28
+ await cortex.rules.defineRule('all', 'all', 'audit', {
29
+ condition: 'latency > 500',
30
+ priority: 10,
31
+ metadata: { reason: `Distilled from successful persona ${persona.id} optimization` },
32
+ }, trxOrDb);
33
+ }
34
+ await trxOrDb.updateTable(personasTable)
35
+ .set({ metadata: JSON.stringify({ ...persona.metadata, evolution_status: 'stable' }) })
36
+ .where('id', '=', persona.id)
37
+ .execute();
38
+ return `Evolution stabilized for persona ${persona.id}`;
39
+ }
40
+ const timeInVerification = (Date.now() - (persona.metadata?.verification_started_at || 0)) / 1000;
41
+ if (timeInVerification > 86400 * 3)
42
+ return await rollbackFn(persona.id, trxOrDb);
43
+ return null;
44
+ }
45
+ }
@@ -0,0 +1,10 @@
1
+ import type { Kysely } from '../../../kysely.js';
2
+ import type { AgentPersona } from '../../../types/index.js';
3
+ import type { Cortex } from '../../Cortex.js';
4
+ import type { PerformanceReport } from '../StrategicPlanner.js';
5
+ export declare class MutationEngine {
6
+ private personasTable;
7
+ constructor(personasTable: string);
8
+ applyMutation(db: Kysely<any>, cortex: Cortex, persona: AgentPersona, report: PerformanceReport, failures: string[] | undefined, sanitizeRoleFn: (role: string) => string, parsePersonaFn: (p: any) => AgentPersona): Promise<string | null>;
9
+ rollback(db: Kysely<any>, id: string | number, parsePersonaFn: (p: any) => AgentPersona): Promise<string>;
10
+ }