@kernel.chat/kbot 3.35.1 → 3.37.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 (40) hide show
  1. package/dist/codebase-guardian.d.ts +64 -0
  2. package/dist/codebase-guardian.d.ts.map +1 -0
  3. package/dist/codebase-guardian.js +486 -0
  4. package/dist/codebase-guardian.js.map +1 -0
  5. package/dist/collective-learning.d.ts +47 -0
  6. package/dist/collective-learning.d.ts.map +1 -0
  7. package/dist/collective-learning.js +315 -0
  8. package/dist/collective-learning.js.map +1 -0
  9. package/dist/community-manager.d.ts +60 -0
  10. package/dist/community-manager.d.ts.map +1 -0
  11. package/dist/community-manager.js +400 -0
  12. package/dist/community-manager.js.map +1 -0
  13. package/dist/dream-mode.d.ts +23 -0
  14. package/dist/dream-mode.d.ts.map +1 -0
  15. package/dist/dream-mode.js +352 -0
  16. package/dist/dream-mode.js.map +1 -0
  17. package/dist/forge-marketplace.d.ts +40 -0
  18. package/dist/forge-marketplace.d.ts.map +1 -0
  19. package/dist/forge-marketplace.js +222 -0
  20. package/dist/forge-marketplace.js.map +1 -0
  21. package/dist/kbot-service.d.ts +2 -0
  22. package/dist/kbot-service.d.ts.map +1 -0
  23. package/dist/kbot-service.js +197 -0
  24. package/dist/kbot-service.js.map +1 -0
  25. package/dist/meta-agent.d.ts +62 -0
  26. package/dist/meta-agent.d.ts.map +1 -0
  27. package/dist/meta-agent.js +288 -0
  28. package/dist/meta-agent.js.map +1 -0
  29. package/dist/tools/bootstrapper.d.ts +2 -0
  30. package/dist/tools/bootstrapper.d.ts.map +1 -0
  31. package/dist/tools/bootstrapper.js +559 -0
  32. package/dist/tools/bootstrapper.js.map +1 -0
  33. package/dist/tools/content-engine.d.ts +2 -0
  34. package/dist/tools/content-engine.d.ts.map +1 -0
  35. package/dist/tools/content-engine.js +362 -0
  36. package/dist/tools/content-engine.js.map +1 -0
  37. package/dist/tools/index.d.ts.map +1 -1
  38. package/dist/tools/index.js +2 -0
  39. package/dist/tools/index.js.map +1 -1
  40. package/package.json +1 -1
@@ -0,0 +1,315 @@
1
+ // kbot Collective Learning — Anonymized Pattern Sharing
2
+ //
3
+ // The core thesis: user #1000 is smarter than user #1.
4
+ // Every kbot contributes anonymized patterns. Every kbot benefits from all.
5
+ //
6
+ // What gets shared (anonymized):
7
+ // - Pattern type, language, framework, success rate, tool used, agent used
8
+ //
9
+ // What NEVER gets shared:
10
+ // - File paths, usernames, project names, source code, API keys
11
+ // - Conversation content, personal identifiers
12
+ //
13
+ // Privacy: device fingerprint is a one-way SHA-256 hash — not reversible.
14
+ import { homedir } from 'node:os';
15
+ import { join } from 'node:path';
16
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
17
+ import { createHash } from 'node:crypto';
18
+ const KBOT_DIR = join(homedir(), '.kbot');
19
+ const MEMORY_DIR = join(KBOT_DIR, 'memory');
20
+ const COLLECTIVE_DIR = join(KBOT_DIR, 'collective');
21
+ const PATTERNS_FILE = join(MEMORY_DIR, 'patterns.json');
22
+ const COLLECTIVE_PATTERNS_FILE = join(COLLECTIVE_DIR, 'learned-patterns.json');
23
+ const SYNC_STATE_FILE = join(COLLECTIVE_DIR, 'learning-sync.json');
24
+ const COLLECTIVE_URL = process.env.KBOT_COLLECTIVE_URL || 'https://kernel.chat/api/collective';
25
+ // ── Helpers ──
26
+ function ensureDir(dir) {
27
+ if (!existsSync(dir))
28
+ mkdirSync(dir, { recursive: true });
29
+ }
30
+ function loadJSON(path, fallback) {
31
+ try {
32
+ if (existsSync(path)) {
33
+ return JSON.parse(readFileSync(path, 'utf-8'));
34
+ }
35
+ }
36
+ catch {
37
+ // Corrupt file — return fallback
38
+ }
39
+ return fallback;
40
+ }
41
+ function saveJSON(path, data) {
42
+ const dir = join(path, '..');
43
+ ensureDir(dir);
44
+ writeFileSync(path, JSON.stringify(data, null, 2));
45
+ }
46
+ function loadSyncState() {
47
+ return loadJSON(SYNC_STATE_FILE, {
48
+ lastContribute: null,
49
+ lastFetch: null,
50
+ totalContributed: 0,
51
+ totalGained: 0,
52
+ });
53
+ }
54
+ function saveSyncState(state) {
55
+ ensureDir(COLLECTIVE_DIR);
56
+ writeFileSync(SYNC_STATE_FILE, JSON.stringify(state, null, 2));
57
+ }
58
+ // ── PII Stripping ──
59
+ /** Patterns that look like file paths, usernames, or project-specific identifiers */
60
+ const PII_PATTERNS = [
61
+ /\/[Uu]sers\/[^/\s]+/g, // /Users/username
62
+ /\/home\/[^/\s]+/g, // /home/username
63
+ /[Cc]:\\[Uu]sers\\[^\\s]+/g, // C:\Users\username (Windows)
64
+ /~\/[^\s]+/g, // ~/path/to/something
65
+ /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g, // emails
66
+ /\b[A-Z][a-z]+(?:[A-Z][a-z]+){1,}\b/g, // CamelCase project names (heuristic)
67
+ ];
68
+ /** Strip PII from a string — removes paths, usernames, project names */
69
+ function stripPII(text) {
70
+ let cleaned = text;
71
+ for (const pattern of PII_PATTERNS) {
72
+ cleaned = cleaned.replace(pattern, '[REDACTED]');
73
+ }
74
+ return cleaned;
75
+ }
76
+ /** Strip PII from keywords — only keep generic tech terms */
77
+ const SAFE_KEYWORDS = new Set([
78
+ 'react', 'typescript', 'node', 'python', 'rust', 'go', 'docker',
79
+ 'api', 'database', 'test', 'deploy', 'build', 'fix', 'bug', 'error',
80
+ 'component', 'function', 'class', 'import', 'export', 'async', 'await',
81
+ 'fetch', 'route', 'auth', 'css', 'html', 'json', 'sql', 'git', 'npm',
82
+ 'install', 'config', 'server', 'client', 'hook', 'state', 'redux',
83
+ 'zustand', 'supabase', 'stripe', 'vite', 'webpack', 'nextjs', 'express',
84
+ 'fastify', 'django', 'flask', 'rails', 'spring', 'vue', 'angular',
85
+ 'svelte', 'tailwind', 'prisma', 'drizzle', 'postgres', 'mysql', 'redis',
86
+ 'mongodb', 'graphql', 'rest', 'websocket', 'grpc', 'terraform', 'kubernetes',
87
+ 'aws', 'gcp', 'azure', 'vercel', 'netlify', 'cloudflare', 'deno', 'bun',
88
+ ]);
89
+ function sanitizeKeywords(keywords) {
90
+ return keywords
91
+ .map(k => k.toLowerCase().trim())
92
+ .filter(k => SAFE_KEYWORDS.has(k));
93
+ }
94
+ /** Only keep tool names — no args or paths */
95
+ function sanitizeToolNames(tools) {
96
+ return tools
97
+ .map(t => t.replace(/[^a-z0-9_-]/gi, '').slice(0, 50))
98
+ .filter(Boolean);
99
+ }
100
+ // ── Device Fingerprint ──
101
+ /** Generate a non-identifiable device fingerprint for dedup.
102
+ * Hashes hostname + homedir path + platform — not reversible. */
103
+ function getDeviceFingerprint() {
104
+ const os = require('node:os');
105
+ const raw = `${os.hostname()}:${os.homedir()}:${os.platform()}:${os.arch()}`;
106
+ return createHash('sha256').update(raw).digest('hex').slice(0, 16);
107
+ }
108
+ // ── Detect Language & Framework from Keywords ──
109
+ const LANGUAGE_MAP = {
110
+ typescript: 'TypeScript', javascript: 'JavaScript', python: 'Python',
111
+ rust: 'Rust', go: 'Go', java: 'Java', ruby: 'Ruby', php: 'PHP',
112
+ swift: 'Swift', kotlin: 'Kotlin', csharp: 'C#', cpp: 'C++',
113
+ };
114
+ const FRAMEWORK_MAP = {
115
+ react: 'React', nextjs: 'Next.js', vue: 'Vue', angular: 'Angular',
116
+ svelte: 'Svelte', express: 'Express', fastify: 'Fastify', django: 'Django',
117
+ flask: 'Flask', rails: 'Rails', spring: 'Spring', prisma: 'Prisma',
118
+ drizzle: 'Drizzle', tailwind: 'Tailwind', vite: 'Vite', webpack: 'Webpack',
119
+ };
120
+ function detectLanguage(keywords) {
121
+ for (const kw of keywords) {
122
+ const lang = LANGUAGE_MAP[kw.toLowerCase()];
123
+ if (lang)
124
+ return lang;
125
+ }
126
+ return null;
127
+ }
128
+ function detectFramework(keywords) {
129
+ for (const kw of keywords) {
130
+ const fw = FRAMEWORK_MAP[kw.toLowerCase()];
131
+ if (fw)
132
+ return fw;
133
+ }
134
+ return null;
135
+ }
136
+ // ── Core API ──
137
+ /** Read ~/.kbot/memory/patterns.json, strip PII, keep only safe fields.
138
+ * Returns an anonymized array suitable for sharing. */
139
+ export function collectAnonymizedPatterns() {
140
+ ensureDir(MEMORY_DIR);
141
+ const raw = loadJSON(PATTERNS_FILE, []);
142
+ if (!Array.isArray(raw) || raw.length === 0)
143
+ return [];
144
+ return raw.map(p => {
145
+ const keywords = Array.isArray(p.keywords) ? sanitizeKeywords(p.keywords) : [];
146
+ const toolSequence = Array.isArray(p.toolSequence) ? sanitizeToolNames(p.toolSequence) : [];
147
+ const intent = typeof p.intent === 'string' ? stripPII(p.intent) : '';
148
+ return {
149
+ type: intent ? 'intent_match' : 'unknown',
150
+ language: detectLanguage(keywords),
151
+ framework: detectFramework(keywords),
152
+ successRate: typeof p.successRate === 'number' ? Math.round(p.successRate * 100) / 100 : 0,
153
+ toolsUsed: toolSequence,
154
+ agentUsed: typeof p.agentUsed === 'string' ? p.agentUsed : null,
155
+ hits: typeof p.hits === 'number' ? p.hits : 1,
156
+ keywords,
157
+ };
158
+ }).filter(p => p.keywords.length > 0 || p.toolsUsed.length > 0);
159
+ }
160
+ /** POST anonymized patterns to the collective endpoint.
161
+ * Includes a device fingerprint hash for dedup (not identifiable).
162
+ * Returns count of patterns contributed. */
163
+ export async function contributePatterns() {
164
+ const patterns = collectAnonymizedPatterns();
165
+ if (patterns.length === 0)
166
+ return 0;
167
+ const fingerprint = getDeviceFingerprint();
168
+ try {
169
+ const res = await fetch(`${COLLECTIVE_URL}/contribute`, {
170
+ method: 'POST',
171
+ headers: { 'Content-Type': 'application/json' },
172
+ body: JSON.stringify({
173
+ device_fingerprint: fingerprint,
174
+ patterns,
175
+ version: '1.0.0',
176
+ timestamp: new Date().toISOString(),
177
+ }),
178
+ signal: AbortSignal.timeout(10_000),
179
+ });
180
+ if (!res.ok) {
181
+ if (process.env.KBOT_DEBUG) {
182
+ console.error(`[collective-learning] contribute failed: ${res.status}`);
183
+ }
184
+ return 0;
185
+ }
186
+ const data = await res.json();
187
+ return data.accepted ?? patterns.length;
188
+ }
189
+ catch (err) {
190
+ if (process.env.KBOT_DEBUG) {
191
+ console.error('[collective-learning] contribute error:', err.message);
192
+ }
193
+ return 0;
194
+ }
195
+ }
196
+ /** GET patterns from the collective endpoint.
197
+ * Merges with local patterns, preferring higher-confidence entries.
198
+ * Returns count of new patterns gained. */
199
+ export async function fetchCollectivePatterns() {
200
+ ensureDir(COLLECTIVE_DIR);
201
+ try {
202
+ const res = await fetch(`${COLLECTIVE_URL}/patterns`, {
203
+ method: 'GET',
204
+ headers: { 'Content-Type': 'application/json' },
205
+ signal: AbortSignal.timeout(10_000),
206
+ });
207
+ if (!res.ok) {
208
+ if (process.env.KBOT_DEBUG) {
209
+ console.error(`[collective-learning] fetch failed: ${res.status}`);
210
+ }
211
+ return 0;
212
+ }
213
+ const data = await res.json();
214
+ const remote = data.patterns;
215
+ if (!Array.isArray(remote) || remote.length === 0)
216
+ return 0;
217
+ // Load existing collective patterns cache
218
+ const existing = loadJSON(COLLECTIVE_PATTERNS_FILE, []);
219
+ const existingMap = new Map();
220
+ for (const p of existing) {
221
+ const key = patternKey(p);
222
+ existingMap.set(key, p);
223
+ }
224
+ let gained = 0;
225
+ for (const p of remote) {
226
+ const key = patternKey(p);
227
+ const local = existingMap.get(key);
228
+ if (!local) {
229
+ // New pattern — add it
230
+ existingMap.set(key, p);
231
+ gained++;
232
+ }
233
+ else if (p.confidence > local.confidence) {
234
+ // Higher confidence from collective — update
235
+ existingMap.set(key, p);
236
+ gained++;
237
+ }
238
+ // Otherwise keep local (already same or better confidence)
239
+ }
240
+ // Save merged collective patterns
241
+ const merged = Array.from(existingMap.values())
242
+ .sort((a, b) => b.confidence - a.confidence)
243
+ .slice(0, 500); // Cap at 500 patterns to keep file reasonable
244
+ saveJSON(COLLECTIVE_PATTERNS_FILE, merged);
245
+ return gained;
246
+ }
247
+ catch (err) {
248
+ if (process.env.KBOT_DEBUG) {
249
+ console.error('[collective-learning] fetch error:', err.message);
250
+ }
251
+ return 0;
252
+ }
253
+ }
254
+ /** Generate a stable key for pattern dedup */
255
+ function patternKey(p) {
256
+ const parts = [
257
+ p.type,
258
+ p.language || '',
259
+ p.framework || '',
260
+ ...(p.toolsUsed || []).sort(),
261
+ ...(p.keywords || []).sort(),
262
+ ];
263
+ return parts.join(':').toLowerCase();
264
+ }
265
+ /** Orchestrate the full collective sync cycle:
266
+ * collect -> contribute -> fetch -> merge.
267
+ * Returns a human-readable summary. */
268
+ export async function runCollectiveSync() {
269
+ const localPatterns = collectAnonymizedPatterns();
270
+ const localCount = localPatterns.length;
271
+ // Load existing collective patterns for baseline
272
+ const beforeCount = loadJSON(COLLECTIVE_PATTERNS_FILE, []).length;
273
+ // Contribute our patterns
274
+ const contributed = await contributePatterns();
275
+ // Fetch patterns from the collective
276
+ const gained = await fetchCollectivePatterns();
277
+ // Calculate "smarter" percentage: ratio of collective patterns to local
278
+ const afterCount = loadJSON(COLLECTIVE_PATTERNS_FILE, []).length;
279
+ const totalKnowledge = localCount + afterCount;
280
+ const smarterPct = totalKnowledge > 0
281
+ ? Math.round((afterCount / totalKnowledge) * 100)
282
+ : 0;
283
+ // Update sync state
284
+ const state = loadSyncState();
285
+ state.lastContribute = new Date().toISOString();
286
+ state.lastFetch = new Date().toISOString();
287
+ state.totalContributed += contributed;
288
+ state.totalGained += gained;
289
+ saveSyncState(state);
290
+ return [
291
+ `Contributed ${contributed} patterns.`,
292
+ `Gained ${gained} new patterns from the collective.`,
293
+ `kbot is now ${smarterPct}% smarter.`,
294
+ `(${localCount} local + ${afterCount} collective = ${totalKnowledge} total patterns)`,
295
+ ].join(' ');
296
+ }
297
+ /** Get collective learning stats for display */
298
+ export function getCollectiveLearningStats() {
299
+ const state = loadSyncState();
300
+ const collectivePatterns = loadJSON(COLLECTIVE_PATTERNS_FILE, []);
301
+ const localPatterns = loadJSON(PATTERNS_FILE, []);
302
+ return [
303
+ `Collective learning:`,
304
+ ` Local patterns: ${localPatterns.length}`,
305
+ ` Collective patterns: ${collectivePatterns.length}`,
306
+ ` Total contributed: ${state.totalContributed}`,
307
+ ` Total gained: ${state.totalGained}`,
308
+ ` Last sync: ${state.lastFetch || 'never'}`,
309
+ ].join('\n');
310
+ }
311
+ /** Load cached collective patterns for use by the routing/agent system */
312
+ export function getCachedCollectivePatterns() {
313
+ return loadJSON(COLLECTIVE_PATTERNS_FILE, []);
314
+ }
315
+ //# sourceMappingURL=collective-learning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collective-learning.js","sourceRoot":"","sources":["../src/collective-learning.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,EAAE;AACF,uDAAuD;AACvD,4EAA4E;AAC5E,EAAE;AACF,iCAAiC;AACjC,6EAA6E;AAC7E,EAAE;AACF,0BAA0B;AAC1B,kEAAkE;AAClE,iDAAiD;AACjD,EAAE;AACF,0EAA0E;AAE1E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAC5E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,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;AAC9E,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAA;AAElE,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,oCAAoC,CAAA;AAuC9F,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;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,IAAa;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IAC5B,SAAS,CAAC,GAAG,CAAC,CAAA;IACd,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AACpD,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,QAAQ,CAAoB,eAAe,EAAE;QAClD,cAAc,EAAE,IAAI;QACpB,SAAS,EAAE,IAAI;QACf,gBAAgB,EAAE,CAAC;QACnB,WAAW,EAAE,CAAC;KACf,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAwB;IAC7C,SAAS,CAAC,cAAc,CAAC,CAAA;IACzB,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;AAChE,CAAC;AAED,sBAAsB;AAEtB,qFAAqF;AACrF,MAAM,YAAY,GAAG;IACnB,sBAAsB,EAAY,kBAAkB;IACpD,kBAAkB,EAAgB,iBAAiB;IACnD,2BAA2B,EAAO,8BAA8B;IAChE,YAAY,EAAuB,sBAAsB;IACzD,iDAAiD,EAAE,SAAS;IAC5D,qCAAqC,EAAE,sCAAsC;CAC9E,CAAA;AAED,wEAAwE;AACxE,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,OAAO,GAAG,IAAI,CAAA;IAClB,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;IAClD,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,6DAA6D;AAC7D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ;IAC/D,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO;IACnE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO;IACtE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK;IACpE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IACjE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS;IACvE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS;IACjE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO;IACvE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY;IAC5E,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK;CACxE,CAAC,CAAA;AAEF,SAAS,gBAAgB,CAAC,QAAkB;IAC1C,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;SAChC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AACtC,CAAC;AAED,8CAA8C;AAC9C,SAAS,iBAAiB,CAAC,KAAe;IACxC,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;SACrD,MAAM,CAAC,OAAO,CAAC,CAAA;AACpB,CAAC;AAED,2BAA2B;AAE3B;kEACkE;AAClE,SAAS,oBAAoB;IAC3B,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAA;IACzD,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAA;IAC5E,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AACpE,CAAC;AAED,kDAAkD;AAElD,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;CAC3D,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,iBAAiB;AAEjB;wDACwD;AACxD,MAAM,UAAU,yBAAyB;IACvC,SAAS,CAAC,UAAU,CAAC,CAAA;IAErB,MAAM,GAAG,GAAG,QAAQ,CAAiC,aAAa,EAAE,EAAE,CAAC,CAAA;IACvE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAEtD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QACjB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAC1F,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,YAAwB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACvG,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAErE,OAAO;YACL,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS;YACzC,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,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1F,SAAS,EAAE,YAAY;YACvB,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;SACT,CAAA;IACH,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AACjE,CAAC;AAED;;6CAE6C;AAC7C,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,QAAQ,GAAG,yBAAyB,EAAE,CAAA;IAC5C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IAEnC,MAAM,WAAW,GAAG,oBAAoB,EAAE,CAAA;IAE1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,cAAc,aAAa,EAAE;YACtD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,kBAAkB,EAAE,WAAW;gBAC/B,QAAQ;gBACR,OAAO,EAAE,OAAO;gBAChB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;YACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAA;QAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,4CAA4C,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;YACzE,CAAC;YACD,OAAO,CAAC,CAAA;QACV,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA2B,CAAA;QACtD,OAAO,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAA;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAA;QAClF,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;AACH,CAAC;AAED;;4CAE4C;AAC5C,MAAM,CAAC,KAAK,UAAU,uBAAuB;IAC3C,SAAS,CAAC,cAAc,CAAC,CAAA;IAEzB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,cAAc,WAAW,EAAE;YACpD,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAA;QAEF,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,uCAAuC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;YACpE,CAAC;YACD,OAAO,CAAC,CAAA;QACV,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAwC,CAAA;QACnE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAA;QAC5B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAA;QAE3D,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,QAAQ,CAAsB,wBAAwB,EAAE,EAAE,CAAC,CAAA;QAC5E,MAAM,WAAW,GAAG,IAAI,GAAG,EAA6B,CAAA;QACxD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;YACzB,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;QACzB,CAAC;QAED,IAAI,MAAM,GAAG,CAAC,CAAA;QAEd,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;YACzB,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAElC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,uBAAuB;gBACvB,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;gBACvB,MAAM,EAAE,CAAA;YACV,CAAC;iBAAM,IAAI,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;gBAC3C,6CAA6C;gBAC7C,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;gBACvB,MAAM,EAAE,CAAA;YACV,CAAC;YACD,2DAA2D;QAC7D,CAAC;QAED,kCAAkC;QAClC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;aAC5C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;aAC3C,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA,CAAC,8CAA8C;QAE/D,QAAQ,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAA;QAC1C,OAAO,MAAM,CAAA;IACf,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAG,GAAa,CAAC,OAAO,CAAC,CAAA;QAC7E,CAAC;QACD,OAAO,CAAC,CAAA;IACV,CAAC;AACH,CAAC;AAED,8CAA8C;AAC9C,SAAS,UAAU,CAAC,CAAwC;IAC1D,MAAM,KAAK,GAAG;QACZ,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,QAAQ,IAAI,EAAE;QAChB,CAAC,CAAC,SAAS,IAAI,EAAE;QACjB,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;AAED;;wCAEwC;AACxC,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,aAAa,GAAG,yBAAyB,EAAE,CAAA;IACjD,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAA;IAEvC,iDAAiD;IACjD,MAAM,WAAW,GAAG,QAAQ,CAAsB,wBAAwB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAA;IAEtF,0BAA0B;IAC1B,MAAM,WAAW,GAAG,MAAM,kBAAkB,EAAE,CAAA;IAE9C,qCAAqC;IACrC,MAAM,MAAM,GAAG,MAAM,uBAAuB,EAAE,CAAA;IAE9C,wEAAwE;IACxE,MAAM,UAAU,GAAG,QAAQ,CAAsB,wBAAwB,EAAE,EAAE,CAAC,CAAC,MAAM,CAAA;IACrF,MAAM,cAAc,GAAG,UAAU,GAAG,UAAU,CAAA;IAC9C,MAAM,UAAU,GAAG,cAAc,GAAG,CAAC;QACnC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC;QACjD,CAAC,CAAC,CAAC,CAAA;IAEL,oBAAoB;IACpB,MAAM,KAAK,GAAG,aAAa,EAAE,CAAA;IAC7B,KAAK,CAAC,cAAc,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC/C,KAAK,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC1C,KAAK,CAAC,gBAAgB,IAAI,WAAW,CAAA;IACrC,KAAK,CAAC,WAAW,IAAI,MAAM,CAAA;IAC3B,aAAa,CAAC,KAAK,CAAC,CAAA;IAEpB,OAAO;QACL,eAAe,WAAW,YAAY;QACtC,UAAU,MAAM,oCAAoC;QACpD,eAAe,UAAU,YAAY;QACrC,IAAI,UAAU,YAAY,UAAU,iBAAiB,cAAc,kBAAkB;KACtF,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACb,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,0BAA0B;IACxC,MAAM,KAAK,GAAG,aAAa,EAAE,CAAA;IAC7B,MAAM,kBAAkB,GAAG,QAAQ,CAAsB,wBAAwB,EAAE,EAAE,CAAC,CAAA;IACtF,MAAM,aAAa,GAAG,QAAQ,CAAY,aAAa,EAAE,EAAE,CAAC,CAAA;IAE5D,OAAO;QACL,sBAAsB;QACtB,qBAAqB,aAAa,CAAC,MAAM,EAAE;QAC3C,0BAA0B,kBAAkB,CAAC,MAAM,EAAE;QACrD,wBAAwB,KAAK,CAAC,gBAAgB,EAAE;QAChD,mBAAmB,KAAK,CAAC,WAAW,EAAE;QACtC,gBAAgB,KAAK,CAAC,SAAS,IAAI,OAAO,EAAE;KAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,2BAA2B;IACzC,OAAO,QAAQ,CAAsB,wBAAwB,EAAE,EAAE,CAAC,CAAA;AACpE,CAAC"}
@@ -0,0 +1,60 @@
1
+ export interface CommunityConfig {
2
+ /** Discord webhook URL for posting digests/notifications */
3
+ discord_webhook?: string;
4
+ /** GitHub repo in "owner/repo" format */
5
+ github_repo: string;
6
+ /** Email addresses for digest distribution */
7
+ email_list?: string[];
8
+ }
9
+ export interface FAQEntry {
10
+ question: string;
11
+ answer: string;
12
+ keywords: string[];
13
+ }
14
+ export interface TriageResult {
15
+ issue: number;
16
+ title: string;
17
+ label: string;
18
+ response: string;
19
+ url: string;
20
+ }
21
+ export interface CommunityDigest {
22
+ generatedAt: string;
23
+ repo: string;
24
+ openIssues: number;
25
+ openPRs: number;
26
+ newIssuesThisWeek: number;
27
+ newPRsThisWeek: number;
28
+ mergedPRsThisWeek: number;
29
+ stargazers: number;
30
+ npmDownloadsWeekly: number;
31
+ newContributors: string[];
32
+ markdown: string;
33
+ }
34
+ /**
35
+ * Fuzzy-match a question against the FAQ knowledge base.
36
+ * Returns the best matching answer or a polite fallback.
37
+ */
38
+ export declare function answerFAQ(question: string): string;
39
+ /**
40
+ * Generate a personalized welcome message for a new contributor.
41
+ */
42
+ export declare function welcomeContributor(username: string, platform: 'github' | 'discord' | 'email'): string;
43
+ /**
44
+ * Generate a formatted community digest from GitHub and npm data.
45
+ */
46
+ export declare function generateDigest(repo?: string): Promise<string>;
47
+ /**
48
+ * Run the community manager cycle.
49
+ *
50
+ * - Checks GitHub for new issues/PRs and triages them
51
+ * - Generates a daily community digest
52
+ * - Welcomes new contributors
53
+ * - Answers common questions from FAQ
54
+ */
55
+ export declare function runCommunityManager(config: CommunityConfig): Promise<{
56
+ triaged: TriageResult[];
57
+ digest: string;
58
+ welcomed: string[];
59
+ }>;
60
+ //# sourceMappingURL=community-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"community-manager.d.ts","sourceRoot":"","sources":["../src/community-manager.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,eAAe;IAC9B,4DAA4D;IAC5D,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAA;IACnB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AA+BD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,MAAM,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,iBAAiB,EAAE,MAAM,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAkID;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CA8ClD;AAID;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAQrG;AAID;;GAEG;AACH,wBAAsB,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA2HnE;AAyBD;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC;IAC1E,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB,CAAC,CAgHD"}