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
@@ -53,7 +53,7 @@ class SQLiteMigrationProvider {
53
53
  migrationDirectory: './migrations',
54
54
  fileExtensions: ['.sql', '.ts', '.js'],
55
55
  encoding: 'utf8',
56
- ...config
56
+ ...config,
57
57
  };
58
58
  }
59
59
  static getInstance(config, logger) {
@@ -105,11 +105,11 @@ class SQLiteMigrationProvider {
105
105
  name: fileName,
106
106
  content,
107
107
  checksum: this.calculateChecksum(content),
108
- timestamp
108
+ timestamp,
109
109
  });
110
110
  }
111
111
  // Cache the migrations
112
- migrations.forEach(migration => {
112
+ migrations.forEach((migration) => {
113
113
  this.migrationCache.set(migration.name, migration);
114
114
  });
115
115
  this.logger.info(`✅ Discovered ${migrations.length} migration files`);
@@ -129,7 +129,7 @@ class SQLiteMigrationProvider {
129
129
  return this.migrationCache.get(name);
130
130
  }
131
131
  const migrations = await this.discoverMigrations();
132
- return migrations.find(m => m.name === name) || null;
132
+ return migrations.find((m) => m.name === name) || null;
133
133
  }
134
134
  /**
135
135
  * Validate migration file
@@ -155,16 +155,16 @@ class SQLiteMigrationProvider {
155
155
  const dangerousPatterns = [
156
156
  /DROP\s+TABLE\s+(?!IF\s+EXISTS)/i,
157
157
  /DROP\s+INDEX\s+(?!IF\s+EXISTS)/i,
158
- /DELETE\s+FROM\s+\w+\s+(?!WHERE)/i
158
+ /DELETE\s+FROM\s+\w+\s+(?!WHERE)/i,
159
159
  ];
160
- dangerousPatterns.forEach(pattern => {
160
+ dangerousPatterns.forEach((pattern) => {
161
161
  if (pattern.test(migration.content)) {
162
162
  errors.push('Dangerous operation detected - consider using IF EXISTS or WHERE clauses');
163
163
  }
164
164
  });
165
165
  return {
166
166
  valid: errors.length === 0,
167
- errors
167
+ errors,
168
168
  };
169
169
  }
170
170
  /**
@@ -192,7 +192,8 @@ class SQLiteMigrationProvider {
192
192
  let sql = `-- Create table ${tableName} with SQLite optimizations\n`;
193
193
  sql += `CREATE TABLE IF NOT EXISTS ${tableName} (\n`;
194
194
  // Add columns with SQLite-specific types
195
- const columnDefs = columns.map((col) => {
195
+ const columnDefs = columns
196
+ .map((col) => {
196
197
  let def = ` ${col.name} ${this.mapToSQLiteType(col.type)}`;
197
198
  if (col.primaryKey) {
198
199
  def += ' PRIMARY KEY';
@@ -210,11 +211,14 @@ class SQLiteMigrationProvider {
210
211
  def += ' UNIQUE';
211
212
  }
212
213
  return def;
213
- }).join(',\n');
214
+ })
215
+ .join(',\n');
214
216
  sql += columnDefs;
215
217
  // Add constraints
216
218
  if (constraints.length > 0) {
217
- sql += ',\n' + constraints.map((constraint) => ` ${constraint}`).join(',\n');
219
+ sql +=
220
+ ',\n' +
221
+ constraints.map((constraint) => ` ${constraint}`).join(',\n');
218
222
  }
219
223
  sql += '\n);\n\n';
220
224
  // Add indexes with SQLite optimizations
@@ -284,29 +288,29 @@ class SQLiteMigrationProvider {
284
288
  */
285
289
  mapToSQLiteType(type) {
286
290
  const typeMap = {
287
- 'varchar': 'TEXT',
288
- 'char': 'TEXT',
289
- 'text': 'TEXT',
290
- 'string': 'TEXT',
291
- 'int': 'INTEGER',
292
- 'integer': 'INTEGER',
293
- 'bigint': 'INTEGER',
294
- 'smallint': 'INTEGER',
295
- 'tinyint': 'INTEGER',
296
- 'float': 'REAL',
297
- 'double': 'REAL',
298
- 'decimal': 'REAL',
299
- 'numeric': 'REAL',
300
- 'boolean': 'INTEGER',
301
- 'bool': 'INTEGER',
302
- 'date': 'TEXT',
303
- 'datetime': 'TEXT',
304
- 'timestamp': 'TEXT',
305
- 'time': 'TEXT',
306
- 'json': 'TEXT',
307
- 'jsonb': 'TEXT',
308
- 'uuid': 'TEXT',
309
- 'blob': 'BLOB'
291
+ varchar: 'TEXT',
292
+ char: 'TEXT',
293
+ text: 'TEXT',
294
+ string: 'TEXT',
295
+ int: 'INTEGER',
296
+ integer: 'INTEGER',
297
+ bigint: 'INTEGER',
298
+ smallint: 'INTEGER',
299
+ tinyint: 'INTEGER',
300
+ float: 'REAL',
301
+ double: 'REAL',
302
+ decimal: 'REAL',
303
+ numeric: 'REAL',
304
+ boolean: 'INTEGER',
305
+ bool: 'INTEGER',
306
+ date: 'TEXT',
307
+ datetime: 'TEXT',
308
+ timestamp: 'TEXT',
309
+ time: 'TEXT',
310
+ json: 'TEXT',
311
+ jsonb: 'TEXT',
312
+ uuid: 'TEXT',
313
+ blob: 'BLOB',
310
314
  };
311
315
  return typeMap[type.toLowerCase()] || 'TEXT';
312
316
  }
@@ -335,7 +339,7 @@ class SQLiteMigrationProvider {
335
339
  let hash = 0;
336
340
  for (let i = 0; i < content.length; i++) {
337
341
  const char = content.charCodeAt(i);
338
- hash = ((hash << 5) - hash) + char;
342
+ hash = (hash << 5) - hash + char;
339
343
  hash = hash & hash; // Convert to 32-bit integer
340
344
  }
341
345
  return hash.toString(16);
@@ -9,7 +9,7 @@ const noormme_js_1 = require("../noormme.js");
9
9
  * Create an in-memory SQLite database for testing
10
10
  */
11
11
  async function createTestDatabase(config = {}) {
12
- const { dialect = 'sqlite', database = ':memory:', cleanup = true, seed = false } = config;
12
+ const { dialect = 'sqlite', database = ':memory:', cleanup = true, seed = false, } = config;
13
13
  let dbConfig;
14
14
  switch (dialect) {
15
15
  case 'sqlite':
@@ -20,11 +20,11 @@ async function createTestDatabase(config = {}) {
20
20
  host: '',
21
21
  port: 0,
22
22
  username: '',
23
- password: ''
23
+ password: '',
24
24
  },
25
25
  logging: {
26
- enabled: process.env.TEST_DEBUG === 'true' // Enable with TEST_DEBUG=true
27
- }
26
+ enabled: process.env.TEST_DEBUG === 'true', // Enable with TEST_DEBUG=true
27
+ },
28
28
  };
29
29
  break;
30
30
  default:
@@ -45,35 +45,35 @@ async function setupTestSchema(db) {
45
45
  await kysely.schema
46
46
  .createTable('users')
47
47
  .ifNotExists()
48
- .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
49
- .addColumn('name', 'varchar(255)', col => col.notNull())
50
- .addColumn('email', 'varchar(255)', col => col.notNull().unique())
48
+ .addColumn('id', 'integer', (col) => col.primaryKey().autoIncrement())
49
+ .addColumn('name', 'varchar(255)', (col) => col.notNull())
50
+ .addColumn('email', 'varchar(255)', (col) => col.notNull().unique())
51
51
  .addColumn('age', 'integer')
52
- .addColumn('active', 'boolean', col => col.defaultTo(true))
53
- .addColumn('created_at', 'timestamp', col => col.defaultTo('now()').notNull())
54
- .addColumn('updated_at', 'timestamp', col => col.defaultTo('now()').notNull())
52
+ .addColumn('active', 'boolean', (col) => col.defaultTo(true))
53
+ .addColumn('created_at', 'timestamp', (col) => col.defaultTo('now()').notNull())
54
+ .addColumn('updated_at', 'timestamp', (col) => col.defaultTo('now()').notNull())
55
55
  .execute();
56
56
  // Create posts table
57
57
  await kysely.schema
58
58
  .createTable('posts')
59
59
  .ifNotExists()
60
- .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
61
- .addColumn('title', 'varchar(255)', col => col.notNull())
60
+ .addColumn('id', 'integer', (col) => col.primaryKey().autoIncrement())
61
+ .addColumn('title', 'varchar(255)', (col) => col.notNull())
62
62
  .addColumn('content', 'text')
63
- .addColumn('user_id', 'integer', col => col.references('users.id').onDelete('cascade'))
64
- .addColumn('published', 'boolean', col => col.defaultTo(false))
65
- .addColumn('created_at', 'timestamp', col => col.defaultTo('now()').notNull())
66
- .addColumn('updated_at', 'timestamp', col => col.defaultTo('now()').notNull())
63
+ .addColumn('user_id', 'integer', (col) => col.references('users.id').onDelete('cascade'))
64
+ .addColumn('published', 'boolean', (col) => col.defaultTo(false))
65
+ .addColumn('created_at', 'timestamp', (col) => col.defaultTo('now()').notNull())
66
+ .addColumn('updated_at', 'timestamp', (col) => col.defaultTo('now()').notNull())
67
67
  .execute();
68
68
  // Create comments table
69
69
  await kysely.schema
70
70
  .createTable('comments')
71
71
  .ifNotExists()
72
- .addColumn('id', 'integer', col => col.primaryKey().autoIncrement())
73
- .addColumn('content', 'text', col => col.notNull())
74
- .addColumn('post_id', 'integer', col => col.references('posts.id').onDelete('cascade'))
75
- .addColumn('user_id', 'integer', col => col.references('users.id').onDelete('cascade'))
76
- .addColumn('created_at', 'timestamp', col => col.defaultTo('now()').notNull())
72
+ .addColumn('id', 'integer', (col) => col.primaryKey().autoIncrement())
73
+ .addColumn('content', 'text', (col) => col.notNull())
74
+ .addColumn('post_id', 'integer', (col) => col.references('posts.id').onDelete('cascade'))
75
+ .addColumn('user_id', 'integer', (col) => col.references('users.id').onDelete('cascade'))
76
+ .addColumn('created_at', 'timestamp', (col) => col.defaultTo('now()').notNull())
77
77
  .execute();
78
78
  // Create indexes for better performance
79
79
  await kysely.schema
@@ -121,7 +121,8 @@ async function setupTestSchema(db) {
121
121
  // Try to manually check if tables exist
122
122
  let actualTables = [];
123
123
  try {
124
- actualTables = await kysely.selectFrom('sqlite_master')
124
+ actualTables = await kysely
125
+ .selectFrom('sqlite_master')
125
126
  .select(['name', 'type'])
126
127
  .where('type', '=', 'table')
127
128
  .where('name', 'not like', 'sqlite_%')
@@ -134,9 +135,9 @@ async function setupTestSchema(db) {
134
135
  `Discovery error: ${discoveryError ? discoveryError.join(' ') : 'Unknown'}`);
135
136
  }
136
137
  // Verify expected tables exist
137
- const tableNames = schemaInfo.tables.map(t => t.name);
138
+ const tableNames = schemaInfo.tables.map((t) => t.name);
138
139
  const expectedTables = ['users', 'posts', 'comments'];
139
- const missingTables = expectedTables.filter(t => !tableNames.includes(t));
140
+ const missingTables = expectedTables.filter((t) => !tableNames.includes(t));
140
141
  if (missingTables.length > 0) {
141
142
  throw new Error(`Test setup failed: Missing tables: ${missingTables.join(', ')}. ` +
142
143
  `Found tables: ${tableNames.join(', ')}. ` +
@@ -192,7 +193,7 @@ class TestDataFactory {
192
193
  email: this.generateUniqueEmail(),
193
194
  age: 25,
194
195
  active: true,
195
- ...overrides
196
+ ...overrides,
196
197
  };
197
198
  return await userRepo.create(userData);
198
199
  }
@@ -204,7 +205,7 @@ class TestDataFactory {
204
205
  for (let i = 0; i < count; i++) {
205
206
  const user = await this.createUser({
206
207
  name: `Test User ${i + 1}`,
207
- ...overrides
208
+ ...overrides,
208
209
  });
209
210
  users.push(user);
210
211
  }
@@ -220,7 +221,7 @@ class TestDataFactory {
220
221
  content: 'This is a test post content',
221
222
  user_id: userId,
222
223
  published: false,
223
- ...overrides
224
+ ...overrides,
224
225
  };
225
226
  return await postRepo.create(postData);
226
227
  }
@@ -232,7 +233,7 @@ class TestDataFactory {
232
233
  for (let i = 0; i < count; i++) {
233
234
  const post = await this.createPost(userId, {
234
235
  title: `Test Post ${i + 1}`,
235
- ...overrides
236
+ ...overrides,
236
237
  });
237
238
  posts.push(post);
238
239
  }
@@ -247,7 +248,7 @@ class TestDataFactory {
247
248
  content: 'This is a test comment',
248
249
  post_id: postId,
249
250
  user_id: userId,
250
- ...overrides
251
+ ...overrides,
251
252
  };
252
253
  return await commentRepo.create(commentData);
253
254
  }
@@ -259,7 +260,7 @@ class TestDataFactory {
259
260
  for (let i = 0; i < count; i++) {
260
261
  const comment = await this.createComment(postId, userId, {
261
262
  content: `Test comment ${i + 1}`,
262
- ...overrides
263
+ ...overrides,
263
264
  });
264
265
  comments.push(comment);
265
266
  }
@@ -313,7 +314,8 @@ class TestUtils {
313
314
  throw new Error('Expected promise to reject, but it resolved');
314
315
  }
315
316
  catch (error) {
316
- if (expectedErrorMessage && !String(error).includes(expectedErrorMessage)) {
317
+ if (expectedErrorMessage &&
318
+ !String(error).includes(expectedErrorMessage)) {
317
319
  throw new Error(`Expected error message to contain "${expectedErrorMessage}", but got: ${error}`);
318
320
  }
319
321
  return error;
@@ -337,10 +339,10 @@ class TestUtils {
337
339
  calls.push(args);
338
340
  });
339
341
  Object.defineProperty(spy, 'calls', {
340
- get: () => calls
342
+ get: () => calls,
341
343
  });
342
344
  Object.defineProperty(spy, 'callCount', {
343
- get: () => calls.length
345
+ get: () => calls.length,
344
346
  });
345
347
  return spy;
346
348
  }
@@ -348,7 +350,7 @@ class TestUtils {
348
350
  * Delay execution for testing timing-sensitive operations
349
351
  */
350
352
  static delay(ms) {
351
- return new Promise(resolve => setTimeout(resolve, ms));
353
+ return new Promise((resolve) => setTimeout(resolve, ms));
352
354
  }
353
355
  }
354
356
  exports.TestUtils = TestUtils;
@@ -36,11 +36,22 @@ export interface AgenticConfig {
36
36
  snapshotsTable?: string;
37
37
  contextWindowSize?: number;
38
38
  vectorConfig?: VectorConfig;
39
+ evolution?: EmergentSkillConfig;
40
+ llm?: LLMProvider;
41
+ llmFast?: LLMProvider;
42
+ llmPremium?: LLMProvider;
39
43
  metadata?: {
40
44
  typesOutputPath?: string;
41
45
  [key: string]: any;
42
46
  };
43
47
  }
48
+ export interface EmergentSkillConfig {
49
+ verificationWindow?: number;
50
+ rollbackThresholdZ?: number;
51
+ enableHiveLink?: boolean;
52
+ mutationAggressiveness?: number;
53
+ maxSandboxSkills?: number;
54
+ }
44
55
  export interface AgentSnapshot {
45
56
  id: string | number;
46
57
  name: string;
@@ -186,11 +197,14 @@ export interface EntityType {
186
197
  }
187
198
  export interface DjangoManager<T> {
188
199
  all(): Promise<T[]>;
189
- get(id: string | number): Promise<T | null>;
190
- get(filter: Partial<T>): Promise<T | null>;
200
+ get(idOrFilter: string | number | Partial<T>): Promise<T | null>;
191
201
  filter(filter: Partial<T>): DjangoManager<T>;
202
+ filter(column: string, operator: string, value: any): DjangoManager<T>;
192
203
  exclude(filter: Partial<T>): DjangoManager<T>;
204
+ exclude(column: string, operator: string, value: any): DjangoManager<T>;
193
205
  order_by(...columns: (keyof T | string)[]): DjangoManager<T>;
206
+ limit(count: number): DjangoManager<T>;
207
+ offset(count: number): DjangoManager<T>;
194
208
  count(): Promise<number>;
195
209
  exists(): Promise<boolean>;
196
210
  first(): Promise<T | null>;
@@ -282,7 +296,7 @@ export interface KnowledgeItem {
282
296
  entity: string;
283
297
  fact: string;
284
298
  confidence: number;
285
- status: 'verified' | 'disputed' | 'deprecated' | 'proposed';
299
+ status: 'verified' | 'disputed' | 'deprecated';
286
300
  sourceSessionId?: string | number;
287
301
  tags?: string[];
288
302
  metadata?: Record<string, any>;
@@ -335,6 +349,7 @@ export interface AgentCapability {
335
349
  name: string;
336
350
  version: string;
337
351
  description?: string;
352
+ status: 'experimental' | 'verified' | 'blacklisted';
338
353
  reliability: number;
339
354
  metadata?: Record<string, any>;
340
355
  createdAt: Date;
@@ -382,7 +397,7 @@ export interface AgentEpoch {
382
397
  export interface AgentRitual {
383
398
  id: string | number;
384
399
  name: string;
385
- type: 'optimization' | 'compression' | 'pruning';
400
+ type: 'optimization' | 'compression' | 'pruning' | 'evolution';
386
401
  definition?: string;
387
402
  frequency?: 'hourly' | 'daily' | 'weekly';
388
403
  lastRun?: Date;
@@ -472,3 +487,45 @@ export interface BaseRepository<T> {
472
487
  count(): Promise<number>;
473
488
  }
474
489
  export declare function validateNOORMConfig(config: NOORMConfig): void;
490
+ export interface SkillSynthesisStrategy {
491
+ name: string;
492
+ synthesize(context: SynthesisContext): Promise<{
493
+ mutatedDescription: string;
494
+ mutatedMetadata: Record<string, any>;
495
+ version: string;
496
+ }>;
497
+ }
498
+ export interface SynthesisContext {
499
+ targetTool: string;
500
+ failures: {
501
+ arguments: Record<string, any>;
502
+ error?: string;
503
+ outcome?: string;
504
+ timestamp: Date;
505
+ }[];
506
+ existingDescription?: string;
507
+ evolutionConfig: EmergentSkillConfig;
508
+ }
509
+ /**
510
+ * Production-grade LLM Provider interface.
511
+ * Allows NOORMME to orchestrate AI-driven self-improvement.
512
+ */
513
+ export interface LLMProvider {
514
+ /**
515
+ * Complete a prompt/chat sequence.
516
+ */
517
+ complete(options: {
518
+ prompt?: string;
519
+ messages?: AgentMessage[];
520
+ temperature?: number;
521
+ maxTokens?: number;
522
+ responseFormat?: 'text' | 'json';
523
+ }): Promise<{
524
+ content: string;
525
+ usage?: {
526
+ promptTokens: number;
527
+ completionTokens: number;
528
+ totalTokens: number;
529
+ };
530
+ }>;
531
+ }
@@ -14,15 +14,18 @@ function validateNOORMConfig(config) {
14
14
  }
15
15
  // Validate dialect-specific requirements
16
16
  if (config.dialect === 'sqlite') {
17
- if (!config.connection.database.endsWith('.db') && !config.connection.database.endsWith('.sqlite')) {
17
+ if (!config.connection.database.endsWith('.db') &&
18
+ !config.connection.database.endsWith('.sqlite')) {
18
19
  console.warn('SQLite database path should typically end with .db or .sqlite');
19
20
  }
20
21
  }
21
22
  // Validate performance settings
22
- if (config.performance?.maxBatchSize && config.performance.maxBatchSize <= 0) {
23
+ if (config.performance?.maxBatchSize &&
24
+ config.performance.maxBatchSize <= 0) {
23
25
  throw new Error('maxBatchSize must be greater than 0');
24
26
  }
25
- if (config.performance?.maxCacheSize && config.performance.maxCacheSize <= 0) {
27
+ if (config.performance?.maxCacheSize &&
28
+ config.performance.maxCacheSize <= 0) {
26
29
  throw new Error('maxCacheSize must be greater than 0');
27
30
  }
28
31
  }
@@ -30,7 +30,7 @@ class TypeGenerator {
30
30
  return {
31
31
  entities,
32
32
  interfaces,
33
- types
33
+ types,
34
34
  };
35
35
  }
36
36
  /**
@@ -53,7 +53,7 @@ class TypeGenerator {
53
53
  interface: interfaceCode,
54
54
  insertType,
55
55
  updateType,
56
- selectType
56
+ selectType,
57
57
  };
58
58
  }
59
59
  /**
@@ -175,54 +175,58 @@ class TypeGenerator {
175
175
  // Handle PostgreSQL array types
176
176
  if (column.type.endsWith('[]')) {
177
177
  const baseType = column.type.slice(0, -2);
178
- const elementType = this.mapColumnToTypeScript({ ...column, type: baseType, nullable: false });
178
+ const elementType = this.mapColumnToTypeScript({
179
+ ...column,
180
+ type: baseType,
181
+ nullable: false,
182
+ });
179
183
  const arrayType = `Array<${elementType}>`;
180
184
  return column.nullable ? `${arrayType} | null` : arrayType;
181
185
  }
182
186
  const typeMapping = {
183
187
  // PostgreSQL types
184
- 'varchar': 'string',
185
- 'text': 'string',
186
- 'char': 'string',
187
- 'integer': 'number',
188
- 'bigint': 'number',
189
- 'smallint': 'number',
190
- 'decimal': 'number',
191
- 'numeric': 'number',
192
- 'real': 'number',
188
+ varchar: 'string',
189
+ text: 'string',
190
+ char: 'string',
191
+ integer: 'number',
192
+ bigint: 'number',
193
+ smallint: 'number',
194
+ decimal: 'number',
195
+ numeric: 'number',
196
+ real: 'number',
193
197
  'double precision': 'number',
194
- 'boolean': 'boolean',
195
- 'date': 'Date',
196
- 'timestamp': 'Date',
197
- 'timestamptz': 'Date',
198
- 'time': 'Date',
199
- 'json': 'Record<string, unknown>',
200
- 'jsonb': 'Record<string, unknown>',
201
- 'uuid': 'string',
202
- 'tsvector': 'string',
203
- 'tsquery': 'string',
198
+ boolean: 'boolean',
199
+ date: 'Date',
200
+ timestamp: 'Date',
201
+ timestamptz: 'Date',
202
+ time: 'Date',
203
+ json: 'Record<string, unknown>',
204
+ jsonb: 'Record<string, unknown>',
205
+ uuid: 'string',
206
+ tsvector: 'string',
207
+ tsquery: 'string',
204
208
  // MySQL specific types
205
- 'longtext': 'string',
206
- 'mediumtext': 'string',
207
- 'tinytext': 'string',
208
- 'int': 'number',
209
- 'tinyint': 'number',
210
- 'float': 'number',
211
- 'double': 'number',
212
- 'bool': 'boolean',
213
- 'datetime': 'Date',
209
+ longtext: 'string',
210
+ mediumtext: 'string',
211
+ tinytext: 'string',
212
+ int: 'number',
213
+ tinyint: 'number',
214
+ float: 'number',
215
+ double: 'number',
216
+ bool: 'boolean',
217
+ datetime: 'Date',
214
218
  // SQLite specific types (enhanced)
215
- 'blob': 'Buffer',
216
- 'int2': 'number',
217
- 'int8': 'number',
218
- 'clob': 'string',
219
+ blob: 'Buffer',
220
+ int2: 'number',
221
+ int8: 'number',
222
+ clob: 'string',
219
223
  // MSSQL specific types
220
- 'nvarchar': 'string',
221
- 'nchar': 'string',
222
- 'ntext': 'string',
223
- 'bit': 'boolean',
224
- 'datetime2': 'Date',
225
- 'smalldatetime': 'Date'
224
+ nvarchar: 'string',
225
+ nchar: 'string',
226
+ ntext: 'string',
227
+ bit: 'boolean',
228
+ datetime2: 'Date',
229
+ smalldatetime: 'Date',
226
230
  };
227
231
  // Try exact match first
228
232
  if (typeMapping[column.type.toLowerCase()]) {
@@ -250,7 +254,7 @@ class TypeGenerator {
250
254
  * Get relationships for a specific table
251
255
  */
252
256
  getRelationshipsForTable(tableName, relationships) {
253
- return relationships.filter(rel => rel.fromTable === tableName);
257
+ return relationships.filter((rel) => rel.fromTable === tableName);
254
258
  }
255
259
  /**
256
260
  * Convert string to camelCase
@@ -55,7 +55,7 @@ function safeOffset(offset) {
55
55
  */
56
56
  function safeKeyword(keyword, allowedKeywords) {
57
57
  const normalized = keyword.toUpperCase().trim();
58
- const allowedNormalized = allowedKeywords.map(k => k.toUpperCase().trim());
58
+ const allowedNormalized = allowedKeywords.map((k) => k.toUpperCase().trim());
59
59
  if (!allowedNormalized.includes(normalized)) {
60
60
  throw new Error(`Invalid keyword: "${keyword}". Allowed keywords: ${allowedKeywords.join(', ')}`);
61
61
  }