@ninebix/nmt-system 1.0.4 → 2.0.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 (101) hide show
  1. package/README.md +30 -22
  2. package/dashboard-lite/index.html +458 -0
  3. package/dist/bin/nmt.js +225 -6
  4. package/dist/bin/nmt.js.map +1 -1
  5. package/dist/src/api/cli-server.d.ts.map +1 -1
  6. package/dist/src/api/cli-server.js +327 -30
  7. package/dist/src/api/cli-server.js.map +1 -1
  8. package/dist/src/cli/commands/db.d.ts +33 -0
  9. package/dist/src/cli/commands/db.d.ts.map +1 -0
  10. package/dist/src/cli/commands/db.js +197 -0
  11. package/dist/src/cli/commands/db.js.map +1 -0
  12. package/dist/src/cli/commands/infer.d.ts.map +1 -1
  13. package/dist/src/cli/commands/infer.js +8 -2
  14. package/dist/src/cli/commands/infer.js.map +1 -1
  15. package/dist/src/cli/commands/learn.d.ts.map +1 -1
  16. package/dist/src/cli/commands/learn.js +25 -1
  17. package/dist/src/cli/commands/learn.js.map +1 -1
  18. package/dist/src/cli/commands/sync.d.ts +14 -0
  19. package/dist/src/cli/commands/sync.d.ts.map +1 -1
  20. package/dist/src/cli/commands/sync.js +12 -7
  21. package/dist/src/cli/commands/sync.js.map +1 -1
  22. package/dist/src/connectors/index.d.ts +11 -0
  23. package/dist/src/connectors/index.d.ts.map +1 -0
  24. package/dist/src/connectors/index.js +24 -0
  25. package/dist/src/connectors/index.js.map +1 -0
  26. package/dist/src/connectors/mongodb-connector.d.ts +29 -0
  27. package/dist/src/connectors/mongodb-connector.d.ts.map +1 -0
  28. package/dist/src/connectors/mongodb-connector.js +286 -0
  29. package/dist/src/connectors/mongodb-connector.js.map +1 -0
  30. package/dist/src/connectors/mysql-connector.d.ts +29 -0
  31. package/dist/src/connectors/mysql-connector.d.ts.map +1 -0
  32. package/dist/src/connectors/mysql-connector.js +357 -0
  33. package/dist/src/connectors/mysql-connector.js.map +1 -0
  34. package/dist/src/connectors/types.d.ts +174 -0
  35. package/dist/src/connectors/types.d.ts.map +1 -0
  36. package/dist/src/connectors/types.js +6 -0
  37. package/dist/src/connectors/types.js.map +1 -0
  38. package/dist/src/core/attractor-model.d.ts +6 -2
  39. package/dist/src/core/attractor-model.d.ts.map +1 -1
  40. package/dist/src/core/attractor-model.js +260 -16
  41. package/dist/src/core/attractor-model.js.map +1 -1
  42. package/dist/src/core/hnsw-index.d.ts.map +1 -1
  43. package/dist/src/core/hnsw-index.js +16 -9
  44. package/dist/src/core/hnsw-index.js.map +1 -1
  45. package/dist/src/core/neuron-graph.d.ts +130 -1
  46. package/dist/src/core/neuron-graph.d.ts.map +1 -1
  47. package/dist/src/core/neuron-graph.js +299 -1
  48. package/dist/src/core/neuron-graph.js.map +1 -1
  49. package/dist/src/core/probabilistic-neuron.d.ts.map +1 -1
  50. package/dist/src/core/probabilistic-neuron.js +24 -4
  51. package/dist/src/core/probabilistic-neuron.js.map +1 -1
  52. package/dist/src/core/probabilistic-orchestrator.d.ts.map +1 -1
  53. package/dist/src/core/probabilistic-orchestrator.js +17 -13
  54. package/dist/src/core/probabilistic-orchestrator.js.map +1 -1
  55. package/dist/src/extensions/clustering/index.d.ts +0 -7
  56. package/dist/src/extensions/clustering/index.d.ts.map +1 -1
  57. package/dist/src/extensions/clustering/index.js.map +1 -1
  58. package/dist/src/mcp/server.js +4 -0
  59. package/dist/src/mcp/server.js.map +1 -1
  60. package/dist/src/services/db-bridge.d.ts +46 -0
  61. package/dist/src/services/db-bridge.d.ts.map +1 -0
  62. package/dist/src/services/db-bridge.js +524 -0
  63. package/dist/src/services/db-bridge.js.map +1 -0
  64. package/dist/src/services/embedding-provider.d.ts +11 -1
  65. package/dist/src/services/embedding-provider.d.ts.map +1 -1
  66. package/dist/src/services/embedding-provider.js +78 -21
  67. package/dist/src/services/embedding-provider.js.map +1 -1
  68. package/dist/src/services/four-stage-learning.d.ts.map +1 -1
  69. package/dist/src/services/four-stage-learning.js +20 -9
  70. package/dist/src/services/four-stage-learning.js.map +1 -1
  71. package/dist/src/services/ingestion.d.ts +20 -1
  72. package/dist/src/services/ingestion.d.ts.map +1 -1
  73. package/dist/src/services/ingestion.js +92 -62
  74. package/dist/src/services/ingestion.js.map +1 -1
  75. package/dist/src/services/query.d.ts +57 -3
  76. package/dist/src/services/query.d.ts.map +1 -1
  77. package/dist/src/services/query.js +264 -42
  78. package/dist/src/services/query.js.map +1 -1
  79. package/dist/src/services/text-embedding.d.ts +1 -1
  80. package/dist/src/services/text-embedding.d.ts.map +1 -1
  81. package/dist/src/services/text-embedding.js +62 -3
  82. package/dist/src/services/text-embedding.js.map +1 -1
  83. package/dist/src/storage/neuron-store.d.ts +12 -1
  84. package/dist/src/storage/neuron-store.d.ts.map +1 -1
  85. package/dist/src/storage/neuron-store.js +12 -1
  86. package/dist/src/storage/neuron-store.js.map +1 -1
  87. package/dist/src/sync/change-journal.d.ts.map +1 -1
  88. package/dist/src/sync/change-journal.js +63 -37
  89. package/dist/src/sync/change-journal.js.map +1 -1
  90. package/dist/src/sync/state-sync.d.ts +5 -0
  91. package/dist/src/sync/state-sync.d.ts.map +1 -1
  92. package/dist/src/sync/state-sync.js +9 -2
  93. package/dist/src/sync/state-sync.js.map +1 -1
  94. package/dist/src/types/index.d.ts +73 -3
  95. package/dist/src/types/index.d.ts.map +1 -1
  96. package/dist/src/types/index.js +7 -0
  97. package/dist/src/types/index.js.map +1 -1
  98. package/dist/src/utils/hash.d.ts.map +1 -1
  99. package/dist/src/utils/hash.js +3 -3
  100. package/dist/src/utils/hash.js.map +1 -1
  101. package/package.json +5 -1
@@ -0,0 +1,286 @@
1
+ /**
2
+ * MongoDB Connector
3
+ * @module connectors/mongodb-connector
4
+ */
5
+ /**
6
+ * MongoDB connector using the mongodb driver
7
+ */
8
+ export class MongoDBConnector {
9
+ client = null;
10
+ db = null;
11
+ config = null;
12
+ async connect(config) {
13
+ this.config = config;
14
+ let mongodb;
15
+ try {
16
+ mongodb = await import('mongodb');
17
+ }
18
+ catch {
19
+ throw new Error('mongodb package not installed. Run: npm install mongodb');
20
+ }
21
+ const uri = config.uri ??
22
+ `mongodb://${config.user ? `${encodeURIComponent(config.user)}:${encodeURIComponent(config.password ?? '')}@` : ''}${config.host ?? 'localhost'}:${config.port ?? 27017}`;
23
+ this.client = new mongodb.MongoClient(uri, {
24
+ serverSelectionTimeoutMS: 10000,
25
+ connectTimeoutMS: 10000,
26
+ ...config.options,
27
+ });
28
+ await this.client.connect();
29
+ this.db = this.client.db(config.database);
30
+ // Test connection
31
+ await this.db.command({ ping: 1 });
32
+ }
33
+ async disconnect() {
34
+ if (this.client) {
35
+ await this.client.close();
36
+ this.client = null;
37
+ this.db = null;
38
+ }
39
+ }
40
+ async getSchema() {
41
+ this.ensureConnected();
42
+ const collections = await this.db.listCollections().toArray();
43
+ const tables = [];
44
+ for (const col of collections) {
45
+ if (col.name.startsWith('system.'))
46
+ continue;
47
+ const schema = await this.getTableSchema(col.name);
48
+ tables.push(schema);
49
+ }
50
+ return {
51
+ name: this.config.database,
52
+ tables,
53
+ driver: this.config.driver,
54
+ };
55
+ }
56
+ async getTableSchema(table) {
57
+ this.ensureConnected();
58
+ const collection = this.db.collection(table);
59
+ const count = await collection.countDocuments();
60
+ // Sample documents to infer schema
61
+ const samples = await collection.find().limit(100).toArray();
62
+ const fieldTypes = new Map();
63
+ for (const doc of samples) {
64
+ for (const [key, value] of Object.entries(doc)) {
65
+ if (!fieldTypes.has(key)) {
66
+ fieldTypes.set(key, new Set());
67
+ }
68
+ fieldTypes.get(key).add(this.inferType(value));
69
+ }
70
+ }
71
+ // Read indexes
72
+ const rawIndexes = await collection.indexes();
73
+ const indexes = [];
74
+ const uniqueSingleCols = new Set();
75
+ for (const idx of rawIndexes) {
76
+ if (idx.name === '_id_')
77
+ continue; // Skip default _id index
78
+ const cols = Object.keys(idx.key);
79
+ const unique = !!idx.unique;
80
+ indexes.push({ name: idx.name, columns: cols, unique });
81
+ if (unique && cols.length === 1) {
82
+ uniqueSingleCols.add(cols[0]);
83
+ }
84
+ }
85
+ // Read collection validator (MongoDB's CHECK equivalent)
86
+ let checks = [];
87
+ try {
88
+ const colls = await this.db
89
+ .listCollections({ name: table })
90
+ .toArray();
91
+ const validator = colls[0]?.options?.validator;
92
+ if (validator) {
93
+ // Store entire validator as a single CHECK-like constraint
94
+ checks = [{
95
+ name: `${table}_validator`,
96
+ clause: JSON.stringify(validator),
97
+ }];
98
+ }
99
+ }
100
+ catch {
101
+ // Validator read failed
102
+ }
103
+ const columns = [];
104
+ for (const [name, types] of fieldTypes) {
105
+ columns.push({
106
+ name,
107
+ type: Array.from(types).join('|'),
108
+ nullable: samples.some((d) => d[name] === null || d[name] === undefined),
109
+ isPrimary: name === '_id',
110
+ isForeign: false,
111
+ isUnique: uniqueSingleCols.has(name),
112
+ });
113
+ }
114
+ return {
115
+ name: table,
116
+ columns,
117
+ primaryKey: ['_id'],
118
+ foreignKeys: [],
119
+ indexes,
120
+ checks,
121
+ rowCount: count,
122
+ };
123
+ }
124
+ async *readRows(table, options = {}) {
125
+ this.ensureConnected();
126
+ const collection = this.db.collection(table);
127
+ const batchSize = options.batchSize ?? 1000;
128
+ const limit = options.limit;
129
+ let query = {};
130
+ if (options.where) {
131
+ try {
132
+ const parsed = JSON.parse(options.where);
133
+ // Sanitize: reject MongoDB operators ($gt, $where, etc.) to prevent NoSQL injection
134
+ if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
135
+ for (const key of Object.keys(parsed)) {
136
+ if (key.startsWith('$')) {
137
+ throw new Error(`MongoDB query operators like '${key}' are not allowed in where filters`);
138
+ }
139
+ }
140
+ query = parsed;
141
+ }
142
+ }
143
+ catch (e) {
144
+ if (e instanceof Error && e.message.includes('not allowed'))
145
+ throw e;
146
+ // Ignore invalid JSON filter
147
+ }
148
+ }
149
+ let cursor = collection.find(query).batchSize(batchSize);
150
+ if (options.offset) {
151
+ cursor = cursor.skip(options.offset);
152
+ }
153
+ if (limit) {
154
+ cursor = cursor.limit(limit);
155
+ }
156
+ let batch = [];
157
+ for await (const doc of cursor) {
158
+ // Convert _id to string
159
+ const row = { ...doc };
160
+ if (row._id && typeof row._id === 'object' && row._id.toString) {
161
+ row._id = row._id.toString();
162
+ }
163
+ batch.push(row);
164
+ if (batch.length >= batchSize) {
165
+ yield batch;
166
+ batch = [];
167
+ }
168
+ }
169
+ if (batch.length > 0) {
170
+ yield batch;
171
+ }
172
+ }
173
+ async writeRows(table, rows) {
174
+ this.ensureConnected();
175
+ if (rows.length === 0)
176
+ return 0;
177
+ const collection = this.db.collection(table);
178
+ const batchSize = 1000;
179
+ let inserted = 0;
180
+ for (let i = 0; i < rows.length; i += batchSize) {
181
+ const batch = rows.slice(i, i + batchSize);
182
+ const docs = batch.map((row) => {
183
+ const doc = {};
184
+ for (const [key, value] of Object.entries(row)) {
185
+ // Use _id for id field in MongoDB
186
+ if (key === 'id') {
187
+ doc._id = value;
188
+ }
189
+ else {
190
+ doc[key] = value;
191
+ }
192
+ }
193
+ return doc;
194
+ });
195
+ const result = await collection.insertMany(docs, { ordered: false });
196
+ inserted += result.insertedCount;
197
+ }
198
+ return inserted;
199
+ }
200
+ async createTable(schema) {
201
+ this.ensureConnected();
202
+ const exists = await this.tableExists(schema.name);
203
+ // Create collection with validator if CHECK constraints exist
204
+ const validator = this.extractValidator(schema);
205
+ if (!exists) {
206
+ const createOpts = {};
207
+ if (validator) {
208
+ createOpts.validator = validator;
209
+ }
210
+ await this.db.createCollection(schema.name, createOpts);
211
+ }
212
+ else if (validator) {
213
+ // Collection exists — update validator
214
+ await this.db.command({
215
+ collMod: schema.name,
216
+ validator,
217
+ validationLevel: 'moderate',
218
+ });
219
+ }
220
+ const collection = this.db.collection(schema.name);
221
+ // Create indexes from schema.indexes (restored from source)
222
+ if (schema.indexes) {
223
+ for (const idx of schema.indexes) {
224
+ const key = {};
225
+ for (const col of idx.columns) {
226
+ key[col] = 1;
227
+ }
228
+ await collection.createIndex(key, {
229
+ name: idx.name,
230
+ unique: idx.unique,
231
+ });
232
+ }
233
+ }
234
+ // Fallback: create indexes for FK columns not covered by schema.indexes
235
+ const indexedCols = new Set((schema.indexes ?? []).flatMap((idx) => idx.columns));
236
+ for (const col of schema.columns) {
237
+ if (col.isForeign && !indexedCols.has(col.name)) {
238
+ await collection.createIndex({ [col.name]: 1 });
239
+ }
240
+ }
241
+ }
242
+ /**
243
+ * Extract MongoDB validator from CHECK constraints.
244
+ * If the clause is JSON, parse it back as a validator object.
245
+ */
246
+ extractValidator(schema) {
247
+ if (!schema.checks || schema.checks.length === 0)
248
+ return null;
249
+ // Use the first check constraint as the validator
250
+ try {
251
+ return JSON.parse(schema.checks[0].clause);
252
+ }
253
+ catch {
254
+ return null;
255
+ }
256
+ }
257
+ async tableExists(table) {
258
+ this.ensureConnected();
259
+ const collections = await this.db
260
+ .listCollections({ name: table })
261
+ .toArray();
262
+ return collections.length > 0;
263
+ }
264
+ ensureConnected() {
265
+ if (!this.db) {
266
+ throw new Error('Not connected. Call connect() first.');
267
+ }
268
+ }
269
+ inferType(value) {
270
+ if (value === null || value === undefined)
271
+ return 'null';
272
+ if (Array.isArray(value))
273
+ return 'array';
274
+ if (value instanceof Date)
275
+ return 'date';
276
+ if (typeof value === 'object' && value !== null) {
277
+ if (value.constructor?.name === 'ObjectId')
278
+ return 'objectId';
279
+ if (value.constructor?.name === 'Binary')
280
+ return 'binary';
281
+ return 'object';
282
+ }
283
+ return typeof value;
284
+ }
285
+ }
286
+ //# sourceMappingURL=mongodb-connector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mongodb-connector.js","sourceRoot":"","sources":["../../../src/connectors/mongodb-connector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * MySQL/MariaDB Connector
3
+ * @module connectors/mysql-connector
4
+ */
5
+ import type { IDBConnector, DBConnectionConfig, DatabaseSchema, TableSchema, DBRow, ReadOptions } from './types.js';
6
+ /**
7
+ * MySQL/MariaDB connector using mysql2/promise
8
+ */
9
+ export declare class MySQLConnector implements IDBConnector {
10
+ private pool;
11
+ private config;
12
+ connect(config: DBConnectionConfig): Promise<void>;
13
+ disconnect(): Promise<void>;
14
+ getSchema(): Promise<DatabaseSchema>;
15
+ getTableSchema(table: string): Promise<TableSchema>;
16
+ readRows(table: string, options?: ReadOptions): AsyncGenerator<DBRow[], void, unknown>;
17
+ writeRows(table: string, rows: DBRow[]): Promise<number>;
18
+ createTable(schema: TableSchema): Promise<void>;
19
+ tableExists(table: string): Promise<boolean>;
20
+ private ensureConnected;
21
+ /**
22
+ * Validate identifier (table/column name) to prevent SQL injection.
23
+ * Only allows alphanumeric, underscores, hyphens, and dots.
24
+ */
25
+ private validateIdentifier;
26
+ private mapColumnType;
27
+ private escapeDefault;
28
+ }
29
+ //# sourceMappingURL=mysql-connector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mysql-connector.d.ts","sourceRoot":"","sources":["../../../src/connectors/mysql-connector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,WAAW,EAKX,KAAK,EACL,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,qBAAa,cAAe,YAAW,YAAY;IACjD,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAmC;IAE3C,OAAO,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BlD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC;IAuBpC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAsKlD,QAAQ,CACb,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,WAAgB,GACxB,cAAc,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC;IAuCnC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAgCxD,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAoE/C,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAalD,OAAO,CAAC,eAAe;IAMvB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,aAAa;CAuBtB"}