@nahisaho/katashiro-knowledge 0.1.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/graph/index.d.ts +7 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +7 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/knowledge-graph.d.ts +164 -0
- package/dist/graph/knowledge-graph.d.ts.map +1 -0
- package/dist/graph/knowledge-graph.js +298 -0
- package/dist/graph/knowledge-graph.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces.d.ts +20 -0
- package/dist/interfaces.d.ts.map +1 -0
- package/dist/interfaces.js +5 -0
- package/dist/interfaces.js.map +1 -0
- package/dist/persistence/graph-persistence.d.ts +102 -0
- package/dist/persistence/graph-persistence.d.ts.map +1 -0
- package/dist/persistence/graph-persistence.js +222 -0
- package/dist/persistence/graph-persistence.js.map +1 -0
- package/dist/persistence/index.d.ts +7 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +7 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/query/graph-query.d.ts +103 -0
- package/dist/query/graph-query.d.ts.map +1 -0
- package/dist/query/graph-query.js +237 -0
- package/dist/query/graph-query.js.map +1 -0
- package/dist/query/index.d.ts +7 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +7 -0
- package/dist/query/index.js.map +1 -0
- package/dist/sync/graph-sync.d.ts +132 -0
- package/dist/sync/graph-sync.d.ts.map +1 -0
- package/dist/sync/graph-sync.js +338 -0
- package/dist/sync/graph-sync.js.map +1 -0
- package/dist/sync/index.d.ts +7 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +7 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/types.d.ts +43 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/visualization/graph-visualization.d.ts +139 -0
- package/dist/visualization/graph-visualization.d.ts.map +1 -0
- package/dist/visualization/graph-visualization.js +259 -0
- package/dist/visualization/graph-visualization.js.map +1 -0
- package/dist/visualization/index.d.ts +7 -0
- package/dist/visualization/index.d.ts.map +1 -0
- package/dist/visualization/index.js +7 -0
- package/dist/visualization/index.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphPersistence - Graph serialization and deserialization
|
|
3
|
+
*
|
|
4
|
+
* Handles saving and loading knowledge graphs
|
|
5
|
+
*
|
|
6
|
+
* @module @nahisaho/katashiro-knowledge
|
|
7
|
+
* @task TSK-041
|
|
8
|
+
*/
|
|
9
|
+
import { type Result } from '@nahisaho/katashiro-core';
|
|
10
|
+
import { KnowledgeGraph, type GraphNode, type GraphEdge } from '../graph/knowledge-graph.js';
|
|
11
|
+
/**
|
|
12
|
+
* Serialized graph format
|
|
13
|
+
*/
|
|
14
|
+
export interface SerializedGraph {
|
|
15
|
+
readonly version: string;
|
|
16
|
+
readonly nodes: GraphNode[];
|
|
17
|
+
readonly edges: GraphEdge[];
|
|
18
|
+
readonly metadata: GraphMetadata;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Graph metadata
|
|
22
|
+
*/
|
|
23
|
+
export interface GraphMetadata {
|
|
24
|
+
readonly nodeCount: number;
|
|
25
|
+
readonly edgeCount: number;
|
|
26
|
+
readonly createdAt: string;
|
|
27
|
+
readonly updatedAt?: string;
|
|
28
|
+
readonly name?: string;
|
|
29
|
+
readonly description?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* GraphPersistence
|
|
33
|
+
*
|
|
34
|
+
* Provides serialization and deserialization for KnowledgeGraph
|
|
35
|
+
*/
|
|
36
|
+
export declare class GraphPersistence {
|
|
37
|
+
/**
|
|
38
|
+
* Serialize a graph to a portable format
|
|
39
|
+
*
|
|
40
|
+
* @param graph - Graph to serialize
|
|
41
|
+
* @returns Serialized graph data
|
|
42
|
+
*/
|
|
43
|
+
serialize(graph: KnowledgeGraph): Result<SerializedGraph, Error>;
|
|
44
|
+
/**
|
|
45
|
+
* Deserialize data into a graph
|
|
46
|
+
*
|
|
47
|
+
* @param data - Serialized graph data
|
|
48
|
+
* @param graph - Target graph (will be modified)
|
|
49
|
+
* @returns Result indicating success or failure
|
|
50
|
+
*/
|
|
51
|
+
deserialize(data: SerializedGraph, graph: KnowledgeGraph): Result<void, Error>;
|
|
52
|
+
/**
|
|
53
|
+
* Convert graph to JSON string
|
|
54
|
+
*
|
|
55
|
+
* @param graph - Graph to convert
|
|
56
|
+
* @param pretty - Whether to format with indentation
|
|
57
|
+
* @returns JSON string
|
|
58
|
+
*/
|
|
59
|
+
toJSON(graph: KnowledgeGraph, pretty?: boolean): Result<string, Error>;
|
|
60
|
+
/**
|
|
61
|
+
* Load graph from JSON string
|
|
62
|
+
*
|
|
63
|
+
* @param json - JSON string
|
|
64
|
+
* @param graph - Target graph
|
|
65
|
+
* @returns Result indicating success or failure
|
|
66
|
+
*/
|
|
67
|
+
fromJSON(json: string, graph: KnowledgeGraph): Result<void, Error>;
|
|
68
|
+
/**
|
|
69
|
+
* Validate serialized graph data
|
|
70
|
+
*
|
|
71
|
+
* @param data - Data to validate
|
|
72
|
+
* @returns True if valid, false otherwise
|
|
73
|
+
*/
|
|
74
|
+
validate(data: SerializedGraph): Result<boolean, Error>;
|
|
75
|
+
/**
|
|
76
|
+
* Create a diff between two serialized graphs
|
|
77
|
+
*
|
|
78
|
+
* @param before - Previous state
|
|
79
|
+
* @param after - Current state
|
|
80
|
+
* @returns Diff describing changes
|
|
81
|
+
*/
|
|
82
|
+
diff(before: SerializedGraph, after: SerializedGraph): Result<GraphDiff, Error>;
|
|
83
|
+
/**
|
|
84
|
+
* Merge two graphs
|
|
85
|
+
*
|
|
86
|
+
* @param base - Base graph
|
|
87
|
+
* @param other - Graph to merge in
|
|
88
|
+
* @returns Merged graph data
|
|
89
|
+
*/
|
|
90
|
+
merge(base: SerializedGraph, other: SerializedGraph): Result<SerializedGraph, Error>;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Graph diff result
|
|
94
|
+
*/
|
|
95
|
+
export interface GraphDiff {
|
|
96
|
+
readonly addedNodes: GraphNode[];
|
|
97
|
+
readonly removedNodes: GraphNode[];
|
|
98
|
+
readonly addedEdges: GraphEdge[];
|
|
99
|
+
readonly removedEdges: GraphEdge[];
|
|
100
|
+
readonly hasChanges: boolean;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=graph-persistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-persistence.d.ts","sourceRoot":"","sources":["../../src/persistence/graph-persistence.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7F;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAOD;;;;GAIG;AACH,qBAAa,gBAAgB;IAC3B;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC;IAsBhE;;;;;;OAMG;IACH,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IA2B9E;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,UAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;IAiBpE;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC;IASlE;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;IAoCvD;;;;;;OAMG;IACH,IAAI,CACF,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,eAAe,GACrB,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC;IA8B3B;;;;;;OAMG;IACH,KAAK,CACH,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,eAAe,GACrB,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC;CAgClC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC;IACjC,QAAQ,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphPersistence - Graph serialization and deserialization
|
|
3
|
+
*
|
|
4
|
+
* Handles saving and loading knowledge graphs
|
|
5
|
+
*
|
|
6
|
+
* @module @nahisaho/katashiro-knowledge
|
|
7
|
+
* @task TSK-041
|
|
8
|
+
*/
|
|
9
|
+
import { ok, err, isOk } from '@nahisaho/katashiro-core';
|
|
10
|
+
/**
|
|
11
|
+
* Current serialization format version
|
|
12
|
+
*/
|
|
13
|
+
const FORMAT_VERSION = '1.0';
|
|
14
|
+
/**
|
|
15
|
+
* GraphPersistence
|
|
16
|
+
*
|
|
17
|
+
* Provides serialization and deserialization for KnowledgeGraph
|
|
18
|
+
*/
|
|
19
|
+
export class GraphPersistence {
|
|
20
|
+
/**
|
|
21
|
+
* Serialize a graph to a portable format
|
|
22
|
+
*
|
|
23
|
+
* @param graph - Graph to serialize
|
|
24
|
+
* @returns Serialized graph data
|
|
25
|
+
*/
|
|
26
|
+
serialize(graph) {
|
|
27
|
+
try {
|
|
28
|
+
const nodes = graph.getAllNodes();
|
|
29
|
+
const edges = graph.getAllEdges();
|
|
30
|
+
const serialized = {
|
|
31
|
+
version: FORMAT_VERSION,
|
|
32
|
+
nodes,
|
|
33
|
+
edges,
|
|
34
|
+
metadata: {
|
|
35
|
+
nodeCount: nodes.length,
|
|
36
|
+
edgeCount: edges.length,
|
|
37
|
+
createdAt: new Date().toISOString(),
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
return ok(serialized);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
return err(error instanceof Error ? error : new Error(String(error)));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Deserialize data into a graph
|
|
48
|
+
*
|
|
49
|
+
* @param data - Serialized graph data
|
|
50
|
+
* @param graph - Target graph (will be modified)
|
|
51
|
+
* @returns Result indicating success or failure
|
|
52
|
+
*/
|
|
53
|
+
deserialize(data, graph) {
|
|
54
|
+
try {
|
|
55
|
+
// Clear existing data
|
|
56
|
+
graph.clear();
|
|
57
|
+
// Add nodes first
|
|
58
|
+
for (const node of data.nodes) {
|
|
59
|
+
const result = graph.addNode(node);
|
|
60
|
+
if (!isOk(result)) {
|
|
61
|
+
return err(new Error(`Failed to add node ${node.id}: ${result.error.message}`));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Add edges
|
|
65
|
+
for (const edge of data.edges) {
|
|
66
|
+
const result = graph.addEdge(edge);
|
|
67
|
+
if (!isOk(result)) {
|
|
68
|
+
return err(new Error(`Failed to add edge ${edge.id}: ${result.error.message}`));
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return ok(undefined);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
return err(error instanceof Error ? error : new Error(String(error)));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Convert graph to JSON string
|
|
79
|
+
*
|
|
80
|
+
* @param graph - Graph to convert
|
|
81
|
+
* @param pretty - Whether to format with indentation
|
|
82
|
+
* @returns JSON string
|
|
83
|
+
*/
|
|
84
|
+
toJSON(graph, pretty = false) {
|
|
85
|
+
const serializeResult = this.serialize(graph);
|
|
86
|
+
if (!isOk(serializeResult)) {
|
|
87
|
+
return err(serializeResult.error);
|
|
88
|
+
}
|
|
89
|
+
try {
|
|
90
|
+
const json = pretty
|
|
91
|
+
? JSON.stringify(serializeResult.value, null, 2)
|
|
92
|
+
: JSON.stringify(serializeResult.value);
|
|
93
|
+
return ok(json);
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
return err(error instanceof Error ? error : new Error(String(error)));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Load graph from JSON string
|
|
101
|
+
*
|
|
102
|
+
* @param json - JSON string
|
|
103
|
+
* @param graph - Target graph
|
|
104
|
+
* @returns Result indicating success or failure
|
|
105
|
+
*/
|
|
106
|
+
fromJSON(json, graph) {
|
|
107
|
+
try {
|
|
108
|
+
const data = JSON.parse(json);
|
|
109
|
+
return this.deserialize(data, graph);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
return err(error instanceof Error ? error : new Error(`Invalid JSON: ${error}`));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Validate serialized graph data
|
|
117
|
+
*
|
|
118
|
+
* @param data - Data to validate
|
|
119
|
+
* @returns True if valid, false otherwise
|
|
120
|
+
*/
|
|
121
|
+
validate(data) {
|
|
122
|
+
try {
|
|
123
|
+
// Check required fields
|
|
124
|
+
if (!data.version || !data.nodes || !data.edges || !data.metadata) {
|
|
125
|
+
return ok(false);
|
|
126
|
+
}
|
|
127
|
+
// Check version
|
|
128
|
+
if (data.version !== FORMAT_VERSION) {
|
|
129
|
+
// Future: handle version migration
|
|
130
|
+
}
|
|
131
|
+
// Build node ID set
|
|
132
|
+
const nodeIds = new Set(data.nodes.map((n) => n.id));
|
|
133
|
+
// Validate edges reference existing nodes
|
|
134
|
+
for (const edge of data.edges) {
|
|
135
|
+
if (!nodeIds.has(edge.source) || !nodeIds.has(edge.target)) {
|
|
136
|
+
return ok(false);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Validate metadata
|
|
140
|
+
if (data.metadata.nodeCount !== data.nodes.length) {
|
|
141
|
+
return ok(false);
|
|
142
|
+
}
|
|
143
|
+
if (data.metadata.edgeCount !== data.edges.length) {
|
|
144
|
+
return ok(false);
|
|
145
|
+
}
|
|
146
|
+
return ok(true);
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
return err(error instanceof Error ? error : new Error(String(error)));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Create a diff between two serialized graphs
|
|
154
|
+
*
|
|
155
|
+
* @param before - Previous state
|
|
156
|
+
* @param after - Current state
|
|
157
|
+
* @returns Diff describing changes
|
|
158
|
+
*/
|
|
159
|
+
diff(before, after) {
|
|
160
|
+
try {
|
|
161
|
+
const beforeNodeIds = new Set(before.nodes.map((n) => n.id));
|
|
162
|
+
const afterNodeIds = new Set(after.nodes.map((n) => n.id));
|
|
163
|
+
const beforeEdgeIds = new Set(before.edges.map((e) => e.id));
|
|
164
|
+
const afterEdgeIds = new Set(after.edges.map((e) => e.id));
|
|
165
|
+
const addedNodes = after.nodes.filter((n) => !beforeNodeIds.has(n.id));
|
|
166
|
+
const removedNodes = before.nodes.filter((n) => !afterNodeIds.has(n.id));
|
|
167
|
+
const addedEdges = after.edges.filter((e) => !beforeEdgeIds.has(e.id));
|
|
168
|
+
const removedEdges = before.edges.filter((e) => !afterEdgeIds.has(e.id));
|
|
169
|
+
return ok({
|
|
170
|
+
addedNodes,
|
|
171
|
+
removedNodes,
|
|
172
|
+
addedEdges,
|
|
173
|
+
removedEdges,
|
|
174
|
+
hasChanges: addedNodes.length > 0 ||
|
|
175
|
+
removedNodes.length > 0 ||
|
|
176
|
+
addedEdges.length > 0 ||
|
|
177
|
+
removedEdges.length > 0,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
return err(error instanceof Error ? error : new Error(String(error)));
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Merge two graphs
|
|
186
|
+
*
|
|
187
|
+
* @param base - Base graph
|
|
188
|
+
* @param other - Graph to merge in
|
|
189
|
+
* @returns Merged graph data
|
|
190
|
+
*/
|
|
191
|
+
merge(base, other) {
|
|
192
|
+
try {
|
|
193
|
+
const baseNodeIds = new Set(base.nodes.map((n) => n.id));
|
|
194
|
+
const baseEdgeIds = new Set(base.edges.map((e) => e.id));
|
|
195
|
+
// Add nodes from other that don't exist in base
|
|
196
|
+
const mergedNodes = [
|
|
197
|
+
...base.nodes,
|
|
198
|
+
...other.nodes.filter((n) => !baseNodeIds.has(n.id)),
|
|
199
|
+
];
|
|
200
|
+
// Add edges from other that don't exist in base
|
|
201
|
+
const mergedEdges = [
|
|
202
|
+
...base.edges,
|
|
203
|
+
...other.edges.filter((e) => !baseEdgeIds.has(e.id)),
|
|
204
|
+
];
|
|
205
|
+
return ok({
|
|
206
|
+
version: FORMAT_VERSION,
|
|
207
|
+
nodes: mergedNodes,
|
|
208
|
+
edges: mergedEdges,
|
|
209
|
+
metadata: {
|
|
210
|
+
nodeCount: mergedNodes.length,
|
|
211
|
+
edgeCount: mergedEdges.length,
|
|
212
|
+
createdAt: base.metadata.createdAt,
|
|
213
|
+
updatedAt: new Date().toISOString(),
|
|
214
|
+
},
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
return err(error instanceof Error ? error : new Error(String(error)));
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=graph-persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-persistence.js","sourceRoot":"","sources":["../../src/persistence/graph-persistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,SAAS,GACf,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/persistence/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,gBAAgB,GAIjB,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GraphQuery - Query engine for KnowledgeGraph
|
|
3
|
+
*
|
|
4
|
+
* Provides query capabilities for searching and filtering graph data
|
|
5
|
+
*
|
|
6
|
+
* @module @nahisaho/katashiro-knowledge
|
|
7
|
+
* @task TSK-042
|
|
8
|
+
*/
|
|
9
|
+
import { type Result } from '@nahisaho/katashiro-core';
|
|
10
|
+
import { KnowledgeGraph, type GraphNode, type GraphEdge } from '../graph/knowledge-graph.js';
|
|
11
|
+
/**
|
|
12
|
+
* Query filter definition
|
|
13
|
+
*/
|
|
14
|
+
export interface QueryFilter {
|
|
15
|
+
readonly property: string;
|
|
16
|
+
readonly operator: 'eq' | 'ne' | 'gt' | 'lt' | 'gte' | 'lte' | 'contains';
|
|
17
|
+
readonly value: unknown;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Structured query definition
|
|
21
|
+
*/
|
|
22
|
+
export interface GraphQueryDef {
|
|
23
|
+
readonly type?: string;
|
|
24
|
+
readonly filters?: QueryFilter[];
|
|
25
|
+
readonly limit?: number;
|
|
26
|
+
readonly offset?: number;
|
|
27
|
+
readonly orderBy?: string;
|
|
28
|
+
readonly orderDirection?: 'asc' | 'desc';
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Query result
|
|
32
|
+
*/
|
|
33
|
+
export interface QueryResult {
|
|
34
|
+
readonly nodes: GraphNode[];
|
|
35
|
+
readonly totalCount: number;
|
|
36
|
+
readonly executionTime: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* GraphQuery
|
|
40
|
+
*
|
|
41
|
+
* Query engine for KnowledgeGraph
|
|
42
|
+
*/
|
|
43
|
+
export declare class GraphQuery {
|
|
44
|
+
private graph;
|
|
45
|
+
constructor(graph: KnowledgeGraph);
|
|
46
|
+
/**
|
|
47
|
+
* Find all nodes of a given type
|
|
48
|
+
*
|
|
49
|
+
* @param type - Node type to find
|
|
50
|
+
* @returns Array of matching nodes
|
|
51
|
+
*/
|
|
52
|
+
findByType(type: string): Result<GraphNode[], Error>;
|
|
53
|
+
/**
|
|
54
|
+
* Find nodes with a specific property value
|
|
55
|
+
*
|
|
56
|
+
* @param property - Property name
|
|
57
|
+
* @param value - Property value
|
|
58
|
+
* @returns Array of matching nodes
|
|
59
|
+
*/
|
|
60
|
+
findByProperty(property: string, value: unknown): Result<GraphNode[], Error>;
|
|
61
|
+
/**
|
|
62
|
+
* Find edges with a given predicate
|
|
63
|
+
*
|
|
64
|
+
* @param predicate - Edge predicate
|
|
65
|
+
* @returns Array of matching edges
|
|
66
|
+
*/
|
|
67
|
+
findByPredicate(predicate: string): Result<GraphEdge[], Error>;
|
|
68
|
+
/**
|
|
69
|
+
* Find nodes related to a given node
|
|
70
|
+
*
|
|
71
|
+
* @param nodeId - Source node ID
|
|
72
|
+
* @param predicate - Optional predicate filter
|
|
73
|
+
* @returns Array of related nodes
|
|
74
|
+
*/
|
|
75
|
+
findRelated(nodeId: string, predicate?: string): Result<GraphNode[], Error>;
|
|
76
|
+
/**
|
|
77
|
+
* Search nodes by label
|
|
78
|
+
*
|
|
79
|
+
* @param query - Search query (case insensitive substring match)
|
|
80
|
+
* @returns Array of matching nodes
|
|
81
|
+
*/
|
|
82
|
+
search(query: string): Result<GraphNode[], Error>;
|
|
83
|
+
/**
|
|
84
|
+
* Execute a structured query
|
|
85
|
+
*
|
|
86
|
+
* @param queryDef - Query definition
|
|
87
|
+
* @returns Query result
|
|
88
|
+
*/
|
|
89
|
+
execute(queryDef: GraphQueryDef): Result<QueryResult, Error>;
|
|
90
|
+
/**
|
|
91
|
+
* Aggregate nodes by a property
|
|
92
|
+
*
|
|
93
|
+
* @param operation - Aggregation operation
|
|
94
|
+
* @param groupBy - Property to group by
|
|
95
|
+
* @returns Aggregation result
|
|
96
|
+
*/
|
|
97
|
+
aggregate(operation: 'count' | 'sum' | 'avg', groupBy: string): Result<Record<string, number>, Error>;
|
|
98
|
+
/**
|
|
99
|
+
* Apply a filter to a node
|
|
100
|
+
*/
|
|
101
|
+
private applyFilter;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=graph-query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-query.d.ts","sourceRoot":"","sources":["../../src/query/graph-query.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAiB,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAE7F;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,CAAC;IAC1E,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED;;;;GAIG;AACH,qBAAa,UAAU;IACT,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,cAAc;IAEzC;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC;IASpD;;;;;;OAMG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC;IAY5E;;;;;OAKG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC;IAS9D;;;;;;OAMG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC;IA0B3E;;;;;OAKG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC;IASjD;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC;IA6D5D;;;;;;OAMG;IACH,SAAS,CACP,SAAS,EAAE,OAAO,GAAG,KAAK,GAAG,KAAK,EAClC,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC;IAwCxC;;OAEG;IACH,OAAO,CAAC,WAAW;CAyBpB"}
|