@hiveforge/hivemind-mcp 3.4.0 → 3.5.1
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 +89 -309
- package/dist/cli/fix/fixer.js +1 -1
- package/dist/cli/fix/fixer.js.map +1 -1
- package/dist/cli/fix/writer.d.ts.map +1 -1
- package/dist/cli/fix/writer.js +75 -3
- package/dist/cli/fix/writer.js.map +1 -1
- package/dist/cli/init/output.d.ts.map +1 -1
- package/dist/cli/init/output.js +6 -5
- package/dist/cli/init/output.js.map +1 -1
- package/dist/cli/validate/formatter.d.ts.map +1 -1
- package/dist/cli/validate/formatter.js +16 -0
- package/dist/cli/validate/formatter.js.map +1 -1
- package/dist/cli/validate/types.d.ts +3 -0
- package/dist/cli/validate/types.d.ts.map +1 -1
- package/dist/cli/validate/validator.d.ts.map +1 -1
- package/dist/cli/validate/validator.js +32 -1
- package/dist/cli/validate/validator.js.map +1 -1
- package/dist/cli.js +2 -1
- package/dist/cli.js.map +1 -1
- package/dist/graph/database.d.ts +152 -0
- package/dist/graph/database.d.ts.map +1 -1
- package/dist/graph/database.js +418 -30
- package/dist/graph/database.js.map +1 -1
- package/dist/mcp/graph-tools.d.ts +78 -0
- package/dist/mcp/graph-tools.d.ts.map +1 -0
- package/dist/mcp/graph-tools.js +284 -0
- package/dist/mcp/graph-tools.js.map +1 -0
- package/dist/mcp/timeline-tools.d.ts +116 -0
- package/dist/mcp/timeline-tools.d.ts.map +1 -0
- package/dist/mcp/timeline-tools.js +317 -0
- package/dist/mcp/timeline-tools.js.map +1 -0
- package/dist/search/engine.d.ts +186 -0
- package/dist/search/engine.d.ts.map +1 -1
- package/dist/search/engine.js +263 -0
- package/dist/search/engine.js.map +1 -1
- package/dist/server.d.ts +52 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +472 -0
- package/dist/server.js.map +1 -1
- package/dist/templates/builtin/worldbuilding.d.ts.map +1 -1
- package/dist/templates/builtin/worldbuilding.js +401 -1
- package/dist/templates/builtin/worldbuilding.js.map +1 -1
- package/dist/templates/community/dnd-35e.d.ts +18 -0
- package/dist/templates/community/dnd-35e.d.ts.map +1 -0
- package/dist/templates/community/dnd-35e.js +859 -0
- package/dist/templates/community/dnd-35e.js.map +1 -0
- package/dist/templates/community/dnd-5e.d.ts +16 -0
- package/dist/templates/community/dnd-5e.d.ts.map +1 -0
- package/dist/templates/community/dnd-5e.js +509 -0
- package/dist/templates/community/dnd-5e.js.map +1 -0
- package/dist/templates/community/index.d.ts +9 -0
- package/dist/templates/community/index.d.ts.map +1 -1
- package/dist/templates/community/index.js +16 -0
- package/dist/templates/community/index.js.map +1 -1
- package/dist/templates/community/pathfinder-2e.d.ts +16 -0
- package/dist/templates/community/pathfinder-2e.d.ts.map +1 -0
- package/dist/templates/community/pathfinder-2e.js +711 -0
- package/dist/templates/community/pathfinder-2e.js.map +1 -0
- package/dist/templates/community/ttrpg-base.d.ts +17 -0
- package/dist/templates/community/ttrpg-base.d.ts.map +1 -0
- package/dist/templates/community/ttrpg-base.js +889 -0
- package/dist/templates/community/ttrpg-base.js.map +1 -0
- package/dist/templates/loader.d.ts +2 -0
- package/dist/templates/loader.d.ts.map +1 -1
- package/dist/templates/loader.js +45 -1
- package/dist/templates/loader.js.map +1 -1
- package/dist/templates/registry.d.ts +49 -2
- package/dist/templates/registry.d.ts.map +1 -1
- package/dist/templates/registry.js +276 -6
- package/dist/templates/registry.js.map +1 -1
- package/dist/templates/types.d.ts +28 -1
- package/dist/templates/types.d.ts.map +1 -1
- package/dist/templates/validator.d.ts +80 -1
- package/dist/templates/validator.d.ts.map +1 -1
- package/dist/templates/validator.js +22 -5
- package/dist/templates/validator.js.map +1 -1
- package/dist/types/index.d.ts +18 -18
- package/package.json +1 -1
package/dist/graph/database.js
CHANGED
|
@@ -155,15 +155,9 @@ export class HivemindDatabase {
|
|
|
155
155
|
stmt.run(sourceId, targetId, relType || 'related', properties ? JSON.stringify(properties) : null);
|
|
156
156
|
}
|
|
157
157
|
/**
|
|
158
|
-
*
|
|
158
|
+
* Convert a database row to a GraphNode
|
|
159
159
|
*/
|
|
160
|
-
|
|
161
|
-
const stmt = this.db.prepare(`
|
|
162
|
-
SELECT * FROM nodes WHERE id = ?
|
|
163
|
-
`);
|
|
164
|
-
const row = stmt.get(id);
|
|
165
|
-
if (!row)
|
|
166
|
-
return undefined;
|
|
160
|
+
rowToGraphNode(row) {
|
|
167
161
|
return {
|
|
168
162
|
id: row.id,
|
|
169
163
|
type: row.type,
|
|
@@ -176,23 +170,25 @@ export class HivemindDatabase {
|
|
|
176
170
|
updated: new Date(row.updated_at),
|
|
177
171
|
};
|
|
178
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* Get a node by ID
|
|
175
|
+
*/
|
|
176
|
+
getNode(id) {
|
|
177
|
+
const stmt = this.db.prepare(`
|
|
178
|
+
SELECT * FROM nodes WHERE id = ?
|
|
179
|
+
`);
|
|
180
|
+
const row = stmt.get(id);
|
|
181
|
+
if (!row)
|
|
182
|
+
return undefined;
|
|
183
|
+
return this.rowToGraphNode(row);
|
|
184
|
+
}
|
|
179
185
|
/**
|
|
180
186
|
* Get all nodes
|
|
181
187
|
*/
|
|
182
188
|
getAllNodes() {
|
|
183
189
|
const stmt = this.db.prepare('SELECT * FROM nodes ORDER BY updated_at DESC');
|
|
184
190
|
const rows = stmt.all();
|
|
185
|
-
return rows.map(row => (
|
|
186
|
-
id: row.id,
|
|
187
|
-
type: row.type,
|
|
188
|
-
status: row.status,
|
|
189
|
-
title: row.title,
|
|
190
|
-
content: row.content,
|
|
191
|
-
properties: JSON.parse(row.frontmatter),
|
|
192
|
-
filePath: row.file_path,
|
|
193
|
-
created: new Date(row.created_at),
|
|
194
|
-
updated: new Date(row.updated_at),
|
|
195
|
-
}));
|
|
191
|
+
return rows.map(row => this.rowToGraphNode(row));
|
|
196
192
|
}
|
|
197
193
|
/**
|
|
198
194
|
* Get nodes by type
|
|
@@ -200,17 +196,7 @@ export class HivemindDatabase {
|
|
|
200
196
|
getNodesByType(type) {
|
|
201
197
|
const stmt = this.db.prepare('SELECT * FROM nodes WHERE type = ? ORDER BY title');
|
|
202
198
|
const rows = stmt.all(type);
|
|
203
|
-
return rows.map(row => (
|
|
204
|
-
id: row.id,
|
|
205
|
-
type: row.type,
|
|
206
|
-
status: row.status,
|
|
207
|
-
title: row.title,
|
|
208
|
-
content: row.content,
|
|
209
|
-
properties: JSON.parse(row.frontmatter),
|
|
210
|
-
filePath: row.file_path,
|
|
211
|
-
created: new Date(row.created_at),
|
|
212
|
-
updated: new Date(row.updated_at),
|
|
213
|
-
}));
|
|
199
|
+
return rows.map(row => this.rowToGraphNode(row));
|
|
214
200
|
}
|
|
215
201
|
/**
|
|
216
202
|
* Get relationships for a node
|
|
@@ -292,6 +278,408 @@ export class HivemindDatabase {
|
|
|
292
278
|
const result = this.db.prepare('SELECT COUNT(*) as count FROM nodes').get();
|
|
293
279
|
return result.count > 0;
|
|
294
280
|
}
|
|
281
|
+
/**
|
|
282
|
+
* Initialize generated columns for date fields
|
|
283
|
+
* Creates VIRTUAL generated columns that extract date values from JSON frontmatter
|
|
284
|
+
* and indexes them for efficient queries.
|
|
285
|
+
*
|
|
286
|
+
* @param dateFields - Array of date field names (e.g., ['birth_date', 'start_date'])
|
|
287
|
+
*/
|
|
288
|
+
initializeDateColumns(dateFields) {
|
|
289
|
+
for (const field of dateFields) {
|
|
290
|
+
try {
|
|
291
|
+
// Add VIRTUAL generated column
|
|
292
|
+
// SQLite doesn't support IF NOT EXISTS for ALTER TABLE ADD COLUMN
|
|
293
|
+
// So we catch the error if column already exists
|
|
294
|
+
this.db.exec(`
|
|
295
|
+
ALTER TABLE nodes
|
|
296
|
+
ADD COLUMN ${field} TEXT
|
|
297
|
+
GENERATED ALWAYS AS (json_extract(frontmatter, '$.${field}')) VIRTUAL;
|
|
298
|
+
`);
|
|
299
|
+
}
|
|
300
|
+
catch (error) {
|
|
301
|
+
// Ignore "duplicate column" errors (makes this idempotent)
|
|
302
|
+
if (!(error instanceof Error && error.message.includes('duplicate column'))) {
|
|
303
|
+
throw error;
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
// Create index on the generated column (IF NOT EXISTS supported for indexes)
|
|
307
|
+
this.db.exec(`
|
|
308
|
+
CREATE INDEX IF NOT EXISTS idx_nodes_${field} ON nodes(${field});
|
|
309
|
+
`);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Query nodes by date range
|
|
314
|
+
*
|
|
315
|
+
* @param startDate - Start date (inclusive) in ISO format (YYYY-MM-DD)
|
|
316
|
+
* @param endDate - End date (inclusive) in ISO format (YYYY-MM-DD)
|
|
317
|
+
* @param dateField - Name of the date field to query
|
|
318
|
+
* @param options - Query options (entityType, sortOrder, limit)
|
|
319
|
+
* @returns Array of matching GraphNodes
|
|
320
|
+
*/
|
|
321
|
+
queryByDateRange(startDate, endDate, dateField, options) {
|
|
322
|
+
const { entityType, sortOrder = 'asc', limit = 100 } = options || {};
|
|
323
|
+
let sql = `
|
|
324
|
+
SELECT * FROM nodes
|
|
325
|
+
WHERE json_extract(frontmatter, '$.${dateField}') BETWEEN ? AND ?
|
|
326
|
+
`;
|
|
327
|
+
const params = [startDate, endDate];
|
|
328
|
+
if (entityType) {
|
|
329
|
+
sql += ' AND type = ?';
|
|
330
|
+
params.push(entityType);
|
|
331
|
+
}
|
|
332
|
+
sql += ` ORDER BY json_extract(frontmatter, '$.${dateField}') ${sortOrder.toUpperCase()}`;
|
|
333
|
+
sql += ' LIMIT ?';
|
|
334
|
+
params.push(limit);
|
|
335
|
+
const stmt = this.db.prepare(sql);
|
|
336
|
+
const rows = stmt.all(...params);
|
|
337
|
+
return rows.map(row => this.rowToGraphNode(row));
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Query nodes before a specific date
|
|
341
|
+
*
|
|
342
|
+
* @param date - Date threshold in ISO format (YYYY-MM-DD)
|
|
343
|
+
* @param dateField - Name of the date field to query
|
|
344
|
+
* @param options - Query options (entityType, sortOrder, limit)
|
|
345
|
+
* @returns Array of matching GraphNodes (default: desc order - most recent first)
|
|
346
|
+
*/
|
|
347
|
+
queryByDateBefore(date, dateField, options) {
|
|
348
|
+
const { entityType, sortOrder = 'desc', limit = 100 } = options || {};
|
|
349
|
+
let sql = `
|
|
350
|
+
SELECT * FROM nodes
|
|
351
|
+
WHERE json_extract(frontmatter, '$.${dateField}') < ?
|
|
352
|
+
`;
|
|
353
|
+
const params = [date];
|
|
354
|
+
if (entityType) {
|
|
355
|
+
sql += ' AND type = ?';
|
|
356
|
+
params.push(entityType);
|
|
357
|
+
}
|
|
358
|
+
sql += ` ORDER BY json_extract(frontmatter, '$.${dateField}') ${sortOrder.toUpperCase()}`;
|
|
359
|
+
sql += ' LIMIT ?';
|
|
360
|
+
params.push(limit);
|
|
361
|
+
const stmt = this.db.prepare(sql);
|
|
362
|
+
const rows = stmt.all(...params);
|
|
363
|
+
return rows.map(row => this.rowToGraphNode(row));
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Query nodes after a specific date
|
|
367
|
+
*
|
|
368
|
+
* @param date - Date threshold in ISO format (YYYY-MM-DD)
|
|
369
|
+
* @param dateField - Name of the date field to query
|
|
370
|
+
* @param options - Query options (entityType, sortOrder, limit)
|
|
371
|
+
* @returns Array of matching GraphNodes (default: asc order - earliest first)
|
|
372
|
+
*/
|
|
373
|
+
queryByDateAfter(date, dateField, options) {
|
|
374
|
+
const { entityType, sortOrder = 'asc', limit = 100 } = options || {};
|
|
375
|
+
let sql = `
|
|
376
|
+
SELECT * FROM nodes
|
|
377
|
+
WHERE json_extract(frontmatter, '$.${dateField}') > ?
|
|
378
|
+
`;
|
|
379
|
+
const params = [date];
|
|
380
|
+
if (entityType) {
|
|
381
|
+
sql += ' AND type = ?';
|
|
382
|
+
params.push(entityType);
|
|
383
|
+
}
|
|
384
|
+
sql += ` ORDER BY json_extract(frontmatter, '$.${dateField}') ${sortOrder.toUpperCase()}`;
|
|
385
|
+
sql += ' LIMIT ?';
|
|
386
|
+
params.push(limit);
|
|
387
|
+
const stmt = this.db.prepare(sql);
|
|
388
|
+
const rows = stmt.all(...params);
|
|
389
|
+
return rows.map(row => this.rowToGraphNode(row));
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Query nodes by exact date match
|
|
393
|
+
*
|
|
394
|
+
* @param date - Date to match in ISO format (YYYY-MM-DD)
|
|
395
|
+
* @param dateField - Name of the date field to query
|
|
396
|
+
* @param options - Query options (entityType, sortOrder, limit)
|
|
397
|
+
* @returns Array of matching GraphNodes
|
|
398
|
+
*/
|
|
399
|
+
queryByExactDate(date, dateField, options) {
|
|
400
|
+
const { entityType, sortOrder = 'asc', limit = 100 } = options || {};
|
|
401
|
+
let sql = `
|
|
402
|
+
SELECT * FROM nodes
|
|
403
|
+
WHERE json_extract(frontmatter, '$.${dateField}') = ?
|
|
404
|
+
`;
|
|
405
|
+
const params = [date];
|
|
406
|
+
if (entityType) {
|
|
407
|
+
sql += ' AND type = ?';
|
|
408
|
+
params.push(entityType);
|
|
409
|
+
}
|
|
410
|
+
sql += ` ORDER BY json_extract(frontmatter, '$.${dateField}') ${sortOrder.toUpperCase()}`;
|
|
411
|
+
sql += ' LIMIT ?';
|
|
412
|
+
params.push(limit);
|
|
413
|
+
const stmt = this.db.prepare(sql);
|
|
414
|
+
const rows = stmt.all(...params);
|
|
415
|
+
return rows.map(row => this.rowToGraphNode(row));
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Query nodes whose date range overlaps with the specified range
|
|
419
|
+
* Useful for events with start_date and end_date
|
|
420
|
+
*
|
|
421
|
+
* @param startDate - Query range start in ISO format (YYYY-MM-DD)
|
|
422
|
+
* @param endDate - Query range end in ISO format (YYYY-MM-DD)
|
|
423
|
+
* @param startField - Name of the start date field
|
|
424
|
+
* @param endField - Name of the end date field
|
|
425
|
+
* @param options - Query options (entityType, sortOrder, limit)
|
|
426
|
+
* @returns Array of matching GraphNodes
|
|
427
|
+
*/
|
|
428
|
+
queryByDateOverlap(startDate, endDate, startField, endField, options) {
|
|
429
|
+
const { entityType, sortOrder = 'asc', limit = 100 } = options || {};
|
|
430
|
+
// Overlap condition: entity starts before query ends AND (entity ends after query starts OR entity has no end date)
|
|
431
|
+
let sql = `
|
|
432
|
+
SELECT * FROM nodes
|
|
433
|
+
WHERE json_extract(frontmatter, '$.${startField}') <= ?
|
|
434
|
+
AND (
|
|
435
|
+
json_extract(frontmatter, '$.${endField}') >= ?
|
|
436
|
+
OR json_extract(frontmatter, '$.${endField}') IS NULL
|
|
437
|
+
)
|
|
438
|
+
`;
|
|
439
|
+
const params = [endDate, startDate];
|
|
440
|
+
if (entityType) {
|
|
441
|
+
sql += ' AND type = ?';
|
|
442
|
+
params.push(entityType);
|
|
443
|
+
}
|
|
444
|
+
sql += ` ORDER BY json_extract(frontmatter, '$.${startField}') ${sortOrder.toUpperCase()}`;
|
|
445
|
+
sql += ' LIMIT ?';
|
|
446
|
+
params.push(limit);
|
|
447
|
+
const stmt = this.db.prepare(sql);
|
|
448
|
+
const rows = stmt.all(...params);
|
|
449
|
+
return rows.map(row => this.rowToGraphNode(row));
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* Query immediate neighbors (1-hop connections) of an entity
|
|
453
|
+
*
|
|
454
|
+
* @param entityId - Entity to find neighbors for
|
|
455
|
+
* @param options - Filter options (direction, relationship types, entity types, limit)
|
|
456
|
+
* @returns Array of neighbors with relationship info
|
|
457
|
+
*/
|
|
458
|
+
queryNeighbors(entityId, options) {
|
|
459
|
+
const { direction = 'both', limit = 100 } = options || {};
|
|
460
|
+
let sql = `
|
|
461
|
+
SELECT
|
|
462
|
+
CASE
|
|
463
|
+
WHEN r.source_id = ? THEN r.target_id
|
|
464
|
+
ELSE r.source_id
|
|
465
|
+
END as neighbor_id,
|
|
466
|
+
r.rel_type,
|
|
467
|
+
CASE
|
|
468
|
+
WHEN r.source_id = ? THEN 'outgoing'
|
|
469
|
+
ELSE 'incoming'
|
|
470
|
+
END as direction
|
|
471
|
+
FROM relationships r
|
|
472
|
+
WHERE
|
|
473
|
+
`;
|
|
474
|
+
const params = [entityId, entityId];
|
|
475
|
+
// Direction filter
|
|
476
|
+
if (direction === 'outgoing') {
|
|
477
|
+
sql += `r.source_id = ?`;
|
|
478
|
+
params.push(entityId);
|
|
479
|
+
}
|
|
480
|
+
else if (direction === 'incoming') {
|
|
481
|
+
sql += `r.target_id = ?`;
|
|
482
|
+
params.push(entityId);
|
|
483
|
+
}
|
|
484
|
+
else {
|
|
485
|
+
sql += `(r.source_id = ? OR r.target_id = ?)`;
|
|
486
|
+
params.push(entityId, entityId);
|
|
487
|
+
}
|
|
488
|
+
// Relationship type filters
|
|
489
|
+
if (options?.includeRelationships?.length) {
|
|
490
|
+
sql += ` AND r.rel_type IN (${options.includeRelationships.map(() => '?').join(',')})`;
|
|
491
|
+
params.push(...options.includeRelationships);
|
|
492
|
+
}
|
|
493
|
+
else if (options?.excludeRelationships?.length) {
|
|
494
|
+
sql += ` AND r.rel_type NOT IN (${options.excludeRelationships.map(() => '?').join(',')})`;
|
|
495
|
+
params.push(...options.excludeRelationships);
|
|
496
|
+
}
|
|
497
|
+
// Entity type filter - requires JOIN with nodes table
|
|
498
|
+
if (options?.includeEntityTypes?.length) {
|
|
499
|
+
sql = `
|
|
500
|
+
SELECT neighbor_id, rel_type, direction FROM (
|
|
501
|
+
${sql}
|
|
502
|
+
) filtered
|
|
503
|
+
JOIN nodes n ON n.id = filtered.neighbor_id
|
|
504
|
+
WHERE n.type IN (${options.includeEntityTypes.map(() => '?').join(',')})
|
|
505
|
+
`;
|
|
506
|
+
params.push(...options.includeEntityTypes);
|
|
507
|
+
}
|
|
508
|
+
sql += ` LIMIT ?`;
|
|
509
|
+
params.push(limit);
|
|
510
|
+
const stmt = this.db.prepare(sql);
|
|
511
|
+
return stmt.all(...params);
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Query multi-hop subgraph from a starting entity
|
|
515
|
+
*
|
|
516
|
+
* @param entityId - Starting entity
|
|
517
|
+
* @param depth - Number of hops (1-5, capped at 5)
|
|
518
|
+
* @param options - Filter options
|
|
519
|
+
* @returns Array of entities at specified depth(s) with path info
|
|
520
|
+
*/
|
|
521
|
+
querySubgraph(entityId, depth, options) {
|
|
522
|
+
const { direction = 'both', includeIntermediateNodes = false } = options || {};
|
|
523
|
+
const maxDepth = Math.min(depth, 5); // Cap at 5 for safety
|
|
524
|
+
// Build relationship type filter
|
|
525
|
+
let relFilter = '';
|
|
526
|
+
const relFilterParams = [];
|
|
527
|
+
if (options?.includeRelationships?.length) {
|
|
528
|
+
relFilter = `AND r.rel_type IN (${options.includeRelationships.map(() => '?').join(',')})`;
|
|
529
|
+
relFilterParams.push(...options.includeRelationships);
|
|
530
|
+
}
|
|
531
|
+
else if (options?.excludeRelationships?.length) {
|
|
532
|
+
relFilter = `AND r.rel_type NOT IN (${options.excludeRelationships.map(() => '?').join(',')})`;
|
|
533
|
+
relFilterParams.push(...options.excludeRelationships);
|
|
534
|
+
}
|
|
535
|
+
// Build direction filter
|
|
536
|
+
let directionJoin = '(r.source_id = t.entity_id OR r.target_id = t.entity_id)';
|
|
537
|
+
if (direction === 'outgoing') {
|
|
538
|
+
directionJoin = 'r.source_id = t.entity_id';
|
|
539
|
+
}
|
|
540
|
+
else if (direction === 'incoming') {
|
|
541
|
+
directionJoin = 'r.target_id = t.entity_id';
|
|
542
|
+
}
|
|
543
|
+
let sql = `
|
|
544
|
+
WITH RECURSIVE traversal(entity_id, depth, path) AS (
|
|
545
|
+
-- Base case: starting entity
|
|
546
|
+
SELECT ?, 0, ?
|
|
547
|
+
|
|
548
|
+
UNION ALL
|
|
549
|
+
|
|
550
|
+
-- Recursive case: traverse edges
|
|
551
|
+
SELECT
|
|
552
|
+
CASE WHEN r.source_id = t.entity_id THEN r.target_id ELSE r.source_id END,
|
|
553
|
+
t.depth + 1,
|
|
554
|
+
t.path || ',' || CASE WHEN r.source_id = t.entity_id THEN r.target_id ELSE r.source_id END
|
|
555
|
+
FROM traversal t
|
|
556
|
+
JOIN relationships r ON ${directionJoin}
|
|
557
|
+
WHERE t.depth < ?
|
|
558
|
+
${relFilter}
|
|
559
|
+
-- Cycle prevention: don't revisit nodes in current path
|
|
560
|
+
AND t.path NOT LIKE '%' ||
|
|
561
|
+
CASE WHEN r.source_id = t.entity_id THEN r.target_id ELSE r.source_id END || '%'
|
|
562
|
+
),
|
|
563
|
+
shortest_paths AS (
|
|
564
|
+
SELECT entity_id, MIN(depth) as depth,
|
|
565
|
+
(SELECT path FROM traversal t2 WHERE t2.entity_id = traversal.entity_id ORDER BY depth LIMIT 1) as path
|
|
566
|
+
FROM traversal
|
|
567
|
+
WHERE depth > 0
|
|
568
|
+
GROUP BY entity_id
|
|
569
|
+
)
|
|
570
|
+
SELECT entity_id, depth, path
|
|
571
|
+
FROM shortest_paths
|
|
572
|
+
${includeIntermediateNodes ? '' : `WHERE depth = ?`}
|
|
573
|
+
ORDER BY depth
|
|
574
|
+
`;
|
|
575
|
+
const params = [
|
|
576
|
+
entityId,
|
|
577
|
+
entityId,
|
|
578
|
+
maxDepth,
|
|
579
|
+
...relFilterParams
|
|
580
|
+
];
|
|
581
|
+
if (!includeIntermediateNodes) {
|
|
582
|
+
params.push(maxDepth);
|
|
583
|
+
}
|
|
584
|
+
// Add entity type filter if specified
|
|
585
|
+
if (options?.includeEntityTypes?.length) {
|
|
586
|
+
sql = `
|
|
587
|
+
SELECT entity_id, depth, path FROM (
|
|
588
|
+
${sql}
|
|
589
|
+
) filtered
|
|
590
|
+
JOIN nodes n ON n.id = filtered.entity_id
|
|
591
|
+
WHERE n.type IN (${options.includeEntityTypes.map(() => '?').join(',')})
|
|
592
|
+
`;
|
|
593
|
+
params.push(...options.includeEntityTypes);
|
|
594
|
+
}
|
|
595
|
+
const stmt = this.db.prepare(sql);
|
|
596
|
+
return stmt.all(...params);
|
|
597
|
+
}
|
|
598
|
+
/**
|
|
599
|
+
* Find shortest path between two entities using BFS
|
|
600
|
+
*
|
|
601
|
+
* @param fromEntityId - Starting entity
|
|
602
|
+
* @param toEntityId - Target entity
|
|
603
|
+
* @param options - Filter options (relationship types, max depth)
|
|
604
|
+
* @returns Path info or not found
|
|
605
|
+
*/
|
|
606
|
+
queryShortestPath(fromEntityId, toEntityId, options) {
|
|
607
|
+
const maxDepth = options?.maxDepth || 10;
|
|
608
|
+
// Build relationship filter
|
|
609
|
+
let relFilter = '';
|
|
610
|
+
const relFilterParams = [];
|
|
611
|
+
if (options?.includeRelationships?.length) {
|
|
612
|
+
relFilter = `AND r.rel_type IN (${options.includeRelationships.map(() => '?').join(',')})`;
|
|
613
|
+
relFilterParams.push(...options.includeRelationships);
|
|
614
|
+
}
|
|
615
|
+
// BFS finds shortest path naturally - first time we reach target is shortest
|
|
616
|
+
const sql = `
|
|
617
|
+
WITH RECURSIVE path_search(entity_id, path, depth) AS (
|
|
618
|
+
-- Start from source
|
|
619
|
+
SELECT ?, ?, 0
|
|
620
|
+
|
|
621
|
+
UNION ALL
|
|
622
|
+
|
|
623
|
+
-- Explore neighbors
|
|
624
|
+
SELECT
|
|
625
|
+
CASE WHEN r.source_id = p.entity_id THEN r.target_id ELSE r.source_id END as next_id,
|
|
626
|
+
p.path || ',' || CASE WHEN r.source_id = p.entity_id THEN r.target_id ELSE r.source_id END,
|
|
627
|
+
p.depth + 1
|
|
628
|
+
FROM path_search p
|
|
629
|
+
JOIN relationships r ON (r.source_id = p.entity_id OR r.target_id = p.entity_id)
|
|
630
|
+
WHERE p.depth < ?
|
|
631
|
+
${relFilter}
|
|
632
|
+
-- Don't revisit nodes (check if next node is already in path)
|
|
633
|
+
AND p.path NOT LIKE '%' ||
|
|
634
|
+
CASE WHEN r.source_id = p.entity_id THEN r.target_id ELSE r.source_id END || '%'
|
|
635
|
+
)
|
|
636
|
+
SELECT path, depth
|
|
637
|
+
FROM path_search
|
|
638
|
+
WHERE entity_id = ?
|
|
639
|
+
ORDER BY depth
|
|
640
|
+
LIMIT 1
|
|
641
|
+
`;
|
|
642
|
+
const params = [
|
|
643
|
+
fromEntityId,
|
|
644
|
+
fromEntityId,
|
|
645
|
+
maxDepth,
|
|
646
|
+
...relFilterParams,
|
|
647
|
+
toEntityId
|
|
648
|
+
];
|
|
649
|
+
const stmt = this.db.prepare(sql);
|
|
650
|
+
const result = stmt.get(...params);
|
|
651
|
+
if (!result) {
|
|
652
|
+
return { found: false, path: [], edges: [] };
|
|
653
|
+
}
|
|
654
|
+
const pathIds = result.path.split(',');
|
|
655
|
+
// Build edge list from path
|
|
656
|
+
const edges = [];
|
|
657
|
+
for (let i = 0; i < pathIds.length - 1; i++) {
|
|
658
|
+
const edge = this.getEdgeBetween(pathIds[i], pathIds[i + 1]);
|
|
659
|
+
if (edge) {
|
|
660
|
+
edges.push({ from: pathIds[i], to: pathIds[i + 1], type: edge.rel_type });
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
return { found: true, path: pathIds, edges };
|
|
664
|
+
}
|
|
665
|
+
/**
|
|
666
|
+
* Get edge information between two directly connected nodes
|
|
667
|
+
*
|
|
668
|
+
* @param nodeA - First node ID
|
|
669
|
+
* @param nodeB - Second node ID
|
|
670
|
+
* @returns Edge info or null if no direct connection
|
|
671
|
+
*/
|
|
672
|
+
getEdgeBetween(nodeA, nodeB) {
|
|
673
|
+
const stmt = this.db.prepare(`
|
|
674
|
+
SELECT rel_type
|
|
675
|
+
FROM relationships
|
|
676
|
+
WHERE (source_id = ? AND target_id = ?)
|
|
677
|
+
OR (source_id = ? AND target_id = ?)
|
|
678
|
+
LIMIT 1
|
|
679
|
+
`);
|
|
680
|
+
const result = stmt.get(nodeA, nodeB, nodeB, nodeA);
|
|
681
|
+
return result || null;
|
|
682
|
+
}
|
|
295
683
|
/**
|
|
296
684
|
* Close database connection
|
|
297
685
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/graph/database.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/graph/database.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Graph MCP tools - relationship traversal and path finding.
|
|
3
|
+
*
|
|
4
|
+
* Provides graph traversal tools for querying entity relationships,
|
|
5
|
+
* finding shortest paths, and discovering available relationship types.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import type { ToolDefinition } from './tool-generator.js';
|
|
9
|
+
/**
|
|
10
|
+
* Validation schema for query_graph_neighbors arguments.
|
|
11
|
+
*
|
|
12
|
+
* Finds immediate neighbors (1-hop connections) of an entity.
|
|
13
|
+
*/
|
|
14
|
+
export declare const QueryGraphNeighborsArgsSchema: z.ZodObject<{
|
|
15
|
+
entityId: z.ZodString;
|
|
16
|
+
direction: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
17
|
+
outgoing: "outgoing";
|
|
18
|
+
incoming: "incoming";
|
|
19
|
+
both: "both";
|
|
20
|
+
}>>>;
|
|
21
|
+
includeRelationships: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
22
|
+
excludeRelationships: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
23
|
+
includeEntityTypes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
24
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
25
|
+
}, z.core.$strip>;
|
|
26
|
+
export type QueryGraphNeighborsArgs = z.infer<typeof QueryGraphNeighborsArgsSchema>;
|
|
27
|
+
/**
|
|
28
|
+
* Validation schema for query_graph_subgraph arguments.
|
|
29
|
+
*
|
|
30
|
+
* Finds entities within N hops of a starting entity.
|
|
31
|
+
*/
|
|
32
|
+
export declare const QueryGraphSubgraphArgsSchema: z.ZodObject<{
|
|
33
|
+
entityId: z.ZodString;
|
|
34
|
+
depth: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
35
|
+
direction: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
36
|
+
outgoing: "outgoing";
|
|
37
|
+
incoming: "incoming";
|
|
38
|
+
both: "both";
|
|
39
|
+
}>>>;
|
|
40
|
+
includeRelationships: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
41
|
+
excludeRelationships: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
42
|
+
includeEntityTypes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
43
|
+
includeIntermediateNodes: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
44
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
45
|
+
}, z.core.$strip>;
|
|
46
|
+
export type QueryGraphSubgraphArgs = z.infer<typeof QueryGraphSubgraphArgsSchema>;
|
|
47
|
+
/**
|
|
48
|
+
* Validation schema for query_graph_path arguments.
|
|
49
|
+
*
|
|
50
|
+
* Finds the shortest path between two entities.
|
|
51
|
+
*/
|
|
52
|
+
export declare const QueryGraphPathArgsSchema: z.ZodObject<{
|
|
53
|
+
fromEntityId: z.ZodString;
|
|
54
|
+
toEntityId: z.ZodString;
|
|
55
|
+
includeRelationships: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
56
|
+
maxDepth: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
57
|
+
}, z.core.$strip>;
|
|
58
|
+
export type QueryGraphPathArgs = z.infer<typeof QueryGraphPathArgsSchema>;
|
|
59
|
+
/**
|
|
60
|
+
* Validation schema for list_relationship_types arguments.
|
|
61
|
+
*
|
|
62
|
+
* Lists all relationship types available in the vault.
|
|
63
|
+
*/
|
|
64
|
+
export declare const ListRelationshipTypesArgsSchema: z.ZodObject<{}, z.core.$strip>;
|
|
65
|
+
export type ListRelationshipTypesArgs = z.infer<typeof ListRelationshipTypesArgsSchema>;
|
|
66
|
+
/**
|
|
67
|
+
* Generates MCP tool definitions for graph queries.
|
|
68
|
+
*
|
|
69
|
+
* Creates four tools: query_graph_neighbors, query_graph_subgraph,
|
|
70
|
+
* query_graph_path, and list_relationship_types.
|
|
71
|
+
*
|
|
72
|
+
* Tool descriptions dynamically include available relationship types
|
|
73
|
+
* when an active template is present.
|
|
74
|
+
*
|
|
75
|
+
* @returns Array of tool definitions for MCP registration
|
|
76
|
+
*/
|
|
77
|
+
export declare function generateGraphTools(): ToolDefinition[];
|
|
78
|
+
//# sourceMappingURL=graph-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-tools.d.ts","sourceRoot":"","sources":["../../src/mcp/graph-tools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;;GAIG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;iBA4BxC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF;;;;GAIG;AACH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;iBAwCvC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB;;;;;iBAkBnC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;;;GAIG;AACH,eAAO,MAAM,+BAA+B,gCAE1C,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,IAAI,cAAc,EAAE,CA0JrD"}
|