noormme 1.1.0 → 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 (225) hide show
  1. package/README.md +84 -65
  2. package/dist/cjs/agentic/ActionJournal.js +13 -9
  3. package/dist/cjs/agentic/CapabilityManager.js +35 -21
  4. package/dist/cjs/agentic/CognitiveRepository.js +19 -9
  5. package/dist/cjs/agentic/ContextBuffer.js +24 -12
  6. package/dist/cjs/agentic/Cortex.js +11 -4
  7. package/dist/cjs/agentic/EpisodicMemory.js +7 -5
  8. package/dist/cjs/agentic/PersonaManager.js +16 -8
  9. package/dist/cjs/agentic/PolicyEnforcer.js +31 -12
  10. package/dist/cjs/agentic/ResourceMonitor.js +4 -4
  11. package/dist/cjs/agentic/SessionCompressor.js +22 -14
  12. package/dist/cjs/agentic/SessionManager.js +36 -18
  13. package/dist/cjs/agentic/VectorIndexer.js +22 -18
  14. package/dist/cjs/agentic/improvement/AblationEngine.js +22 -15
  15. package/dist/cjs/agentic/improvement/ActionRefiner.js +12 -10
  16. package/dist/cjs/agentic/improvement/ConflictResolver.js +5 -5
  17. package/dist/cjs/agentic/improvement/CortexJanitor.js +30 -9
  18. package/dist/cjs/agentic/improvement/CuriosityEngine.js +27 -23
  19. package/dist/cjs/agentic/improvement/EvolutionRitual.js +4 -4
  20. package/dist/cjs/agentic/improvement/EvolutionaryPilot.js +16 -6
  21. package/dist/cjs/agentic/improvement/GoalArchitect.d.ts +2 -2
  22. package/dist/cjs/agentic/improvement/GoalArchitect.js +20 -18
  23. package/dist/cjs/agentic/improvement/GovernanceManager.js +19 -11
  24. package/dist/cjs/agentic/improvement/HiveLink.js +22 -15
  25. package/dist/cjs/agentic/improvement/KnowledgeDistiller.js +48 -32
  26. package/dist/cjs/agentic/improvement/RecursiveReasoner.js +40 -17
  27. package/dist/cjs/agentic/improvement/ReflectionEngine.js +10 -8
  28. package/dist/cjs/agentic/improvement/RitualOrchestrator.js +28 -22
  29. package/dist/cjs/agentic/improvement/RuleEngine.js +22 -17
  30. package/dist/cjs/agentic/improvement/SelfEvolution.js +24 -18
  31. package/dist/cjs/agentic/improvement/SelfTestRegistry.js +18 -15
  32. package/dist/cjs/agentic/improvement/SkillSynthesizer.js +42 -27
  33. package/dist/cjs/agentic/improvement/SovereignMetrics.js +19 -17
  34. package/dist/cjs/agentic/improvement/StrategicPlanner.js +120 -55
  35. package/dist/cjs/agentic/telemetry/CognitiveSynthesizer.js +26 -12
  36. package/dist/cjs/agentic/telemetry/EventHarvester.js +3 -2
  37. package/dist/cjs/agentic/telemetry/ResearchAlchemist.js +5 -2
  38. package/dist/cjs/cache/cache-manager.js +7 -4
  39. package/dist/cjs/cli/commands/analyze.js +5 -4
  40. package/dist/cjs/cli/commands/generate.js +81 -44
  41. package/dist/cjs/cli/commands/init.js +7 -3
  42. package/dist/cjs/cli/commands/inspect.js +139 -36
  43. package/dist/cjs/cli/commands/migrate.js +5 -4
  44. package/dist/cjs/cli/commands/optimize.js +4 -4
  45. package/dist/cjs/cli/commands/status.js +9 -7
  46. package/dist/cjs/cli/commands/watch.js +7 -6
  47. package/dist/cjs/cli/index.js +2 -2
  48. package/dist/cjs/cli/ui/spinner.d.ts +15 -0
  49. package/dist/cjs/cli/ui/spinner.js +76 -0
  50. package/dist/cjs/dialect/database-introspector.js +3 -1
  51. package/dist/cjs/dialect/postgresql/postgresql-driver.js +3 -1
  52. package/dist/cjs/dialect/postgresql/postgresql-features.js +18 -8
  53. package/dist/cjs/dialect/postgresql/postgresql-introspector.js +2 -2
  54. package/dist/cjs/dialect/sqlite/sqlite-auto-indexer.js +47 -33
  55. package/dist/cjs/dialect/sqlite/sqlite-auto-optimizer.js +8 -7
  56. package/dist/cjs/dialect/sqlite/sqlite-driver.js +2 -2
  57. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +15 -12
  58. package/dist/cjs/edge-runtime/edge-config.js +21 -19
  59. package/dist/cjs/errors/NoormError.js +22 -20
  60. package/dist/cjs/helpers/agent-schema.js +2 -0
  61. package/dist/cjs/helpers/postgresql.js +7 -4
  62. package/dist/cjs/helpers/schema-evolution.js +31 -6
  63. package/dist/cjs/index.d.ts +3 -3
  64. package/dist/cjs/logging/logger.js +8 -4
  65. package/dist/cjs/migration/data_migrator.js +12 -11
  66. package/dist/cjs/migration/database_migration_manager.js +17 -13
  67. package/dist/cjs/migration/schema_differ.js +22 -14
  68. package/dist/cjs/migration/schema_introspector.js +8 -8
  69. package/dist/cjs/migration/type_mapper.js +68 -67
  70. package/dist/cjs/noormme.js +52 -37
  71. package/dist/cjs/performance/index.js +5 -5
  72. package/dist/cjs/performance/query-optimizer.js +26 -21
  73. package/dist/cjs/performance/services/cache-service.js +26 -16
  74. package/dist/cjs/performance/services/connection-factory.js +28 -23
  75. package/dist/cjs/performance/services/metrics-collector.js +41 -36
  76. package/dist/cjs/performance/utils/query-parser.js +15 -16
  77. package/dist/cjs/relationships/relationship-engine.js +10 -8
  78. package/dist/cjs/repository/repository-factory.js +97 -38
  79. package/dist/cjs/schema/core/coordinators/schema-discovery.coordinator.js +1 -3
  80. package/dist/cjs/schema/core/discovery/relationship-discovery.js +16 -16
  81. package/dist/cjs/schema/core/discovery/table-metadata-discovery.js +9 -9
  82. package/dist/cjs/schema/core/discovery/view-discovery.js +5 -4
  83. package/dist/cjs/schema/core/factories/discovery-factory.js +4 -4
  84. package/dist/cjs/schema/core/utils/name-generator.js +14 -5
  85. package/dist/cjs/schema/core/utils/type-mapper.js +24 -24
  86. package/dist/cjs/schema/dialects/postgresql/postgresql-discovery.coordinator.js +8 -7
  87. package/dist/cjs/schema/dialects/sqlite/discovery/sqlite-constraint-discovery.js +17 -15
  88. package/dist/cjs/schema/dialects/sqlite/discovery/sqlite-index-discovery.js +8 -8
  89. package/dist/cjs/schema/dialects/sqlite/introspection/sqlite-schema-introspector.js +6 -11
  90. package/dist/cjs/schema/dialects/sqlite/sqlite-discovery.coordinator.js +14 -13
  91. package/dist/cjs/schema/test/basic-schema-test.js +11 -9
  92. package/dist/cjs/schema/test/dialect-capabilities.test.js +6 -6
  93. package/dist/cjs/schema/test/discovery-factory.test.js +2 -2
  94. package/dist/cjs/schema/test/error-handling.test.js +8 -6
  95. package/dist/cjs/schema/test/integration.test.js +24 -18
  96. package/dist/cjs/schema/test/schema-discovery-coordinator.test.js +9 -9
  97. package/dist/cjs/schema/test/simple-schema-test.js +9 -9
  98. package/dist/cjs/schema/test/sqlite-discovery-coordinator.test.js +64 -48
  99. package/dist/cjs/schema/test/test-runner.js +3 -3
  100. package/dist/cjs/sqlite-migration/index.d.ts +2 -2
  101. package/dist/cjs/sqlite-migration/sqlite-migration-manager.js +21 -17
  102. package/dist/cjs/sqlite-migration/sqlite-migration-provider.js +38 -34
  103. package/dist/cjs/testing/test-utils.js +36 -34
  104. package/dist/cjs/types/index.d.ts +5 -2
  105. package/dist/cjs/types/index.js +6 -3
  106. package/dist/cjs/types/type-generator.js +46 -42
  107. package/dist/cjs/util/safe-sql-helpers.js +1 -1
  108. package/dist/cjs/util/security-validator.js +20 -9
  109. package/dist/cjs/utils/errorHelpers.js +20 -10
  110. package/dist/cjs/watch/schema-watcher.js +22 -23
  111. package/dist/esm/agentic/ActionJournal.js +13 -9
  112. package/dist/esm/agentic/CapabilityManager.js +35 -21
  113. package/dist/esm/agentic/CognitiveRepository.js +19 -9
  114. package/dist/esm/agentic/ContextBuffer.js +24 -12
  115. package/dist/esm/agentic/Cortex.js +11 -4
  116. package/dist/esm/agentic/EpisodicMemory.js +7 -5
  117. package/dist/esm/agentic/PersonaManager.js +16 -8
  118. package/dist/esm/agentic/PolicyEnforcer.js +31 -12
  119. package/dist/esm/agentic/ResourceMonitor.js +4 -4
  120. package/dist/esm/agentic/SessionCompressor.js +22 -14
  121. package/dist/esm/agentic/SessionManager.js +36 -18
  122. package/dist/esm/agentic/VectorIndexer.js +22 -18
  123. package/dist/esm/agentic/improvement/AblationEngine.js +22 -15
  124. package/dist/esm/agentic/improvement/ActionRefiner.js +12 -10
  125. package/dist/esm/agentic/improvement/ConflictResolver.js +5 -5
  126. package/dist/esm/agentic/improvement/CortexJanitor.js +30 -9
  127. package/dist/esm/agentic/improvement/CuriosityEngine.js +27 -23
  128. package/dist/esm/agentic/improvement/EvolutionRitual.js +4 -4
  129. package/dist/esm/agentic/improvement/EvolutionaryPilot.js +16 -6
  130. package/dist/esm/agentic/improvement/GoalArchitect.d.ts +2 -2
  131. package/dist/esm/agentic/improvement/GoalArchitect.js +20 -18
  132. package/dist/esm/agentic/improvement/GovernanceManager.js +19 -11
  133. package/dist/esm/agentic/improvement/HiveLink.js +22 -15
  134. package/dist/esm/agentic/improvement/KnowledgeDistiller.js +48 -32
  135. package/dist/esm/agentic/improvement/RecursiveReasoner.js +40 -17
  136. package/dist/esm/agentic/improvement/ReflectionEngine.js +10 -8
  137. package/dist/esm/agentic/improvement/RitualOrchestrator.js +28 -22
  138. package/dist/esm/agentic/improvement/RuleEngine.js +22 -17
  139. package/dist/esm/agentic/improvement/SelfEvolution.js +24 -18
  140. package/dist/esm/agentic/improvement/SelfTestRegistry.js +18 -15
  141. package/dist/esm/agentic/improvement/SkillSynthesizer.js +42 -27
  142. package/dist/esm/agentic/improvement/SovereignMetrics.js +19 -17
  143. package/dist/esm/agentic/improvement/StrategicPlanner.js +120 -55
  144. package/dist/esm/agentic/telemetry/CognitiveSynthesizer.js +26 -12
  145. package/dist/esm/agentic/telemetry/EventHarvester.js +3 -2
  146. package/dist/esm/agentic/telemetry/ResearchAlchemist.js +5 -2
  147. package/dist/esm/cache/cache-manager.js +7 -4
  148. package/dist/esm/cli/commands/analyze.js +5 -4
  149. package/dist/esm/cli/commands/generate.js +82 -45
  150. package/dist/esm/cli/commands/init.js +8 -4
  151. package/dist/esm/cli/commands/inspect.js +140 -37
  152. package/dist/esm/cli/commands/migrate.js +5 -4
  153. package/dist/esm/cli/commands/optimize.js +4 -4
  154. package/dist/esm/cli/commands/status.js +9 -7
  155. package/dist/esm/cli/commands/watch.js +7 -6
  156. package/dist/esm/cli/index.js +2 -2
  157. package/dist/esm/cli/ui/spinner.d.ts +15 -0
  158. package/dist/esm/cli/ui/spinner.js +70 -0
  159. package/dist/esm/dialect/database-introspector.js +3 -1
  160. package/dist/esm/dialect/postgresql/postgresql-driver.js +3 -1
  161. package/dist/esm/dialect/postgresql/postgresql-features.js +18 -8
  162. package/dist/esm/dialect/postgresql/postgresql-introspector.js +2 -2
  163. package/dist/esm/dialect/sqlite/sqlite-auto-indexer.js +47 -33
  164. package/dist/esm/dialect/sqlite/sqlite-auto-optimizer.js +8 -7
  165. package/dist/esm/dialect/sqlite/sqlite-driver.js +2 -2
  166. package/dist/esm/dialect/sqlite/sqlite-introspector.js +15 -12
  167. package/dist/esm/dynamic/dynamic.js +1 -1
  168. package/dist/esm/edge-runtime/edge-config.js +21 -19
  169. package/dist/esm/errors/NoormError.js +22 -20
  170. package/dist/esm/helpers/agent-schema.js +2 -0
  171. package/dist/esm/helpers/postgresql.js +7 -4
  172. package/dist/esm/helpers/schema-evolution.js +31 -6
  173. package/dist/esm/index.d.ts +3 -3
  174. package/dist/esm/index.js +2 -2
  175. package/dist/esm/logging/logger.js +8 -4
  176. package/dist/esm/migration/data_migrator.js +12 -11
  177. package/dist/esm/migration/database_migration_manager.js +18 -14
  178. package/dist/esm/migration/schema_differ.js +22 -14
  179. package/dist/esm/migration/schema_introspector.js +8 -8
  180. package/dist/esm/migration/type_mapper.js +68 -67
  181. package/dist/esm/noormme.js +52 -37
  182. package/dist/esm/performance/index.js +5 -5
  183. package/dist/esm/performance/query-optimizer.js +26 -21
  184. package/dist/esm/performance/services/cache-service.js +26 -16
  185. package/dist/esm/performance/services/connection-factory.js +28 -23
  186. package/dist/esm/performance/services/metrics-collector.js +41 -36
  187. package/dist/esm/performance/utils/query-parser.js +15 -16
  188. package/dist/esm/raw-builder/sql.js +1 -1
  189. package/dist/esm/relationships/relationship-engine.js +10 -8
  190. package/dist/esm/repository/repository-factory.js +98 -39
  191. package/dist/esm/schema/builders/alter-table-add-index-builder.js +1 -1
  192. package/dist/esm/schema/builders/create-index-builder.js +2 -2
  193. package/dist/esm/schema/core/coordinators/schema-discovery.coordinator.js +1 -3
  194. package/dist/esm/schema/core/discovery/relationship-discovery.js +16 -16
  195. package/dist/esm/schema/core/discovery/table-metadata-discovery.js +9 -9
  196. package/dist/esm/schema/core/discovery/view-discovery.js +5 -4
  197. package/dist/esm/schema/core/factories/discovery-factory.js +4 -4
  198. package/dist/esm/schema/core/utils/name-generator.js +14 -5
  199. package/dist/esm/schema/core/utils/type-mapper.js +24 -24
  200. package/dist/esm/schema/dialects/postgresql/postgresql-discovery.coordinator.js +8 -7
  201. package/dist/esm/schema/dialects/sqlite/discovery/sqlite-constraint-discovery.js +17 -15
  202. package/dist/esm/schema/dialects/sqlite/discovery/sqlite-index-discovery.js +8 -8
  203. package/dist/esm/schema/dialects/sqlite/introspection/sqlite-schema-introspector.js +6 -11
  204. package/dist/esm/schema/dialects/sqlite/sqlite-discovery.coordinator.js +14 -13
  205. package/dist/esm/schema/test/basic-schema-test.js +11 -9
  206. package/dist/esm/schema/test/dialect-capabilities.test.js +6 -6
  207. package/dist/esm/schema/test/discovery-factory.test.js +2 -2
  208. package/dist/esm/schema/test/error-handling.test.js +8 -6
  209. package/dist/esm/schema/test/integration.test.js +24 -18
  210. package/dist/esm/schema/test/schema-discovery-coordinator.test.js +9 -9
  211. package/dist/esm/schema/test/simple-schema-test.js +9 -9
  212. package/dist/esm/schema/test/sqlite-discovery-coordinator.test.js +64 -48
  213. package/dist/esm/schema/test/test-runner.js +3 -3
  214. package/dist/esm/sqlite-migration/index.d.ts +2 -2
  215. package/dist/esm/sqlite-migration/sqlite-migration-manager.js +21 -17
  216. package/dist/esm/sqlite-migration/sqlite-migration-provider.js +38 -34
  217. package/dist/esm/testing/test-utils.js +36 -34
  218. package/dist/esm/types/index.d.ts +5 -2
  219. package/dist/esm/types/index.js +6 -3
  220. package/dist/esm/types/type-generator.js +46 -42
  221. package/dist/esm/util/safe-sql-helpers.js +1 -1
  222. package/dist/esm/util/security-validator.js +20 -9
  223. package/dist/esm/utils/errorHelpers.js +21 -11
  224. package/dist/esm/watch/schema-watcher.js +22 -23
  225. package/package.json +40 -44
@@ -28,10 +28,12 @@ class PersonaManager {
28
28
  const values = {
29
29
  name,
30
30
  role: options.role || null,
31
- capabilities: options.capabilities ? JSON.stringify(options.capabilities) : null,
31
+ capabilities: options.capabilities
32
+ ? JSON.stringify(options.capabilities)
33
+ : null,
32
34
  policies: options.policies ? JSON.stringify(options.policies) : null,
33
35
  metadata: options.metadata ? JSON.stringify(options.metadata) : null,
34
- updated_at: new Date()
36
+ updated_at: new Date(),
35
37
  };
36
38
  if (existing) {
37
39
  const updated = await this.typedDb
@@ -46,7 +48,7 @@ class PersonaManager {
46
48
  .insertInto(this.personasTable)
47
49
  .values({
48
50
  ...values,
49
- created_at: new Date()
51
+ created_at: new Date(),
50
52
  })
51
53
  .returningAll()
52
54
  .executeTakeFirstOrThrow();
@@ -82,18 +84,24 @@ class PersonaManager {
82
84
  .selectAll()
83
85
  .orderBy('name', 'asc')
84
86
  .execute();
85
- return list.map(p => this.parsePersona(p));
87
+ return list.map((p) => this.parsePersona(p));
86
88
  }
87
89
  parsePersona(p) {
88
90
  return {
89
91
  id: p.id,
90
92
  name: p.name,
91
93
  role: p.role || undefined,
92
- capabilities: typeof p.capabilities === 'string' ? JSON.parse(p.capabilities) : (p.capabilities || []),
93
- policies: typeof p.policies === 'string' ? JSON.parse(p.policies) : (p.policies || []),
94
- metadata: typeof p.metadata === 'string' ? JSON.parse(p.metadata) : (p.metadata || {}),
94
+ capabilities: typeof p.capabilities === 'string'
95
+ ? JSON.parse(p.capabilities)
96
+ : p.capabilities || [],
97
+ policies: typeof p.policies === 'string'
98
+ ? JSON.parse(p.policies)
99
+ : p.policies || [],
100
+ metadata: typeof p.metadata === 'string'
101
+ ? JSON.parse(p.metadata)
102
+ : p.metadata || {},
95
103
  createdAt: new Date(p.created_at),
96
- updatedAt: new Date(p.updated_at)
104
+ updatedAt: new Date(p.updated_at),
97
105
  };
98
106
  }
99
107
  }
@@ -36,7 +36,7 @@ class PolicyEnforcer {
36
36
  type,
37
37
  definition: JSON.stringify(definition),
38
38
  is_enabled: isEnabled,
39
- updated_at: new Date()
39
+ updated_at: new Date(),
40
40
  })
41
41
  .where('id', '=', existing.id)
42
42
  .returningAll()
@@ -51,7 +51,7 @@ class PolicyEnforcer {
51
51
  definition: JSON.stringify(definition),
52
52
  is_enabled: isEnabled,
53
53
  created_at: new Date(),
54
- updated_at: new Date()
54
+ updated_at: new Date(),
55
55
  })
56
56
  .returningAll()
57
57
  .executeTakeFirstOrThrow();
@@ -75,20 +75,32 @@ class PolicyEnforcer {
75
75
  // 1. Threshold Check (Numeric)
76
76
  if (typeof value === 'number') {
77
77
  if (def.max !== undefined && value > def.max) {
78
- return { allowed: false, reason: `Value ${value} exceeds max ${def.max} for policy '${name}'` };
78
+ return {
79
+ allowed: false,
80
+ reason: `Value ${value} exceeds max ${def.max} for policy '${name}'`,
81
+ };
79
82
  }
80
83
  if (def.min !== undefined && value < def.min) {
81
- return { allowed: false, reason: `Value ${value} below min ${def.min} for policy '${name}'` };
84
+ return {
85
+ allowed: false,
86
+ reason: `Value ${value} below min ${def.min} for policy '${name}'`,
87
+ };
82
88
  }
83
89
  }
84
90
  // 2. Pattern Check (String/Regex)
85
91
  if (typeof value === 'string' && def.pattern) {
86
92
  const regex = new RegExp(def.pattern, 'i');
87
93
  if (def.mustMatch && !regex.test(value)) {
88
- return { allowed: false, reason: `Value does not match required pattern for policy '${name}'` };
94
+ return {
95
+ allowed: false,
96
+ reason: `Value does not match required pattern for policy '${name}'`,
97
+ };
89
98
  }
90
99
  if (!def.mustMatch && regex.test(value)) {
91
- return { allowed: false, reason: `Value contains forbidden pattern for policy '${name}'` };
100
+ return {
101
+ allowed: false,
102
+ reason: `Value contains forbidden pattern for policy '${name}'`,
103
+ };
92
104
  }
93
105
  }
94
106
  // 3. Budget Check (Cumulative)
@@ -97,7 +109,10 @@ class PolicyEnforcer {
97
109
  const limit = def.limit || 0;
98
110
  const total = await this.getCumulativeMetric(def.metricName, period);
99
111
  if (total + (typeof value === 'number' ? value : 0) > limit) {
100
- return { allowed: false, reason: `Cumulative budget for '${def.metricName}' exceeded (${total.toFixed(4)} / ${limit})` };
112
+ return {
113
+ allowed: false,
114
+ reason: `Cumulative budget for '${def.metricName}' exceeded (${total.toFixed(4)} / ${limit})`,
115
+ };
101
116
  }
102
117
  }
103
118
  return { allowed: true };
@@ -124,7 +139,7 @@ class PolicyEnforcer {
124
139
  }
125
140
  return {
126
141
  allowed: violations.length === 0,
127
- violations
142
+ violations,
128
143
  };
129
144
  }
130
145
  /**
@@ -136,7 +151,7 @@ class PolicyEnforcer {
136
151
  .selectAll()
137
152
  .where('is_enabled', '=', true)
138
153
  .execute();
139
- return list.map(p => this.parsePolicy(p));
154
+ return list.map((p) => this.parsePolicy(p));
140
155
  }
141
156
  async getCumulativeMetric(metricName, period) {
142
157
  let cutoff = new Date(0); // beginning of time
@@ -160,11 +175,15 @@ class PolicyEnforcer {
160
175
  id: p.id,
161
176
  name: p.name,
162
177
  type: p.type,
163
- definition: typeof p.definition === 'string' ? JSON.parse(p.definition) : p.definition,
178
+ definition: typeof p.definition === 'string'
179
+ ? JSON.parse(p.definition)
180
+ : p.definition,
164
181
  isEnabled: !!p.is_enabled,
165
- metadata: typeof p.metadata === 'string' ? JSON.parse(p.metadata) : (p.metadata || {}),
182
+ metadata: typeof p.metadata === 'string'
183
+ ? JSON.parse(p.metadata)
184
+ : p.metadata || {},
166
185
  createdAt: new Date(p.created_at),
167
- updatedAt: new Date(p.updated_at)
186
+ updatedAt: new Date(p.updated_at),
168
187
  };
169
188
  }
170
189
  }
@@ -32,7 +32,7 @@ class ResourceMonitor {
32
32
  cost: cost || 0,
33
33
  currency: 'USD',
34
34
  metadata: metadata ? JSON.stringify(metadata) : null,
35
- created_at: new Date()
35
+ created_at: new Date(),
36
36
  })
37
37
  .returningAll()
38
38
  .executeTakeFirstOrThrow();
@@ -68,14 +68,14 @@ class ResourceMonitor {
68
68
  .select([
69
69
  'model_name',
70
70
  (eb) => eb.fn.sum((0, sql_js_1.sql) `input_tokens + output_tokens`).as('totalTokens'),
71
- (eb) => eb.fn.sum('cost').as('totalCost')
71
+ (eb) => eb.fn.sum('cost').as('totalCost'),
72
72
  ])
73
73
  .groupBy('model_name')
74
74
  .execute();
75
75
  return results.map((r) => ({
76
76
  modelName: r.model_name,
77
77
  totalTokens: Number(r.totalTokens),
78
- totalCost: Number(r.totalCost)
78
+ totalCost: Number(r.totalCost),
79
79
  }));
80
80
  }
81
81
  parseUsage(usage) {
@@ -88,7 +88,7 @@ class ResourceMonitor {
88
88
  outputTokens: usage.output_tokens,
89
89
  cost: usage.cost,
90
90
  currency: usage.currency,
91
- createdAt: new Date(usage.created_at)
91
+ createdAt: new Date(usage.created_at),
92
92
  };
93
93
  }
94
94
  }
@@ -19,7 +19,7 @@ class SessionCompressor {
19
19
  */
20
20
  async compress(sessionId, summary, startMessageId, endMessageId, anchors = [], metadata) {
21
21
  console.log(`[SessionCompressor] Compressing session ${sessionId} with ${anchors.length} semantic anchors.`);
22
- const epoch = await this.db
22
+ const epoch = (await this.db
23
23
  .insertInto(this.epochsTable)
24
24
  .values({
25
25
  session_id: sessionId,
@@ -29,10 +29,10 @@ class SessionCompressor {
29
29
  metadata: metadata || anchors.length > 0
30
30
  ? JSON.stringify({ ...metadata, anchors })
31
31
  : null,
32
- created_at: new Date()
32
+ created_at: new Date(),
33
33
  })
34
34
  .returningAll()
35
- .executeTakeFirstOrThrow();
35
+ .executeTakeFirstOrThrow());
36
36
  return this.parseEpoch(epoch);
37
37
  }
38
38
  /**
@@ -51,8 +51,8 @@ class SessionCompressor {
51
51
  eb('metadata', 'is', null),
52
52
  eb.and([
53
53
  eb('metadata', 'not like', '%"anchor":true%'),
54
- eb('metadata', 'not like', '%"anchor": true%')
55
- ])
54
+ eb('metadata', 'not like', '%"anchor": true%'),
55
+ ]),
56
56
  ]));
57
57
  }
58
58
  const result = await query.execute();
@@ -70,11 +70,15 @@ class SessionCompressor {
70
70
  if (epochs.length > 10) {
71
71
  console.log(`[SessionCompressor] Consolidating ${epochs.length} epochs into a new Era for session ${sessionId}`);
72
72
  const summary = `Consolidated era summary of ${epochs.length} epochs: ` +
73
- epochs.slice(0, 5).map(e => e.summary).join('; ') + '...';
73
+ epochs
74
+ .slice(0, 5)
75
+ .map((e) => e.summary)
76
+ .join('; ') +
77
+ '...';
74
78
  const eraMetadata = {
75
79
  type: 'era',
76
80
  original_epochs: epochs.length,
77
- consolidated_at: new Date().toISOString()
81
+ consolidated_at: new Date().toISOString(),
78
82
  };
79
83
  // In this version, we mark the new epoch as an "Era" in metadata
80
84
  const consolidatedEpoch = await this.compress(sessionId, summary, epochs[0].startMessageId, epochs[epochs.length - 1].endMessageId, [], eraMetadata);
@@ -87,12 +91,16 @@ class SessionCompressor {
87
91
  session_id: sessionId,
88
92
  role: 'system',
89
93
  content: `[ERA SUMMARY] This era covers the initial phases of the session. Key takeaways: ${summary}`,
90
- metadata: JSON.stringify({ anchor: true, type: 'era_reification', epoch_id: consolidatedEpoch.id }),
91
- created_at: new Date()
94
+ metadata: JSON.stringify({
95
+ anchor: true,
96
+ type: 'era_reification',
97
+ epoch_id: consolidatedEpoch.id,
98
+ }),
99
+ created_at: new Date(),
92
100
  })
93
101
  .execute();
94
102
  // Prune old epochs that were consolidated
95
- const epochIds = epochs.map(e => e.id);
103
+ const epochIds = epochs.map((e) => e.id);
96
104
  await this.db
97
105
  .deleteFrom(this.epochsTable)
98
106
  .where('id', 'in', epochIds)
@@ -103,13 +111,13 @@ class SessionCompressor {
103
111
  * Get epochs for a session
104
112
  */
105
113
  async getEpochs(sessionId) {
106
- const list = await this.db
114
+ const list = (await this.db
107
115
  .selectFrom(this.epochsTable)
108
116
  .selectAll()
109
117
  .where('session_id', '=', sessionId)
110
118
  .orderBy('created_at', 'asc')
111
- .execute();
112
- return list.map(e => this.parseEpoch(e));
119
+ .execute());
120
+ return list.map((e) => this.parseEpoch(e));
113
121
  }
114
122
  parseEpoch(e) {
115
123
  return {
@@ -118,7 +126,7 @@ class SessionCompressor {
118
126
  startMessageId: e.start_message_id,
119
127
  endMessageId: e.end_message_id,
120
128
  metadata: typeof e.metadata === 'string' ? JSON.parse(e.metadata) : e.metadata,
121
- createdAt: new Date(e.created_at)
129
+ createdAt: new Date(e.created_at),
122
130
  };
123
131
  }
124
132
  }
@@ -36,7 +36,7 @@ class SessionManager {
36
36
  status: 'active',
37
37
  metadata: metadata ? JSON.stringify(metadata) : null,
38
38
  created_at: new Date(),
39
- updated_at: new Date()
39
+ updated_at: new Date(),
40
40
  })
41
41
  .returningAll()
42
42
  .executeTakeFirstOrThrow();
@@ -71,11 +71,23 @@ class SessionManager {
71
71
  async deleteSession(id) {
72
72
  await this.db.transaction().execute(async (trx) => {
73
73
  // Delete associated data first
74
- await trx.deleteFrom(this.messagesTable).where('session_id', '=', id).execute();
75
- await trx.deleteFrom(this.goalsTable).where('session_id', '=', id).execute();
76
- await trx.deleteFrom(this.memoriesTable).where('session_id', '=', id).execute();
74
+ await trx
75
+ .deleteFrom(this.messagesTable)
76
+ .where('session_id', '=', id)
77
+ .execute();
78
+ await trx
79
+ .deleteFrom(this.goalsTable)
80
+ .where('session_id', '=', id)
81
+ .execute();
82
+ await trx
83
+ .deleteFrom(this.memoriesTable)
84
+ .where('session_id', '=', id)
85
+ .execute();
77
86
  // Delete the session itself
78
- await trx.deleteFrom(this.sessionsTable).where('id', '=', id).execute();
87
+ await trx
88
+ .deleteFrom(this.sessionsTable)
89
+ .where('id', '=', id)
90
+ .execute();
79
91
  });
80
92
  }
81
93
  /**
@@ -90,7 +102,7 @@ class SessionManager {
90
102
  role,
91
103
  content,
92
104
  metadata: metadata ? JSON.stringify(metadata) : null,
93
- created_at: new Date()
105
+ created_at: new Date(),
94
106
  })
95
107
  .returningAll()
96
108
  .executeTakeFirstOrThrow();
@@ -114,7 +126,7 @@ class SessionManager {
114
126
  .orderBy('created_at', 'asc')
115
127
  .limit(limit)
116
128
  .execute();
117
- return messages.map(m => this.parseMessage(m));
129
+ return messages.map((m) => this.parseMessage(m));
118
130
  }
119
131
  /**
120
132
  * Set or update a goal for a session
@@ -135,7 +147,7 @@ class SessionManager {
135
147
  status,
136
148
  priority,
137
149
  metadata: metadata ? JSON.stringify(metadata) : existing.metadata,
138
- updated_at: new Date()
150
+ updated_at: new Date(),
139
151
  })
140
152
  .where('id', '=', existing.id)
141
153
  .returningAll()
@@ -152,7 +164,7 @@ class SessionManager {
152
164
  priority,
153
165
  metadata: metadata ? JSON.stringify(metadata) : null,
154
166
  created_at: new Date(),
155
- updated_at: new Date()
167
+ updated_at: new Date(),
156
168
  })
157
169
  .returningAll()
158
170
  .executeTakeFirstOrThrow();
@@ -177,7 +189,7 @@ class SessionManager {
177
189
  query = query.where('status', '=', status);
178
190
  }
179
191
  const goals = await query.execute();
180
- return goals.map(g => this.parseGoal(g));
192
+ return goals.map((g) => this.parseGoal(g));
181
193
  }
182
194
  /**
183
195
  * Clear message history for a session.
@@ -200,12 +212,12 @@ class SessionManager {
200
212
  .executeTakeFirstOrThrow();
201
213
  const metadata = typeof message.metadata === 'string'
202
214
  ? JSON.parse(message.metadata)
203
- : (message.metadata || {});
215
+ : message.metadata || {};
204
216
  const updatedMetadata = { ...metadata, anchor: true };
205
217
  const updated = await this.typedDb
206
218
  .updateTable(this.messagesTable)
207
219
  .set({
208
- metadata: JSON.stringify(updatedMetadata)
220
+ metadata: JSON.stringify(updatedMetadata),
209
221
  })
210
222
  .where('id', '=', messageId)
211
223
  .returningAll()
@@ -217,9 +229,11 @@ class SessionManager {
217
229
  id: session.id,
218
230
  name: session.name,
219
231
  status: session.status,
220
- metadata: typeof session.metadata === 'string' ? JSON.parse(session.metadata) : (session.metadata || {}),
232
+ metadata: typeof session.metadata === 'string'
233
+ ? JSON.parse(session.metadata)
234
+ : session.metadata || {},
221
235
  createdAt: new Date(session.created_at),
222
- updatedAt: new Date(session.updated_at)
236
+ updatedAt: new Date(session.updated_at),
223
237
  };
224
238
  }
225
239
  parseMessage(message) {
@@ -228,8 +242,10 @@ class SessionManager {
228
242
  sessionId: message.session_id,
229
243
  role: message.role,
230
244
  content: message.content,
231
- metadata: typeof message.metadata === 'string' ? JSON.parse(message.metadata) : (message.metadata || {}),
232
- createdAt: new Date(message.created_at)
245
+ metadata: typeof message.metadata === 'string'
246
+ ? JSON.parse(message.metadata)
247
+ : message.metadata || {},
248
+ createdAt: new Date(message.created_at),
233
249
  };
234
250
  }
235
251
  parseGoal(goal) {
@@ -240,9 +256,11 @@ class SessionManager {
240
256
  description: goal.description,
241
257
  status: goal.status,
242
258
  priority: goal.priority,
243
- metadata: typeof goal.metadata === 'string' ? JSON.parse(goal.metadata) : (goal.metadata || {}),
259
+ metadata: typeof goal.metadata === 'string'
260
+ ? JSON.parse(goal.metadata)
261
+ : goal.metadata || {},
244
262
  createdAt: new Date(goal.created_at),
245
- updatedAt: new Date(goal.updated_at)
263
+ updatedAt: new Date(goal.updated_at),
246
264
  };
247
265
  }
248
266
  }
@@ -28,7 +28,7 @@ class VectorIndexer {
28
28
  embedding: JSON.stringify(embedding),
29
29
  session_id: sessionId || null,
30
30
  metadata: metadata ? JSON.stringify(metadata) : null,
31
- created_at: new Date()
31
+ created_at: new Date(),
32
32
  })
33
33
  .returningAll()
34
34
  .executeTakeFirstOrThrow();
@@ -38,19 +38,19 @@ class VectorIndexer {
38
38
  * Batch add memories
39
39
  */
40
40
  async addMemories(items) {
41
- const values = items.map(item => ({
41
+ const values = items.map((item) => ({
42
42
  content: item.content,
43
43
  embedding: JSON.stringify(item.embedding),
44
44
  session_id: item.sessionId || null,
45
45
  metadata: item.metadata ? JSON.stringify(item.metadata) : null,
46
- created_at: new Date()
46
+ created_at: new Date(),
47
47
  }));
48
48
  const memories = await this.typedDb
49
49
  .insertInto(this.memoriesTable)
50
50
  .values(values)
51
51
  .returningAll()
52
52
  .execute();
53
- return memories.map(m => this.parseMemory(m));
53
+ return memories.map((m) => this.parseMemory(m));
54
54
  }
55
55
  /**
56
56
  * Search for similar memories using Hybrid Search (Vector + Keyword)
@@ -69,7 +69,7 @@ class VectorIndexer {
69
69
  query = query.where('session_id', '=', sessionId);
70
70
  }
71
71
  const results = await query.execute();
72
- vectorResults = results.map(m => this.parseMemory(m));
72
+ vectorResults = results.map((m) => this.parseMemory(m));
73
73
  }
74
74
  else if (this.config.provider === 'sqlite-vss') {
75
75
  try {
@@ -94,15 +94,17 @@ class VectorIndexer {
94
94
  query = query.orderBy('created_at', 'desc').limit(1000);
95
95
  }
96
96
  const allMemories = await query.execute();
97
- const scored = allMemories.map(mem => {
98
- const vec = typeof mem.embedding === 'string' ? JSON.parse(mem.embedding) : (mem.embedding || []);
97
+ const scored = allMemories.map((mem) => {
98
+ const vec = typeof mem.embedding === 'string'
99
+ ? JSON.parse(mem.embedding)
100
+ : mem.embedding || [];
99
101
  const score = this.cosineSimilarity(embedding, vec);
100
102
  return { memory: mem, score };
101
103
  });
102
104
  vectorResults = scored
103
105
  .sort((a, b) => b.score - a.score)
104
106
  .slice(0, limit)
105
- .map(item => this.parseMemory(item.memory));
107
+ .map((item) => this.parseMemory(item.memory));
106
108
  }
107
109
  // Keyword Search (Hybrid component)
108
110
  let keywordResults = [];
@@ -112,19 +114,17 @@ class VectorIndexer {
112
114
  // Merge and fuse using Reciprocal Rank Fusion (RRF)
113
115
  const fused = this.mergeWithRRF(vectorResults, keywordResults, limit);
114
116
  // Final filtering and confidence assessment
115
- const finalResults = fused.filter(m => {
117
+ const finalResults = fused.filter((m) => {
116
118
  const vec = m.embedding || [];
117
119
  const score = this.cosineSimilarity(embedding, vec);
118
120
  // Even with RRF, we keep a safety floor for semantic relevance
119
- return score >= (minScore * 0.8);
121
+ return score >= minScore * 0.8;
120
122
  });
121
123
  return finalResults.slice(0, limit);
122
124
  }
123
125
  async keywordSearch(keyword, options) {
124
126
  const { limit, sessionId } = options;
125
- let query = this.typedDb
126
- .selectFrom(this.memoriesTable)
127
- .selectAll();
127
+ let query = this.typedDb.selectFrom(this.memoriesTable).selectAll();
128
128
  // Production Hardening: Use native FTS where available
129
129
  if (this.config.provider === 'sqlite-vss') {
130
130
  // Check for virtual FTS table (convention: table_name_fts)
@@ -147,7 +147,7 @@ class VectorIndexer {
147
147
  query = query.where('session_id', '=', sessionId);
148
148
  }
149
149
  const results = await query.limit(limit).execute();
150
- return results.map(r => this.parseMemory(r));
150
+ return results.map((r) => this.parseMemory(r));
151
151
  }
152
152
  /**
153
153
  * Reciprocal Rank Fusion (RRF)
@@ -172,7 +172,7 @@ class VectorIndexer {
172
172
  // Sort by fused score
173
173
  return Object.values(scores)
174
174
  .sort((a, b) => b.score - a.score)
175
- .map(s => s.memory);
175
+ .map((s) => s.memory);
176
176
  }
177
177
  mergeResults(vector, keyword) {
178
178
  const seen = new Set();
@@ -203,9 +203,13 @@ class VectorIndexer {
203
203
  id: m.id,
204
204
  sessionId: m.session_id,
205
205
  content: m.content,
206
- embedding: typeof m.embedding === 'string' ? JSON.parse(m.embedding) : (m.embedding || []),
207
- metadata: typeof m.metadata === 'string' ? JSON.parse(m.metadata) : (m.metadata || {}),
208
- createdAt: new Date(m.created_at)
206
+ embedding: typeof m.embedding === 'string'
207
+ ? JSON.parse(m.embedding)
208
+ : m.embedding || [],
209
+ metadata: typeof m.metadata === 'string'
210
+ ? JSON.parse(m.metadata)
211
+ : m.metadata || {},
212
+ createdAt: new Date(m.created_at),
209
213
  };
210
214
  }
211
215
  }
@@ -34,11 +34,11 @@ class AblationEngine {
34
34
  // 1. Prune Knowledge (with dependency check)
35
35
  const knowledgeToPrune = await trx
36
36
  .selectFrom(this.knowledgeTable)
37
- .select('id')
37
+ .selectAll()
38
38
  .where((eb) => eb.or([
39
39
  eb('metadata', 'not like', '%"priority": "high"%'),
40
40
  eb('metadata', 'not like', '%"priority":"high"%'),
41
- eb('metadata', 'is', null)
41
+ eb('metadata', 'is', null),
42
42
  ]))
43
43
  .where('updated_at', '<', cutoff)
44
44
  // Exclude items that are linked
@@ -46,7 +46,7 @@ class AblationEngine {
46
46
  .where('id', 'not in', (eb) => eb.selectFrom(this.linksTable).select('target_id'))
47
47
  .execute();
48
48
  if (knowledgeToPrune.length > 0) {
49
- const candidates = knowledgeToPrune.map(k => this.cortex.knowledge['parseKnowledge'](k));
49
+ const candidates = knowledgeToPrune.map((k) => this.cortex.knowledge['parseKnowledge'](k));
50
50
  const idsToDelete = [];
51
51
  for (const item of candidates) {
52
52
  const fitness = this.cortex.knowledge.calculateFitness(item);
@@ -69,7 +69,7 @@ class AblationEngine {
69
69
  .where('created_at', '<', cutoff)
70
70
  .where((eb) => eb.or([
71
71
  eb('metadata', 'not like', '%"anchor":true%'),
72
- eb('metadata', 'is', null)
72
+ eb('metadata', 'is', null),
73
73
  ]))
74
74
  .executeTakeFirst();
75
75
  totalPruned += Number(memoriesResult.numDeletedRows || 0);
@@ -88,7 +88,7 @@ class AblationEngine {
88
88
  const baseline = await this.cortex.metrics.getAverageMetric('success_rate');
89
89
  const stats = await this.cortex.metrics.getMetricStats('success_rate');
90
90
  // If current average is significantly lower than overall average
91
- if (stats.count > 10 && stats.avg < (baseline * 0.8)) {
91
+ if (stats.count > 10 && stats.avg < baseline * 0.8) {
92
92
  console.warn(`[AblationEngine] PERFORMANCE DEGRADATION DETECTED (Avg: ${stats.avg}, Baseline: ${baseline}). Triggering mass recovery.`);
93
93
  const ablatedItems = await this.typedDb
94
94
  .selectFrom(this.knowledgeTable)
@@ -112,16 +112,21 @@ class AblationEngine {
112
112
  async testAblation(id) {
113
113
  console.log(`[AblationEngine] Conducting ablation test on item ${id}`);
114
114
  return await this.db.transaction().execute(async (trx) => {
115
- const item = await trx
115
+ const item = (await trx
116
116
  .selectFrom(this.knowledgeTable)
117
117
  .selectAll()
118
118
  .where('id', '=', id)
119
- .executeTakeFirst();
119
+ .executeTakeFirst());
120
120
  if (!item)
121
121
  return false;
122
- const metadata = typeof item.metadata === 'string' ? JSON.parse(item.metadata) : (item.metadata || {});
122
+ const metadata = typeof item.metadata === 'string'
123
+ ? JSON.parse(item.metadata)
124
+ : item.metadata || {};
123
125
  // 1. Record the experiment in reflections
124
- await this.cortex.reflections.reflect(item.source_session_id || 'system', 'success', `Ablation experiment initiated for item ${id}`, [`Temporary confidence reduction to evaluate reasoning impact.`, `Original confidence: ${item.confidence}`]);
126
+ await this.cortex.reflections.reflect(item.source_session_id || 'system', 'success', `Ablation experiment initiated for item ${id}`, [
127
+ `Temporary confidence reduction to evaluate reasoning impact.`,
128
+ `Original confidence: ${item.confidence}`,
129
+ ]);
125
130
  // 2. Perform the ablation
126
131
  await trx
127
132
  .updateTable(this.knowledgeTable)
@@ -130,9 +135,9 @@ class AblationEngine {
130
135
  ...metadata,
131
136
  ablation_test: true,
132
137
  original_confidence: item.confidence,
133
- ablated_at: new Date()
138
+ ablated_at: new Date(),
134
139
  }),
135
- confidence: 0
140
+ confidence: 0,
136
141
  })
137
142
  .where('id', '=', id)
138
143
  .execute();
@@ -144,14 +149,16 @@ class AblationEngine {
144
149
  */
145
150
  async recoverAblatedItem(id) {
146
151
  return await this.db.transaction().execute(async (trx) => {
147
- const item = await trx
152
+ const item = (await trx
148
153
  .selectFrom(this.knowledgeTable)
149
154
  .selectAll()
150
155
  .where('id', '=', id)
151
- .executeTakeFirst();
156
+ .executeTakeFirst());
152
157
  if (!item)
153
158
  return false;
154
- const metadata = typeof item.metadata === 'string' ? JSON.parse(item.metadata) : (item.metadata || {});
159
+ const metadata = typeof item.metadata === 'string'
160
+ ? JSON.parse(item.metadata)
161
+ : item.metadata || {};
155
162
  if (!metadata.ablation_test)
156
163
  return false;
157
164
  const originalConfidence = metadata.original_confidence ?? 0.5;
@@ -163,7 +170,7 @@ class AblationEngine {
163
170
  .set({
164
171
  confidence: originalConfidence,
165
172
  metadata: JSON.stringify(metadata),
166
- updated_at: new Date()
173
+ updated_at: new Date(),
167
174
  })
168
175
  .where('id', '=', id)
169
176
  .execute();