@kernel.chat/kbot 3.39.0 → 3.40.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.
@@ -0,0 +1,357 @@
1
+ // kbot Pattern Feed — Collective Memory Surface
2
+ //
3
+ // The collective memory — surfaces what worked for people like you.
4
+ // Reads local patterns + collective patterns, scores by relevance,
5
+ // and returns a feed of top insights grouped by category.
6
+ //
7
+ // Node built-ins only. No external dependencies.
8
+ import { homedir } from 'node:os';
9
+ import { join } from 'node:path';
10
+ import { existsSync, readFileSync, mkdirSync } from 'node:fs';
11
+ // ── Paths ──
12
+ const KBOT_DIR = join(homedir(), '.kbot');
13
+ const MEMORY_DIR = join(KBOT_DIR, 'memory');
14
+ const COLLECTIVE_DIR = join(KBOT_DIR, 'collective');
15
+ const PATTERNS_FILE = join(MEMORY_DIR, 'patterns.json');
16
+ const COLLECTIVE_PATTERNS_FILE = join(COLLECTIVE_DIR, 'learned-patterns.json');
17
+ // ── Helpers ──
18
+ function ensureDir(dir) {
19
+ if (!existsSync(dir))
20
+ mkdirSync(dir, { recursive: true });
21
+ }
22
+ function loadJSON(path, fallback) {
23
+ try {
24
+ if (existsSync(path)) {
25
+ return JSON.parse(readFileSync(path, 'utf-8'));
26
+ }
27
+ }
28
+ catch {
29
+ // Corrupt file — return fallback
30
+ }
31
+ return fallback;
32
+ }
33
+ // ── Language/Framework Detection ──
34
+ const LANGUAGE_MAP = {
35
+ typescript: 'TypeScript', javascript: 'JavaScript', python: 'Python',
36
+ rust: 'Rust', go: 'Go', java: 'Java', ruby: 'Ruby', php: 'PHP',
37
+ swift: 'Swift', kotlin: 'Kotlin', csharp: 'C#', cpp: 'C++',
38
+ node: 'Node.js',
39
+ };
40
+ const FRAMEWORK_MAP = {
41
+ react: 'React', nextjs: 'Next.js', vue: 'Vue', angular: 'Angular',
42
+ svelte: 'Svelte', express: 'Express', fastify: 'Fastify', django: 'Django',
43
+ flask: 'Flask', rails: 'Rails', spring: 'Spring', prisma: 'Prisma',
44
+ drizzle: 'Drizzle', tailwind: 'Tailwind', vite: 'Vite', webpack: 'Webpack',
45
+ };
46
+ function detectLanguage(keywords) {
47
+ for (const kw of keywords) {
48
+ const lang = LANGUAGE_MAP[kw.toLowerCase()];
49
+ if (lang)
50
+ return lang;
51
+ }
52
+ return null;
53
+ }
54
+ function detectFramework(keywords) {
55
+ for (const kw of keywords) {
56
+ const fw = FRAMEWORK_MAP[kw.toLowerCase()];
57
+ if (fw)
58
+ return fw;
59
+ }
60
+ return null;
61
+ }
62
+ // ── Pattern Loading ──
63
+ /** Load local patterns and normalize to FeedPattern shape */
64
+ function loadLocalPatterns() {
65
+ const raw = loadJSON(PATTERNS_FILE, []);
66
+ if (!Array.isArray(raw))
67
+ return [];
68
+ return raw.map(p => {
69
+ const keywords = Array.isArray(p.keywords) ? p.keywords : [];
70
+ const toolsUsed = Array.isArray(p.toolSequence) ? p.toolSequence : [];
71
+ return {
72
+ type: typeof p.intent === 'string' ? 'intent_match' : 'unknown',
73
+ language: detectLanguage(keywords),
74
+ framework: detectFramework(keywords),
75
+ successRate: typeof p.successRate === 'number' ? p.successRate : 0,
76
+ toolsUsed,
77
+ agentUsed: typeof p.agentUsed === 'string' ? p.agentUsed : null,
78
+ hits: typeof p.hits === 'number' ? p.hits : 1,
79
+ keywords,
80
+ confidence: typeof p.successRate === 'number' ? p.successRate : 0.5,
81
+ sampleCount: 1,
82
+ lastUpdated: typeof p.lastUsed === 'string' ? p.lastUsed : new Date().toISOString(),
83
+ source: 'local',
84
+ };
85
+ });
86
+ }
87
+ /** Load collective patterns and normalize to FeedPattern shape */
88
+ function loadCollectivePatterns() {
89
+ const raw = loadJSON(COLLECTIVE_PATTERNS_FILE, []);
90
+ if (!Array.isArray(raw))
91
+ return [];
92
+ return raw.map(p => ({
93
+ type: p.type || 'unknown',
94
+ language: p.language,
95
+ framework: p.framework,
96
+ successRate: p.successRate,
97
+ toolsUsed: Array.isArray(p.toolsUsed) ? p.toolsUsed : [],
98
+ agentUsed: p.agentUsed,
99
+ hits: typeof p.hits === 'number' ? p.hits : 1,
100
+ keywords: Array.isArray(p.keywords) ? p.keywords : [],
101
+ confidence: typeof p.confidence === 'number' ? p.confidence : 0.5,
102
+ sampleCount: typeof p.sampleCount === 'number' ? p.sampleCount : 1,
103
+ lastUpdated: p.lastUpdated || new Date().toISOString(),
104
+ source: 'collective',
105
+ }));
106
+ }
107
+ // ── Scoring ──
108
+ /** Score a pattern by: relevance to project type x confidence x frequency */
109
+ function scorePattern(pattern, projectType) {
110
+ // Base score from confidence (0-1)
111
+ let score = pattern.confidence;
112
+ // Frequency weight: more observations = more reliable
113
+ const frequencyWeight = Math.min(Math.log2(pattern.hits + 1) / 10, 0.3);
114
+ score += frequencyWeight;
115
+ // Sample count weight (collective breadth)
116
+ const sampleWeight = Math.min(Math.log2(pattern.sampleCount + 1) / 10, 0.2);
117
+ score += sampleWeight;
118
+ // Success rate weight
119
+ score *= (0.5 + pattern.successRate * 0.5);
120
+ // Relevance to project type (if specified)
121
+ if (projectType) {
122
+ const normalizedProject = projectType.toLowerCase();
123
+ const allTerms = [
124
+ ...pattern.keywords.map(k => k.toLowerCase()),
125
+ pattern.language?.toLowerCase() || '',
126
+ pattern.framework?.toLowerCase() || '',
127
+ ].filter(Boolean);
128
+ const isRelevant = allTerms.some(term => term.includes(normalizedProject) || normalizedProject.includes(term));
129
+ if (isRelevant) {
130
+ score *= 1.5; // 50% boost for project-relevant patterns
131
+ }
132
+ else {
133
+ score *= 0.5; // 50% penalty for unrelated patterns
134
+ }
135
+ }
136
+ // Recency boost: patterns updated recently are slightly more valuable
137
+ try {
138
+ const ageMs = Date.now() - new Date(pattern.lastUpdated).getTime();
139
+ const ageDays = ageMs / (1000 * 60 * 60 * 24);
140
+ if (ageDays < 7)
141
+ score *= 1.1;
142
+ else if (ageDays > 90)
143
+ score *= 0.9;
144
+ }
145
+ catch {
146
+ // Invalid date — no adjustment
147
+ }
148
+ return score;
149
+ }
150
+ // ── Categorization ──
151
+ /** Assign a pattern to its primary feed category */
152
+ function categorizePattern(pattern) {
153
+ // Forged tools: patterns with tool names that look custom (contain underscores, longer names)
154
+ const hasForgedTool = pattern.toolsUsed.some(t => t.includes('_') && t.length > 15);
155
+ if (hasForgedTool)
156
+ return 'forged_tools';
157
+ // Best agents: patterns where the agent is the key differentiator
158
+ if (pattern.agentUsed && pattern.successRate > 0.8 && pattern.hits > 3) {
159
+ return 'best_agents';
160
+ }
161
+ // Tools that worked: patterns with specific tool sequences
162
+ if (pattern.toolsUsed.length > 0) {
163
+ return 'tools_that_worked';
164
+ }
165
+ // Default: common solutions
166
+ return 'common_solutions';
167
+ }
168
+ // ── Feed Entry Formatting ──
169
+ /** Format a single pattern as a readable insight */
170
+ export function formatFeedEntry(pattern) {
171
+ const parts = [];
172
+ // Build the context: "React + TypeScript users" or "Python users"
173
+ const context = [];
174
+ if (pattern.framework)
175
+ context.push(pattern.framework);
176
+ if (pattern.language)
177
+ context.push(pattern.language);
178
+ const contextStr = context.length > 0
179
+ ? `${context.join(' + ')} users`
180
+ : 'Users';
181
+ // Build the finding
182
+ const successPct = Math.round(pattern.successRate * 100);
183
+ const observationCount = pattern.source === 'collective'
184
+ ? pattern.sampleCount
185
+ : pattern.hits;
186
+ if (pattern.agentUsed && pattern.toolsUsed.length > 0) {
187
+ parts.push(`${contextStr} found that the ${pattern.agentUsed} agent with ${pattern.toolsUsed.join('+')} tools`);
188
+ parts.push(`solves ${pattern.type === 'intent_match' ? 'matching' : pattern.type} tasks ${successPct}% of the time`);
189
+ }
190
+ else if (pattern.agentUsed) {
191
+ parts.push(`${contextStr} found that the ${pattern.agentUsed} agent`);
192
+ parts.push(`succeeds ${successPct}% of the time for ${pattern.type} tasks`);
193
+ }
194
+ else if (pattern.toolsUsed.length > 0) {
195
+ parts.push(`${contextStr} found that ${pattern.toolsUsed.join(' + ')} tools`);
196
+ parts.push(`work ${successPct}% of the time`);
197
+ }
198
+ else {
199
+ parts.push(`${contextStr} report a ${successPct}% success rate for ${pattern.type} tasks`);
200
+ }
201
+ // Add observation count
202
+ const observationLabel = pattern.source === 'collective' ? 'contributors' : 'observations';
203
+ parts.push(`(based on ${observationCount} ${observationLabel})`);
204
+ return parts.join(' ');
205
+ }
206
+ // ── Core API ──
207
+ /**
208
+ * Run the pattern feed. Reads local + collective patterns, scores them,
209
+ * groups by category, and returns the top 20 insights.
210
+ *
211
+ * @param options.projectType - Optional project type filter (react, python, etc.)
212
+ * @returns Feed result with entries, total patterns scanned, and project type
213
+ */
214
+ export function runPatternFeed(options) {
215
+ const projectType = options?.projectType ?? null;
216
+ // 1. Load all patterns
217
+ const localPatterns = loadLocalPatterns();
218
+ const collectivePatterns = loadCollectivePatterns();
219
+ const allPatterns = [...localPatterns, ...collectivePatterns];
220
+ if (allPatterns.length === 0) {
221
+ return {
222
+ entries: [],
223
+ total_patterns_scanned: 0,
224
+ project_type: projectType,
225
+ };
226
+ }
227
+ // 2. Score each pattern
228
+ const scored = allPatterns.map(pattern => ({
229
+ pattern,
230
+ score: scorePattern(pattern, projectType),
231
+ category: categorizePattern(pattern),
232
+ }));
233
+ // 3. Sort by score descending
234
+ scored.sort((a, b) => b.score - a.score);
235
+ // 4. Group by category, take top entries from each to ensure diversity
236
+ const categoryBuckets = new Map();
237
+ for (const entry of scored) {
238
+ const bucket = categoryBuckets.get(entry.category) || [];
239
+ bucket.push(entry);
240
+ categoryBuckets.set(entry.category, bucket);
241
+ }
242
+ // Take top entries from each category proportionally, up to 20 total
243
+ const maxEntries = 20;
244
+ const categories = ['tools_that_worked', 'best_agents', 'common_solutions', 'forged_tools'];
245
+ const feedEntries = [];
246
+ // First pass: at least 3 from each non-empty category
247
+ for (const cat of categories) {
248
+ const bucket = categoryBuckets.get(cat) || [];
249
+ const take = Math.min(bucket.length, 3);
250
+ for (let i = 0; i < take; i++) {
251
+ const item = bucket[i];
252
+ feedEntries.push({
253
+ insight: formatFeedEntry(item.pattern),
254
+ category: item.category,
255
+ score: item.score,
256
+ pattern: item.pattern,
257
+ });
258
+ }
259
+ }
260
+ // Second pass: fill remaining slots from overall top scored
261
+ if (feedEntries.length < maxEntries) {
262
+ const usedPatterns = new Set(feedEntries.map(e => patternFingerprint(e.pattern)));
263
+ for (const item of scored) {
264
+ if (feedEntries.length >= maxEntries)
265
+ break;
266
+ const fp = patternFingerprint(item.pattern);
267
+ if (usedPatterns.has(fp))
268
+ continue;
269
+ usedPatterns.add(fp);
270
+ feedEntries.push({
271
+ insight: formatFeedEntry(item.pattern),
272
+ category: item.category,
273
+ score: item.score,
274
+ pattern: item.pattern,
275
+ });
276
+ }
277
+ }
278
+ // Sort final feed by score
279
+ feedEntries.sort((a, b) => b.score - a.score);
280
+ return {
281
+ entries: feedEntries.slice(0, maxEntries),
282
+ total_patterns_scanned: allPatterns.length,
283
+ project_type: projectType,
284
+ };
285
+ }
286
+ /**
287
+ * Get a feed filtered for a specific project type.
288
+ * Returns patterns that other users of the same stack found useful.
289
+ */
290
+ export function getFeedForProject(projectType) {
291
+ return runPatternFeed({ projectType });
292
+ }
293
+ /**
294
+ * Full-text search across all patterns.
295
+ * Returns matching insights with confidence scores.
296
+ */
297
+ export function searchFeed(query) {
298
+ if (!query || typeof query !== 'string')
299
+ return [];
300
+ const queryTerms = query.toLowerCase()
301
+ .replace(/[^a-z0-9\s]/g, ' ')
302
+ .split(/\s+/)
303
+ .filter(w => w.length > 1);
304
+ if (queryTerms.length === 0)
305
+ return [];
306
+ // Load all patterns
307
+ const localPatterns = loadLocalPatterns();
308
+ const collectivePatterns = loadCollectivePatterns();
309
+ const allPatterns = [...localPatterns, ...collectivePatterns];
310
+ // Score each pattern by query match
311
+ const results = [];
312
+ for (const pattern of allPatterns) {
313
+ const searchableTerms = [
314
+ ...pattern.keywords.map(k => k.toLowerCase()),
315
+ pattern.language?.toLowerCase() || '',
316
+ pattern.framework?.toLowerCase() || '',
317
+ pattern.type?.toLowerCase() || '',
318
+ pattern.agentUsed?.toLowerCase() || '',
319
+ ...pattern.toolsUsed.map(t => t.toLowerCase()),
320
+ ].filter(Boolean);
321
+ let matchScore = 0;
322
+ for (const qt of queryTerms) {
323
+ for (const term of searchableTerms) {
324
+ if (term.includes(qt) || qt.includes(term)) {
325
+ matchScore++;
326
+ }
327
+ }
328
+ }
329
+ if (matchScore > 0) {
330
+ // Combine text match score with pattern confidence
331
+ const combinedScore = matchScore * 0.5 + pattern.confidence * 0.5;
332
+ results.push({
333
+ insight: formatFeedEntry(pattern),
334
+ category: categorizePattern(pattern),
335
+ score: combinedScore,
336
+ pattern,
337
+ });
338
+ }
339
+ }
340
+ // Sort by combined score descending
341
+ results.sort((a, b) => b.score - a.score);
342
+ return results.slice(0, 20);
343
+ }
344
+ // ── Internal Helpers ──
345
+ /** Generate a fingerprint for dedup within a feed */
346
+ function patternFingerprint(p) {
347
+ const parts = [
348
+ p.type,
349
+ p.language || '',
350
+ p.framework || '',
351
+ p.source,
352
+ ...(p.toolsUsed || []).sort(),
353
+ ...(p.keywords || []).sort(),
354
+ ];
355
+ return parts.join(':').toLowerCase();
356
+ }
357
+ //# sourceMappingURL=pattern-feed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern-feed.js","sourceRoot":"","sources":["../src/pattern-feed.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,EAAE;AACF,oEAAoE;AACpE,mEAAmE;AACnE,0DAA0D;AAC1D,EAAE;AACF,iDAAiD;AAEjD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAW,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAiB,MAAM,SAAS,CAAA;AAE5E,cAAc;AAEd,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAA;AACzC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;AAC3C,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;AACnD,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAA;AACvD,MAAM,wBAAwB,GAAG,IAAI,CAAC,cAAc,EAAE,uBAAuB,CAAC,CAAA;AAsD9E,gBAAgB;AAEhB,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AAC3D,CAAC;AAED,SAAS,QAAQ,CAAI,IAAY,EAAE,QAAW;IAC5C,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAA;QAChD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AA8BD,qCAAqC;AAErC,MAAM,YAAY,GAA2B;IAC3C,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ;IACpE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK;IAC9D,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK;IAC1D,IAAI,EAAE,SAAS;CAChB,CAAA;AAED,MAAM,aAAa,GAA2B;IAC5C,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS;IACjE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ;IAC1E,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ;IAClE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS;CAC3E,CAAA;AAED,SAAS,cAAc,CAAC,QAAkB;IACxC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,YAAY,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;QAC3C,IAAI,IAAI;YAAE,OAAO,IAAI,CAAA;IACvB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,eAAe,CAAC,QAAkB;IACzC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAA;QAC1C,IAAI,EAAE;YAAE,OAAO,EAAE,CAAA;IACnB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,wBAAwB;AAExB,6DAA6D;AAC7D,SAAS,iBAAiB;IACxB,MAAM,GAAG,GAAG,QAAQ,CAAoB,aAAa,EAAE,EAAE,CAAC,CAAA;IAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAA;IAElC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACjB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAA;QAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAA;QACrE,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;YAC/D,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;YAClC,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC;YACpC,WAAW,EAAE,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAClE,SAAS;YACT,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI;YAC/D,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7C,QAAQ;YACR,UAAU,EAAE,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG;YACnE,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnF,MAAM,EAAE,OAAgB;SACzB,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,kEAAkE;AAClE,SAAS,sBAAsB;IAC7B,MAAM,GAAG,GAAG,QAAQ,CAAyB,wBAAwB,EAAE,EAAE,CAAC,CAAA;IAC1E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,CAAA;IAElC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnB,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS;QACzB,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,WAAW,EAAE,CAAC,CAAC,WAAW;QAC1B,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE;QACxD,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;QACrD,UAAU,EAAE,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG;QACjE,WAAW,EAAE,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAClE,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACtD,MAAM,EAAE,YAAqB;KAC9B,CAAC,CAAC,CAAA;AACL,CAAC;AAED,gBAAgB;AAEhB,6EAA6E;AAC7E,SAAS,YAAY,CAAC,OAAoB,EAAE,WAA0B;IACpE,mCAAmC;IACnC,IAAI,KAAK,GAAG,OAAO,CAAC,UAAU,CAAA;IAE9B,sDAAsD;IACtD,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;IACvE,KAAK,IAAI,eAAe,CAAA;IAExB,2CAA2C;IAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,CAAA;IAC3E,KAAK,IAAI,YAAY,CAAA;IAErB,sBAAsB;IACtB,KAAK,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,CAAA;IAE1C,2CAA2C;IAC3C,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,iBAAiB,GAAG,WAAW,CAAC,WAAW,EAAE,CAAA;QACnD,MAAM,QAAQ,GAAG;YACf,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7C,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE;YACrC,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE;SACvC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAEjB,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAC9B,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAC7E,CAAA;QACD,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,IAAI,GAAG,CAAA,CAAC,0CAA0C;QACzD,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,GAAG,CAAA,CAAC,qCAAqC;QACpD,CAAC;IACH,CAAC;IAED,sEAAsE;IACtE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAA;QAClE,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;QAC7C,IAAI,OAAO,GAAG,CAAC;YAAE,KAAK,IAAI,GAAG,CAAA;aACxB,IAAI,OAAO,GAAG,EAAE;YAAE,KAAK,IAAI,GAAG,CAAA;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,+BAA+B;IACjC,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,uBAAuB;AAEvB,oDAAoD;AACpD,SAAS,iBAAiB,CAAC,OAAoB;IAC7C,8FAA8F;IAC9F,MAAM,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAC1C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE,CACtC,CAAA;IACD,IAAI,aAAa;QAAE,OAAO,cAAc,CAAA;IAExC,kEAAkE;IAClE,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,WAAW,GAAG,GAAG,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACvE,OAAO,aAAa,CAAA;IACtB,CAAC;IAED,2DAA2D;IAC3D,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,mBAAmB,CAAA;IAC5B,CAAC;IAED,4BAA4B;IAC5B,OAAO,kBAAkB,CAAA;AAC3B,CAAC;AAED,8BAA8B;AAE9B,oDAAoD;AACpD,MAAM,UAAU,eAAe,CAAC,OAAoB;IAClD,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,kEAAkE;IAClE,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,IAAI,OAAO,CAAC,SAAS;QAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACtD,IAAI,OAAO,CAAC,QAAQ;QAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACpD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC;QACnC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ;QAChC,CAAC,CAAC,OAAO,CAAA;IAEX,oBAAoB;IACpB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,CAAA;IACxD,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,KAAK,YAAY;QACtD,CAAC,CAAC,OAAO,CAAC,WAAW;QACrB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAA;IAEhB,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,KAAK,CAAC,IAAI,CACR,GAAG,UAAU,mBAAmB,OAAO,CAAC,SAAS,eAAe,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CACpG,CAAA;QACD,KAAK,CAAC,IAAI,CACR,UAAU,OAAO,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,UAAU,UAAU,eAAe,CACzG,CAAA;IACH,CAAC;SAAM,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CACR,GAAG,UAAU,mBAAmB,OAAO,CAAC,SAAS,QAAQ,CAC1D,CAAA;QACD,KAAK,CAAC,IAAI,CACR,YAAY,UAAU,qBAAqB,OAAO,CAAC,IAAI,QAAQ,CAChE,CAAA;IACH,CAAC;SAAM,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CACR,GAAG,UAAU,eAAe,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAClE,CAAA;QACD,KAAK,CAAC,IAAI,CACR,QAAQ,UAAU,eAAe,CAClC,CAAA;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CACR,GAAG,UAAU,aAAa,UAAU,sBAAsB,OAAO,CAAC,IAAI,QAAQ,CAC/E,CAAA;IACH,CAAC;IAED,wBAAwB;IACxB,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,KAAK,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,cAAc,CAAA;IAC1F,KAAK,CAAC,IAAI,CAAC,aAAa,gBAAgB,IAAI,gBAAgB,GAAG,CAAC,CAAA;IAEhE,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACxB,CAAC;AAED,iBAAiB;AAEjB;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,OAAkC;IAC/D,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,IAAI,CAAA;IAEhD,uBAAuB;IACvB,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAA;IACzC,MAAM,kBAAkB,GAAG,sBAAsB,EAAE,CAAA;IACnD,MAAM,WAAW,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,kBAAkB,CAAC,CAAA;IAE7D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO;YACL,OAAO,EAAE,EAAE;YACX,sBAAsB,EAAE,CAAC;YACzB,YAAY,EAAE,WAAW;SAC1B,CAAA;IACH,CAAC;IAED,wBAAwB;IACxB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACzC,OAAO;QACP,KAAK,EAAE,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC;QACzC,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAC;KACrC,CAAC,CAAC,CAAA;IAEH,8BAA8B;IAC9B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;IAExC,uEAAuE;IACvE,MAAM,eAAe,GAAG,IAAI,GAAG,EAA+B,CAAA;IAC9D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;QACxD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAClB,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC7C,CAAC;IAED,qEAAqE;IACrE,MAAM,UAAU,GAAG,EAAE,CAAA;IACrB,MAAM,UAAU,GAAmB,CAAC,mBAAmB,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,CAAC,CAAA;IAC3G,MAAM,WAAW,GAAgB,EAAE,CAAA;IAEnC,sDAAsD;IACtD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAA;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YACtB,WAAW,CAAC,IAAI,CAAC;gBACf,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;gBACtC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,4DAA4D;IAC5D,IAAI,WAAW,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QACpC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;QACjF,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,WAAW,CAAC,MAAM,IAAI,UAAU;gBAAE,MAAK;YAC3C,MAAM,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC3C,IAAI,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,SAAQ;YAClC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACpB,WAAW,CAAC,IAAI,CAAC;gBACf,OAAO,EAAE,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC;gBACtC,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;IAE7C,OAAO;QACL,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC;QACzC,sBAAsB,EAAE,WAAW,CAAC,MAAM;QAC1C,YAAY,EAAE,WAAW;KAC1B,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,OAAO,cAAc,CAAC,EAAE,WAAW,EAAE,CAAC,CAAA;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAA;IAElD,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE;SACnC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAE5B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAEtC,oBAAoB;IACpB,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAA;IACzC,MAAM,kBAAkB,GAAG,sBAAsB,EAAE,CAAA;IACnD,MAAM,WAAW,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,kBAAkB,CAAC,CAAA;IAE7D,oCAAoC;IACpC,MAAM,OAAO,GAAgB,EAAE,CAAA;IAE/B,KAAK,MAAM,OAAO,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,eAAe,GAAG;YACtB,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7C,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE;YACrC,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE;YACtC,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE;YACjC,OAAO,CAAC,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE;YACtC,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC/C,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAEjB,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;gBACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3C,UAAU,EAAE,CAAA;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,mDAAmD;YACnD,MAAM,aAAa,GAAG,UAAU,GAAG,GAAG,GAAG,OAAO,CAAC,UAAU,GAAG,GAAG,CAAA;YAEjE,OAAO,CAAC,IAAI,CAAC;gBACX,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC;gBACjC,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAC;gBACpC,KAAK,EAAE,aAAa;gBACpB,OAAO;aACR,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;IAEzC,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AAC7B,CAAC;AAED,yBAAyB;AAEzB,qDAAqD;AACrD,SAAS,kBAAkB,CAAC,CAAc;IACxC,MAAM,KAAK,GAAG;QACZ,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,QAAQ,IAAI,EAAE;QAChB,CAAC,CAAC,SAAS,IAAI,EAAE;QACjB,CAAC,CAAC,MAAM;QACR,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;QAC7B,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;KAC7B,CAAA;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;AACtC,CAAC"}
@@ -0,0 +1,123 @@
1
+ export interface UserProfile {
2
+ id: string;
3
+ interests: string[];
4
+ goals: string[];
5
+ projectTypes: string[];
6
+ tools_used: string[];
7
+ agents_used: string[];
8
+ }
9
+ export interface SimilarUser {
10
+ userId: string;
11
+ similarityScore: number;
12
+ sharedInterests: string[];
13
+ sharedGoals: string[];
14
+ sharedProjectTypes: string[];
15
+ }
16
+ export interface CollaborationSuggestion {
17
+ matchUserId: string;
18
+ similarityScore: number;
19
+ sharedInterests: string[];
20
+ sharedProjectTypes: string[];
21
+ suggestion: string;
22
+ optedIn: boolean;
23
+ }
24
+ export interface NetworkInsights {
25
+ mostCommonProjectTypes: Array<{
26
+ type: string;
27
+ count: number;
28
+ }>;
29
+ mostPopularTools: Array<{
30
+ tool: string;
31
+ count: number;
32
+ }>;
33
+ trendingInterests: Array<{
34
+ interest: string;
35
+ count: number;
36
+ }>;
37
+ totalUsers: number;
38
+ }
39
+ export interface MatchNotification {
40
+ id: string;
41
+ matchUserId: string;
42
+ similarityScore: number;
43
+ sharedInterests: string[];
44
+ sharedProjectTypes: string[];
45
+ suggestion: string;
46
+ created: string;
47
+ read: boolean;
48
+ }
49
+ export interface GraphStats {
50
+ total_users: number;
51
+ total_connections: number;
52
+ top_interests: string[];
53
+ top_project_types: string[];
54
+ most_collaborative_tools: string[];
55
+ }
56
+ export declare class UserGraph {
57
+ private nodes;
58
+ private connections;
59
+ private notifications;
60
+ constructor();
61
+ private load;
62
+ private saveNodes;
63
+ private saveConnections;
64
+ private saveNotifications;
65
+ /**
66
+ * Add or update a user in the graph.
67
+ * All data is anonymized — no emails, names, or PII.
68
+ * Just what they work on.
69
+ */
70
+ addUser(profile: UserProfile): void;
71
+ /**
72
+ * Find users with overlapping interests/goals/project types.
73
+ * Returns top 5 matches with similarity score (Jaccard index on interest sets).
74
+ * Does NOT return identifiable info — just the match score and shared interests.
75
+ */
76
+ findSimilarUsers(userId: string): SimilarUser[];
77
+ /**
78
+ * Based on findSimilarUsers, generates a collaboration suggestion.
79
+ * Human-readable description of the match without exposing identity.
80
+ */
81
+ suggestCollaboration(userId: string): CollaborationSuggestion | null;
82
+ /**
83
+ * Returns aggregate stats across the user graph.
84
+ * No individual data exposed — only counts and rankings.
85
+ */
86
+ getNetworkInsights(): NetworkInsights;
87
+ /**
88
+ * User explicitly opts in to be contactable.
89
+ * Contact method is encrypted at rest (AES-256-CBC).
90
+ * Only revealed to matches who also opted in.
91
+ */
92
+ optInToConnect(userId: string, contactMethod: string): void;
93
+ /**
94
+ * Returns pending match notifications for a user who opted in.
95
+ * Only includes matches where BOTH users have opted in.
96
+ */
97
+ getMatchNotifications(userId: string): MatchNotification[];
98
+ /**
99
+ * Returns aggregate graph statistics.
100
+ */
101
+ getGraphStats(): GraphStats;
102
+ /**
103
+ * Remove a user from the graph entirely.
104
+ * Deletes their node, connection (contact info), and any notifications.
105
+ */
106
+ removeUser(userId: string): void;
107
+ /**
108
+ * Mark a notification as read.
109
+ */
110
+ markNotificationRead(notificationId: string): void;
111
+ /**
112
+ * Get the decrypted contact method for a mutual match.
113
+ * Only works when BOTH users have opted in.
114
+ * Returns null if either user hasn't opted in.
115
+ */
116
+ getContactForMutualMatch(requestingUserId: string, matchUserId: string): string | null;
117
+ /**
118
+ * Generate match notifications for opted-in users who are similar to the given user.
119
+ * Only creates notifications when BOTH users have opted in.
120
+ */
121
+ private generateMatchNotifications;
122
+ }
123
+ //# sourceMappingURL=user-graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-graph.d.ts","sourceRoot":"","sources":["../src/user-graph.ts"],"names":[],"mappings":"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"}