@kernel.chat/kbot 2.17.3 → 2.19.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/share.js ADDED
@@ -0,0 +1,160 @@
1
+ // K:BOT Share — Share conversations as GitHub Gists for organic discovery
2
+ //
3
+ // Creates branded, shareable Gists from saved sessions or the current
4
+ // conversation. Each share links back to kbot, turning every user into
5
+ // a distribution channel.
6
+ //
7
+ // Usage:
8
+ // /share — share current conversation
9
+ // /share <session-id> — share a saved session
10
+ // kbot share <id> — CLI subcommand
11
+ import { execSync } from 'node:child_process';
12
+ import { getHistory } from './memory.js';
13
+ import { loadSession, saveSession } from './sessions.js';
14
+ const KBOT_URL = 'https://www.npmjs.com/package/@kernel.chat/kbot';
15
+ const REPO_URL = 'https://github.com/isaacsight/kernel';
16
+ /**
17
+ * Format a conversation into branded markdown for sharing.
18
+ */
19
+ export function formatShareMarkdown(turns, meta) {
20
+ const agent = meta?.agent || 'auto';
21
+ const date = meta?.created
22
+ ? new Date(meta.created).toLocaleDateString()
23
+ : new Date().toLocaleDateString();
24
+ const name = meta?.name || 'K:BOT Conversation';
25
+ const lines = [
26
+ `# ${name}`,
27
+ '',
28
+ `> Generated with [K:BOT](${KBOT_URL}) — 39 specialists, 216 tools, 20 AI providers`,
29
+ `> Agent: \`${agent}\` | Date: ${date}`,
30
+ '',
31
+ '---',
32
+ '',
33
+ ];
34
+ for (const turn of turns) {
35
+ if (turn.role === 'user') {
36
+ lines.push(`### You`, '', turn.content, '');
37
+ }
38
+ else {
39
+ lines.push(`### K:BOT`, '', turn.content, '');
40
+ }
41
+ lines.push('---', '');
42
+ }
43
+ lines.push('', '---', '', `*Shared from [K:BOT](${KBOT_URL}) — the open-source terminal AI agent by [kernel.chat](https://kernel.chat)*`, `*Install: \`npm install -g @kernel.chat/kbot\` | [GitHub](${REPO_URL})*`);
44
+ return lines.join('\n');
45
+ }
46
+ /**
47
+ * Check if GitHub CLI (gh) is available and authenticated.
48
+ */
49
+ function hasGitHubCLI() {
50
+ try {
51
+ execSync('gh auth status', { stdio: 'ignore', timeout: 5000 });
52
+ return true;
53
+ }
54
+ catch {
55
+ return false;
56
+ }
57
+ }
58
+ /**
59
+ * Create a GitHub Gist with the conversation and return the URL.
60
+ */
61
+ export function createGist(content, filename, description, isPublic = true) {
62
+ const flag = isPublic ? '--public' : '';
63
+ const safeDesc = description.replace(/'/g, "'\\''");
64
+ const safeFilename = filename.replace(/[^a-zA-Z0-9._-]/g, '-');
65
+ // Write content to a temp file to avoid shell escaping issues
66
+ const tmpFile = `/tmp/kbot-share-${Date.now()}.md`;
67
+ const { writeFileSync, unlinkSync } = require('node:fs');
68
+ writeFileSync(tmpFile, content, 'utf-8');
69
+ try {
70
+ const result = execSync(`gh gist create ${flag} --desc '${safeDesc}' --filename '${safeFilename}' '${tmpFile}'`, { encoding: 'utf-8', timeout: 15000 }).trim();
71
+ return result; // gh gist create returns the URL
72
+ }
73
+ finally {
74
+ try {
75
+ unlinkSync(tmpFile);
76
+ }
77
+ catch { /* ignore */ }
78
+ }
79
+ }
80
+ /**
81
+ * Copy text to system clipboard (macOS/Linux/Windows).
82
+ */
83
+ function copyToClipboard(text) {
84
+ try {
85
+ const platform = process.platform;
86
+ if (platform === 'darwin') {
87
+ execSync('pbcopy', { input: text, timeout: 3000 });
88
+ }
89
+ else if (platform === 'linux') {
90
+ execSync('xclip -selection clipboard', { input: text, timeout: 3000 });
91
+ }
92
+ else if (platform === 'win32') {
93
+ execSync('clip', { input: text, timeout: 3000 });
94
+ }
95
+ else {
96
+ return false;
97
+ }
98
+ return true;
99
+ }
100
+ catch {
101
+ return false;
102
+ }
103
+ }
104
+ /**
105
+ * Share a conversation. Tries GitHub Gist first, falls back to clipboard.
106
+ *
107
+ * @param sessionId - Optional session ID. If omitted, shares current conversation.
108
+ * @param options - Share options
109
+ */
110
+ export async function shareConversation(sessionId, options = {}) {
111
+ let turns;
112
+ let meta = {};
113
+ if (sessionId) {
114
+ // Share a saved session
115
+ const session = loadSession(sessionId);
116
+ if (!session) {
117
+ throw new Error(`Session not found: ${sessionId}`);
118
+ }
119
+ turns = session.history;
120
+ meta = {
121
+ name: options.title || session.name,
122
+ agent: session.agent,
123
+ created: session.created,
124
+ };
125
+ }
126
+ else {
127
+ // Share current conversation
128
+ turns = getHistory();
129
+ if (turns.length === 0) {
130
+ throw new Error('No conversation to share. Say something first, or specify a session ID.');
131
+ }
132
+ // Auto-save the session so it's persisted
133
+ const saved = saveSession(options.title);
134
+ meta = {
135
+ name: options.title || saved.name,
136
+ agent: saved.agent,
137
+ created: saved.created,
138
+ };
139
+ }
140
+ const markdown = formatShareMarkdown(turns, meta);
141
+ const title = meta.name || 'K:BOT Conversation';
142
+ const filename = `kbot-${title.toLowerCase().replace(/[^a-z0-9]+/g, '-').slice(0, 40)}.md`;
143
+ // Try GitHub Gist first
144
+ if (hasGitHubCLI()) {
145
+ try {
146
+ const url = createGist(markdown, filename, `${title} — shared from K:BOT`, options.public !== false);
147
+ if (url && url.startsWith('http')) {
148
+ copyToClipboard(url);
149
+ return { url, copied: true, method: 'gist', markdown };
150
+ }
151
+ }
152
+ catch {
153
+ // Fall through to clipboard
154
+ }
155
+ }
156
+ // Fallback: copy markdown to clipboard
157
+ const copied = copyToClipboard(markdown);
158
+ return { copied, method: copied ? 'clipboard' : 'stdout', markdown };
159
+ }
160
+ //# sourceMappingURL=share.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"share.js","sourceRoot":"","sources":["../src/share.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ interface AuditResult {
2
+ repo: string;
3
+ score: number;
4
+ maxScore: number;
5
+ grade: string;
6
+ sections: AuditSection[];
7
+ summary: string;
8
+ }
9
+ interface AuditSection {
10
+ name: string;
11
+ score: number;
12
+ maxScore: number;
13
+ findings: string[];
14
+ status: 'pass' | 'warn' | 'fail';
15
+ }
16
+ declare function auditRepo(repo: string): Promise<AuditResult>;
17
+ declare function formatAuditReport(result: AuditResult): string;
18
+ export declare function registerAuditTools(): void;
19
+ export { auditRepo, formatAuditReport };
20
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/tools/audit.ts"],"names":[],"mappings":"AAgCA,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,YAAY,EAAE,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;CACjC;AAUD,iBAAe,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAiN3D;AAED,iBAAS,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAgCtD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAmBzC;AAGD,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAA"}
@@ -0,0 +1,440 @@
1
+ // K:BOT Audit Tools — Full-spectrum audit of any GitHub repository
2
+ //
3
+ // Security, code quality, documentation, dependency health — all in one report.
4
+ // Designed to be shared. Every audit links back to kbot.
5
+ import { registerTool } from './index.js';
6
+ const GITHUB_API = 'https://api.github.com';
7
+ const HEADERS = {
8
+ 'User-Agent': 'KBot/2.18 (Audit)',
9
+ 'Accept': 'application/vnd.github.v3+json',
10
+ };
11
+ async function githubFetch(path) {
12
+ const res = await fetch(`${GITHUB_API}${path}`, { headers: HEADERS });
13
+ if (!res.ok)
14
+ throw new Error(`GitHub API ${res.status}: ${path}`);
15
+ return res.json();
16
+ }
17
+ async function rawFetch(repo, path, branch = 'main') {
18
+ for (const b of [branch, 'master']) {
19
+ try {
20
+ const res = await fetch(`https://raw.githubusercontent.com/${repo}/${b}/${path}`, { headers: { 'User-Agent': 'KBot/2.18' } });
21
+ if (res.ok)
22
+ return res.text();
23
+ }
24
+ catch { /* try next */ }
25
+ }
26
+ return null;
27
+ }
28
+ function gradeFromPercent(pct) {
29
+ if (pct >= 90)
30
+ return 'A';
31
+ if (pct >= 80)
32
+ return 'B';
33
+ if (pct >= 70)
34
+ return 'C';
35
+ if (pct >= 60)
36
+ return 'D';
37
+ return 'F';
38
+ }
39
+ async function auditRepo(repo) {
40
+ const sections = [];
41
+ // 1. Repository health
42
+ const repoHealth = { name: 'Repository Health', score: 0, maxScore: 20, findings: [], status: 'pass' };
43
+ try {
44
+ const data = await githubFetch(`/repos/${repo}`);
45
+ if (data.description) {
46
+ repoHealth.score += 3;
47
+ repoHealth.findings.push('Has description');
48
+ }
49
+ else
50
+ repoHealth.findings.push('Missing description');
51
+ if (data.license) {
52
+ repoHealth.score += 3;
53
+ repoHealth.findings.push(`License: ${data.license.spdx_id}`);
54
+ }
55
+ else {
56
+ repoHealth.findings.push('No license detected');
57
+ repoHealth.status = 'warn';
58
+ }
59
+ if (data.topics?.length > 0) {
60
+ repoHealth.score += 2;
61
+ repoHealth.findings.push(`${data.topics.length} topics`);
62
+ }
63
+ else
64
+ repoHealth.findings.push('No topics/tags');
65
+ if (!data.archived) {
66
+ repoHealth.score += 2;
67
+ }
68
+ else
69
+ repoHealth.findings.push('Repository is archived');
70
+ if (data.has_issues)
71
+ repoHealth.score += 1;
72
+ if (data.has_wiki)
73
+ repoHealth.score += 1;
74
+ // Activity: updated in last 90 days
75
+ const lastUpdate = new Date(data.updated_at);
76
+ const daysAgo = (Date.now() - lastUpdate.getTime()) / 86400000;
77
+ if (daysAgo < 30) {
78
+ repoHealth.score += 4;
79
+ repoHealth.findings.push(`Active — updated ${Math.floor(daysAgo)}d ago`);
80
+ }
81
+ else if (daysAgo < 90) {
82
+ repoHealth.score += 2;
83
+ repoHealth.findings.push(`Updated ${Math.floor(daysAgo)}d ago`);
84
+ }
85
+ else {
86
+ repoHealth.findings.push(`Stale — last updated ${Math.floor(daysAgo)}d ago`);
87
+ repoHealth.status = 'warn';
88
+ }
89
+ // Stars as social proof
90
+ if (data.stargazers_count >= 100) {
91
+ repoHealth.score += 4;
92
+ repoHealth.findings.push(`${data.stargazers_count} stars`);
93
+ }
94
+ else if (data.stargazers_count >= 10) {
95
+ repoHealth.score += 2;
96
+ repoHealth.findings.push(`${data.stargazers_count} stars`);
97
+ }
98
+ else
99
+ repoHealth.findings.push(`${data.stargazers_count} stars`);
100
+ }
101
+ catch (err) {
102
+ repoHealth.findings.push(`Could not fetch repo: ${err.message}`);
103
+ repoHealth.status = 'fail';
104
+ }
105
+ sections.push(repoHealth);
106
+ // 2. Documentation
107
+ const docs = { name: 'Documentation', score: 0, maxScore: 15, findings: [], status: 'pass' };
108
+ const readme = await rawFetch(repo, 'README.md');
109
+ if (readme) {
110
+ docs.score += 3;
111
+ docs.findings.push('Has README.md');
112
+ if (readme.length > 500) {
113
+ docs.score += 2;
114
+ docs.findings.push(`README: ${(readme.length / 1024).toFixed(1)}KB`);
115
+ }
116
+ else
117
+ docs.findings.push('README is short (< 500 chars)');
118
+ if (/install/i.test(readme)) {
119
+ docs.score += 2;
120
+ docs.findings.push('Has install instructions');
121
+ }
122
+ else
123
+ docs.findings.push('No install instructions found');
124
+ if (/usage|example|getting started/i.test(readme)) {
125
+ docs.score += 2;
126
+ docs.findings.push('Has usage examples');
127
+ }
128
+ else
129
+ docs.findings.push('No usage examples');
130
+ if (/api|reference|docs/i.test(readme)) {
131
+ docs.score += 1;
132
+ }
133
+ if (/badge|shield/i.test(readme)) {
134
+ docs.score += 1;
135
+ docs.findings.push('Has badges');
136
+ }
137
+ }
138
+ else {
139
+ docs.findings.push('No README.md found');
140
+ docs.status = 'fail';
141
+ }
142
+ const contributing = await rawFetch(repo, 'CONTRIBUTING.md');
143
+ if (contributing) {
144
+ docs.score += 2;
145
+ docs.findings.push('Has CONTRIBUTING.md');
146
+ }
147
+ const changelog = await rawFetch(repo, 'CHANGELOG.md');
148
+ if (changelog) {
149
+ docs.score += 2;
150
+ docs.findings.push('Has CHANGELOG.md');
151
+ }
152
+ sections.push(docs);
153
+ // 3. Security
154
+ const security = { name: 'Security', score: 0, maxScore: 15, findings: [], status: 'pass' };
155
+ const securityMd = await rawFetch(repo, 'SECURITY.md');
156
+ if (securityMd) {
157
+ security.score += 3;
158
+ security.findings.push('Has SECURITY.md');
159
+ }
160
+ else
161
+ security.findings.push('No SECURITY.md');
162
+ const gitignore = await rawFetch(repo, '.gitignore');
163
+ if (gitignore) {
164
+ security.score += 2;
165
+ security.findings.push('Has .gitignore');
166
+ if (/\.env/m.test(gitignore)) {
167
+ security.score += 3;
168
+ security.findings.push('.env is gitignored');
169
+ }
170
+ else {
171
+ security.findings.push('.env NOT in .gitignore');
172
+ security.status = 'warn';
173
+ }
174
+ if (/node_modules|__pycache__|target\//m.test(gitignore))
175
+ security.score += 1;
176
+ }
177
+ else {
178
+ security.findings.push('No .gitignore');
179
+ security.status = 'warn';
180
+ }
181
+ // Check for common security files
182
+ const codeowners = await rawFetch(repo, 'CODEOWNERS') || await rawFetch(repo, '.github/CODEOWNERS');
183
+ if (codeowners) {
184
+ security.score += 2;
185
+ security.findings.push('Has CODEOWNERS');
186
+ }
187
+ // Check branch protection via API (may fail without auth)
188
+ try {
189
+ const branches = await githubFetch(`/repos/${repo}/branches?per_page=5`);
190
+ const defaultBranch = branches.find((b) => b.name === 'main' || b.name === 'master');
191
+ if (defaultBranch?.protected) {
192
+ security.score += 4;
193
+ security.findings.push('Default branch is protected');
194
+ }
195
+ else
196
+ security.findings.push('Default branch is NOT protected');
197
+ }
198
+ catch {
199
+ security.findings.push('Could not check branch protection');
200
+ }
201
+ sections.push(security);
202
+ // 4. Code Quality
203
+ const quality = { name: 'Code Quality', score: 0, maxScore: 20, findings: [], status: 'pass' };
204
+ // Check for linter/formatter configs
205
+ const eslint = await rawFetch(repo, '.eslintrc.json') || await rawFetch(repo, '.eslintrc.js') || await rawFetch(repo, 'eslint.config.js');
206
+ if (eslint) {
207
+ quality.score += 3;
208
+ quality.findings.push('Has ESLint config');
209
+ }
210
+ const prettier = await rawFetch(repo, '.prettierrc') || await rawFetch(repo, '.prettierrc.json');
211
+ if (prettier) {
212
+ quality.score += 2;
213
+ quality.findings.push('Has Prettier config');
214
+ }
215
+ const editorconfig = await rawFetch(repo, '.editorconfig');
216
+ if (editorconfig) {
217
+ quality.score += 1;
218
+ quality.findings.push('Has .editorconfig');
219
+ }
220
+ // TypeScript
221
+ const tsconfig = await rawFetch(repo, 'tsconfig.json');
222
+ if (tsconfig) {
223
+ quality.score += 3;
224
+ quality.findings.push('Uses TypeScript');
225
+ if (/"strict"\s*:\s*true/i.test(tsconfig)) {
226
+ quality.score += 2;
227
+ quality.findings.push('Strict mode enabled');
228
+ }
229
+ }
230
+ // CI/CD
231
+ const ghaWorkflow = await rawFetch(repo, '.github/workflows/ci.yml') ||
232
+ await rawFetch(repo, '.github/workflows/ci.yaml') ||
233
+ await rawFetch(repo, '.github/workflows/test.yml') ||
234
+ await rawFetch(repo, '.circleci/config.yml') ||
235
+ await rawFetch(repo, '.travis.yml');
236
+ if (ghaWorkflow) {
237
+ quality.score += 4;
238
+ quality.findings.push('Has CI/CD pipeline');
239
+ }
240
+ else
241
+ quality.findings.push('No CI/CD detected');
242
+ // Tests
243
+ const pkg = await rawFetch(repo, 'package.json');
244
+ if (pkg) {
245
+ try {
246
+ const pkgData = JSON.parse(pkg);
247
+ if (pkgData.scripts?.test && pkgData.scripts.test !== 'echo "Error: no test specified" && exit 1') {
248
+ quality.score += 3;
249
+ quality.findings.push(`Test script: ${pkgData.scripts.test.slice(0, 60)}`);
250
+ }
251
+ else {
252
+ quality.findings.push('No test script configured');
253
+ quality.status = 'warn';
254
+ }
255
+ // Check for outdated/vulnerable patterns
256
+ const deps = { ...pkgData.dependencies, ...pkgData.devDependencies };
257
+ const depCount = Object.keys(deps || {}).length;
258
+ quality.findings.push(`${depCount} dependencies`);
259
+ if (depCount > 100) {
260
+ quality.findings.push('High dependency count (>100) — supply chain risk');
261
+ quality.status = 'warn';
262
+ }
263
+ }
264
+ catch { /* not valid JSON */ }
265
+ }
266
+ const pyproject = await rawFetch(repo, 'pyproject.toml');
267
+ if (pyproject) {
268
+ quality.score += 2;
269
+ quality.findings.push('Has pyproject.toml');
270
+ if (/\[tool\.pytest/m.test(pyproject)) {
271
+ quality.score += 2;
272
+ quality.findings.push('Has pytest config');
273
+ }
274
+ if (/\[tool\.(ruff|black|isort)/m.test(pyproject)) {
275
+ quality.score += 1;
276
+ quality.findings.push('Has Python linter config');
277
+ }
278
+ }
279
+ const cargoToml = await rawFetch(repo, 'Cargo.toml');
280
+ if (cargoToml) {
281
+ quality.score += 2;
282
+ quality.findings.push('Uses Rust (Cargo.toml)');
283
+ if (/clippy/i.test(ghaWorkflow || '')) {
284
+ quality.score += 2;
285
+ quality.findings.push('Runs clippy in CI');
286
+ }
287
+ }
288
+ sections.push(quality);
289
+ // 5. Community & Governance
290
+ const community = { name: 'Community', score: 0, maxScore: 15, findings: [], status: 'pass' };
291
+ const coc = await rawFetch(repo, 'CODE_OF_CONDUCT.md');
292
+ if (coc) {
293
+ community.score += 3;
294
+ community.findings.push('Has Code of Conduct');
295
+ }
296
+ if (contributing)
297
+ community.score += 3;
298
+ try {
299
+ const issues = await githubFetch(`/repos/${repo}/issues?state=open&per_page=5`);
300
+ if (Array.isArray(issues)) {
301
+ community.findings.push(`${issues.length}+ open issues`);
302
+ // Check if issues have labels
303
+ const labeled = issues.filter((i) => i.labels?.length > 0);
304
+ if (labeled.length > 0) {
305
+ community.score += 2;
306
+ community.findings.push('Issues are labeled');
307
+ }
308
+ // Check for issue templates
309
+ const issueTemplate = await rawFetch(repo, '.github/ISSUE_TEMPLATE/bug_report.md') ||
310
+ await rawFetch(repo, '.github/ISSUE_TEMPLATE.md');
311
+ if (issueTemplate) {
312
+ community.score += 2;
313
+ community.findings.push('Has issue templates');
314
+ }
315
+ }
316
+ }
317
+ catch { /* rate limited */ }
318
+ const prTemplate = await rawFetch(repo, '.github/PULL_REQUEST_TEMPLATE.md');
319
+ if (prTemplate) {
320
+ community.score += 2;
321
+ community.findings.push('Has PR template');
322
+ }
323
+ try {
324
+ const contributors = await githubFetch(`/repos/${repo}/contributors?per_page=100`);
325
+ if (Array.isArray(contributors)) {
326
+ community.score += Math.min(3, Math.floor(contributors.length / 5));
327
+ community.findings.push(`${contributors.length} contributors`);
328
+ }
329
+ }
330
+ catch { /* rate limited */ }
331
+ sections.push(community);
332
+ // 6. DevOps & Infrastructure
333
+ const devops = { name: 'DevOps', score: 0, maxScore: 15, findings: [], status: 'pass' };
334
+ const dockerfile = await rawFetch(repo, 'Dockerfile');
335
+ if (dockerfile) {
336
+ devops.score += 3;
337
+ devops.findings.push('Has Dockerfile');
338
+ if (/HEALTHCHECK/i.test(dockerfile)) {
339
+ devops.score += 1;
340
+ devops.findings.push('Docker health check configured');
341
+ }
342
+ if (/FROM .* AS /i.test(dockerfile)) {
343
+ devops.score += 1;
344
+ devops.findings.push('Multi-stage Docker build');
345
+ }
346
+ }
347
+ const compose = await rawFetch(repo, 'docker-compose.yml') || await rawFetch(repo, 'docker-compose.yaml');
348
+ if (compose) {
349
+ devops.score += 2;
350
+ devops.findings.push('Has docker-compose');
351
+ }
352
+ if (ghaWorkflow)
353
+ devops.score += 3;
354
+ const lockfile = await rawFetch(repo, 'package-lock.json') || await rawFetch(repo, 'yarn.lock') ||
355
+ await rawFetch(repo, 'pnpm-lock.yaml') || await rawFetch(repo, 'Cargo.lock') ||
356
+ await rawFetch(repo, 'poetry.lock');
357
+ if (lockfile !== null) {
358
+ devops.score += 3;
359
+ devops.findings.push('Has lockfile (reproducible builds)');
360
+ }
361
+ else {
362
+ devops.findings.push('No lockfile');
363
+ devops.status = 'warn';
364
+ }
365
+ const renovate = await rawFetch(repo, 'renovate.json') || await rawFetch(repo, '.github/dependabot.yml');
366
+ if (renovate) {
367
+ devops.score += 3;
368
+ devops.findings.push('Has automated dependency updates');
369
+ }
370
+ sections.push(devops);
371
+ // Calculate totals
372
+ const totalScore = sections.reduce((sum, s) => sum + s.score, 0);
373
+ const totalMax = sections.reduce((sum, s) => sum + s.maxScore, 0);
374
+ const pct = Math.round((totalScore / totalMax) * 100);
375
+ const grade = gradeFromPercent(pct);
376
+ // Set section statuses
377
+ for (const s of sections) {
378
+ const sPct = s.maxScore > 0 ? (s.score / s.maxScore) * 100 : 0;
379
+ if (s.status !== 'fail') {
380
+ s.status = sPct >= 60 ? 'pass' : 'warn';
381
+ }
382
+ }
383
+ // Generate summary
384
+ const fails = sections.filter(s => s.status === 'fail');
385
+ const warns = sections.filter(s => s.status === 'warn');
386
+ const summary = fails.length > 0
387
+ ? `${fails.length} critical issue(s) found. ${warns.length} warning(s).`
388
+ : warns.length > 0
389
+ ? `No critical issues. ${warns.length} area(s) need improvement.`
390
+ : 'All checks passed. Well-maintained repository.';
391
+ return { repo, score: totalScore, maxScore: totalMax, grade, sections, summary };
392
+ }
393
+ function formatAuditReport(result) {
394
+ const statusIcon = (s) => s === 'pass' ? '✅' : s === 'warn' ? '⚠️' : '❌';
395
+ const pct = Math.round((result.score / result.maxScore) * 100);
396
+ const lines = [
397
+ `# Audit Report: ${result.repo}`,
398
+ '',
399
+ `> Generated by [K:BOT](https://www.npmjs.com/package/@kernel.chat/kbot) — open-source AI agent`,
400
+ '',
401
+ `## Score: ${result.score}/${result.maxScore} (${pct}%) — Grade ${result.grade}`,
402
+ '',
403
+ `**${result.summary}**`,
404
+ '',
405
+ ];
406
+ for (const section of result.sections) {
407
+ const sPct = section.maxScore > 0 ? Math.round((section.score / section.maxScore) * 100) : 0;
408
+ lines.push(`### ${statusIcon(section.status)} ${section.name} — ${section.score}/${section.maxScore} (${sPct}%)`);
409
+ for (const f of section.findings) {
410
+ lines.push(`- ${f}`);
411
+ }
412
+ lines.push('');
413
+ }
414
+ lines.push('---', '', `*Audited by [K:BOT](https://www.npmjs.com/package/@kernel.chat/kbot) — 39 specialists, 216 tools, 20 AI providers*`, `*Install: \`npm install -g @kernel.chat/kbot\` | [GitHub](https://github.com/isaacsight/kernel)*`);
415
+ return lines.join('\n');
416
+ }
417
+ export function registerAuditTools() {
418
+ registerTool({
419
+ name: 'repo_audit',
420
+ description: 'Run a full audit on any GitHub repository. Checks security, documentation, code quality, CI/CD, community health, and DevOps practices. Returns a scored report with grade (A-F). Use to evaluate any open-source project before using or contributing.',
421
+ parameters: {
422
+ repo: { type: 'string', description: 'Repository in "owner/repo" format (e.g., "facebook/react")', required: true },
423
+ },
424
+ tier: 'free',
425
+ timeout: 60_000,
426
+ async execute(args) {
427
+ const repo = String(args.repo);
428
+ try {
429
+ const result = await auditRepo(repo);
430
+ return formatAuditReport(result);
431
+ }
432
+ catch (err) {
433
+ return `Audit failed: ${err instanceof Error ? err.message : String(err)}`;
434
+ }
435
+ },
436
+ });
437
+ }
438
+ // Export for CLI subcommand
439
+ export { auditRepo, formatAuditReport };
440
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/tools/audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function registerContributeTools(): void;
2
+ //# sourceMappingURL=contribute.d.ts.map