@kernel.chat/kbot 3.39.0 → 3.41.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":"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"}
@@ -0,0 +1,142 @@
1
+ export type Severity = 'critical' | 'high' | 'medium' | 'low';
2
+ export interface SecurityFinding {
3
+ category: string;
4
+ title: string;
5
+ severity: Severity;
6
+ description: string;
7
+ remediation: string;
8
+ location?: string;
9
+ }
10
+ export interface SecurityReport {
11
+ timestamp: string;
12
+ score: number;
13
+ findings: SecurityFinding[];
14
+ criticalCount: number;
15
+ highCount: number;
16
+ mediumCount: number;
17
+ lowCount: number;
18
+ goodPractices: string[];
19
+ summary: string;
20
+ }
21
+ export interface BreachResult {
22
+ email: string;
23
+ breached: boolean;
24
+ breachCount: number;
25
+ breaches: Array<{
26
+ name: string;
27
+ domain: string;
28
+ breachDate: string;
29
+ dataClasses: string[];
30
+ }>;
31
+ }
32
+ export interface MonitorEvent {
33
+ timestamp: string;
34
+ path: string;
35
+ eventType: string;
36
+ filename: string | null;
37
+ }
38
+ export interface ScanHistoryEntry {
39
+ timestamp: string;
40
+ score: number;
41
+ criticalCount: number;
42
+ highCount: number;
43
+ mediumCount: number;
44
+ lowCount: number;
45
+ totalFindings: number;
46
+ }
47
+ export interface SecretFinding {
48
+ file: string;
49
+ line: number;
50
+ type: string;
51
+ preview: string;
52
+ }
53
+ /**
54
+ * Recursively scan a directory for leaked secrets (API keys, tokens, passwords).
55
+ * NEVER reads or displays actual secret values.
56
+ */
57
+ export declare function scanForSecrets(scanPath?: string): SecretFinding[];
58
+ export interface SSHAudit {
59
+ findings: SecurityFinding[];
60
+ keysFound: Array<{
61
+ name: string;
62
+ type: string;
63
+ hasPassphrase: boolean | null;
64
+ }>;
65
+ authorizedKeysCount: number;
66
+ configIssues: string[];
67
+ }
68
+ /**
69
+ * Audit SSH configuration and keys.
70
+ * Checks for password-protected keys, authorized_keys cleanliness, and config issues.
71
+ */
72
+ export declare function checkSSHSecurity(): SSHAudit;
73
+ export interface PortResult {
74
+ port: number;
75
+ service: string;
76
+ open: boolean;
77
+ }
78
+ /**
79
+ * Scan common ports on localhost to check for exposed services.
80
+ * Uses TCP connect probes via the net module.
81
+ */
82
+ export declare function checkPortExposure(): Promise<{
83
+ ports: PortResult[];
84
+ findings: SecurityFinding[];
85
+ }>;
86
+ export interface PermissionCheck {
87
+ path: string;
88
+ exists: boolean;
89
+ mode: string | null;
90
+ isWorldReadable: boolean;
91
+ isWorldWritable: boolean;
92
+ finding: SecurityFinding | null;
93
+ }
94
+ /**
95
+ * Verify that sensitive files and directories are not world-readable or world-writable.
96
+ */
97
+ export declare function checkFilePermissions(paths?: string[]): PermissionCheck[];
98
+ export interface ScanOptions {
99
+ /** Directory to scan for secrets (default: cwd) */
100
+ secretsScanPath?: string;
101
+ /** Skip port scanning */
102
+ skipPorts?: boolean;
103
+ /** Skip npm global check */
104
+ skipNpm?: boolean;
105
+ /** Skip browser data check */
106
+ skipBrowser?: boolean;
107
+ }
108
+ /**
109
+ * Full personal security audit.
110
+ * Checks: secrets, SSH, permissions, ports, firewall, git, browser, npm globals.
111
+ */
112
+ export declare function runSecurityScan(options?: ScanOptions): Promise<SecurityReport>;
113
+ /**
114
+ * Watch sensitive directories for unexpected changes.
115
+ * Logs all change events to ~/.kbot/security/monitor-log.jsonl.
116
+ * Returns a dispose function to stop watching.
117
+ */
118
+ export declare function monitorFileChanges(paths?: string[]): {
119
+ dispose: () => void;
120
+ };
121
+ /**
122
+ * Check if email addresses appear in known data breaches using the Have I Been Pwned API.
123
+ * Uses the free, public, unauthenticated breach search endpoint.
124
+ */
125
+ export declare function checkBreachedEmails(emails: string[]): Promise<BreachResult[]>;
126
+ /**
127
+ * Run a full scan and format it into a human-readable report.
128
+ */
129
+ export declare function generateSecurityReport(options?: ScanOptions): Promise<string>;
130
+ /**
131
+ * Set up recurring security scans.
132
+ * Results saved to ~/.kbot/security/scan-history.json.
133
+ * Sends Discord webhook alert if critical findings detected.
134
+ */
135
+ export declare function scheduleSecurityScan(intervalHours: number, discordWebhookUrl?: string): {
136
+ stop: () => void;
137
+ };
138
+ /**
139
+ * Get the scan history for trend analysis.
140
+ */
141
+ export declare function getScanHistory(limit?: number): ScanHistoryEntry[];
142
+ //# sourceMappingURL=personal-security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personal-security.d.ts","sourceRoot":"","sources":["../src/personal-security.ts"],"names":[],"mappings":"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"}