cmp-standards 3.5.1 → 3.7.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 +399 -633
- package/dist/analytics/CrossProjectAnalytics.js +65 -65
- package/dist/cli/index.js +255 -12
- package/dist/cli/index.js.map +1 -1
- package/dist/dashboard/tokens.js +173 -173
- package/dist/db/cloud.d.ts +1 -0
- package/dist/db/cloud.d.ts.map +1 -1
- package/dist/db/migrations.js +256 -256
- package/dist/db/turso-client.js +2 -2
- package/dist/db/upstash-client.d.ts +9 -0
- package/dist/db/upstash-client.d.ts.map +1 -1
- package/dist/db/upstash-client.js +11 -0
- package/dist/db/upstash-client.js.map +1 -1
- package/dist/eslint/rules/no-async-useeffect.js +6 -6
- package/dist/experts/ExpertVotePersistence.js +9 -9
- package/dist/hooks/auto-learning-hook.d.ts +48 -0
- package/dist/hooks/auto-learning-hook.d.ts.map +1 -0
- package/dist/hooks/auto-learning-hook.js +258 -0
- package/dist/hooks/auto-learning-hook.js.map +1 -0
- package/dist/hooks/cloud-post-tool-use.d.ts.map +1 -1
- package/dist/hooks/cloud-post-tool-use.js +72 -10
- package/dist/hooks/cloud-post-tool-use.js.map +1 -1
- package/dist/hooks/cloud-pre-tool-use.d.ts +12 -9
- package/dist/hooks/cloud-pre-tool-use.d.ts.map +1 -1
- package/dist/hooks/cloud-pre-tool-use.js +227 -99
- package/dist/hooks/cloud-pre-tool-use.js.map +1 -1
- package/dist/hooks/cloud-session-start.js +5 -5
- package/dist/hooks/fast-session-start.d.ts +24 -0
- package/dist/hooks/fast-session-start.d.ts.map +1 -0
- package/dist/hooks/fast-session-start.js +354 -0
- package/dist/hooks/fast-session-start.js.map +1 -0
- package/dist/hooks/resilient-hook-runner.d.ts +78 -0
- package/dist/hooks/resilient-hook-runner.d.ts.map +1 -0
- package/dist/hooks/resilient-hook-runner.js +201 -0
- package/dist/hooks/resilient-hook-runner.js.map +1 -0
- package/dist/hooks/session-end.js +14 -14
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/patterns/registry.js +90 -90
- package/dist/schema/codewiki-types.d.ts +10 -10
- package/dist/schema/docs-types.d.ts +8 -8
- package/dist/schema/ecosystem-types.d.ts +12 -12
- package/dist/services/BootstrapService.d.ts +123 -0
- package/dist/services/BootstrapService.d.ts.map +1 -0
- package/dist/services/BootstrapService.js +309 -0
- package/dist/services/BootstrapService.js.map +1 -0
- package/dist/services/CodeWikiIndexer.js +3 -3
- package/dist/services/ContextGenerator.js +7 -7
- package/dist/services/FeedbackCollector.js +11 -11
- package/dist/services/GitIntegration.js +9 -9
- package/dist/services/HookVerifier.js +70 -70
- package/dist/services/KnowledgeGapDetector.d.ts +122 -0
- package/dist/services/KnowledgeGapDetector.d.ts.map +1 -0
- package/dist/services/KnowledgeGapDetector.js +530 -0
- package/dist/services/KnowledgeGapDetector.js.map +1 -0
- package/dist/services/ProjectScaffold.d.ts.map +1 -1
- package/dist/services/ProjectScaffold.js +79 -78
- package/dist/services/ProjectScaffold.js.map +1 -1
- package/dist/services/auto-evolution-trigger.d.ts +101 -0
- package/dist/services/auto-evolution-trigger.d.ts.map +1 -0
- package/dist/services/auto-evolution-trigger.js +359 -0
- package/dist/services/auto-evolution-trigger.js.map +1 -0
- package/dist/services/cloud-memory-service.d.ts +101 -0
- package/dist/services/cloud-memory-service.d.ts.map +1 -0
- package/dist/services/cloud-memory-service.js +363 -0
- package/dist/services/cloud-memory-service.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +6 -0
- package/dist/services/index.js.map +1 -1
- package/dist/services/knowledge-graph.d.ts +121 -0
- package/dist/services/knowledge-graph.d.ts.map +1 -0
- package/dist/services/knowledge-graph.js +446 -0
- package/dist/services/knowledge-graph.js.map +1 -0
- package/dist/services/memory-keeper-client.d.ts +106 -0
- package/dist/services/memory-keeper-client.d.ts.map +1 -0
- package/dist/services/memory-keeper-client.js +319 -0
- package/dist/services/memory-keeper-client.js.map +1 -0
- package/dist/services/memory-router.d.ts +25 -0
- package/dist/services/memory-router.d.ts.map +1 -1
- package/dist/services/memory-router.js +236 -98
- package/dist/services/memory-router.js.map +1 -1
- package/dist/services/pattern-learning.d.ts +79 -0
- package/dist/services/pattern-learning.d.ts.map +1 -0
- package/dist/services/pattern-learning.js +312 -0
- package/dist/services/pattern-learning.js.map +1 -0
- package/dist/services/pattern-tracker.js +95 -95
- package/dist/services/semantic-search.js +2 -2
- package/dist/services/skill-learning-bridge.d.ts +100 -0
- package/dist/services/skill-learning-bridge.d.ts.map +1 -0
- package/dist/services/skill-learning-bridge.js +331 -0
- package/dist/services/skill-learning-bridge.js.map +1 -0
- package/dist/services/unified-memory-router.d.ts +123 -0
- package/dist/services/unified-memory-router.d.ts.map +1 -0
- package/dist/services/unified-memory-router.js +555 -0
- package/dist/services/unified-memory-router.js.map +1 -0
- package/package.json +124 -116
- package/standards/README.md +94 -50
- package/standards/experts/expert-routing.md +215 -215
- package/standards/general/code-quality.md +86 -86
- package/standards/general/ecosystem.md +243 -0
- package/standards/general/learning-loop.md +192 -0
- package/standards/general/memory-usage.md +205 -205
- package/standards/general/project-onboarding.md +339 -0
- package/standards/general/sync-workflow.md +235 -235
- package/standards/general/workflow.md +82 -82
- package/standards/hooks/mandatory-tracking.md +446 -446
- package/standards/infrastructure/cloud-database.md +287 -287
- package/standards/mcp/server-design.md +243 -243
- package/standards/mcp/tool-patterns.md +354 -354
- package/standards/skills/skill-structure.md +286 -286
- package/standards/skills/workflow-design.md +323 -323
- package/standards/tools/tool-design.md +297 -297
- package/templates/agents/architecture-expert.md +61 -61
- package/templates/agents/database-expert.md +62 -62
- package/templates/agents/documentation-expert.md +57 -57
- package/templates/agents/ecosystem-expert.md +104 -0
- package/templates/agents/memory-expert.md +88 -88
- package/templates/agents/performance-expert.md +61 -61
- package/templates/agents/security-expert.md +59 -59
- package/templates/agents/ux-expert.md +63 -63
- package/templates/agents/worker.md +75 -75
- package/templates/ai-skills/SKILL_TEMPLATE.md +55 -55
- package/templates/claude-settings.json +72 -72
- package/templates/commands/experts.md +138 -138
- package/templates/hooks/README.md +158 -158
- package/templates/hooks/project.config.json.template +77 -77
- package/templates/hooks/settings.local.json.template +57 -57
- package/templates/hooks.config.json +21 -0
- package/templates/memory-config.json +56 -56
- package/templates/memory-config.schema.json +212 -212
- package/templates/settings.json +58 -58
- package/templates/skills/continue.md +205 -205
- package/templates/workflows/business-improvement.md +264 -264
- package/templates/workflows/expert-review.md +153 -153
- package/templates/workflows/internal-app.md +245 -245
- package/templates/workflows/sync-docs.md +187 -187
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Knowledge Graph Service
|
|
3
|
+
* @description Manages relationships between memories, patterns, and concepts
|
|
4
|
+
*
|
|
5
|
+
* Key Features:
|
|
6
|
+
* - Node types: memory, pattern, concept, file, domain
|
|
7
|
+
* - Edge types: relates_to, depends_on, mentions, modifies, belongs_to
|
|
8
|
+
* - Traversal queries for context discovery
|
|
9
|
+
* - Semantic clustering via vector similarity
|
|
10
|
+
*/
|
|
11
|
+
import { turso } from '../db/turso-client.js';
|
|
12
|
+
import { upstash } from '../db/upstash-client.js';
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Knowledge Graph Service
|
|
15
|
+
// =============================================================================
|
|
16
|
+
class KnowledgeGraphService {
|
|
17
|
+
initialized = false;
|
|
18
|
+
/**
|
|
19
|
+
* Initialize the graph (ensure tables exist)
|
|
20
|
+
*/
|
|
21
|
+
async init() {
|
|
22
|
+
if (this.initialized)
|
|
23
|
+
return;
|
|
24
|
+
const db = turso.getClient();
|
|
25
|
+
// Create graph tables if they don't exist
|
|
26
|
+
await db.batch([
|
|
27
|
+
{
|
|
28
|
+
sql: `
|
|
29
|
+
CREATE TABLE IF NOT EXISTS graph_nodes (
|
|
30
|
+
id TEXT PRIMARY KEY,
|
|
31
|
+
type TEXT NOT NULL,
|
|
32
|
+
system TEXT NOT NULL,
|
|
33
|
+
label TEXT NOT NULL,
|
|
34
|
+
metadata TEXT,
|
|
35
|
+
weight REAL DEFAULT 0.5,
|
|
36
|
+
created_at TEXT NOT NULL
|
|
37
|
+
)
|
|
38
|
+
`,
|
|
39
|
+
args: []
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
sql: `
|
|
43
|
+
CREATE TABLE IF NOT EXISTS graph_edges (
|
|
44
|
+
id TEXT PRIMARY KEY,
|
|
45
|
+
source TEXT NOT NULL,
|
|
46
|
+
target TEXT NOT NULL,
|
|
47
|
+
type TEXT NOT NULL,
|
|
48
|
+
weight REAL DEFAULT 0.5,
|
|
49
|
+
metadata TEXT,
|
|
50
|
+
created_at TEXT NOT NULL,
|
|
51
|
+
FOREIGN KEY (source) REFERENCES graph_nodes(id),
|
|
52
|
+
FOREIGN KEY (target) REFERENCES graph_nodes(id)
|
|
53
|
+
)
|
|
54
|
+
`,
|
|
55
|
+
args: []
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
sql: `CREATE INDEX IF NOT EXISTS idx_edges_source ON graph_edges(source)`,
|
|
59
|
+
args: []
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
sql: `CREATE INDEX IF NOT EXISTS idx_edges_target ON graph_edges(target)`,
|
|
63
|
+
args: []
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
sql: `CREATE INDEX IF NOT EXISTS idx_nodes_system ON graph_nodes(system)`,
|
|
67
|
+
args: []
|
|
68
|
+
}
|
|
69
|
+
]);
|
|
70
|
+
this.initialized = true;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Add a node to the graph
|
|
74
|
+
*/
|
|
75
|
+
async addNode(node) {
|
|
76
|
+
await this.init();
|
|
77
|
+
const db = turso.getClient();
|
|
78
|
+
const id = `node_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
79
|
+
const now = new Date().toISOString();
|
|
80
|
+
await db.execute({
|
|
81
|
+
sql: `
|
|
82
|
+
INSERT OR REPLACE INTO graph_nodes (id, type, system, label, metadata, weight, created_at)
|
|
83
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
84
|
+
`,
|
|
85
|
+
args: [
|
|
86
|
+
id,
|
|
87
|
+
node.type,
|
|
88
|
+
node.system,
|
|
89
|
+
node.label,
|
|
90
|
+
node.metadata ? JSON.stringify(node.metadata) : null,
|
|
91
|
+
node.weight ?? 0.5,
|
|
92
|
+
now
|
|
93
|
+
]
|
|
94
|
+
});
|
|
95
|
+
return id;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Add an edge between two nodes
|
|
99
|
+
*/
|
|
100
|
+
async addEdge(source, target, type, options) {
|
|
101
|
+
await this.init();
|
|
102
|
+
const db = turso.getClient();
|
|
103
|
+
const id = `edge_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
|
|
104
|
+
const now = new Date().toISOString();
|
|
105
|
+
await db.execute({
|
|
106
|
+
sql: `
|
|
107
|
+
INSERT OR REPLACE INTO graph_edges (id, source, target, type, weight, metadata, created_at)
|
|
108
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
109
|
+
`,
|
|
110
|
+
args: [
|
|
111
|
+
id,
|
|
112
|
+
source,
|
|
113
|
+
target,
|
|
114
|
+
type,
|
|
115
|
+
options?.weight ?? 0.5,
|
|
116
|
+
options?.metadata ? JSON.stringify(options.metadata) : null,
|
|
117
|
+
now
|
|
118
|
+
]
|
|
119
|
+
});
|
|
120
|
+
return id;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Create node and edges from a memory item
|
|
124
|
+
*/
|
|
125
|
+
async indexMemory(memoryId, system, content) {
|
|
126
|
+
await this.init();
|
|
127
|
+
// Create memory node
|
|
128
|
+
const nodeId = await this.addNode({
|
|
129
|
+
type: 'memory',
|
|
130
|
+
system,
|
|
131
|
+
label: content.title,
|
|
132
|
+
metadata: { memoryId, body: content.body.slice(0, 200) },
|
|
133
|
+
weight: 0.7
|
|
134
|
+
});
|
|
135
|
+
let edgeCount = 0;
|
|
136
|
+
// Link to domain
|
|
137
|
+
if (content.domain) {
|
|
138
|
+
const domainNodeId = await this.ensureNode(`domain_${system}_${content.domain}`, { type: 'domain', system, label: content.domain, weight: 0.9 });
|
|
139
|
+
await this.addEdge(nodeId, domainNodeId, 'belongs_to');
|
|
140
|
+
edgeCount++;
|
|
141
|
+
}
|
|
142
|
+
// Link to files
|
|
143
|
+
if (content.relatedFiles) {
|
|
144
|
+
for (const file of content.relatedFiles.slice(0, 10)) {
|
|
145
|
+
const fileNodeId = await this.ensureNode(`file_${Buffer.from(file).toString('base64').slice(0, 20)}`, { type: 'file', system, label: file, weight: 0.6 });
|
|
146
|
+
await this.addEdge(nodeId, fileNodeId, 'modifies');
|
|
147
|
+
edgeCount++;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Link to session
|
|
151
|
+
if (content.sessionId) {
|
|
152
|
+
const sessionNodeId = await this.ensureNode(`session_${content.sessionId}`, { type: 'session', system, label: `Session ${content.sessionId.slice(0, 8)}`, weight: 0.5 });
|
|
153
|
+
await this.addEdge(nodeId, sessionNodeId, 'belongs_to');
|
|
154
|
+
edgeCount++;
|
|
155
|
+
}
|
|
156
|
+
// Extract and link concepts from tags
|
|
157
|
+
if (content.tags) {
|
|
158
|
+
for (const tag of content.tags.slice(0, 5)) {
|
|
159
|
+
const conceptNodeId = await this.ensureNode(`concept_${system}_${tag}`, { type: 'concept', system, label: tag, weight: 0.6 });
|
|
160
|
+
await this.addEdge(nodeId, conceptNodeId, 'mentions');
|
|
161
|
+
edgeCount++;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return { nodeId, edges: edgeCount };
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Traverse the graph from a starting node
|
|
168
|
+
*/
|
|
169
|
+
async traverse(options) {
|
|
170
|
+
await this.init();
|
|
171
|
+
const { startNode, maxDepth = 2, limit = 50 } = options;
|
|
172
|
+
const visited = new Set();
|
|
173
|
+
const nodes = [];
|
|
174
|
+
const edges = [];
|
|
175
|
+
await this.traverseRecursive(startNode, 0, maxDepth, visited, nodes, edges, options);
|
|
176
|
+
return {
|
|
177
|
+
nodes: nodes.slice(0, limit),
|
|
178
|
+
edges: edges.slice(0, limit * 2),
|
|
179
|
+
depth: maxDepth
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Find related nodes by semantic similarity
|
|
184
|
+
*/
|
|
185
|
+
async findSimilar(query, system, options) {
|
|
186
|
+
const limit = options?.limit || 10;
|
|
187
|
+
const minScore = options?.minScore || 0.5;
|
|
188
|
+
// Search vectors for similar items
|
|
189
|
+
const vectorResults = await upstash.searchVectors(query, {
|
|
190
|
+
topK: limit * 2,
|
|
191
|
+
filter: `system = "${system}"`,
|
|
192
|
+
includeMetadata: true
|
|
193
|
+
});
|
|
194
|
+
// Filter by score and node type
|
|
195
|
+
const filteredResults = vectorResults
|
|
196
|
+
.filter(r => r.score >= minScore)
|
|
197
|
+
.filter(r => {
|
|
198
|
+
if (!options?.nodeTypes)
|
|
199
|
+
return true;
|
|
200
|
+
const nodeType = r.metadata?.type;
|
|
201
|
+
return nodeType && options.nodeTypes.includes(nodeType);
|
|
202
|
+
});
|
|
203
|
+
// Convert to graph nodes
|
|
204
|
+
return filteredResults.slice(0, limit).map(r => ({
|
|
205
|
+
id: r.id,
|
|
206
|
+
type: r.metadata?.type || 'memory',
|
|
207
|
+
system,
|
|
208
|
+
label: r.metadata?.title || r.id,
|
|
209
|
+
metadata: r.metadata,
|
|
210
|
+
weight: r.score,
|
|
211
|
+
createdAt: r.metadata?.createdAt || new Date().toISOString(),
|
|
212
|
+
score: r.score
|
|
213
|
+
}));
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Get context for a file (related memories, patterns, concepts)
|
|
217
|
+
*/
|
|
218
|
+
async getFileContext(filePath, system) {
|
|
219
|
+
await this.init();
|
|
220
|
+
const db = turso.getClient();
|
|
221
|
+
// Find file node
|
|
222
|
+
const fileNodeResult = await db.execute({
|
|
223
|
+
sql: `SELECT * FROM graph_nodes WHERE type = 'file' AND label = ? AND system = ?`,
|
|
224
|
+
args: [filePath, system]
|
|
225
|
+
});
|
|
226
|
+
if (fileNodeResult.rows.length === 0) {
|
|
227
|
+
return { nodes: [], edges: [], depth: 0 };
|
|
228
|
+
}
|
|
229
|
+
const fileNodeId = fileNodeResult.rows[0].id;
|
|
230
|
+
// Traverse from file node
|
|
231
|
+
return this.traverse({
|
|
232
|
+
startNode: fileNodeId,
|
|
233
|
+
maxDepth: 2,
|
|
234
|
+
edgeTypes: ['modifies', 'mentions', 'belongs_to'],
|
|
235
|
+
limit: 30
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Get domain overview (all concepts and their relationships)
|
|
240
|
+
*/
|
|
241
|
+
async getDomainOverview(system, domain) {
|
|
242
|
+
await this.init();
|
|
243
|
+
const db = turso.getClient();
|
|
244
|
+
// Find domain node
|
|
245
|
+
const domainNodeId = `domain_${system}_${domain}`;
|
|
246
|
+
// Get all nodes connected to this domain
|
|
247
|
+
const connectedNodes = await db.execute({
|
|
248
|
+
sql: `
|
|
249
|
+
SELECT n.* FROM graph_nodes n
|
|
250
|
+
JOIN graph_edges e ON n.id = e.source OR n.id = e.target
|
|
251
|
+
WHERE (e.source = ? OR e.target = ?)
|
|
252
|
+
AND n.system = ?
|
|
253
|
+
LIMIT 100
|
|
254
|
+
`,
|
|
255
|
+
args: [domainNodeId, domainNodeId, system]
|
|
256
|
+
});
|
|
257
|
+
const nodeIds = new Set(connectedNodes.rows.map(r => r.id));
|
|
258
|
+
nodeIds.add(domainNodeId);
|
|
259
|
+
// Get edges between these nodes
|
|
260
|
+
const placeholders = [...nodeIds].map(() => '?').join(', ');
|
|
261
|
+
const edgeResults = await db.execute({
|
|
262
|
+
sql: `
|
|
263
|
+
SELECT * FROM graph_edges
|
|
264
|
+
WHERE source IN (${placeholders}) AND target IN (${placeholders})
|
|
265
|
+
`,
|
|
266
|
+
args: [...nodeIds, ...nodeIds]
|
|
267
|
+
});
|
|
268
|
+
return {
|
|
269
|
+
nodes: connectedNodes.rows.map(r => this.rowToNode(r)),
|
|
270
|
+
edges: edgeResults.rows.map(r => this.rowToEdge(r)),
|
|
271
|
+
depth: 1
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Detect clusters of related memories
|
|
276
|
+
*/
|
|
277
|
+
async detectClusters(system, options) {
|
|
278
|
+
await this.init();
|
|
279
|
+
const minSize = options?.minClusterSize || 3;
|
|
280
|
+
const maxClusters = options?.maxClusters || 10;
|
|
281
|
+
const db = turso.getClient();
|
|
282
|
+
// Find heavily connected nodes (potential cluster centroids)
|
|
283
|
+
const centroids = await db.execute({
|
|
284
|
+
sql: `
|
|
285
|
+
SELECT n.id, n.label, COUNT(e.id) as connections
|
|
286
|
+
FROM graph_nodes n
|
|
287
|
+
LEFT JOIN graph_edges e ON n.id = e.source OR n.id = e.target
|
|
288
|
+
WHERE n.system = ? AND n.type IN ('memory', 'concept')
|
|
289
|
+
GROUP BY n.id
|
|
290
|
+
HAVING connections >= ?
|
|
291
|
+
ORDER BY connections DESC
|
|
292
|
+
LIMIT ?
|
|
293
|
+
`,
|
|
294
|
+
args: [system, minSize, maxClusters]
|
|
295
|
+
});
|
|
296
|
+
const clusters = [];
|
|
297
|
+
const assignedNodes = new Set();
|
|
298
|
+
for (const centroid of centroids.rows) {
|
|
299
|
+
const centroidId = centroid.id;
|
|
300
|
+
if (assignedNodes.has(centroidId))
|
|
301
|
+
continue;
|
|
302
|
+
// Get connected nodes
|
|
303
|
+
const connected = await db.execute({
|
|
304
|
+
sql: `
|
|
305
|
+
SELECT DISTINCT
|
|
306
|
+
CASE WHEN source = ? THEN target ELSE source END as node_id
|
|
307
|
+
FROM graph_edges
|
|
308
|
+
WHERE source = ? OR target = ?
|
|
309
|
+
`,
|
|
310
|
+
args: [centroidId, centroidId, centroidId]
|
|
311
|
+
});
|
|
312
|
+
const clusterNodes = [centroidId];
|
|
313
|
+
for (const row of connected.rows) {
|
|
314
|
+
const nodeId = row.node_id;
|
|
315
|
+
if (!assignedNodes.has(nodeId)) {
|
|
316
|
+
clusterNodes.push(nodeId);
|
|
317
|
+
assignedNodes.add(nodeId);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
assignedNodes.add(centroidId);
|
|
321
|
+
if (clusterNodes.length >= minSize) {
|
|
322
|
+
clusters.push({
|
|
323
|
+
clusterId: `cluster_${centroidId}`,
|
|
324
|
+
nodes: clusterNodes,
|
|
325
|
+
centroid: centroidId,
|
|
326
|
+
theme: centroid.label,
|
|
327
|
+
score: clusterNodes.length / 10 // Simple cohesion score
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
return clusters;
|
|
332
|
+
}
|
|
333
|
+
// =============================================================================
|
|
334
|
+
// Private Methods
|
|
335
|
+
// =============================================================================
|
|
336
|
+
async ensureNode(id, node) {
|
|
337
|
+
const db = turso.getClient();
|
|
338
|
+
const existing = await db.execute({
|
|
339
|
+
sql: `SELECT id FROM graph_nodes WHERE id = ?`,
|
|
340
|
+
args: [id]
|
|
341
|
+
});
|
|
342
|
+
if (existing.rows.length > 0) {
|
|
343
|
+
return id;
|
|
344
|
+
}
|
|
345
|
+
const now = new Date().toISOString();
|
|
346
|
+
await db.execute({
|
|
347
|
+
sql: `
|
|
348
|
+
INSERT INTO graph_nodes (id, type, system, label, metadata, weight, created_at)
|
|
349
|
+
VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
350
|
+
`,
|
|
351
|
+
args: [
|
|
352
|
+
id,
|
|
353
|
+
node.type,
|
|
354
|
+
node.system,
|
|
355
|
+
node.label,
|
|
356
|
+
node.metadata ? JSON.stringify(node.metadata) : null,
|
|
357
|
+
node.weight ?? 0.5,
|
|
358
|
+
now
|
|
359
|
+
]
|
|
360
|
+
});
|
|
361
|
+
return id;
|
|
362
|
+
}
|
|
363
|
+
async traverseRecursive(nodeId, currentDepth, maxDepth, visited, nodes, edges, options) {
|
|
364
|
+
if (currentDepth > maxDepth || visited.has(nodeId))
|
|
365
|
+
return;
|
|
366
|
+
visited.add(nodeId);
|
|
367
|
+
const db = turso.getClient();
|
|
368
|
+
// Get the node
|
|
369
|
+
const nodeResult = await db.execute({
|
|
370
|
+
sql: `SELECT * FROM graph_nodes WHERE id = ?`,
|
|
371
|
+
args: [nodeId]
|
|
372
|
+
});
|
|
373
|
+
if (nodeResult.rows.length === 0)
|
|
374
|
+
return;
|
|
375
|
+
const node = this.rowToNode(nodeResult.rows[0]);
|
|
376
|
+
// Filter by node type if specified
|
|
377
|
+
if (options.nodeTypes && !options.nodeTypes.includes(node.type))
|
|
378
|
+
return;
|
|
379
|
+
nodes.push(node);
|
|
380
|
+
// Get connected edges
|
|
381
|
+
let edgeQuery = `
|
|
382
|
+
SELECT * FROM graph_edges
|
|
383
|
+
WHERE source = ? OR target = ?
|
|
384
|
+
`;
|
|
385
|
+
const edgeArgs = [nodeId, nodeId];
|
|
386
|
+
if (options.edgeTypes && options.edgeTypes.length > 0) {
|
|
387
|
+
const placeholders = options.edgeTypes.map(() => '?').join(', ');
|
|
388
|
+
edgeQuery += ` AND type IN (${placeholders})`;
|
|
389
|
+
edgeArgs.push(...options.edgeTypes);
|
|
390
|
+
}
|
|
391
|
+
const edgeResults = await db.execute({ sql: edgeQuery, args: edgeArgs });
|
|
392
|
+
for (const row of edgeResults.rows) {
|
|
393
|
+
const edge = this.rowToEdge(row);
|
|
394
|
+
edges.push(edge);
|
|
395
|
+
// Traverse to connected node
|
|
396
|
+
const nextNode = edge.source === nodeId ? edge.target : edge.source;
|
|
397
|
+
await this.traverseRecursive(nextNode, currentDepth + 1, maxDepth, visited, nodes, edges, options);
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
rowToNode(row) {
|
|
401
|
+
return {
|
|
402
|
+
id: row.id,
|
|
403
|
+
type: row.type,
|
|
404
|
+
system: row.system,
|
|
405
|
+
label: row.label,
|
|
406
|
+
metadata: row.metadata
|
|
407
|
+
? typeof row.metadata === 'string'
|
|
408
|
+
? JSON.parse(row.metadata)
|
|
409
|
+
: row.metadata
|
|
410
|
+
: undefined,
|
|
411
|
+
weight: row.weight,
|
|
412
|
+
createdAt: row.created_at
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
rowToEdge(row) {
|
|
416
|
+
return {
|
|
417
|
+
id: row.id,
|
|
418
|
+
source: row.source,
|
|
419
|
+
target: row.target,
|
|
420
|
+
type: row.type,
|
|
421
|
+
weight: row.weight,
|
|
422
|
+
metadata: row.metadata
|
|
423
|
+
? typeof row.metadata === 'string'
|
|
424
|
+
? JSON.parse(row.metadata)
|
|
425
|
+
: row.metadata
|
|
426
|
+
: undefined,
|
|
427
|
+
createdAt: row.created_at
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
// =============================================================================
|
|
432
|
+
// Singleton Export
|
|
433
|
+
// =============================================================================
|
|
434
|
+
let instance = null;
|
|
435
|
+
export function getKnowledgeGraph() {
|
|
436
|
+
if (!instance) {
|
|
437
|
+
instance = new KnowledgeGraphService();
|
|
438
|
+
}
|
|
439
|
+
return instance;
|
|
440
|
+
}
|
|
441
|
+
export function resetKnowledgeGraph() {
|
|
442
|
+
instance = null;
|
|
443
|
+
}
|
|
444
|
+
export const knowledgeGraph = getKnowledgeGraph();
|
|
445
|
+
export default knowledgeGraph;
|
|
446
|
+
//# sourceMappingURL=knowledge-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knowledge-graph.js","sourceRoot":"","sources":["../../src/services/knowledge-graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Memory-Keeper MCP Client
|
|
3
|
+
* @description Client for interacting with memory-keeper MCP server
|
|
4
|
+
*
|
|
5
|
+
* Uses stdio transport to communicate with the memory-keeper MCP process.
|
|
6
|
+
* Provides typed methods for all memory operations.
|
|
7
|
+
*
|
|
8
|
+
* @version 1.0.0
|
|
9
|
+
*/
|
|
10
|
+
export interface MemoryKeeperItem {
|
|
11
|
+
id?: string;
|
|
12
|
+
key: string;
|
|
13
|
+
value: string;
|
|
14
|
+
category?: 'task' | 'decision' | 'progress' | 'note' | 'error' | 'warning';
|
|
15
|
+
channel?: string;
|
|
16
|
+
priority?: 'high' | 'normal' | 'low';
|
|
17
|
+
private?: boolean;
|
|
18
|
+
metadata?: Record<string, unknown>;
|
|
19
|
+
created_at?: string;
|
|
20
|
+
updated_at?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface SearchOptions {
|
|
23
|
+
query: string;
|
|
24
|
+
category?: string;
|
|
25
|
+
channel?: string;
|
|
26
|
+
limit?: number;
|
|
27
|
+
includeMetadata?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface SearchResult {
|
|
30
|
+
items: MemoryKeeperItem[];
|
|
31
|
+
total: number;
|
|
32
|
+
}
|
|
33
|
+
export interface SessionInfo {
|
|
34
|
+
id: string;
|
|
35
|
+
name?: string;
|
|
36
|
+
description?: string;
|
|
37
|
+
channel?: string;
|
|
38
|
+
projectDir?: string;
|
|
39
|
+
}
|
|
40
|
+
export declare class MemoryKeeperClient {
|
|
41
|
+
private process;
|
|
42
|
+
private requestId;
|
|
43
|
+
private pendingRequests;
|
|
44
|
+
private buffer;
|
|
45
|
+
private initialized;
|
|
46
|
+
/**
|
|
47
|
+
* Initialize connection to memory-keeper MCP server
|
|
48
|
+
*/
|
|
49
|
+
connect(): Promise<boolean>;
|
|
50
|
+
/**
|
|
51
|
+
* Find the memory-keeper MCP server path
|
|
52
|
+
*/
|
|
53
|
+
private findMCPServer;
|
|
54
|
+
/**
|
|
55
|
+
* Handle incoming data from MCP server
|
|
56
|
+
*/
|
|
57
|
+
private handleData;
|
|
58
|
+
/**
|
|
59
|
+
* Send a request to the MCP server
|
|
60
|
+
*/
|
|
61
|
+
private sendRequest;
|
|
62
|
+
/**
|
|
63
|
+
* Call a tool on the MCP server
|
|
64
|
+
*/
|
|
65
|
+
private callTool;
|
|
66
|
+
/**
|
|
67
|
+
* Save a context item
|
|
68
|
+
*/
|
|
69
|
+
save(item: Omit<MemoryKeeperItem, 'id' | 'created_at' | 'updated_at'>): Promise<boolean>;
|
|
70
|
+
/**
|
|
71
|
+
* Get a context item by key
|
|
72
|
+
*/
|
|
73
|
+
get(key: string): Promise<MemoryKeeperItem | null>;
|
|
74
|
+
/**
|
|
75
|
+
* Search context items
|
|
76
|
+
*/
|
|
77
|
+
search(options: SearchOptions): Promise<SearchResult>;
|
|
78
|
+
/**
|
|
79
|
+
* Search across all sessions
|
|
80
|
+
*/
|
|
81
|
+
searchAll(query: string, limit?: number): Promise<SearchResult>;
|
|
82
|
+
/**
|
|
83
|
+
* Get current session status
|
|
84
|
+
*/
|
|
85
|
+
getStatus(): Promise<SessionInfo | null>;
|
|
86
|
+
/**
|
|
87
|
+
* Create a checkpoint
|
|
88
|
+
*/
|
|
89
|
+
checkpoint(name: string, description?: string): Promise<string | null>;
|
|
90
|
+
/**
|
|
91
|
+
* Get items by channel
|
|
92
|
+
*/
|
|
93
|
+
getByChannel(channel: string, limit?: number): Promise<MemoryKeeperItem[]>;
|
|
94
|
+
/**
|
|
95
|
+
* Get recent items
|
|
96
|
+
*/
|
|
97
|
+
getRecent(limit?: number): Promise<MemoryKeeperItem[]>;
|
|
98
|
+
/**
|
|
99
|
+
* Disconnect from MCP server
|
|
100
|
+
*/
|
|
101
|
+
disconnect(): void;
|
|
102
|
+
}
|
|
103
|
+
export declare function getMemoryKeeperClient(): MemoryKeeperClient;
|
|
104
|
+
export declare function resetMemoryKeeperClient(): void;
|
|
105
|
+
export default MemoryKeeperClient;
|
|
106
|
+
//# sourceMappingURL=memory-keeper-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-keeper-client.d.ts","sourceRoot":"","sources":["../../src/services/memory-keeper-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAA;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;IACpC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,gBAAgB,EAAE,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AA4BD,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,OAAO,CAA4B;IAC3C,OAAO,CAAC,SAAS,CAAI;IACrB,OAAO,CAAC,eAAe,CAGnB;IACJ,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,WAAW,CAAQ;IAE3B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAoDjC;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,UAAU;IA4BlB;;OAEG;IACH,OAAO,CAAC,WAAW;IA6BnB;;OAEG;YACW,QAAQ;IAkBtB;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,YAAY,GAAG,YAAY,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB9F;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAUxD;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAiB3D;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,YAAY,CAAC;IAejE;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAU9C;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAe5E;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAe5E;;OAEG;IACG,SAAS,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAexD;;OAEG;IACH,UAAU,IAAI,IAAI;CAOnB;AAQD,wBAAgB,qBAAqB,IAAI,kBAAkB,CAK1D;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAK9C;AAED,eAAe,kBAAkB,CAAA"}
|