@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.
- package/dist/codebase-guardian.d.ts +64 -0
- package/dist/codebase-guardian.d.ts.map +1 -0
- package/dist/codebase-guardian.js +486 -0
- package/dist/codebase-guardian.js.map +1 -0
- package/dist/collective-learning.d.ts +47 -0
- package/dist/collective-learning.d.ts.map +1 -0
- package/dist/collective-learning.js +315 -0
- package/dist/collective-learning.js.map +1 -0
- package/dist/community-manager.d.ts +60 -0
- package/dist/community-manager.d.ts.map +1 -0
- package/dist/community-manager.js +400 -0
- package/dist/community-manager.js.map +1 -0
- package/dist/dream-mode.d.ts +23 -0
- package/dist/dream-mode.d.ts.map +1 -0
- package/dist/dream-mode.js +352 -0
- package/dist/dream-mode.js.map +1 -0
- package/dist/forge-marketplace.d.ts +40 -0
- package/dist/forge-marketplace.d.ts.map +1 -0
- package/dist/forge-marketplace.js +222 -0
- package/dist/forge-marketplace.js.map +1 -0
- package/dist/kbot-service.d.ts +2 -0
- package/dist/kbot-service.d.ts.map +1 -0
- package/dist/kbot-service.js +197 -0
- package/dist/kbot-service.js.map +1 -0
- package/dist/meta-agent.d.ts +62 -0
- package/dist/meta-agent.d.ts.map +1 -0
- package/dist/meta-agent.js +288 -0
- package/dist/meta-agent.js.map +1 -0
- package/dist/tools/bootstrapper.d.ts +2 -0
- package/dist/tools/bootstrapper.d.ts.map +1 -0
- package/dist/tools/bootstrapper.js +559 -0
- package/dist/tools/bootstrapper.js.map +1 -0
- package/dist/tools/content-engine.d.ts +2 -0
- package/dist/tools/content-engine.d.ts.map +1 -0
- package/dist/tools/content-engine.js +362 -0
- package/dist/tools/content-engine.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
// kbot Community Manager — Autonomous community management system
|
|
2
|
+
//
|
|
3
|
+
// Monitors GitHub issues/PRs, generates daily digests, welcomes new
|
|
4
|
+
// contributors, and answers FAQs from a local knowledge base.
|
|
5
|
+
//
|
|
6
|
+
// Usage:
|
|
7
|
+
// import { runCommunityManager } from './community-manager.js'
|
|
8
|
+
// await runCommunityManager({ discord_webhook, github_repo, email_list })
|
|
9
|
+
//
|
|
10
|
+
// FAQ entries live in ~/.kbot/community-faq.json as an array of
|
|
11
|
+
// { question, answer, keywords } objects.
|
|
12
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync, appendFileSync } from 'node:fs';
|
|
13
|
+
import { join } from 'node:path';
|
|
14
|
+
import { homedir } from 'node:os';
|
|
15
|
+
import { execSync } from 'node:child_process';
|
|
16
|
+
// ── Paths ──
|
|
17
|
+
const COMMUNITY_DIR = join(homedir(), '.kbot', 'community');
|
|
18
|
+
const FAQ_PATH = join(homedir(), '.kbot', 'community-faq.json');
|
|
19
|
+
const HISTORY_PATH = join(COMMUNITY_DIR, 'history.json');
|
|
20
|
+
const LOG_PATH = join(COMMUNITY_DIR, 'activity.log');
|
|
21
|
+
function ensureDir() {
|
|
22
|
+
if (!existsSync(COMMUNITY_DIR))
|
|
23
|
+
mkdirSync(COMMUNITY_DIR, { recursive: true });
|
|
24
|
+
}
|
|
25
|
+
function log(msg) {
|
|
26
|
+
ensureDir();
|
|
27
|
+
const line = `[${new Date().toISOString().slice(0, 19)}] ${msg}\n`;
|
|
28
|
+
appendFileSync(LOG_PATH, line);
|
|
29
|
+
console.log(msg);
|
|
30
|
+
}
|
|
31
|
+
// ── JSON helpers ──
|
|
32
|
+
function loadJsonSafe(path, fallback) {
|
|
33
|
+
if (!existsSync(path))
|
|
34
|
+
return fallback;
|
|
35
|
+
try {
|
|
36
|
+
return JSON.parse(readFileSync(path, 'utf-8'));
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return fallback;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function saveJson(path, data) {
|
|
43
|
+
ensureDir();
|
|
44
|
+
const dir = path.replace(/\/[^/]+$/, '');
|
|
45
|
+
if (!existsSync(dir))
|
|
46
|
+
mkdirSync(dir, { recursive: true });
|
|
47
|
+
writeFileSync(path, JSON.stringify(data, null, 2), 'utf-8');
|
|
48
|
+
}
|
|
49
|
+
// ── GitHub API helpers ──
|
|
50
|
+
async function ghFetch(endpoint, repo) {
|
|
51
|
+
const url = `https://api.github.com/repos/${repo}${endpoint}`;
|
|
52
|
+
try {
|
|
53
|
+
const res = await fetch(url, {
|
|
54
|
+
headers: {
|
|
55
|
+
'Accept': 'application/vnd.github.v3+json',
|
|
56
|
+
'User-Agent': 'kbot-community-manager/1.0',
|
|
57
|
+
},
|
|
58
|
+
signal: AbortSignal.timeout(10000),
|
|
59
|
+
});
|
|
60
|
+
if (!res.ok)
|
|
61
|
+
return null;
|
|
62
|
+
return await res.json();
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/** Use gh CLI if available (already authenticated) */
|
|
69
|
+
function ghCliAvailable() {
|
|
70
|
+
try {
|
|
71
|
+
execSync('gh auth status', { timeout: 5000, stdio: 'pipe' });
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function ghCliComment(repo, issueNumber, body) {
|
|
79
|
+
try {
|
|
80
|
+
execSync(`gh issue comment ${issueNumber} --repo ${repo} --body ${JSON.stringify(body)}`, { timeout: 15000, stdio: 'pipe' });
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// ── Triage ──
|
|
88
|
+
function triageIssue(issue) {
|
|
89
|
+
const title = issue.title.toLowerCase();
|
|
90
|
+
const hasLabels = issue.labels.length > 0;
|
|
91
|
+
// Skip if already labeled
|
|
92
|
+
if (hasLabels) {
|
|
93
|
+
return { label: '', response: '' };
|
|
94
|
+
}
|
|
95
|
+
// Bug report patterns
|
|
96
|
+
if (title.includes('bug') || title.includes('error') || title.includes('crash') ||
|
|
97
|
+
title.includes('broken') || title.includes('fix') || title.includes('fail')) {
|
|
98
|
+
return {
|
|
99
|
+
label: 'bug',
|
|
100
|
+
response: `Thanks for reporting this, @${issue.user.login}! We'll investigate. Could you share:\n\n- Steps to reproduce\n- Expected vs actual behavior\n- Your environment (OS, Node version, kbot version)\n\nThis helps us track it down faster.`,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
// Feature request patterns
|
|
104
|
+
if (title.includes('feature') || title.includes('request') || title.includes('add') ||
|
|
105
|
+
title.includes('support') || title.includes('would be nice') || title.includes('enhancement')) {
|
|
106
|
+
return {
|
|
107
|
+
label: 'enhancement',
|
|
108
|
+
response: `Thanks for the suggestion, @${issue.user.login}! We'll review this for our roadmap. If others find this useful, please upvote with a thumbs-up reaction.`,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
// Question patterns
|
|
112
|
+
if (title.includes('how') || title.includes('?') || title.includes('help') ||
|
|
113
|
+
title.includes('question') || title.includes('docs')) {
|
|
114
|
+
return {
|
|
115
|
+
label: 'question',
|
|
116
|
+
response: `Hi @${issue.user.login}! This looks like a question. Let me see if I can help. Have you checked the docs at https://kernel.chat? If this is still unresolved, we'll get back to you soon.`,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
// Default: needs triage
|
|
120
|
+
return {
|
|
121
|
+
label: 'needs-triage',
|
|
122
|
+
response: `Thanks for opening this, @${issue.user.login}! We'll take a look shortly.`,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
// ── FAQ ──
|
|
126
|
+
function loadFAQ() {
|
|
127
|
+
return loadJsonSafe(FAQ_PATH, []);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Fuzzy-match a question against the FAQ knowledge base.
|
|
131
|
+
* Returns the best matching answer or a polite fallback.
|
|
132
|
+
*/
|
|
133
|
+
export function answerFAQ(question) {
|
|
134
|
+
const faq = loadFAQ();
|
|
135
|
+
if (faq.length === 0) {
|
|
136
|
+
return "I don't have a FAQ knowledge base yet. Add entries to ~/.kbot/community-faq.json to get started.";
|
|
137
|
+
}
|
|
138
|
+
const questionLower = question.toLowerCase();
|
|
139
|
+
const questionWords = questionLower.split(/\s+/).filter(w => w.length > 2);
|
|
140
|
+
let bestMatch = null;
|
|
141
|
+
let bestScore = 0;
|
|
142
|
+
for (const entry of faq) {
|
|
143
|
+
let score = 0;
|
|
144
|
+
// Keyword matching (highest weight)
|
|
145
|
+
for (const kw of entry.keywords) {
|
|
146
|
+
if (questionLower.includes(kw.toLowerCase())) {
|
|
147
|
+
score += 3;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// Word overlap with the FAQ question
|
|
151
|
+
const entryWords = entry.question.toLowerCase().split(/\s+/).filter(w => w.length > 2);
|
|
152
|
+
for (const word of questionWords) {
|
|
153
|
+
if (entryWords.includes(word)) {
|
|
154
|
+
score += 2;
|
|
155
|
+
}
|
|
156
|
+
// Partial match (substring)
|
|
157
|
+
if (entryWords.some(ew => ew.includes(word) || word.includes(ew))) {
|
|
158
|
+
score += 1;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (score > bestScore) {
|
|
162
|
+
bestScore = score;
|
|
163
|
+
bestMatch = entry;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Threshold: need at least some relevance
|
|
167
|
+
if (bestMatch && bestScore >= 3) {
|
|
168
|
+
return bestMatch.answer;
|
|
169
|
+
}
|
|
170
|
+
return "I don't know, let me find someone who does.";
|
|
171
|
+
}
|
|
172
|
+
// ── Welcome ──
|
|
173
|
+
/**
|
|
174
|
+
* Generate a personalized welcome message for a new contributor.
|
|
175
|
+
*/
|
|
176
|
+
export function welcomeContributor(username, platform) {
|
|
177
|
+
const greetings = {
|
|
178
|
+
github: `Welcome to the project, @${username}! We're glad to have you here.\n\nHere are some ways to get started:\n- Check out issues labeled \`good first issue\` for beginner-friendly tasks\n- Read the CLAUDE.md for project architecture and conventions\n- Join our community discussions if you have questions\n\nDon't hesitate to ask for help — we value every contribution, no matter how small.`,
|
|
179
|
+
discord: `Welcome, ${username}! Great to see you in the community.\n\nFeel free to introduce yourself and let us know what brought you here. Check the pinned messages for useful links and resources.`,
|
|
180
|
+
email: `Hi ${username},\n\nWelcome to the project! We're excited to have you as part of the community.\n\nHere are some useful links:\n- GitHub: https://github.com/isaacsight/kernel\n- Docs: https://kernel.chat\n\nLet us know if you have any questions.\n\nBest,\nkbot Community Manager`,
|
|
181
|
+
};
|
|
182
|
+
return greetings[platform] || greetings.github;
|
|
183
|
+
}
|
|
184
|
+
// ── Digest ──
|
|
185
|
+
/**
|
|
186
|
+
* Generate a formatted community digest from GitHub and npm data.
|
|
187
|
+
*/
|
|
188
|
+
export async function generateDigest(repo) {
|
|
189
|
+
const targetRepo = repo || 'isaacsight/kernel';
|
|
190
|
+
const now = new Date();
|
|
191
|
+
const weekAgo = new Date(now.getTime() - 7 * 24 * 60 * 60 * 1000);
|
|
192
|
+
const weekAgoISO = weekAgo.toISOString();
|
|
193
|
+
log(`Generating community digest for ${targetRepo}...`);
|
|
194
|
+
// Fetch repo info
|
|
195
|
+
const repoInfo = await ghFetch('', targetRepo);
|
|
196
|
+
// Fetch recent issues (last 30 sorted by created)
|
|
197
|
+
const issues = await ghFetch('/issues?state=all&sort=created&direction=desc&per_page=30', targetRepo) || [];
|
|
198
|
+
// Fetch recent PRs
|
|
199
|
+
const prs = await ghFetch('/pulls?state=all&sort=created&direction=desc&per_page=30', targetRepo) || [];
|
|
200
|
+
// Separate issues from PRs (GitHub API returns PRs in issues endpoint too)
|
|
201
|
+
const pureIssues = issues.filter(i => !i.pull_request);
|
|
202
|
+
const newIssues = pureIssues.filter(i => i.created_at >= weekAgoISO);
|
|
203
|
+
const newPRs = prs.filter(p => p.created_at >= weekAgoISO);
|
|
204
|
+
const mergedPRs = prs.filter(p => p.merged_at && p.merged_at >= weekAgoISO);
|
|
205
|
+
const openIssues = pureIssues.filter(i => i.state === 'open');
|
|
206
|
+
const openPRs = prs.filter(p => p.state === 'open' && !p.draft);
|
|
207
|
+
// Find new contributors (first-time issue/PR authors this week)
|
|
208
|
+
const history = loadJsonSafe(HISTORY_PATH, { knownContributors: [] });
|
|
209
|
+
const knownSet = new Set(history.knownContributors);
|
|
210
|
+
const newContributors = [];
|
|
211
|
+
for (const item of [...newIssues, ...newPRs]) {
|
|
212
|
+
const login = item.user.login;
|
|
213
|
+
if (!knownSet.has(login)) {
|
|
214
|
+
knownSet.add(login);
|
|
215
|
+
newContributors.push(login);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Update known contributors
|
|
219
|
+
history.knownContributors = Array.from(knownSet);
|
|
220
|
+
saveJson(HISTORY_PATH, history);
|
|
221
|
+
// npm downloads (last week)
|
|
222
|
+
let npmDownloads = 0;
|
|
223
|
+
try {
|
|
224
|
+
const npmRes = await fetch('https://api.npmjs.org/downloads/point/last-week/@kernel.chat/kbot', { signal: AbortSignal.timeout(5000) });
|
|
225
|
+
if (npmRes.ok) {
|
|
226
|
+
const npmData = await npmRes.json();
|
|
227
|
+
npmDownloads = npmData.downloads || 0;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
catch { /* npm API unavailable */ }
|
|
231
|
+
// Format the digest
|
|
232
|
+
const stars = repoInfo?.stargazers_count ?? 0;
|
|
233
|
+
const lines = [
|
|
234
|
+
`# Community Digest — ${targetRepo}`,
|
|
235
|
+
`> Generated ${now.toISOString().split('T')[0]}`,
|
|
236
|
+
'',
|
|
237
|
+
'## This Week',
|
|
238
|
+
'',
|
|
239
|
+
`| Metric | Count |`,
|
|
240
|
+
`|--------|-------|`,
|
|
241
|
+
`| New Issues | ${newIssues.length} |`,
|
|
242
|
+
`| New PRs | ${newPRs.length} |`,
|
|
243
|
+
`| Merged PRs | ${mergedPRs.length} |`,
|
|
244
|
+
`| Open Issues | ${openIssues.length} |`,
|
|
245
|
+
`| Open PRs | ${openPRs.length} |`,
|
|
246
|
+
`| Stars | ${stars} |`,
|
|
247
|
+
`| npm Downloads (week) | ${npmDownloads.toLocaleString()} |`,
|
|
248
|
+
'',
|
|
249
|
+
];
|
|
250
|
+
if (newContributors.length > 0) {
|
|
251
|
+
lines.push('## New Contributors');
|
|
252
|
+
lines.push('');
|
|
253
|
+
for (const c of newContributors) {
|
|
254
|
+
lines.push(`- @${c}`);
|
|
255
|
+
}
|
|
256
|
+
lines.push('');
|
|
257
|
+
}
|
|
258
|
+
if (mergedPRs.length > 0) {
|
|
259
|
+
lines.push('## Recently Merged');
|
|
260
|
+
lines.push('');
|
|
261
|
+
for (const pr of mergedPRs.slice(0, 10)) {
|
|
262
|
+
lines.push(`- [#${pr.number}](${pr.html_url}) ${pr.title} (@${pr.user.login})`);
|
|
263
|
+
}
|
|
264
|
+
lines.push('');
|
|
265
|
+
}
|
|
266
|
+
if (newIssues.length > 0) {
|
|
267
|
+
lines.push('## Recent Issues');
|
|
268
|
+
lines.push('');
|
|
269
|
+
for (const issue of newIssues.slice(0, 10)) {
|
|
270
|
+
const labels = issue.labels.map(l => l.name).join(', ');
|
|
271
|
+
const labelTag = labels ? ` [${labels}]` : '';
|
|
272
|
+
lines.push(`- [#${issue.number}](${issue.html_url}) ${issue.title}${labelTag}`);
|
|
273
|
+
}
|
|
274
|
+
lines.push('');
|
|
275
|
+
}
|
|
276
|
+
lines.push('---');
|
|
277
|
+
lines.push('*Generated by kbot Community Manager*');
|
|
278
|
+
const markdown = lines.join('\n');
|
|
279
|
+
log(`Digest generated: ${newIssues.length} issues, ${newPRs.length} PRs, ${mergedPRs.length} merged, ${newContributors.length} new contributors`);
|
|
280
|
+
return markdown;
|
|
281
|
+
}
|
|
282
|
+
// ── Discord webhook ──
|
|
283
|
+
async function postToDiscord(webhookUrl, content) {
|
|
284
|
+
try {
|
|
285
|
+
// Discord has a 2000 char limit per message — truncate if needed
|
|
286
|
+
const truncated = content.length > 1900
|
|
287
|
+
? content.slice(0, 1900) + '\n\n... (truncated)'
|
|
288
|
+
: content;
|
|
289
|
+
const res = await fetch(webhookUrl, {
|
|
290
|
+
method: 'POST',
|
|
291
|
+
headers: { 'Content-Type': 'application/json' },
|
|
292
|
+
body: JSON.stringify({ content: truncated }),
|
|
293
|
+
signal: AbortSignal.timeout(10000),
|
|
294
|
+
});
|
|
295
|
+
return res.ok;
|
|
296
|
+
}
|
|
297
|
+
catch {
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// ── Main orchestrator ──
|
|
302
|
+
/**
|
|
303
|
+
* Run the community manager cycle.
|
|
304
|
+
*
|
|
305
|
+
* - Checks GitHub for new issues/PRs and triages them
|
|
306
|
+
* - Generates a daily community digest
|
|
307
|
+
* - Welcomes new contributors
|
|
308
|
+
* - Answers common questions from FAQ
|
|
309
|
+
*/
|
|
310
|
+
export async function runCommunityManager(config) {
|
|
311
|
+
const { github_repo, discord_webhook } = config;
|
|
312
|
+
log(`Community manager starting for ${github_repo}`);
|
|
313
|
+
// ── 1. Triage new issues ──
|
|
314
|
+
const triaged = [];
|
|
315
|
+
const useGhCli = ghCliAvailable();
|
|
316
|
+
const recentIssues = await ghFetch('/issues?state=open&sort=created&direction=desc&per_page=15', github_repo) || [];
|
|
317
|
+
// Filter to pure issues (not PRs)
|
|
318
|
+
const pureIssues = recentIssues.filter(i => !i.pull_request);
|
|
319
|
+
// Only triage issues from the last 24 hours
|
|
320
|
+
const oneDayAgo = new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString();
|
|
321
|
+
const freshIssues = pureIssues.filter(i => i.created_at >= oneDayAgo);
|
|
322
|
+
for (const issue of freshIssues) {
|
|
323
|
+
const { label, response } = triageIssue(issue);
|
|
324
|
+
if (!label || !response)
|
|
325
|
+
continue;
|
|
326
|
+
triaged.push({
|
|
327
|
+
issue: issue.number,
|
|
328
|
+
title: issue.title,
|
|
329
|
+
label,
|
|
330
|
+
response,
|
|
331
|
+
url: issue.html_url,
|
|
332
|
+
});
|
|
333
|
+
// Post the triage response via gh CLI if available
|
|
334
|
+
if (useGhCli) {
|
|
335
|
+
const posted = ghCliComment(github_repo, issue.number, response);
|
|
336
|
+
if (posted) {
|
|
337
|
+
log(` Triaged #${issue.number} as ${label}: ${issue.title.slice(0, 50)}`);
|
|
338
|
+
}
|
|
339
|
+
else {
|
|
340
|
+
log(` Triage draft for #${issue.number} (could not post): ${issue.title.slice(0, 50)}`);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
log(` Triage draft for #${issue.number} (gh CLI not available): ${issue.title.slice(0, 50)}`);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
// ── 2. Generate digest ──
|
|
348
|
+
const digest = await generateDigest(github_repo);
|
|
349
|
+
// Post digest to Discord if configured
|
|
350
|
+
if (discord_webhook) {
|
|
351
|
+
const posted = await postToDiscord(discord_webhook, digest);
|
|
352
|
+
log(posted ? 'Digest posted to Discord' : 'Failed to post digest to Discord');
|
|
353
|
+
}
|
|
354
|
+
// ── 3. Welcome new contributors ──
|
|
355
|
+
const welcomed = [];
|
|
356
|
+
const history = loadJsonSafe(HISTORY_PATH, {
|
|
357
|
+
knownContributors: [],
|
|
358
|
+
welcomed: [],
|
|
359
|
+
});
|
|
360
|
+
const welcomedSet = new Set(history.welcomed || []);
|
|
361
|
+
// Check recent PR authors and issue authors
|
|
362
|
+
const allAuthors = [...freshIssues.map(i => i.user.login)];
|
|
363
|
+
const recentPRs = await ghFetch('/pulls?state=all&sort=created&direction=desc&per_page=10', github_repo) || [];
|
|
364
|
+
const freshPRs = recentPRs.filter(p => p.created_at >= oneDayAgo);
|
|
365
|
+
allAuthors.push(...freshPRs.map(p => p.user.login));
|
|
366
|
+
for (const author of allAuthors) {
|
|
367
|
+
if (welcomedSet.has(author))
|
|
368
|
+
continue;
|
|
369
|
+
// Check if this is their first contribution (only 1 issue/PR)
|
|
370
|
+
const authorIssues = pureIssues.filter(i => i.user.login === author);
|
|
371
|
+
const authorPRs = recentPRs.filter(p => p.user.login === author);
|
|
372
|
+
const totalContributions = authorIssues.length + authorPRs.length;
|
|
373
|
+
if (totalContributions <= 1) {
|
|
374
|
+
const welcomeMsg = welcomeContributor(author, 'github');
|
|
375
|
+
welcomed.push(author);
|
|
376
|
+
welcomedSet.add(author);
|
|
377
|
+
// Post welcome via gh CLI
|
|
378
|
+
if (useGhCli) {
|
|
379
|
+
// Find their issue or PR to comment on
|
|
380
|
+
const target = authorIssues[0] || authorPRs[0];
|
|
381
|
+
if (target) {
|
|
382
|
+
const targetNumber = 'number' in target ? target.number : 0;
|
|
383
|
+
if (targetNumber > 0) {
|
|
384
|
+
ghCliComment(github_repo, targetNumber, welcomeMsg);
|
|
385
|
+
log(` Welcomed new contributor: @${author}`);
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
else {
|
|
390
|
+
log(` Welcome draft for @${author} (gh CLI not available)`);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
// Persist welcomed list
|
|
395
|
+
history.welcomed = Array.from(welcomedSet);
|
|
396
|
+
saveJson(HISTORY_PATH, history);
|
|
397
|
+
log(`Community manager done: ${triaged.length} triaged, ${welcomed.length} welcomed`);
|
|
398
|
+
return { triaged, digest, welcomed };
|
|
399
|
+
}
|
|
400
|
+
//# sourceMappingURL=community-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"community-manager.js","sourceRoot":"","sources":["../src/community-manager.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,oEAAoE;AACpE,8DAA8D;AAC9D,EAAE;AACF,SAAS;AACT,iEAAiE;AACjE,4EAA4E;AAC5E,EAAE;AACF,gEAAgE;AAChE,0CAA0C;AAE1C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC5F,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAsE7C,cAAc;AAEd,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;AAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAA;AAC/D,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAA;AACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,cAAc,CAAC,CAAA;AAEpD,SAAS,SAAS;IAChB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AAC/E,CAAC;AAED,SAAS,GAAG,CAAC,GAAW;IACtB,SAAS,EAAE,CAAA;IACX,MAAM,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAA;IAClE,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAClB,CAAC;AAED,qBAAqB;AAErB,SAAS,YAAY,CAAI,IAAY,EAAE,QAAW;IAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAA;IACtC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAM,CAAA;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAA;IACjB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,IAAa;IAC3C,SAAS,EAAE,CAAA;IACX,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;IACxC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACzD,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;AAC7D,CAAC;AAED,2BAA2B;AAE3B,KAAK,UAAU,OAAO,CAAI,QAAgB,EAAE,IAAY;IACtD,MAAM,GAAG,GAAG,gCAAgC,IAAI,GAAG,QAAQ,EAAE,CAAA;IAC7D,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,OAAO,EAAE;gBACP,QAAQ,EAAE,gCAAgC;gBAC1C,YAAY,EAAE,4BAA4B;aAC3C;YACD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;SACnC,CAAC,CAAA;QACF,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAA;QACxB,OAAO,MAAM,GAAG,CAAC,IAAI,EAAO,CAAA;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,sDAAsD;AACtD,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,QAAQ,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;QAC5D,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,WAAmB,EAAE,IAAY;IACnE,IAAI,CAAC;QACH,QAAQ,CACN,oBAAoB,WAAW,WAAW,IAAI,WAAW,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAC/E,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAClC,CAAA;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,eAAe;AAEf,SAAS,WAAW,CAAC,KAAkB;IACrC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA;IACvC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAA;IAEzC,0BAA0B;IAC1B,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAA;IACpC,CAAC;IAED,sBAAsB;IACtB,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC3E,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAChF,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,QAAQ,EAAE,+BAA+B,KAAK,CAAC,IAAI,CAAC,KAAK,0LAA0L;SACpP,CAAA;IACH,CAAC;IAED,2BAA2B;IAC3B,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC/E,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QAClG,OAAO;YACL,KAAK,EAAE,aAAa;YACpB,QAAQ,EAAE,+BAA+B,KAAK,CAAC,IAAI,CAAC,KAAK,2GAA2G;SACrK,CAAA;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QACtE,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,OAAO;YACL,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,oKAAoK;SACtM,CAAA;IACH,CAAC;IAED,wBAAwB;IACxB,OAAO;QACL,KAAK,EAAE,cAAc;QACrB,QAAQ,EAAE,6BAA6B,KAAK,CAAC,IAAI,CAAC,KAAK,8BAA8B;KACtF,CAAA;AACH,CAAC;AAED,YAAY;AAEZ,SAAS,OAAO;IACd,OAAO,YAAY,CAAa,QAAQ,EAAE,EAAE,CAAC,CAAA;AAC/C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,MAAM,GAAG,GAAG,OAAO,EAAE,CAAA;IACrB,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,kGAAkG,CAAA;IAC3G,CAAC;IAED,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;IAC5C,MAAM,aAAa,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAE1E,IAAI,SAAS,GAAoB,IAAI,CAAA;IACrC,IAAI,SAAS,GAAG,CAAC,CAAA;IAEjB,KAAK,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QACxB,IAAI,KAAK,GAAG,CAAC,CAAA;QAEb,oCAAoC;QACpC,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAChC,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;gBAC7C,KAAK,IAAI,CAAC,CAAA;YACZ,CAAC;QACH,CAAC;QAED,qCAAqC;QACrC,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACtF,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC9B,KAAK,IAAI,CAAC,CAAA;YACZ,CAAC;YACD,4BAA4B;YAC5B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAClE,KAAK,IAAI,CAAC,CAAA;YACZ,CAAC;QACH,CAAC;QAED,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;YACtB,SAAS,GAAG,KAAK,CAAA;YACjB,SAAS,GAAG,KAAK,CAAA;QACnB,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,IAAI,SAAS,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO,SAAS,CAAC,MAAM,CAAA;IACzB,CAAC;IAED,OAAO,6CAA6C,CAAA;AACtD,CAAC;AAED,gBAAgB;AAEhB;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,QAAwC;IAC3F,MAAM,SAAS,GAA2B;QACxC,MAAM,EAAE,4BAA4B,QAAQ,gWAAgW;QAC5Y,OAAO,EAAE,YAAY,QAAQ,0KAA0K;QACvM,KAAK,EAAE,MAAM,QAAQ,yQAAyQ;KAC/R,CAAA;IAED,OAAO,SAAS,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,MAAM,CAAA;AAChD,CAAC;AAED,eAAe;AAEf;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAa;IAChD,MAAM,UAAU,GAAG,IAAI,IAAI,mBAAmB,CAAA;IAC9C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;IACjE,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IAExC,GAAG,CAAC,mCAAmC,UAAU,KAAK,CAAC,CAAA;IAEvD,kBAAkB;IAClB,MAAM,QAAQ,GAAG,MAAM,OAAO,CAG3B,EAAE,EAAE,UAAU,CAAC,CAAA;IAElB,kDAAkD;IAClD,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,2DAA2D,EAC3D,UAAU,CACX,IAAI,EAAE,CAAA;IAEP,mBAAmB;IACnB,MAAM,GAAG,GAAG,MAAM,OAAO,CACvB,0DAA0D,EAC1D,UAAU,CACX,IAAI,EAAE,CAAA;IAEP,2EAA2E;IAC3E,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IAEtD,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,CAAA;IACpE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,CAAA;IAC1D,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,IAAI,UAAU,CAAC,CAAA;IAC3E,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAA;IAC7D,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAE/D,gEAAgE;IAChE,MAAM,OAAO,GAAG,YAAY,CAAkC,YAAY,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,CAAC,CAAA;IACtG,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;IACnD,MAAM,eAAe,GAAa,EAAE,CAAA;IAEpC,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,SAAS,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAA;QAC7B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACnB,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAChD,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAE/B,4BAA4B;IAC5B,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,mEAAmE,EACnE,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CACtC,CAAA;QACD,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,EAAkB,CAAA;YACnD,YAAY,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAA;QACvC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;IAErC,oBAAoB;IACpB,MAAM,KAAK,GAAG,QAAQ,EAAE,gBAAgB,IAAI,CAAC,CAAA;IAE7C,MAAM,KAAK,GAAa;QACtB,wBAAwB,UAAU,EAAE;QACpC,eAAe,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;QAChD,EAAE;QACF,cAAc;QACd,EAAE;QACF,oBAAoB;QACpB,oBAAoB;QACpB,kBAAkB,SAAS,CAAC,MAAM,IAAI;QACtC,eAAe,MAAM,CAAC,MAAM,IAAI;QAChC,kBAAkB,SAAS,CAAC,MAAM,IAAI;QACtC,mBAAmB,UAAU,CAAC,MAAM,IAAI;QACxC,gBAAgB,OAAO,CAAC,MAAM,IAAI;QAClC,aAAa,KAAK,IAAI;QACtB,4BAA4B,YAAY,CAAC,cAAc,EAAE,IAAI;QAC7D,EAAE;KACH,CAAA;IAED,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;QACjC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACvB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,MAAM,EAAE,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,MAAM,KAAK,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAA;QACjF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACvD,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;YAC7C,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAA;QACjF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACjB,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAA;IAEnD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEjC,GAAG,CAAC,qBAAqB,SAAS,CAAC,MAAM,YAAY,MAAM,CAAC,MAAM,SAAS,SAAS,CAAC,MAAM,YAAY,eAAe,CAAC,MAAM,mBAAmB,CAAC,CAAA;IAEjJ,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,wBAAwB;AAExB,KAAK,UAAU,aAAa,CAAC,UAAkB,EAAE,OAAe;IAC9D,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI;YACrC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,qBAAqB;YAChD,CAAC,CAAC,OAAO,CAAA;QAEX,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,UAAU,EAAE;YAClC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;YAC5C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC;SACnC,CAAC,CAAA;QACF,OAAO,GAAG,CAAC,EAAE,CAAA;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,0BAA0B;AAE1B;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,MAAuB;IAK/D,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,MAAM,CAAA;IAE/C,GAAG,CAAC,kCAAkC,WAAW,EAAE,CAAC,CAAA;IAEpD,6BAA6B;IAE7B,MAAM,OAAO,GAAmB,EAAE,CAAA;IAClC,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAA;IAEjC,MAAM,YAAY,GAAG,MAAM,OAAO,CAChC,4DAA4D,EAC5D,WAAW,CACZ,IAAI,EAAE,CAAA;IAEP,kCAAkC;IAClC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IAE5D,4CAA4C;IAC5C,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAA;IAC1E,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,SAAS,CAAC,CAAA;IAErE,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;QAC9C,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ;YAAE,SAAQ;QAEjC,OAAO,CAAC,IAAI,CAAC;YACX,KAAK,EAAE,KAAK,CAAC,MAAM;YACnB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK;YACL,QAAQ;YACR,GAAG,EAAE,KAAK,CAAC,QAAQ;SACpB,CAAC,CAAA;QAEF,mDAAmD;QACnD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;YAChE,IAAI,MAAM,EAAE,CAAC;gBACX,GAAG,CAAC,cAAc,KAAK,CAAC,MAAM,OAAO,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;YAC5E,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,uBAAuB,KAAK,CAAC,MAAM,sBAAsB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;YAC1F,CAAC;QACH,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,uBAAuB,KAAK,CAAC,MAAM,4BAA4B,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;QAChG,CAAC;IACH,CAAC;IAED,2BAA2B;IAE3B,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAA;IAEhD,uCAAuC;IACvC,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,eAAe,EAAE,MAAM,CAAC,CAAA;QAC3D,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAA;IAC/E,CAAC;IAED,oCAAoC;IAEpC,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,MAAM,OAAO,GAAG,YAAY,CAAsD,YAAY,EAAE;QAC9F,iBAAiB,EAAE,EAAE;QACrB,QAAQ,EAAE,EAAE;KACb,CAAC,CAAA;IACF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAA;IAEnD,4CAA4C;IAC5C,MAAM,UAAU,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAC1D,MAAM,SAAS,GAAG,MAAM,OAAO,CAC7B,0DAA0D,EAC1D,WAAW,CACZ,IAAI,EAAE,CAAA;IACP,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,SAAS,CAAC,CAAA;IACjE,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAEnD,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,SAAQ;QAErC,8DAA8D;QAC9D,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,CAAA;QACpE,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,CAAA;QAChE,MAAM,kBAAkB,GAAG,YAAY,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAA;QAEjE,IAAI,kBAAkB,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;YACvD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACrB,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAEvB,0BAA0B;YAC1B,IAAI,QAAQ,EAAE,CAAC;gBACb,uCAAuC;gBACvC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAA;gBAC9C,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,YAAY,GAAG,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;oBAC3D,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;wBACrB,YAAY,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,CAAC,CAAA;wBACnD,GAAG,CAAC,gCAAgC,MAAM,EAAE,CAAC,CAAA;oBAC/C,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,wBAAwB,MAAM,yBAAyB,CAAC,CAAA;YAC9D,CAAC;QACH,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAC1C,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAE/B,GAAG,CAAC,2BAA2B,OAAO,CAAC,MAAM,aAAa,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAA;IAErF,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAA;AACtC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
interface DreamResult {
|
|
2
|
+
phase: string;
|
|
3
|
+
duration_ms: number;
|
|
4
|
+
findings: string[];
|
|
5
|
+
actions_taken: string[];
|
|
6
|
+
improvements: number;
|
|
7
|
+
}
|
|
8
|
+
interface DreamReport {
|
|
9
|
+
timestamp: string;
|
|
10
|
+
duration_ms: number;
|
|
11
|
+
phases_completed: number;
|
|
12
|
+
total_findings: number;
|
|
13
|
+
total_actions: number;
|
|
14
|
+
total_improvements: number;
|
|
15
|
+
results: DreamResult[];
|
|
16
|
+
}
|
|
17
|
+
export declare function runDreamMode(verbose?: boolean): Promise<DreamReport>;
|
|
18
|
+
export declare function getDreamHistory(): Array<{
|
|
19
|
+
date: string;
|
|
20
|
+
summary: Record<string, number>;
|
|
21
|
+
}>;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=dream-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dream-mode.d.ts","sourceRoot":"","sources":["../src/dream-mode.ts"],"names":[],"mappings":"AA8BA,UAAU,WAAW;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,UAAU,WAAW;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,OAAO,EAAE,WAAW,EAAE,CAAA;CACvB;AAwSD,wBAAsB,YAAY,CAAC,OAAO,UAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CA2EvE;AAID,wBAAgB,eAAe,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC,CAO1F"}
|