@aaronsb/kg-cli 0.6.6 → 0.7.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/dist/api/client.d.ts +127 -1
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +147 -0
- package/dist/api/client.js.map +1 -1
- package/dist/cli/batch.d.ts +8 -0
- package/dist/cli/batch.d.ts.map +1 -0
- package/dist/cli/batch.js +225 -0
- package/dist/cli/batch.js.map +1 -0
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +8 -0
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/concept.d.ts +9 -0
- package/dist/cli/concept.d.ts.map +1 -0
- package/dist/cli/concept.js +336 -0
- package/dist/cli/concept.js.map +1 -0
- package/dist/cli/edge.d.ts +9 -0
- package/dist/cli/edge.d.ts.map +1 -0
- package/dist/cli/edge.js +364 -0
- package/dist/cli/edge.js.map +1 -0
- package/dist/cli/jobs.js +111 -3
- package/dist/cli/jobs.js.map +1 -1
- package/dist/cli/storage.d.ts +10 -0
- package/dist/cli/storage.d.ts.map +1 -0
- package/dist/cli/storage.js +260 -0
- package/dist/cli/storage.js.map +1 -0
- package/dist/cli/vocabulary/index.d.ts.map +1 -1
- package/dist/cli/vocabulary/index.js +1 -0
- package/dist/cli/vocabulary/index.js.map +1 -1
- package/dist/cli/vocabulary/similarity.d.ts +1 -0
- package/dist/cli/vocabulary/similarity.d.ts.map +1 -1
- package/dist/cli/vocabulary/similarity.js +60 -9
- package/dist/cli/vocabulary/similarity.js.map +1 -1
- package/dist/lib/interactive.d.ts +84 -0
- package/dist/lib/interactive.d.ts.map +1 -0
- package/dist/lib/interactive.js +296 -0
- package/dist/lib/interactive.js.map +1 -0
- package/dist/lib/validation.d.ts +106 -0
- package/dist/lib/validation.d.ts.map +1 -0
- package/dist/lib/validation.js +354 -0
- package/dist/lib/validation.js.map +1 -0
- package/dist/mcp/formatters/concept.d.ts +24 -0
- package/dist/mcp/formatters/concept.d.ts.map +1 -0
- package/dist/mcp/formatters/concept.js +243 -0
- package/dist/mcp/formatters/concept.js.map +1 -0
- package/dist/mcp/formatters/document.d.ts +25 -0
- package/dist/mcp/formatters/document.d.ts.map +1 -0
- package/dist/mcp/formatters/document.js +178 -0
- package/dist/mcp/formatters/document.js.map +1 -0
- package/dist/mcp/formatters/epistemic.d.ts +16 -0
- package/dist/mcp/formatters/epistemic.d.ts.map +1 -0
- package/dist/mcp/formatters/epistemic.js +269 -0
- package/dist/mcp/formatters/epistemic.js.map +1 -0
- package/dist/mcp/formatters/graph.d.ts +63 -0
- package/dist/mcp/formatters/graph.d.ts.map +1 -0
- package/dist/mcp/formatters/graph.js +220 -0
- package/dist/mcp/formatters/graph.js.map +1 -0
- package/dist/mcp/formatters/index.d.ts +18 -0
- package/dist/mcp/formatters/index.d.ts.map +1 -0
- package/dist/mcp/formatters/index.js +63 -0
- package/dist/mcp/formatters/index.js.map +1 -0
- package/dist/mcp/formatters/ingest.d.ts +16 -0
- package/dist/mcp/formatters/ingest.d.ts.map +1 -0
- package/dist/mcp/formatters/ingest.js +169 -0
- package/dist/mcp/formatters/ingest.js.map +1 -0
- package/dist/mcp/formatters/job.d.ts +13 -0
- package/dist/mcp/formatters/job.d.ts.map +1 -0
- package/dist/mcp/formatters/job.js +204 -0
- package/dist/mcp/formatters/job.js.map +1 -0
- package/dist/mcp/formatters/source.d.ts +19 -0
- package/dist/mcp/formatters/source.d.ts.map +1 -0
- package/dist/mcp/formatters/source.js +182 -0
- package/dist/mcp/formatters/source.js.map +1 -0
- package/dist/mcp/formatters/system.d.ts +10 -0
- package/dist/mcp/formatters/system.d.ts.map +1 -0
- package/dist/mcp/formatters/system.js +152 -0
- package/dist/mcp/formatters/system.js.map +1 -0
- package/dist/mcp/formatters/utils.d.ts +17 -0
- package/dist/mcp/formatters/utils.d.ts.map +1 -0
- package/dist/mcp/formatters/utils.js +55 -0
- package/dist/mcp/formatters/utils.js.map +1 -0
- package/dist/mcp/graph-operations.d.ts +242 -0
- package/dist/mcp/graph-operations.d.ts.map +1 -0
- package/dist/mcp/graph-operations.js +532 -0
- package/dist/mcp/graph-operations.js.map +1 -0
- package/dist/mcp-server.js +460 -32
- package/dist/mcp-server.js.map +1 -1
- package/dist/types/index.d.ts +153 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/version.d.ts +3 -3
- package/dist/version.js +3 -3
- package/dist/version.js.map +1 -1
- package/package.json +1 -1
- package/dist/mcp/formatters.d.ts +0 -100
- package/dist/mcp/formatters.d.ts.map +0 -1
- package/dist/mcp/formatters.js +0 -1411
- package/dist/mcp/formatters.js.map +0 -1
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* GraphOperationExecutor - Handles graph CRUD operations for MCP tool
|
|
4
|
+
* ADR-089 Phase 3a refactoring: Extracted from mcp-server.ts handler
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.GraphOperationExecutor = void 0;
|
|
8
|
+
// ========== Constants ==========
|
|
9
|
+
/**
|
|
10
|
+
* Valid edge categories (server-side validation).
|
|
11
|
+
* Listed here for helpful error messages.
|
|
12
|
+
*/
|
|
13
|
+
const VALID_CATEGORIES = [
|
|
14
|
+
'logical_truth',
|
|
15
|
+
'empirical_claim',
|
|
16
|
+
'value_judgment',
|
|
17
|
+
'conceptual',
|
|
18
|
+
'temporal_sequence',
|
|
19
|
+
'causal',
|
|
20
|
+
'other',
|
|
21
|
+
];
|
|
22
|
+
/**
|
|
23
|
+
* Enhance error messages for common validation failures.
|
|
24
|
+
*/
|
|
25
|
+
function enhanceErrorMessage(error) {
|
|
26
|
+
// Check for category validation errors
|
|
27
|
+
if (error.includes('category') && (error.includes('validation') || error.includes('invalid') || error.includes('422'))) {
|
|
28
|
+
return `Invalid category. Valid options: ${VALID_CATEGORIES.join(', ')}`;
|
|
29
|
+
}
|
|
30
|
+
return error;
|
|
31
|
+
}
|
|
32
|
+
// ========== GraphOperationExecutor Class ==========
|
|
33
|
+
/**
|
|
34
|
+
* Executes graph CRUD operations with semantic resolution support.
|
|
35
|
+
*/
|
|
36
|
+
class GraphOperationExecutor {
|
|
37
|
+
constructor(client) {
|
|
38
|
+
this.client = client;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Resolve a concept label to its ID using semantic search.
|
|
42
|
+
* @param label - The concept label to resolve
|
|
43
|
+
* @returns The concept ID
|
|
44
|
+
* @throws Error if no confident match found
|
|
45
|
+
*/
|
|
46
|
+
async resolveConceptByLabel(label) {
|
|
47
|
+
const searchResult = await this.client.searchConcepts({
|
|
48
|
+
query: label,
|
|
49
|
+
limit: 1,
|
|
50
|
+
min_similarity: 0.85,
|
|
51
|
+
});
|
|
52
|
+
if (searchResult.count === 0) {
|
|
53
|
+
throw new Error(`No concept found matching label: "${label}". Try creating it first or use a more specific label.`);
|
|
54
|
+
}
|
|
55
|
+
const match = searchResult.results[0];
|
|
56
|
+
if (match.score < 0.85) {
|
|
57
|
+
throw new Error(`No confident match for "${label}". Best match: "${match.label}" (${(match.score * 100).toFixed(1)}% similarity). Use concept_id for precise reference.`);
|
|
58
|
+
}
|
|
59
|
+
return match.concept_id;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Resolve concept ID from params, using label resolution if needed.
|
|
63
|
+
* @param id - Explicit concept ID (optional)
|
|
64
|
+
* @param label - Concept label for resolution (optional)
|
|
65
|
+
* @param fieldName - Name of the field for error messages
|
|
66
|
+
* @param throwOnMissing - Whether to throw if neither ID nor label provided
|
|
67
|
+
* @returns The resolved concept ID or undefined
|
|
68
|
+
*/
|
|
69
|
+
async resolveConceptId(id, label, fieldName, throwOnMissing = true) {
|
|
70
|
+
if (id) {
|
|
71
|
+
return id;
|
|
72
|
+
}
|
|
73
|
+
if (label) {
|
|
74
|
+
return await this.resolveConceptByLabel(label);
|
|
75
|
+
}
|
|
76
|
+
if (throwOnMissing) {
|
|
77
|
+
throw new Error(`${fieldName}_concept_id or ${fieldName}_label is required`);
|
|
78
|
+
}
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Resolve concept ID for list operations (silently skip on error).
|
|
83
|
+
*/
|
|
84
|
+
async resolveConceptIdForList(id, label) {
|
|
85
|
+
if (id) {
|
|
86
|
+
return id;
|
|
87
|
+
}
|
|
88
|
+
if (label) {
|
|
89
|
+
try {
|
|
90
|
+
return await this.resolveConceptByLabel(label);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// Ignore resolution errors for list - just skip filter
|
|
94
|
+
return undefined;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
// ========== Create Operations ==========
|
|
100
|
+
async createConcept(params) {
|
|
101
|
+
if (!params.label) {
|
|
102
|
+
return { success: false, error: 'label is required for creating a concept' };
|
|
103
|
+
}
|
|
104
|
+
if (!params.ontology) {
|
|
105
|
+
return { success: false, error: 'ontology is required for creating a concept' };
|
|
106
|
+
}
|
|
107
|
+
try {
|
|
108
|
+
const result = await this.client.createConcept({
|
|
109
|
+
label: params.label,
|
|
110
|
+
ontology: params.ontology,
|
|
111
|
+
description: params.description,
|
|
112
|
+
search_terms: params.search_terms,
|
|
113
|
+
matching_mode: params.matching_mode || 'auto',
|
|
114
|
+
creation_method: 'mcp',
|
|
115
|
+
});
|
|
116
|
+
return { success: true, data: result };
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
120
|
+
return { success: false, error };
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
async createEdge(params) {
|
|
124
|
+
if (!params.relationship_type) {
|
|
125
|
+
return { success: false, error: 'relationship_type is required for creating an edge' };
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
const fromId = await this.resolveConceptId(params.from_concept_id, params.from_label, 'from');
|
|
129
|
+
const toId = await this.resolveConceptId(params.to_concept_id, params.to_label, 'to');
|
|
130
|
+
const result = await this.client.createEdge({
|
|
131
|
+
from_concept_id: fromId,
|
|
132
|
+
to_concept_id: toId,
|
|
133
|
+
relationship_type: params.relationship_type,
|
|
134
|
+
category: (params.category || 'logical_truth'), // Server validates
|
|
135
|
+
confidence: params.confidence ?? 1.0,
|
|
136
|
+
source: 'api_creation',
|
|
137
|
+
});
|
|
138
|
+
// Enrich result with resolved labels for better output
|
|
139
|
+
const enrichedResult = {
|
|
140
|
+
...result,
|
|
141
|
+
from_label: params.from_label || fromId,
|
|
142
|
+
to_label: params.to_label || toId,
|
|
143
|
+
};
|
|
144
|
+
return { success: true, data: enrichedResult };
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
const rawError = err instanceof Error ? err.message : String(err);
|
|
148
|
+
return { success: false, error: enhanceErrorMessage(rawError) };
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// ========== List Operations ==========
|
|
152
|
+
async listConcepts(params) {
|
|
153
|
+
try {
|
|
154
|
+
const result = await this.client.listConceptsCRUD({
|
|
155
|
+
ontology: params.ontology,
|
|
156
|
+
label_contains: params.label_contains,
|
|
157
|
+
creation_method: params.creation_method,
|
|
158
|
+
offset: params.offset || 0,
|
|
159
|
+
limit: params.limit || 20,
|
|
160
|
+
});
|
|
161
|
+
return { success: true, data: result };
|
|
162
|
+
}
|
|
163
|
+
catch (err) {
|
|
164
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
165
|
+
return { success: false, error };
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
async listEdges(params) {
|
|
169
|
+
try {
|
|
170
|
+
const fromId = await this.resolveConceptIdForList(params.from_concept_id, params.from_label);
|
|
171
|
+
const toId = await this.resolveConceptIdForList(params.to_concept_id, params.to_label);
|
|
172
|
+
const result = await this.client.listEdges({
|
|
173
|
+
from_concept_id: fromId,
|
|
174
|
+
to_concept_id: toId,
|
|
175
|
+
relationship_type: params.relationship_type,
|
|
176
|
+
category: params.category,
|
|
177
|
+
source: params.source,
|
|
178
|
+
offset: params.offset || 0,
|
|
179
|
+
limit: params.limit || 20,
|
|
180
|
+
});
|
|
181
|
+
return { success: true, data: result };
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
185
|
+
return { success: false, error };
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// ========== Edit Operations ==========
|
|
189
|
+
async editConcept(params) {
|
|
190
|
+
if (!params.concept_id) {
|
|
191
|
+
return { success: false, error: 'concept_id is required for editing a concept' };
|
|
192
|
+
}
|
|
193
|
+
const updateData = {};
|
|
194
|
+
if (params.label !== undefined)
|
|
195
|
+
updateData.label = params.label;
|
|
196
|
+
if (params.description !== undefined)
|
|
197
|
+
updateData.description = params.description;
|
|
198
|
+
if (params.search_terms !== undefined)
|
|
199
|
+
updateData.search_terms = params.search_terms;
|
|
200
|
+
if (Object.keys(updateData).length === 0) {
|
|
201
|
+
return {
|
|
202
|
+
success: false,
|
|
203
|
+
error: 'At least one field (label, description, or search_terms) must be provided for edit',
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
try {
|
|
207
|
+
const result = await this.client.updateConcept(params.concept_id, updateData);
|
|
208
|
+
return { success: true, data: result };
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
211
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
212
|
+
return { success: false, error };
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
async editEdge(params) {
|
|
216
|
+
try {
|
|
217
|
+
const fromId = await this.resolveConceptId(params.from_concept_id, params.from_label, 'from');
|
|
218
|
+
const toId = await this.resolveConceptId(params.to_concept_id, params.to_label, 'to');
|
|
219
|
+
if (!params.relationship_type) {
|
|
220
|
+
return { success: false, error: 'relationship_type is required for editing an edge' };
|
|
221
|
+
}
|
|
222
|
+
const updateData = {};
|
|
223
|
+
if (params.confidence !== undefined)
|
|
224
|
+
updateData.confidence = params.confidence;
|
|
225
|
+
if (params.category !== undefined)
|
|
226
|
+
updateData.category = params.category;
|
|
227
|
+
if (Object.keys(updateData).length === 0) {
|
|
228
|
+
return {
|
|
229
|
+
success: false,
|
|
230
|
+
error: 'At least one field (confidence or category) must be provided for edge edit',
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
const result = await this.client.updateEdge(fromId, params.relationship_type, toId, updateData // Server validates category
|
|
234
|
+
);
|
|
235
|
+
const enrichedResult = {
|
|
236
|
+
...result,
|
|
237
|
+
from_label: params.from_label || fromId,
|
|
238
|
+
to_label: params.to_label || toId,
|
|
239
|
+
};
|
|
240
|
+
return { success: true, data: enrichedResult };
|
|
241
|
+
}
|
|
242
|
+
catch (err) {
|
|
243
|
+
const rawError = err instanceof Error ? err.message : String(err);
|
|
244
|
+
return { success: false, error: enhanceErrorMessage(rawError) };
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// ========== Delete Operations ==========
|
|
248
|
+
async deleteConcept(params) {
|
|
249
|
+
if (!params.concept_id) {
|
|
250
|
+
return { success: false, error: 'concept_id is required for deleting a concept' };
|
|
251
|
+
}
|
|
252
|
+
try {
|
|
253
|
+
await this.client.deleteConcept(params.concept_id, params.cascade || false);
|
|
254
|
+
return { success: true, data: { concept_id: params.concept_id } };
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
258
|
+
return { success: false, error };
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
async deleteEdge(params) {
|
|
262
|
+
try {
|
|
263
|
+
const fromId = await this.resolveConceptId(params.from_concept_id, params.from_label, 'from');
|
|
264
|
+
const toId = await this.resolveConceptId(params.to_concept_id, params.to_label, 'to');
|
|
265
|
+
if (!params.relationship_type) {
|
|
266
|
+
return { success: false, error: 'relationship_type is required for deleting an edge' };
|
|
267
|
+
}
|
|
268
|
+
await this.client.deleteEdge(fromId, params.relationship_type, toId);
|
|
269
|
+
return {
|
|
270
|
+
success: true,
|
|
271
|
+
data: {
|
|
272
|
+
from_concept_id: fromId,
|
|
273
|
+
to_concept_id: toId,
|
|
274
|
+
relationship_type: params.relationship_type,
|
|
275
|
+
},
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
catch (err) {
|
|
279
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
280
|
+
return { success: false, error };
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// ========== Queue Execution ==========
|
|
284
|
+
/**
|
|
285
|
+
* Execute a queue of operations sequentially.
|
|
286
|
+
* @param operations - Array of operations to execute
|
|
287
|
+
* @param continueOnError - Whether to continue after errors
|
|
288
|
+
* @returns Queue execution result with all operation results
|
|
289
|
+
*/
|
|
290
|
+
async executeQueue(operations, continueOnError = false) {
|
|
291
|
+
const results = [];
|
|
292
|
+
let stopIndex = -1;
|
|
293
|
+
for (let i = 0; i < operations.length; i++) {
|
|
294
|
+
const op = operations[i];
|
|
295
|
+
if (!op.op || !op.entity) {
|
|
296
|
+
results.push({
|
|
297
|
+
index: i + 1,
|
|
298
|
+
status: 'error',
|
|
299
|
+
op: op.op || 'unknown',
|
|
300
|
+
entity: op.entity || 'unknown',
|
|
301
|
+
error: `Operation ${i + 1}: missing 'op' or 'entity'`,
|
|
302
|
+
});
|
|
303
|
+
if (!continueOnError) {
|
|
304
|
+
stopIndex = i;
|
|
305
|
+
break;
|
|
306
|
+
}
|
|
307
|
+
continue;
|
|
308
|
+
}
|
|
309
|
+
try {
|
|
310
|
+
const result = await this.executeSingleOperation(op, i + 1);
|
|
311
|
+
results.push(result);
|
|
312
|
+
if (result.status === 'error' && !continueOnError) {
|
|
313
|
+
stopIndex = i;
|
|
314
|
+
break;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
catch (err) {
|
|
318
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
319
|
+
results.push({
|
|
320
|
+
index: i + 1,
|
|
321
|
+
status: 'error',
|
|
322
|
+
op: op.op,
|
|
323
|
+
entity: op.entity,
|
|
324
|
+
error,
|
|
325
|
+
});
|
|
326
|
+
if (!continueOnError) {
|
|
327
|
+
stopIndex = i;
|
|
328
|
+
break;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return {
|
|
333
|
+
results,
|
|
334
|
+
stopIndex,
|
|
335
|
+
successCount: results.filter((r) => r.status === 'ok').length,
|
|
336
|
+
errorCount: results.filter((r) => r.status === 'error').length,
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Execute a single queue operation.
|
|
341
|
+
*/
|
|
342
|
+
async executeSingleOperation(op, index) {
|
|
343
|
+
const { op: action, entity } = op;
|
|
344
|
+
// Create concept
|
|
345
|
+
if (action === 'create' && entity === 'concept') {
|
|
346
|
+
if (!op.label || !op.ontology) {
|
|
347
|
+
throw new Error('label and ontology required');
|
|
348
|
+
}
|
|
349
|
+
const result = await this.createConcept({
|
|
350
|
+
label: op.label,
|
|
351
|
+
ontology: op.ontology,
|
|
352
|
+
description: op.description,
|
|
353
|
+
search_terms: op.search_terms,
|
|
354
|
+
matching_mode: op.matching_mode,
|
|
355
|
+
});
|
|
356
|
+
if (!result.success) {
|
|
357
|
+
throw new Error(result.error);
|
|
358
|
+
}
|
|
359
|
+
return {
|
|
360
|
+
index,
|
|
361
|
+
status: 'ok',
|
|
362
|
+
op: 'create',
|
|
363
|
+
entity: 'concept',
|
|
364
|
+
label: result.data.label,
|
|
365
|
+
id: result.data.concept_id,
|
|
366
|
+
matched_existing: result.data.matched_existing,
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
// Create edge
|
|
370
|
+
if (action === 'create' && entity === 'edge') {
|
|
371
|
+
const result = await this.createEdge({
|
|
372
|
+
from_concept_id: op.from_concept_id,
|
|
373
|
+
from_label: op.from_label,
|
|
374
|
+
to_concept_id: op.to_concept_id,
|
|
375
|
+
to_label: op.to_label,
|
|
376
|
+
relationship_type: op.relationship_type,
|
|
377
|
+
category: op.category,
|
|
378
|
+
confidence: op.confidence,
|
|
379
|
+
});
|
|
380
|
+
if (!result.success) {
|
|
381
|
+
throw new Error(result.error);
|
|
382
|
+
}
|
|
383
|
+
return {
|
|
384
|
+
index,
|
|
385
|
+
status: 'ok',
|
|
386
|
+
op: 'create',
|
|
387
|
+
entity: 'edge',
|
|
388
|
+
relationship: `${op.from_label || result.data.from_concept_id} -[${op.relationship_type}]-> ${op.to_label || result.data.to_concept_id}`,
|
|
389
|
+
};
|
|
390
|
+
}
|
|
391
|
+
// List concepts
|
|
392
|
+
if (action === 'list' && entity === 'concept') {
|
|
393
|
+
const result = await this.listConcepts({
|
|
394
|
+
ontology: op.ontology,
|
|
395
|
+
label_contains: op.label_contains,
|
|
396
|
+
creation_method: op.creation_method,
|
|
397
|
+
offset: op.offset,
|
|
398
|
+
limit: op.limit,
|
|
399
|
+
});
|
|
400
|
+
if (!result.success) {
|
|
401
|
+
throw new Error(result.error);
|
|
402
|
+
}
|
|
403
|
+
return {
|
|
404
|
+
index,
|
|
405
|
+
status: 'ok',
|
|
406
|
+
op: 'list',
|
|
407
|
+
entity: 'concept',
|
|
408
|
+
count: result.data.concepts.length,
|
|
409
|
+
total: result.data.total,
|
|
410
|
+
concepts: result.data.concepts.map((c) => ({ id: c.concept_id, label: c.label })),
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
// List edges
|
|
414
|
+
if (action === 'list' && entity === 'edge') {
|
|
415
|
+
const result = await this.listEdges({
|
|
416
|
+
from_concept_id: op.from_concept_id,
|
|
417
|
+
from_label: op.from_label,
|
|
418
|
+
to_concept_id: op.to_concept_id,
|
|
419
|
+
to_label: op.to_label,
|
|
420
|
+
relationship_type: op.relationship_type,
|
|
421
|
+
category: op.category,
|
|
422
|
+
source: op.source,
|
|
423
|
+
offset: op.offset,
|
|
424
|
+
limit: op.limit,
|
|
425
|
+
});
|
|
426
|
+
if (!result.success) {
|
|
427
|
+
throw new Error(result.error);
|
|
428
|
+
}
|
|
429
|
+
return {
|
|
430
|
+
index,
|
|
431
|
+
status: 'ok',
|
|
432
|
+
op: 'list',
|
|
433
|
+
entity: 'edge',
|
|
434
|
+
count: result.data.edges.length,
|
|
435
|
+
total: result.data.total,
|
|
436
|
+
edges: result.data.edges.map((e) => ({
|
|
437
|
+
from: e.from_concept_id,
|
|
438
|
+
type: e.relationship_type,
|
|
439
|
+
to: e.to_concept_id,
|
|
440
|
+
})),
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
// Edit concept
|
|
444
|
+
if (action === 'edit' && entity === 'concept') {
|
|
445
|
+
if (!op.concept_id) {
|
|
446
|
+
throw new Error('concept_id required for edit');
|
|
447
|
+
}
|
|
448
|
+
const result = await this.editConcept({
|
|
449
|
+
concept_id: op.concept_id,
|
|
450
|
+
label: op.label,
|
|
451
|
+
description: op.description,
|
|
452
|
+
search_terms: op.search_terms,
|
|
453
|
+
});
|
|
454
|
+
if (!result.success) {
|
|
455
|
+
throw new Error(result.error);
|
|
456
|
+
}
|
|
457
|
+
return {
|
|
458
|
+
index,
|
|
459
|
+
status: 'ok',
|
|
460
|
+
op: 'edit',
|
|
461
|
+
entity: 'concept',
|
|
462
|
+
id: result.data.concept_id,
|
|
463
|
+
label: result.data.label,
|
|
464
|
+
};
|
|
465
|
+
}
|
|
466
|
+
// Edit edge
|
|
467
|
+
if (action === 'edit' && entity === 'edge') {
|
|
468
|
+
const result = await this.editEdge({
|
|
469
|
+
from_concept_id: op.from_concept_id,
|
|
470
|
+
from_label: op.from_label,
|
|
471
|
+
to_concept_id: op.to_concept_id,
|
|
472
|
+
to_label: op.to_label,
|
|
473
|
+
relationship_type: op.relationship_type,
|
|
474
|
+
confidence: op.confidence,
|
|
475
|
+
category: op.category,
|
|
476
|
+
});
|
|
477
|
+
if (!result.success) {
|
|
478
|
+
throw new Error(result.error);
|
|
479
|
+
}
|
|
480
|
+
return {
|
|
481
|
+
index,
|
|
482
|
+
status: 'ok',
|
|
483
|
+
op: 'edit',
|
|
484
|
+
entity: 'edge',
|
|
485
|
+
relationship: `${op.from_label || result.data.from_concept_id} -[${op.relationship_type}]-> ${op.to_label || result.data.to_concept_id}`,
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
// Delete concept
|
|
489
|
+
if (action === 'delete' && entity === 'concept') {
|
|
490
|
+
if (!op.concept_id) {
|
|
491
|
+
throw new Error('concept_id required for delete');
|
|
492
|
+
}
|
|
493
|
+
const result = await this.deleteConcept({
|
|
494
|
+
concept_id: op.concept_id,
|
|
495
|
+
cascade: op.cascade,
|
|
496
|
+
});
|
|
497
|
+
if (!result.success) {
|
|
498
|
+
throw new Error(result.error);
|
|
499
|
+
}
|
|
500
|
+
return {
|
|
501
|
+
index,
|
|
502
|
+
status: 'ok',
|
|
503
|
+
op: 'delete',
|
|
504
|
+
entity: 'concept',
|
|
505
|
+
id: op.concept_id,
|
|
506
|
+
};
|
|
507
|
+
}
|
|
508
|
+
// Delete edge
|
|
509
|
+
if (action === 'delete' && entity === 'edge') {
|
|
510
|
+
const result = await this.deleteEdge({
|
|
511
|
+
from_concept_id: op.from_concept_id,
|
|
512
|
+
from_label: op.from_label,
|
|
513
|
+
to_concept_id: op.to_concept_id,
|
|
514
|
+
to_label: op.to_label,
|
|
515
|
+
relationship_type: op.relationship_type,
|
|
516
|
+
});
|
|
517
|
+
if (!result.success) {
|
|
518
|
+
throw new Error(result.error);
|
|
519
|
+
}
|
|
520
|
+
return {
|
|
521
|
+
index,
|
|
522
|
+
status: 'ok',
|
|
523
|
+
op: 'delete',
|
|
524
|
+
entity: 'edge',
|
|
525
|
+
relationship: `${op.from_label || result.data.from_concept_id} -[${op.relationship_type}]-> ${op.to_label || result.data.to_concept_id}`,
|
|
526
|
+
};
|
|
527
|
+
}
|
|
528
|
+
throw new Error(`Unknown operation: ${action} ${entity}`);
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
exports.GraphOperationExecutor = GraphOperationExecutor;
|
|
532
|
+
//# sourceMappingURL=graph-operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-operations.js","sourceRoot":"","sources":["../../src/mcp/graph-operations.ts"],"names":[],"mappings":"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"}
|