@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.
- package/README.md +30 -22
- package/dashboard-lite/index.html +458 -0
- package/dist/bin/nmt.js +225 -6
- package/dist/bin/nmt.js.map +1 -1
- package/dist/src/api/cli-server.d.ts.map +1 -1
- package/dist/src/api/cli-server.js +327 -30
- package/dist/src/api/cli-server.js.map +1 -1
- package/dist/src/cli/commands/db.d.ts +33 -0
- package/dist/src/cli/commands/db.d.ts.map +1 -0
- package/dist/src/cli/commands/db.js +197 -0
- package/dist/src/cli/commands/db.js.map +1 -0
- package/dist/src/cli/commands/infer.d.ts.map +1 -1
- package/dist/src/cli/commands/infer.js +8 -2
- package/dist/src/cli/commands/infer.js.map +1 -1
- package/dist/src/cli/commands/learn.d.ts.map +1 -1
- package/dist/src/cli/commands/learn.js +25 -1
- package/dist/src/cli/commands/learn.js.map +1 -1
- package/dist/src/cli/commands/sync.d.ts +14 -0
- package/dist/src/cli/commands/sync.d.ts.map +1 -1
- package/dist/src/cli/commands/sync.js +12 -7
- package/dist/src/cli/commands/sync.js.map +1 -1
- package/dist/src/connectors/index.d.ts +11 -0
- package/dist/src/connectors/index.d.ts.map +1 -0
- package/dist/src/connectors/index.js +24 -0
- package/dist/src/connectors/index.js.map +1 -0
- package/dist/src/connectors/mongodb-connector.d.ts +29 -0
- package/dist/src/connectors/mongodb-connector.d.ts.map +1 -0
- package/dist/src/connectors/mongodb-connector.js +286 -0
- package/dist/src/connectors/mongodb-connector.js.map +1 -0
- package/dist/src/connectors/mysql-connector.d.ts +29 -0
- package/dist/src/connectors/mysql-connector.d.ts.map +1 -0
- package/dist/src/connectors/mysql-connector.js +357 -0
- package/dist/src/connectors/mysql-connector.js.map +1 -0
- package/dist/src/connectors/types.d.ts +174 -0
- package/dist/src/connectors/types.d.ts.map +1 -0
- package/dist/src/connectors/types.js +6 -0
- package/dist/src/connectors/types.js.map +1 -0
- package/dist/src/core/attractor-model.d.ts +6 -2
- package/dist/src/core/attractor-model.d.ts.map +1 -1
- package/dist/src/core/attractor-model.js +260 -16
- package/dist/src/core/attractor-model.js.map +1 -1
- package/dist/src/core/hnsw-index.d.ts.map +1 -1
- package/dist/src/core/hnsw-index.js +16 -9
- package/dist/src/core/hnsw-index.js.map +1 -1
- package/dist/src/core/neuron-graph.d.ts +130 -1
- package/dist/src/core/neuron-graph.d.ts.map +1 -1
- package/dist/src/core/neuron-graph.js +299 -1
- package/dist/src/core/neuron-graph.js.map +1 -1
- package/dist/src/core/probabilistic-neuron.d.ts.map +1 -1
- package/dist/src/core/probabilistic-neuron.js +24 -4
- package/dist/src/core/probabilistic-neuron.js.map +1 -1
- package/dist/src/core/probabilistic-orchestrator.d.ts.map +1 -1
- package/dist/src/core/probabilistic-orchestrator.js +17 -13
- package/dist/src/core/probabilistic-orchestrator.js.map +1 -1
- package/dist/src/extensions/clustering/index.d.ts +0 -7
- package/dist/src/extensions/clustering/index.d.ts.map +1 -1
- package/dist/src/extensions/clustering/index.js.map +1 -1
- package/dist/src/mcp/server.js +4 -0
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/services/db-bridge.d.ts +46 -0
- package/dist/src/services/db-bridge.d.ts.map +1 -0
- package/dist/src/services/db-bridge.js +524 -0
- package/dist/src/services/db-bridge.js.map +1 -0
- package/dist/src/services/embedding-provider.d.ts +11 -1
- package/dist/src/services/embedding-provider.d.ts.map +1 -1
- package/dist/src/services/embedding-provider.js +78 -21
- package/dist/src/services/embedding-provider.js.map +1 -1
- package/dist/src/services/four-stage-learning.d.ts.map +1 -1
- package/dist/src/services/four-stage-learning.js +20 -9
- package/dist/src/services/four-stage-learning.js.map +1 -1
- package/dist/src/services/ingestion.d.ts +20 -1
- package/dist/src/services/ingestion.d.ts.map +1 -1
- package/dist/src/services/ingestion.js +92 -62
- package/dist/src/services/ingestion.js.map +1 -1
- package/dist/src/services/query.d.ts +57 -3
- package/dist/src/services/query.d.ts.map +1 -1
- package/dist/src/services/query.js +264 -42
- package/dist/src/services/query.js.map +1 -1
- package/dist/src/services/text-embedding.d.ts +1 -1
- package/dist/src/services/text-embedding.d.ts.map +1 -1
- package/dist/src/services/text-embedding.js +62 -3
- package/dist/src/services/text-embedding.js.map +1 -1
- package/dist/src/storage/neuron-store.d.ts +12 -1
- package/dist/src/storage/neuron-store.d.ts.map +1 -1
- package/dist/src/storage/neuron-store.js +12 -1
- package/dist/src/storage/neuron-store.js.map +1 -1
- package/dist/src/sync/change-journal.d.ts.map +1 -1
- package/dist/src/sync/change-journal.js +63 -37
- package/dist/src/sync/change-journal.js.map +1 -1
- package/dist/src/sync/state-sync.d.ts +5 -0
- package/dist/src/sync/state-sync.d.ts.map +1 -1
- package/dist/src/sync/state-sync.js +9 -2
- package/dist/src/sync/state-sync.js.map +1 -1
- package/dist/src/types/index.d.ts +73 -3
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/index.js +7 -0
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/utils/hash.d.ts.map +1 -1
- package/dist/src/utils/hash.js +3 -3
- package/dist/src/utils/hash.js.map +1 -1
- 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"}
|