@kernel.chat/kbot 1.3.1 โ 2.3.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/README.md +94 -0
- package/dist/agent.d.ts +9 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +576 -119
- package/dist/agent.js.map +1 -1
- package/dist/auth.d.ts +20 -35
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +224 -66
- package/dist/auth.js.map +1 -1
- package/dist/auth.test.d.ts +2 -0
- package/dist/auth.test.d.ts.map +1 -0
- package/dist/auth.test.js +89 -0
- package/dist/auth.test.js.map +1 -0
- package/dist/build-targets.d.ts +37 -0
- package/dist/build-targets.d.ts.map +1 -0
- package/dist/build-targets.js +507 -0
- package/dist/build-targets.js.map +1 -0
- package/dist/cli.js +1210 -130
- package/dist/cli.js.map +1 -1
- package/dist/context.d.ts +2 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +72 -22
- package/dist/context.js.map +1 -1
- package/dist/hooks.d.ts +27 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +145 -0
- package/dist/hooks.js.map +1 -0
- package/dist/ide/acp-server.d.ts +6 -0
- package/dist/ide/acp-server.d.ts.map +1 -0
- package/dist/ide/acp-server.js +319 -0
- package/dist/ide/acp-server.js.map +1 -0
- package/dist/ide/bridge.d.ts +128 -0
- package/dist/ide/bridge.d.ts.map +1 -0
- package/dist/ide/bridge.js +185 -0
- package/dist/ide/bridge.js.map +1 -0
- package/dist/ide/index.d.ts +5 -0
- package/dist/ide/index.d.ts.map +1 -0
- package/dist/ide/index.js +11 -0
- package/dist/ide/index.js.map +1 -0
- package/dist/ide/lsp-bridge.d.ts +27 -0
- package/dist/ide/lsp-bridge.d.ts.map +1 -0
- package/dist/ide/lsp-bridge.js +267 -0
- package/dist/ide/lsp-bridge.js.map +1 -0
- package/dist/ide/mcp-server.d.ts +7 -0
- package/dist/ide/mcp-server.d.ts.map +1 -0
- package/dist/ide/mcp-server.js +451 -0
- package/dist/ide/mcp-server.js.map +1 -0
- package/dist/learning.d.ts +179 -0
- package/dist/learning.d.ts.map +1 -0
- package/dist/learning.js +829 -0
- package/dist/learning.js.map +1 -0
- package/dist/learning.test.d.ts +2 -0
- package/dist/learning.test.d.ts.map +1 -0
- package/dist/learning.test.js +115 -0
- package/dist/learning.test.js.map +1 -0
- package/dist/matrix.d.ts +49 -0
- package/dist/matrix.d.ts.map +1 -0
- package/dist/matrix.js +302 -0
- package/dist/matrix.js.map +1 -0
- package/dist/memory.d.ts +11 -0
- package/dist/memory.d.ts.map +1 -1
- package/dist/memory.js +54 -2
- package/dist/memory.js.map +1 -1
- package/dist/multimodal.d.ts +57 -0
- package/dist/multimodal.d.ts.map +1 -0
- package/dist/multimodal.js +206 -0
- package/dist/multimodal.js.map +1 -0
- package/dist/permissions.d.ts +21 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +122 -0
- package/dist/permissions.js.map +1 -0
- package/dist/planner.d.ts +54 -0
- package/dist/planner.d.ts.map +1 -0
- package/dist/planner.js +298 -0
- package/dist/planner.js.map +1 -0
- package/dist/plugins.d.ts +30 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +135 -0
- package/dist/plugins.js.map +1 -0
- package/dist/sessions.d.ts +38 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/sessions.js +177 -0
- package/dist/sessions.js.map +1 -0
- package/dist/streaming.d.ts +88 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +317 -0
- package/dist/streaming.js.map +1 -0
- package/dist/tools/background.d.ts +2 -0
- package/dist/tools/background.d.ts.map +1 -0
- package/dist/tools/background.js +163 -0
- package/dist/tools/background.js.map +1 -0
- package/dist/tools/bash.d.ts.map +1 -1
- package/dist/tools/bash.js +26 -1
- package/dist/tools/bash.js.map +1 -1
- package/dist/tools/browser.js +7 -7
- package/dist/tools/browser.js.map +1 -1
- package/dist/tools/build-matrix.d.ts +2 -0
- package/dist/tools/build-matrix.d.ts.map +1 -0
- package/dist/tools/build-matrix.js +463 -0
- package/dist/tools/build-matrix.js.map +1 -0
- package/dist/tools/computer.js +5 -5
- package/dist/tools/computer.js.map +1 -1
- package/dist/tools/fetch.d.ts +2 -0
- package/dist/tools/fetch.d.ts.map +1 -0
- package/dist/tools/fetch.js +106 -0
- package/dist/tools/fetch.js.map +1 -0
- package/dist/tools/files.d.ts.map +1 -1
- package/dist/tools/files.js +112 -6
- package/dist/tools/files.js.map +1 -1
- package/dist/tools/git.js +3 -3
- package/dist/tools/git.js.map +1 -1
- package/dist/tools/github.d.ts +2 -0
- package/dist/tools/github.d.ts.map +1 -0
- package/dist/tools/github.js +196 -0
- package/dist/tools/github.js.map +1 -0
- package/dist/tools/index.d.ts +29 -5
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +136 -20
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/index.test.d.ts +2 -0
- package/dist/tools/index.test.d.ts.map +1 -0
- package/dist/tools/index.test.js +162 -0
- package/dist/tools/index.test.js.map +1 -0
- package/dist/tools/matrix.d.ts +2 -0
- package/dist/tools/matrix.d.ts.map +1 -0
- package/dist/tools/matrix.js +79 -0
- package/dist/tools/matrix.js.map +1 -0
- package/dist/tools/mcp-client.d.ts +2 -0
- package/dist/tools/mcp-client.d.ts.map +1 -0
- package/dist/tools/mcp-client.js +295 -0
- package/dist/tools/mcp-client.js.map +1 -0
- package/dist/tools/notebook.d.ts +2 -0
- package/dist/tools/notebook.d.ts.map +1 -0
- package/dist/tools/notebook.js +207 -0
- package/dist/tools/notebook.js.map +1 -0
- package/dist/tools/openclaw.d.ts +2 -0
- package/dist/tools/openclaw.d.ts.map +1 -0
- package/dist/tools/openclaw.js +187 -0
- package/dist/tools/openclaw.js.map +1 -0
- package/dist/tools/parallel.d.ts +2 -0
- package/dist/tools/parallel.d.ts.map +1 -0
- package/dist/tools/parallel.js +60 -0
- package/dist/tools/parallel.js.map +1 -0
- package/dist/tools/sandbox.d.ts +2 -0
- package/dist/tools/sandbox.d.ts.map +1 -0
- package/dist/tools/sandbox.js +352 -0
- package/dist/tools/sandbox.js.map +1 -0
- package/dist/tools/search.d.ts.map +1 -1
- package/dist/tools/search.js +135 -28
- package/dist/tools/search.js.map +1 -1
- package/dist/tools/subagent.d.ts +4 -0
- package/dist/tools/subagent.d.ts.map +1 -0
- package/dist/tools/subagent.js +260 -0
- package/dist/tools/subagent.js.map +1 -0
- package/dist/tools/tasks.d.ts +14 -0
- package/dist/tools/tasks.d.ts.map +1 -0
- package/dist/tools/tasks.js +210 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/tools/worktree.d.ts +2 -0
- package/dist/tools/worktree.d.ts.map +1 -0
- package/dist/tools/worktree.js +223 -0
- package/dist/tools/worktree.js.map +1 -0
- package/dist/tui.d.ts +73 -0
- package/dist/tui.d.ts.map +1 -0
- package/dist/tui.js +257 -0
- package/dist/tui.js.map +1 -0
- package/dist/ui.d.ts +11 -19
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +143 -171
- package/dist/ui.js.map +1 -1
- package/dist/updater.d.ts +3 -0
- package/dist/updater.d.ts.map +1 -0
- package/dist/updater.js +70 -0
- package/dist/updater.js.map +1 -0
- package/install.sh +5 -7
- package/package.json +8 -4
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
// K:BOT Fetch Tool โ URL content fetching with SSRF protection
|
|
2
|
+
// Fetches web content and strips HTML โ plain text.
|
|
3
|
+
import { registerTool } from './index.js';
|
|
4
|
+
/** Private/reserved IP patterns โ block SSRF */
|
|
5
|
+
const BLOCKED_HOSTS = [
|
|
6
|
+
/^localhost$/i,
|
|
7
|
+
/^127\.\d+\.\d+\.\d+$/,
|
|
8
|
+
/^10\.\d+\.\d+\.\d+$/,
|
|
9
|
+
/^172\.(1[6-9]|2\d|3[01])\.\d+\.\d+$/,
|
|
10
|
+
/^192\.168\.\d+\.\d+$/,
|
|
11
|
+
/^0\.0\.0\.0$/,
|
|
12
|
+
/^::1$/,
|
|
13
|
+
/^fd[0-9a-f]{2}:/i,
|
|
14
|
+
/^fe80:/i,
|
|
15
|
+
/^169\.254\.\d+\.\d+$/,
|
|
16
|
+
/\.local$/i,
|
|
17
|
+
];
|
|
18
|
+
function isBlockedHost(hostname) {
|
|
19
|
+
return BLOCKED_HOSTS.some(p => p.test(hostname));
|
|
20
|
+
}
|
|
21
|
+
/** Strip HTML tags and decode entities โ plain text */
|
|
22
|
+
function htmlToText(html) {
|
|
23
|
+
return html
|
|
24
|
+
// Remove script/style blocks
|
|
25
|
+
.replace(/<script[\s\S]*?<\/script>/gi, '')
|
|
26
|
+
.replace(/<style[\s\S]*?<\/style>/gi, '')
|
|
27
|
+
// Convert block elements to newlines
|
|
28
|
+
.replace(/<\/?(p|div|br|h[1-6]|li|tr|blockquote|pre|hr)[^>]*>/gi, '\n')
|
|
29
|
+
// Remove all remaining tags
|
|
30
|
+
.replace(/<[^>]+>/g, '')
|
|
31
|
+
// Decode common entities
|
|
32
|
+
.replace(/&/g, '&')
|
|
33
|
+
.replace(/</g, '<')
|
|
34
|
+
.replace(/>/g, '>')
|
|
35
|
+
.replace(/"/g, '"')
|
|
36
|
+
.replace(/'/g, "'")
|
|
37
|
+
.replace(/ /g, ' ')
|
|
38
|
+
// Collapse whitespace
|
|
39
|
+
.replace(/[ \t]+/g, ' ')
|
|
40
|
+
.replace(/\n{3,}/g, '\n\n')
|
|
41
|
+
.trim();
|
|
42
|
+
}
|
|
43
|
+
export function registerFetchTools() {
|
|
44
|
+
registerTool({
|
|
45
|
+
name: 'url_fetch',
|
|
46
|
+
description: 'Fetch the content of a URL and return it as plain text. Strips HTML. Useful for reading documentation, APIs, or web pages.',
|
|
47
|
+
parameters: {
|
|
48
|
+
url: { type: 'string', description: 'The URL to fetch', required: true },
|
|
49
|
+
max_length: { type: 'number', description: 'Maximum characters to return (default: 20000)' },
|
|
50
|
+
},
|
|
51
|
+
tier: 'free',
|
|
52
|
+
async execute(args) {
|
|
53
|
+
const urlStr = String(args.url);
|
|
54
|
+
const maxLength = typeof args.max_length === 'number' ? args.max_length : 20000;
|
|
55
|
+
let parsed;
|
|
56
|
+
try {
|
|
57
|
+
parsed = new URL(urlStr);
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return `Error: Invalid URL: ${urlStr}`;
|
|
61
|
+
}
|
|
62
|
+
if (!['http:', 'https:'].includes(parsed.protocol)) {
|
|
63
|
+
return `Error: Only http/https URLs are supported`;
|
|
64
|
+
}
|
|
65
|
+
if (isBlockedHost(parsed.hostname)) {
|
|
66
|
+
return `Error: Blocked host (private/reserved IP range)`;
|
|
67
|
+
}
|
|
68
|
+
try {
|
|
69
|
+
const controller = new AbortController();
|
|
70
|
+
const timeout = setTimeout(() => controller.abort(), 15000);
|
|
71
|
+
const res = await fetch(urlStr, {
|
|
72
|
+
headers: {
|
|
73
|
+
'User-Agent': 'KBot/1.2 (URL Fetch Tool)',
|
|
74
|
+
'Accept': 'text/html,application/json,text/plain,*/*',
|
|
75
|
+
},
|
|
76
|
+
signal: controller.signal,
|
|
77
|
+
redirect: 'follow',
|
|
78
|
+
});
|
|
79
|
+
clearTimeout(timeout);
|
|
80
|
+
if (!res.ok) {
|
|
81
|
+
return `Error: HTTP ${res.status} ${res.statusText}`;
|
|
82
|
+
}
|
|
83
|
+
const contentType = res.headers.get('content-type') || '';
|
|
84
|
+
const rawText = await res.text();
|
|
85
|
+
let text;
|
|
86
|
+
if (contentType.includes('text/html')) {
|
|
87
|
+
text = htmlToText(rawText);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
text = rawText;
|
|
91
|
+
}
|
|
92
|
+
if (text.length > maxLength) {
|
|
93
|
+
text = text.slice(0, maxLength) + `\n\n... (truncated at ${maxLength} chars, total: ${rawText.length})`;
|
|
94
|
+
}
|
|
95
|
+
return text || '(empty response)';
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
if (err instanceof Error && err.name === 'AbortError') {
|
|
99
|
+
return 'Error: Request timed out (15s)';
|
|
100
|
+
}
|
|
101
|
+
return `Error: ${err instanceof Error ? err.message : String(err)}`;
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../src/tools/fetch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"AAmFA,wBAAgB,iBAAiB,IAAI,IAAI,CAwLxC"}
|
package/dist/tools/files.js
CHANGED
|
@@ -1,8 +1,82 @@
|
|
|
1
1
|
// K:BOT File Tools โ Read, write, edit, glob, grep
|
|
2
2
|
// All operations are local โ zero API calls.
|
|
3
|
-
|
|
3
|
+
// Supports diff-before-apply in normal/strict modes.
|
|
4
|
+
import { readFileSync, writeFileSync, existsSync, statSync, mkdirSync } from 'node:fs';
|
|
4
5
|
import { execSync } from 'node:child_process';
|
|
6
|
+
import { dirname, basename } from 'node:path';
|
|
7
|
+
import chalk from 'chalk';
|
|
5
8
|
import { registerTool } from './index.js';
|
|
9
|
+
import { getPermissionMode } from '../permissions.js';
|
|
10
|
+
/** Show a colored diff preview to stderr and return true if user approves */
|
|
11
|
+
async function showDiffPreview(path, oldContent, newContent) {
|
|
12
|
+
const mode = getPermissionMode();
|
|
13
|
+
if (mode === 'permissive')
|
|
14
|
+
return true; // Auto-approve
|
|
15
|
+
const oldLines = oldContent.split('\n');
|
|
16
|
+
const newLines = newContent.split('\n');
|
|
17
|
+
// Simple diff โ show changed/added/removed lines (max 30 lines shown)
|
|
18
|
+
process.stderr.write(`\n ${chalk.bold(basename(path))} ${chalk.dim('โ proposed changes:')}\n`);
|
|
19
|
+
process.stderr.write(` ${chalk.dim('โ'.repeat(50))}\n`);
|
|
20
|
+
let diffLines = 0;
|
|
21
|
+
const maxShow = 30;
|
|
22
|
+
// For small files or complete rewrites, show new content preview
|
|
23
|
+
if (oldContent === '' || oldLines.length <= 5) {
|
|
24
|
+
for (const line of newLines.slice(0, maxShow)) {
|
|
25
|
+
process.stderr.write(` ${chalk.green('+')} ${line}\n`);
|
|
26
|
+
diffLines++;
|
|
27
|
+
}
|
|
28
|
+
if (newLines.length > maxShow) {
|
|
29
|
+
process.stderr.write(` ${chalk.dim(` +${newLines.length - maxShow} more lines`)}\n`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// Show a context diff
|
|
34
|
+
let i = 0, j = 0;
|
|
35
|
+
while (i < oldLines.length || j < newLines.length) {
|
|
36
|
+
if (diffLines >= maxShow) {
|
|
37
|
+
const remaining = Math.max(oldLines.length - i, newLines.length - j);
|
|
38
|
+
if (remaining > 0)
|
|
39
|
+
process.stderr.write(` ${chalk.dim(` +${remaining} more lines`)}\n`);
|
|
40
|
+
break;
|
|
41
|
+
}
|
|
42
|
+
if (i < oldLines.length && j < newLines.length && oldLines[i] === newLines[j]) {
|
|
43
|
+
// Same line โ skip (only show context around changes)
|
|
44
|
+
i++;
|
|
45
|
+
j++;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
// Show removed lines
|
|
49
|
+
if (i < oldLines.length && (j >= newLines.length || oldLines[i] !== newLines[j])) {
|
|
50
|
+
process.stderr.write(` ${chalk.red('-')} ${oldLines[i]}\n`);
|
|
51
|
+
i++;
|
|
52
|
+
diffLines++;
|
|
53
|
+
}
|
|
54
|
+
// Show added lines
|
|
55
|
+
if (j < newLines.length && (i >= oldLines.length || oldLines[i - 1] !== newLines[j])) {
|
|
56
|
+
process.stderr.write(` ${chalk.green('+')} ${newLines[j]}\n`);
|
|
57
|
+
j++;
|
|
58
|
+
diffLines++;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
process.stderr.write(` ${chalk.dim('โ'.repeat(50))}\n`);
|
|
63
|
+
// In strict mode, always confirm. In normal mode, confirm for overwrites.
|
|
64
|
+
if (mode === 'strict' || (mode === 'normal' && oldContent !== '')) {
|
|
65
|
+
const { createInterface } = await import('node:readline');
|
|
66
|
+
const rl = createInterface({ input: process.stdin, output: process.stderr });
|
|
67
|
+
const answer = await new Promise((resolve) => {
|
|
68
|
+
rl.question(` ${chalk.bold('Apply?')} ${chalk.dim('[Y/n]')} `, (a) => {
|
|
69
|
+
resolve(a.trim().toLowerCase());
|
|
70
|
+
rl.close();
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
if (answer === 'n' || answer === 'no') {
|
|
74
|
+
process.stderr.write(` ${chalk.red('โ')} Skipped\n`);
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
6
80
|
export function registerFileTools() {
|
|
7
81
|
registerTool({
|
|
8
82
|
name: 'read_file',
|
|
@@ -41,6 +115,12 @@ export function registerFileTools() {
|
|
|
41
115
|
async execute(args) {
|
|
42
116
|
const path = String(args.path);
|
|
43
117
|
const content = String(args.content);
|
|
118
|
+
const existing = existsSync(path) ? readFileSync(path, 'utf-8') : '';
|
|
119
|
+
// Diff preview in normal/strict mode
|
|
120
|
+
const approved = await showDiffPreview(path, existing, content);
|
|
121
|
+
if (!approved)
|
|
122
|
+
return `Skipped: write to ${path} was denied by user`;
|
|
123
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
44
124
|
writeFileSync(path, content);
|
|
45
125
|
return `Written ${content.length} bytes to ${path}`;
|
|
46
126
|
},
|
|
@@ -67,6 +147,10 @@ export function registerFileTools() {
|
|
|
67
147
|
if (count > 1)
|
|
68
148
|
return `Error: old_string found ${count} times โ must be unique. Add more context.`;
|
|
69
149
|
const updated = content.replace(old_string, new_string);
|
|
150
|
+
// Diff preview in normal/strict mode
|
|
151
|
+
const approved = await showDiffPreview(path, old_string, new_string);
|
|
152
|
+
if (!approved)
|
|
153
|
+
return `Skipped: edit to ${path} was denied by user`;
|
|
70
154
|
writeFileSync(path, updated);
|
|
71
155
|
return `Edited ${path}: replaced 1 occurrence`;
|
|
72
156
|
},
|
|
@@ -84,10 +168,10 @@ export function registerFileTools() {
|
|
|
84
168
|
const cwd = args.path ? String(args.path) : process.cwd();
|
|
85
169
|
try {
|
|
86
170
|
// Use find for simple patterns, or shell glob expansion
|
|
87
|
-
const result = execSync(`find ${cwd} -path '*/${pattern}' -type f 2>/dev/null | head -50`, { encoding: 'utf-8', timeout: 10000 }).trim();
|
|
171
|
+
const result = execSync(`find "${cwd}" -path '*/${pattern}' -type f 2>/dev/null | head -50`, { encoding: 'utf-8', timeout: 10000 }).trim();
|
|
88
172
|
if (!result) {
|
|
89
173
|
// Fallback to using shell expansion
|
|
90
|
-
const result2 = execSync(`ls -1 ${cwd}/${pattern} 2>/dev/null | head -50`, { encoding: 'utf-8', timeout: 10000 }).trim();
|
|
174
|
+
const result2 = execSync(`ls -1 "${cwd}"/${pattern} 2>/dev/null | head -50`, { encoding: 'utf-8', timeout: 10000 }).trim();
|
|
91
175
|
return result2 || 'No files found';
|
|
92
176
|
}
|
|
93
177
|
return result;
|
|
@@ -113,8 +197,8 @@ export function registerFileTools() {
|
|
|
113
197
|
try {
|
|
114
198
|
// Prefer ripgrep, fall back to grep
|
|
115
199
|
const cmd = existsSync('/usr/bin/rg') || existsSync('/usr/local/bin/rg') || existsSync('/opt/homebrew/bin/rg')
|
|
116
|
-
? `rg -n --max-count 30 ${typeFlag} '${pattern.replace(/'/g, "\\'")}' ${searchPath} 2>/dev/null`
|
|
117
|
-
: `grep -rn --include='*.${args.type || '*'}' '${pattern.replace(/'/g, "\\'")}' ${searchPath} 2>/dev/null | head -30`;
|
|
200
|
+
? `rg -n --max-count 30 ${typeFlag} '${pattern.replace(/'/g, "\\'")}' "${searchPath}" 2>/dev/null`
|
|
201
|
+
: `grep -rn --include='*.${args.type || '*'}' '${pattern.replace(/'/g, "\\'")}' "${searchPath}" 2>/dev/null | head -30`;
|
|
118
202
|
const result = execSync(cmd, { encoding: 'utf-8', timeout: 15000 }).trim();
|
|
119
203
|
return result || 'No matches found';
|
|
120
204
|
}
|
|
@@ -123,6 +207,28 @@ export function registerFileTools() {
|
|
|
123
207
|
}
|
|
124
208
|
},
|
|
125
209
|
});
|
|
210
|
+
registerTool({
|
|
211
|
+
name: 'multi_file_write',
|
|
212
|
+
description: 'Write multiple files in one call. Auto-creates parent directories. Ideal for scaffolding projects.',
|
|
213
|
+
parameters: {
|
|
214
|
+
files: { type: 'array', description: 'Array of {path, content} objects. Each file will be created/overwritten.', required: true },
|
|
215
|
+
},
|
|
216
|
+
tier: 'free',
|
|
217
|
+
async execute(args) {
|
|
218
|
+
const files = args.files;
|
|
219
|
+
if (!Array.isArray(files) || files.length === 0)
|
|
220
|
+
return 'Error: files must be a non-empty array of {path, content}';
|
|
221
|
+
const results = [];
|
|
222
|
+
for (const f of files) {
|
|
223
|
+
const path = String(f.path);
|
|
224
|
+
const content = String(f.content);
|
|
225
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
226
|
+
writeFileSync(path, content);
|
|
227
|
+
results.push(` ${path} (${content.length} bytes)`);
|
|
228
|
+
}
|
|
229
|
+
return `Written ${files.length} files:\n${results.join('\n')}`;
|
|
230
|
+
},
|
|
231
|
+
});
|
|
126
232
|
registerTool({
|
|
127
233
|
name: 'list_directory',
|
|
128
234
|
description: 'List files and directories in a path. Shows file sizes and types.',
|
|
@@ -133,7 +239,7 @@ export function registerFileTools() {
|
|
|
133
239
|
async execute(args) {
|
|
134
240
|
const dir = args.path ? String(args.path) : '.';
|
|
135
241
|
try {
|
|
136
|
-
const result = execSync(`ls -la ${dir} 2>/dev/null | head -50`, {
|
|
242
|
+
const result = execSync(`ls -la "${dir}" 2>/dev/null | head -50`, {
|
|
137
243
|
encoding: 'utf-8', timeout: 5000,
|
|
138
244
|
}).trim();
|
|
139
245
|
return result || 'Empty directory';
|
package/dist/tools/files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/git.js
CHANGED
|
@@ -60,7 +60,7 @@ export function registerGitTools() {
|
|
|
60
60
|
message: { type: 'string', description: 'Commit message', required: true },
|
|
61
61
|
files: { type: 'array', description: 'Files to stage before committing. If empty, commits already-staged files.' },
|
|
62
62
|
},
|
|
63
|
-
tier: '
|
|
63
|
+
tier: 'free',
|
|
64
64
|
async execute(args) {
|
|
65
65
|
const message = String(args.message);
|
|
66
66
|
const files = Array.isArray(args.files) ? args.files.map(String) : [];
|
|
@@ -77,7 +77,7 @@ export function registerGitTools() {
|
|
|
77
77
|
name: { type: 'string', description: 'Branch name', required: true },
|
|
78
78
|
create: { type: 'boolean', description: 'Create a new branch (default: false)' },
|
|
79
79
|
},
|
|
80
|
-
tier: '
|
|
80
|
+
tier: 'free',
|
|
81
81
|
async execute(args) {
|
|
82
82
|
const name = String(args.name);
|
|
83
83
|
const create = args.create ? '-b' : '';
|
|
@@ -91,7 +91,7 @@ export function registerGitTools() {
|
|
|
91
91
|
remote: { type: 'string', description: 'Remote name (default: origin)' },
|
|
92
92
|
branch: { type: 'string', description: 'Branch name (default: current branch)' },
|
|
93
93
|
},
|
|
94
|
-
tier: '
|
|
94
|
+
tier: 'free',
|
|
95
95
|
async execute(args) {
|
|
96
96
|
const remote = args.remote ? String(args.remote) : 'origin';
|
|
97
97
|
const branch = args.branch ? String(args.branch) : '';
|
package/dist/tools/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/tools/git.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/tools/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/tools/github.ts"],"names":[],"mappings":"AAYA,wBAAgB,mBAAmB,IAAI,IAAI,CA2N1C"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
// K:BOT GitHub Tools โ Access all public GitHub knowledge
|
|
2
|
+
// Search repos, read code, browse issues, pull documentation.
|
|
3
|
+
// No auth required for public repos.
|
|
4
|
+
import { registerTool } from './index.js';
|
|
5
|
+
const GITHUB_API = 'https://api.github.com';
|
|
6
|
+
const HEADERS = {
|
|
7
|
+
'User-Agent': 'KBot/1.3 (GitHub Tools)',
|
|
8
|
+
'Accept': 'application/vnd.github.v3+json',
|
|
9
|
+
};
|
|
10
|
+
export function registerGitHubTools() {
|
|
11
|
+
registerTool({
|
|
12
|
+
name: 'github_search',
|
|
13
|
+
description: 'Search GitHub for repositories, code, or issues. Use to find libraries, examples, solutions, and documentation from millions of open-source projects.',
|
|
14
|
+
parameters: {
|
|
15
|
+
query: { type: 'string', description: 'Search query (e.g., "react auth library", "python pdf generator")', required: true },
|
|
16
|
+
type: { type: 'string', description: 'Search type: "repos" (default), "code", "issues"' },
|
|
17
|
+
language: { type: 'string', description: 'Filter by language (e.g., "typescript", "python", "rust")' },
|
|
18
|
+
sort: { type: 'string', description: 'Sort by: "stars", "updated", "forks", "best-match" (default)' },
|
|
19
|
+
},
|
|
20
|
+
tier: 'free',
|
|
21
|
+
async execute(args) {
|
|
22
|
+
const query = String(args.query);
|
|
23
|
+
const type = String(args.type || 'repos');
|
|
24
|
+
const language = args.language ? String(args.language) : '';
|
|
25
|
+
const sort = args.sort ? String(args.sort) : 'best-match';
|
|
26
|
+
const searchType = type === 'code' ? 'code' : type === 'issues' ? 'issues' : 'repositories';
|
|
27
|
+
const langFilter = language ? `+language:${language}` : '';
|
|
28
|
+
const encoded = encodeURIComponent(query + langFilter);
|
|
29
|
+
const sortParam = sort !== 'best-match' ? `&sort=${sort}` : '';
|
|
30
|
+
try {
|
|
31
|
+
const res = await fetch(`${GITHUB_API}/search/${searchType}?q=${encoded}${sortParam}&per_page=10`, { headers: HEADERS });
|
|
32
|
+
if (!res.ok) {
|
|
33
|
+
if (res.status === 403)
|
|
34
|
+
return 'GitHub API rate limit reached. Try again in a minute or use web_search as fallback.';
|
|
35
|
+
return `GitHub API error: ${res.status}`;
|
|
36
|
+
}
|
|
37
|
+
const data = await res.json();
|
|
38
|
+
const items = data.items || [];
|
|
39
|
+
if (items.length === 0)
|
|
40
|
+
return `No results found for "${query}" on GitHub.`;
|
|
41
|
+
if (searchType === 'repositories') {
|
|
42
|
+
return items.map((r) => `**${r.full_name}** โ
${r.stargazers_count} | ${r.language || 'multi'}\n` +
|
|
43
|
+
` ${r.description || '(no description)'}\n` +
|
|
44
|
+
` ${r.html_url}`).join('\n\n');
|
|
45
|
+
}
|
|
46
|
+
if (searchType === 'code') {
|
|
47
|
+
return items.map((c) => `**${c.repository.full_name}** โ \`${c.path}\`\n` +
|
|
48
|
+
` ${c.html_url}`).join('\n\n');
|
|
49
|
+
}
|
|
50
|
+
// Issues
|
|
51
|
+
return items.map((i) => `**${i.repository_url.split('/').slice(-2).join('/')}** #${i.number} [${i.state}]\n` +
|
|
52
|
+
` ${i.title}\n` +
|
|
53
|
+
` ${i.html_url}`).join('\n\n');
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
return `GitHub search error: ${err instanceof Error ? err.message : String(err)}`;
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
registerTool({
|
|
61
|
+
name: 'github_read_file',
|
|
62
|
+
description: 'Read a file from any public GitHub repository. Use to read source code, documentation, configs, README files, etc.',
|
|
63
|
+
parameters: {
|
|
64
|
+
repo: { type: 'string', description: 'Repository in "owner/repo" format (e.g., "facebook/react")', required: true },
|
|
65
|
+
path: { type: 'string', description: 'File path in the repo (e.g., "README.md", "src/index.ts", "package.json")', required: true },
|
|
66
|
+
branch: { type: 'string', description: 'Branch name (default: "main")' },
|
|
67
|
+
},
|
|
68
|
+
tier: 'free',
|
|
69
|
+
async execute(args) {
|
|
70
|
+
const repo = String(args.repo);
|
|
71
|
+
const path = String(args.path);
|
|
72
|
+
const branch = String(args.branch || 'main');
|
|
73
|
+
// Try raw content first (no rate limit)
|
|
74
|
+
const rawUrl = `https://raw.githubusercontent.com/${repo}/${branch}/${path}`;
|
|
75
|
+
try {
|
|
76
|
+
const res = await fetch(rawUrl, { headers: { 'User-Agent': 'KBot/1.3' } });
|
|
77
|
+
if (res.ok) {
|
|
78
|
+
const text = await res.text();
|
|
79
|
+
if (text.length > 30000) {
|
|
80
|
+
return text.slice(0, 30000) + `\n\n... (truncated, ${text.length} total chars)`;
|
|
81
|
+
}
|
|
82
|
+
return text;
|
|
83
|
+
}
|
|
84
|
+
// Try 'master' branch as fallback
|
|
85
|
+
if (branch === 'main') {
|
|
86
|
+
const res2 = await fetch(`https://raw.githubusercontent.com/${repo}/master/${path}`, { headers: { 'User-Agent': 'KBot/1.3' } });
|
|
87
|
+
if (res2.ok) {
|
|
88
|
+
const text = await res2.text();
|
|
89
|
+
if (text.length > 30000) {
|
|
90
|
+
return text.slice(0, 30000) + `\n\n... (truncated, ${text.length} total chars)`;
|
|
91
|
+
}
|
|
92
|
+
return text;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return `File not found: ${repo}/${path} (branch: ${branch}). Check the repo name and path.`;
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
return `Error reading file: ${err instanceof Error ? err.message : String(err)}`;
|
|
99
|
+
}
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
registerTool({
|
|
103
|
+
name: 'github_repo_info',
|
|
104
|
+
description: 'Get detailed information about a GitHub repository including README, structure, and metadata. Use to understand any open-source project quickly.',
|
|
105
|
+
parameters: {
|
|
106
|
+
repo: { type: 'string', description: 'Repository in "owner/repo" format (e.g., "vercel/next.js")', required: true },
|
|
107
|
+
},
|
|
108
|
+
tier: 'free',
|
|
109
|
+
async execute(args) {
|
|
110
|
+
const repo = String(args.repo);
|
|
111
|
+
const parts = [];
|
|
112
|
+
// Repo metadata
|
|
113
|
+
try {
|
|
114
|
+
const res = await fetch(`${GITHUB_API}/repos/${repo}`, { headers: HEADERS });
|
|
115
|
+
if (!res.ok)
|
|
116
|
+
return `Repository not found: ${repo}`;
|
|
117
|
+
const data = await res.json();
|
|
118
|
+
parts.push(`# ${data.full_name}`, `**${data.description || 'No description'}**`, '', `Stars: ${data.stargazers_count} | Forks: ${data.forks_count} | Issues: ${data.open_issues_count}`, `Language: ${data.language || 'Unknown'} | License: ${data.license?.spdx_id || 'None'}`, `Created: ${data.created_at?.split('T')[0]} | Updated: ${data.updated_at?.split('T')[0]}`, `URL: ${data.html_url}`, `Topics: ${(data.topics || []).join(', ') || 'none'}`);
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
parts.push(`Could not fetch repo metadata for ${repo}`);
|
|
122
|
+
}
|
|
123
|
+
// README
|
|
124
|
+
try {
|
|
125
|
+
const res = await fetch(`${GITHUB_API}/repos/${repo}/readme`, { headers: HEADERS });
|
|
126
|
+
if (res.ok) {
|
|
127
|
+
const data = await res.json();
|
|
128
|
+
const content = Buffer.from(data.content, 'base64').toString('utf-8');
|
|
129
|
+
const truncated = content.length > 5000 ? content.slice(0, 5000) + '\n\n... (README truncated)' : content;
|
|
130
|
+
parts.push('', '---', '## README', '', truncated);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
catch { /* no readme */ }
|
|
134
|
+
// Top-level directory listing
|
|
135
|
+
try {
|
|
136
|
+
const res = await fetch(`${GITHUB_API}/repos/${repo}/contents/`, { headers: HEADERS });
|
|
137
|
+
if (res.ok) {
|
|
138
|
+
const items = await res.json();
|
|
139
|
+
if (Array.isArray(items)) {
|
|
140
|
+
const listing = items.map((i) => `${i.type === 'dir' ? '๐' : '๐'} ${i.name}${i.size ? ` (${(i.size / 1024).toFixed(1)}KB)` : ''}`).join('\n');
|
|
141
|
+
parts.push('', '---', '## Files', '', listing);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch { /* no listing */ }
|
|
146
|
+
return parts.join('\n');
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
registerTool({
|
|
150
|
+
name: 'github_issues',
|
|
151
|
+
description: 'List recent issues or pull requests from a GitHub repository. Use to find bugs, discussions, and solutions.',
|
|
152
|
+
parameters: {
|
|
153
|
+
repo: { type: 'string', description: 'Repository in "owner/repo" format', required: true },
|
|
154
|
+
type: { type: 'string', description: '"issues" (default) or "pulls"' },
|
|
155
|
+
state: { type: 'string', description: '"open" (default), "closed", or "all"' },
|
|
156
|
+
query: { type: 'string', description: 'Search within issues (optional)' },
|
|
157
|
+
},
|
|
158
|
+
tier: 'free',
|
|
159
|
+
async execute(args) {
|
|
160
|
+
const repo = String(args.repo);
|
|
161
|
+
const type = String(args.type || 'issues');
|
|
162
|
+
const state = String(args.state || 'open');
|
|
163
|
+
if (args.query) {
|
|
164
|
+
// Search issues in specific repo
|
|
165
|
+
const q = encodeURIComponent(`${args.query} repo:${repo} is:${type === 'pulls' ? 'pr' : 'issue'} is:${state}`);
|
|
166
|
+
try {
|
|
167
|
+
const res = await fetch(`${GITHUB_API}/search/issues?q=${q}&per_page=10`, { headers: HEADERS });
|
|
168
|
+
if (!res.ok)
|
|
169
|
+
return `GitHub API error: ${res.status}`;
|
|
170
|
+
const data = await res.json();
|
|
171
|
+
if (!data.items?.length)
|
|
172
|
+
return `No matching ${type} found.`;
|
|
173
|
+
return data.items.map((i) => `#${i.number} [${i.state}] ${i.title}\n ${i.html_url}\n ${i.body?.slice(0, 200) || '(no body)'}...`).join('\n\n');
|
|
174
|
+
}
|
|
175
|
+
catch (err) {
|
|
176
|
+
return `Search error: ${err instanceof Error ? err.message : String(err)}`;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// List recent issues/PRs
|
|
180
|
+
const endpoint = type === 'pulls' ? 'pulls' : 'issues';
|
|
181
|
+
try {
|
|
182
|
+
const res = await fetch(`${GITHUB_API}/repos/${repo}/${endpoint}?state=${state}&per_page=15&sort=updated`, { headers: HEADERS });
|
|
183
|
+
if (!res.ok)
|
|
184
|
+
return `GitHub API error: ${res.status}`;
|
|
185
|
+
const items = await res.json();
|
|
186
|
+
if (!Array.isArray(items) || items.length === 0)
|
|
187
|
+
return `No ${state} ${type} found.`;
|
|
188
|
+
return items.map((i) => `#${i.number} [${i.state}] ${i.title}\n by ${i.user?.login} ยท ${i.comments} comments ยท ${i.updated_at?.split('T')[0]}\n ${i.html_url}`).join('\n\n');
|
|
189
|
+
}
|
|
190
|
+
catch (err) {
|
|
191
|
+
return `Error: ${err instanceof Error ? err.message : String(err)}`;
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=github.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/tools/github.ts"],"names":[],"mappings":"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"}
|