@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.
Files changed (53) hide show
  1. package/dist/graph/index.d.ts +7 -0
  2. package/dist/graph/index.d.ts.map +1 -0
  3. package/dist/graph/index.js +7 -0
  4. package/dist/graph/index.js.map +1 -0
  5. package/dist/graph/knowledge-graph.d.ts +164 -0
  6. package/dist/graph/knowledge-graph.d.ts.map +1 -0
  7. package/dist/graph/knowledge-graph.js +298 -0
  8. package/dist/graph/knowledge-graph.js.map +1 -0
  9. package/dist/index.d.ts +15 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +18 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/interfaces.d.ts +20 -0
  14. package/dist/interfaces.d.ts.map +1 -0
  15. package/dist/interfaces.js +5 -0
  16. package/dist/interfaces.js.map +1 -0
  17. package/dist/persistence/graph-persistence.d.ts +102 -0
  18. package/dist/persistence/graph-persistence.d.ts.map +1 -0
  19. package/dist/persistence/graph-persistence.js +222 -0
  20. package/dist/persistence/graph-persistence.js.map +1 -0
  21. package/dist/persistence/index.d.ts +7 -0
  22. package/dist/persistence/index.d.ts.map +1 -0
  23. package/dist/persistence/index.js +7 -0
  24. package/dist/persistence/index.js.map +1 -0
  25. package/dist/query/graph-query.d.ts +103 -0
  26. package/dist/query/graph-query.d.ts.map +1 -0
  27. package/dist/query/graph-query.js +237 -0
  28. package/dist/query/graph-query.js.map +1 -0
  29. package/dist/query/index.d.ts +7 -0
  30. package/dist/query/index.d.ts.map +1 -0
  31. package/dist/query/index.js +7 -0
  32. package/dist/query/index.js.map +1 -0
  33. package/dist/sync/graph-sync.d.ts +132 -0
  34. package/dist/sync/graph-sync.d.ts.map +1 -0
  35. package/dist/sync/graph-sync.js +338 -0
  36. package/dist/sync/graph-sync.js.map +1 -0
  37. package/dist/sync/index.d.ts +7 -0
  38. package/dist/sync/index.d.ts.map +1 -0
  39. package/dist/sync/index.js +7 -0
  40. package/dist/sync/index.js.map +1 -0
  41. package/dist/types.d.ts +43 -0
  42. package/dist/types.d.ts.map +1 -0
  43. package/dist/types.js +5 -0
  44. package/dist/types.js.map +1 -0
  45. package/dist/visualization/graph-visualization.d.ts +139 -0
  46. package/dist/visualization/graph-visualization.d.ts.map +1 -0
  47. package/dist/visualization/graph-visualization.js +259 -0
  48. package/dist/visualization/graph-visualization.js.map +1 -0
  49. package/dist/visualization/index.d.ts +7 -0
  50. package/dist/visualization/index.d.ts.map +1 -0
  51. package/dist/visualization/index.js +7 -0
  52. package/dist/visualization/index.js.map +1 -0
  53. package/package.json +39 -0
@@ -0,0 +1,237 @@
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 { ok, err, isOk } from '@nahisaho/katashiro-core';
10
+ /**
11
+ * GraphQuery
12
+ *
13
+ * Query engine for KnowledgeGraph
14
+ */
15
+ export class GraphQuery {
16
+ graph;
17
+ constructor(graph) {
18
+ this.graph = graph;
19
+ }
20
+ /**
21
+ * Find all nodes of a given type
22
+ *
23
+ * @param type - Node type to find
24
+ * @returns Array of matching nodes
25
+ */
26
+ findByType(type) {
27
+ try {
28
+ const nodes = this.graph.getNodesByType(type);
29
+ return ok(nodes);
30
+ }
31
+ catch (error) {
32
+ return err(error instanceof Error ? error : new Error(String(error)));
33
+ }
34
+ }
35
+ /**
36
+ * Find nodes with a specific property value
37
+ *
38
+ * @param property - Property name
39
+ * @param value - Property value
40
+ * @returns Array of matching nodes
41
+ */
42
+ findByProperty(property, value) {
43
+ try {
44
+ const allNodes = this.graph.getAllNodes();
45
+ const matching = allNodes.filter((node) => node.properties[property] === value);
46
+ return ok(matching);
47
+ }
48
+ catch (error) {
49
+ return err(error instanceof Error ? error : new Error(String(error)));
50
+ }
51
+ }
52
+ /**
53
+ * Find edges with a given predicate
54
+ *
55
+ * @param predicate - Edge predicate
56
+ * @returns Array of matching edges
57
+ */
58
+ findByPredicate(predicate) {
59
+ try {
60
+ const edges = this.graph.getEdgesByPredicate(predicate);
61
+ return ok(edges);
62
+ }
63
+ catch (error) {
64
+ return err(error instanceof Error ? error : new Error(String(error)));
65
+ }
66
+ }
67
+ /**
68
+ * Find nodes related to a given node
69
+ *
70
+ * @param nodeId - Source node ID
71
+ * @param predicate - Optional predicate filter
72
+ * @returns Array of related nodes
73
+ */
74
+ findRelated(nodeId, predicate) {
75
+ try {
76
+ const neighborsResult = this.graph.getNeighbors(nodeId);
77
+ if (!isOk(neighborsResult)) {
78
+ return neighborsResult;
79
+ }
80
+ let neighbors = neighborsResult.value;
81
+ // Filter by predicate if specified
82
+ if (predicate) {
83
+ const edges = this.graph.getAllEdges();
84
+ const validTargets = new Set(edges
85
+ .filter((e) => e.source === nodeId && e.predicate === predicate)
86
+ .map((e) => e.target));
87
+ neighbors = neighbors.filter((n) => validTargets.has(n.id));
88
+ }
89
+ return ok(neighbors);
90
+ }
91
+ catch (error) {
92
+ return err(error instanceof Error ? error : new Error(String(error)));
93
+ }
94
+ }
95
+ /**
96
+ * Search nodes by label
97
+ *
98
+ * @param query - Search query (case insensitive substring match)
99
+ * @returns Array of matching nodes
100
+ */
101
+ search(query) {
102
+ try {
103
+ const nodes = this.graph.searchByLabel(query);
104
+ return ok(nodes);
105
+ }
106
+ catch (error) {
107
+ return err(error instanceof Error ? error : new Error(String(error)));
108
+ }
109
+ }
110
+ /**
111
+ * Execute a structured query
112
+ *
113
+ * @param queryDef - Query definition
114
+ * @returns Query result
115
+ */
116
+ execute(queryDef) {
117
+ const startTime = performance.now();
118
+ try {
119
+ let nodes;
120
+ // Start with type filter or all nodes
121
+ if (queryDef.type) {
122
+ nodes = this.graph.getNodesByType(queryDef.type);
123
+ }
124
+ else {
125
+ nodes = this.graph.getAllNodes();
126
+ }
127
+ // Apply filters
128
+ if (queryDef.filters) {
129
+ for (const filter of queryDef.filters) {
130
+ nodes = nodes.filter((node) => this.applyFilter(node, filter));
131
+ }
132
+ }
133
+ const totalCount = nodes.length;
134
+ // Apply sorting
135
+ if (queryDef.orderBy) {
136
+ const direction = queryDef.orderDirection === 'desc' ? -1 : 1;
137
+ nodes.sort((a, b) => {
138
+ const aVal = a.properties[queryDef.orderBy];
139
+ const bVal = b.properties[queryDef.orderBy];
140
+ if (typeof aVal === 'string' && typeof bVal === 'string') {
141
+ return aVal.localeCompare(bVal) * direction;
142
+ }
143
+ if (typeof aVal === 'number' && typeof bVal === 'number') {
144
+ return (aVal - bVal) * direction;
145
+ }
146
+ return 0;
147
+ });
148
+ }
149
+ // Apply pagination
150
+ if (queryDef.offset !== undefined) {
151
+ nodes = nodes.slice(queryDef.offset);
152
+ }
153
+ if (queryDef.limit !== undefined) {
154
+ nodes = nodes.slice(0, queryDef.limit);
155
+ }
156
+ const executionTime = performance.now() - startTime;
157
+ return ok({
158
+ nodes,
159
+ totalCount,
160
+ executionTime,
161
+ });
162
+ }
163
+ catch (error) {
164
+ return err(error instanceof Error ? error : new Error(String(error)));
165
+ }
166
+ }
167
+ /**
168
+ * Aggregate nodes by a property
169
+ *
170
+ * @param operation - Aggregation operation
171
+ * @param groupBy - Property to group by
172
+ * @returns Aggregation result
173
+ */
174
+ aggregate(operation, groupBy) {
175
+ try {
176
+ const nodes = this.graph.getAllNodes();
177
+ const groups = {};
178
+ for (const node of nodes) {
179
+ let key;
180
+ if (groupBy === 'type') {
181
+ key = node.type;
182
+ }
183
+ else {
184
+ key = String(node.properties[groupBy] ?? 'unknown');
185
+ }
186
+ if (!groups[key]) {
187
+ groups[key] = [];
188
+ }
189
+ groups[key].push(1);
190
+ }
191
+ const result = {};
192
+ for (const [key, values] of Object.entries(groups)) {
193
+ switch (operation) {
194
+ case 'count':
195
+ result[key] = values.length;
196
+ break;
197
+ case 'sum':
198
+ result[key] = values.reduce((a, b) => a + b, 0);
199
+ break;
200
+ case 'avg':
201
+ result[key] = values.reduce((a, b) => a + b, 0) / values.length;
202
+ break;
203
+ }
204
+ }
205
+ return ok(result);
206
+ }
207
+ catch (error) {
208
+ return err(error instanceof Error ? error : new Error(String(error)));
209
+ }
210
+ }
211
+ /**
212
+ * Apply a filter to a node
213
+ */
214
+ applyFilter(node, filter) {
215
+ const value = node.properties[filter.property];
216
+ switch (filter.operator) {
217
+ case 'eq':
218
+ return value === filter.value;
219
+ case 'ne':
220
+ return value !== filter.value;
221
+ case 'gt':
222
+ return typeof value === 'number' && value > filter.value;
223
+ case 'lt':
224
+ return typeof value === 'number' && value < filter.value;
225
+ case 'gte':
226
+ return typeof value === 'number' && value >= filter.value;
227
+ case 'lte':
228
+ return typeof value === 'number' && value <= filter.value;
229
+ case 'contains':
230
+ return (typeof value === 'string' &&
231
+ value.toLowerCase().includes(String(filter.value).toLowerCase()));
232
+ default:
233
+ return false;
234
+ }
235
+ }
236
+ }
237
+ //# sourceMappingURL=graph-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-query.js","sourceRoot":"","sources":["../../src/query/graph-query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Query module exports
3
+ *
4
+ * @module @nahisaho/katashiro-knowledge
5
+ */
6
+ export { GraphQuery, type QueryFilter, type GraphQueryDef, type QueryResult, } from './graph-query.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,WAAW,GACjB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Query module exports
3
+ *
4
+ * @module @nahisaho/katashiro-knowledge
5
+ */
6
+ export { GraphQuery, } from './graph-query.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,UAAU,GAIX,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * GraphSync - Synchronization between knowledge graphs
3
+ *
4
+ * Handles merging and syncing graph data between local and remote
5
+ *
6
+ * @module @nahisaho/katashiro-knowledge
7
+ * @task TSK-044
8
+ */
9
+ import { type Result } from '@nahisaho/katashiro-core';
10
+ import { KnowledgeGraph, type GraphNode, type GraphEdge } from '../graph/knowledge-graph.js';
11
+ /**
12
+ * Sync options
13
+ */
14
+ export interface SyncOptions {
15
+ /** Whether to update existing nodes/edges */
16
+ updateExisting?: boolean;
17
+ /** Conflict resolution strategy */
18
+ conflictResolution?: 'local' | 'remote' | 'newer';
19
+ /** Only sync specific node types */
20
+ nodeTypes?: string[];
21
+ /** Only sync specific predicates */
22
+ predicates?: string[];
23
+ }
24
+ /**
25
+ * Sync result
26
+ */
27
+ export interface SyncResult {
28
+ nodesAdded: number;
29
+ nodesUpdated: number;
30
+ nodesRemoved: number;
31
+ edgesAdded: number;
32
+ edgesUpdated: number;
33
+ edgesRemoved: number;
34
+ conflicts: Conflict[];
35
+ timestamp: string;
36
+ }
37
+ /**
38
+ * Comparison result
39
+ */
40
+ export interface ComparisonResult {
41
+ localOnly: {
42
+ nodes: GraphNode[];
43
+ edges: GraphEdge[];
44
+ };
45
+ remoteOnly: {
46
+ nodes: GraphNode[];
47
+ edges: GraphEdge[];
48
+ };
49
+ modified: {
50
+ nodes: Array<{
51
+ local: GraphNode;
52
+ remote: GraphNode;
53
+ }>;
54
+ edges: Array<{
55
+ local: GraphEdge;
56
+ remote: GraphEdge;
57
+ }>;
58
+ };
59
+ identical: {
60
+ nodes: GraphNode[];
61
+ edges: GraphEdge[];
62
+ };
63
+ }
64
+ /**
65
+ * Conflict representation
66
+ */
67
+ export interface Conflict {
68
+ type: 'node' | 'edge';
69
+ id: string;
70
+ local: GraphNode | GraphEdge;
71
+ remote: GraphNode | GraphEdge;
72
+ field: string;
73
+ }
74
+ /**
75
+ * GraphSync
76
+ *
77
+ * Synchronizes knowledge graphs between local and remote sources
78
+ */
79
+ export declare class GraphSync {
80
+ private localGraph;
81
+ private remoteGraph;
82
+ private lastSyncTime;
83
+ constructor(localGraph: KnowledgeGraph, remoteGraph: KnowledgeGraph);
84
+ /**
85
+ * Compare local and remote graphs
86
+ *
87
+ * @returns Comparison result
88
+ */
89
+ compare(): Result<ComparisonResult, Error>;
90
+ /**
91
+ * Pull changes from remote to local
92
+ *
93
+ * @param options - Sync options
94
+ * @returns Sync result
95
+ */
96
+ pull(options?: SyncOptions): Result<SyncResult, Error>;
97
+ /**
98
+ * Push changes from local to remote
99
+ *
100
+ * @param options - Sync options
101
+ * @returns Sync result
102
+ */
103
+ push(options?: SyncOptions): Result<SyncResult, Error>;
104
+ /**
105
+ * Bidirectional sync
106
+ *
107
+ * @param options - Sync options
108
+ * @returns Sync result
109
+ */
110
+ sync(options?: SyncOptions): Result<SyncResult, Error>;
111
+ /**
112
+ * Get conflicts between graphs
113
+ *
114
+ * @returns Array of conflicts
115
+ */
116
+ getConflicts(): Result<Conflict[], Error>;
117
+ /**
118
+ * Get last sync timestamp
119
+ *
120
+ * @returns Last sync timestamp or null
121
+ */
122
+ getLastSyncTime(): string | null;
123
+ /**
124
+ * Check if a node has been modified
125
+ */
126
+ private isNodeModified;
127
+ /**
128
+ * Check if an edge has been modified
129
+ */
130
+ private isEdgeModified;
131
+ }
132
+ //# sourceMappingURL=graph-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-sync.d.ts","sourceRoot":"","sources":["../../src/sync/graph-sync.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,6CAA6C;IAC7C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,mCAAmC;IACnC,kBAAkB,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IAClD,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE;QACT,KAAK,EAAE,SAAS,EAAE,CAAC;QACnB,KAAK,EAAE,SAAS,EAAE,CAAC;KACpB,CAAC;IACF,UAAU,EAAE;QACV,KAAK,EAAE,SAAS,EAAE,CAAC;QACnB,KAAK,EAAE,SAAS,EAAE,CAAC;KACpB,CAAC;IACF,QAAQ,EAAE;QACR,KAAK,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,SAAS,CAAC;YAAC,MAAM,EAAE,SAAS,CAAA;SAAE,CAAC,CAAC;QACtD,KAAK,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,SAAS,CAAC;YAAC,MAAM,EAAE,SAAS,CAAA;SAAE,CAAC,CAAC;KACvD,CAAC;IACF,SAAS,EAAE;QACT,KAAK,EAAE,SAAS,EAAE,CAAC;QACnB,KAAK,EAAE,SAAS,EAAE,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,qBAAa,SAAS;IAIlB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,WAAW;IAJrB,OAAO,CAAC,YAAY,CAAuB;gBAGjC,UAAU,EAAE,cAAc,EAC1B,WAAW,EAAE,cAAc;IAGrC;;;;OAIG;IACH,OAAO,IAAI,MAAM,CAAC,gBAAgB,EAAE,KAAK,CAAC;IAwE1C;;;;;OAKG;IACH,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC;IAuE1D;;;;;OAKG;IACH,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC;IAqE1D;;;;;OAKG;IACH,IAAI,CAAC,OAAO,GAAE,WAAgB,GAAG,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC;IAoC1D;;;;OAIG;IACH,YAAY,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC;IAwCzC;;;;OAIG;IACH,eAAe,IAAI,MAAM,GAAG,IAAI;IAIhC;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,cAAc;CAQvB"}