@kernel.chat/kbot 1.3.0 โ†’ 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.
Files changed (176) hide show
  1. package/README.md +94 -0
  2. package/dist/agent.d.ts +9 -0
  3. package/dist/agent.d.ts.map +1 -1
  4. package/dist/agent.js +576 -119
  5. package/dist/agent.js.map +1 -1
  6. package/dist/auth.d.ts +20 -35
  7. package/dist/auth.d.ts.map +1 -1
  8. package/dist/auth.js +236 -66
  9. package/dist/auth.js.map +1 -1
  10. package/dist/auth.test.d.ts +2 -0
  11. package/dist/auth.test.d.ts.map +1 -0
  12. package/dist/auth.test.js +89 -0
  13. package/dist/auth.test.js.map +1 -0
  14. package/dist/build-targets.d.ts +37 -0
  15. package/dist/build-targets.d.ts.map +1 -0
  16. package/dist/build-targets.js +507 -0
  17. package/dist/build-targets.js.map +1 -0
  18. package/dist/cli.js +1211 -131
  19. package/dist/cli.js.map +1 -1
  20. package/dist/context.d.ts +2 -0
  21. package/dist/context.d.ts.map +1 -1
  22. package/dist/context.js +72 -22
  23. package/dist/context.js.map +1 -1
  24. package/dist/hooks.d.ts +27 -0
  25. package/dist/hooks.d.ts.map +1 -0
  26. package/dist/hooks.js +145 -0
  27. package/dist/hooks.js.map +1 -0
  28. package/dist/ide/acp-server.d.ts +6 -0
  29. package/dist/ide/acp-server.d.ts.map +1 -0
  30. package/dist/ide/acp-server.js +319 -0
  31. package/dist/ide/acp-server.js.map +1 -0
  32. package/dist/ide/bridge.d.ts +128 -0
  33. package/dist/ide/bridge.d.ts.map +1 -0
  34. package/dist/ide/bridge.js +185 -0
  35. package/dist/ide/bridge.js.map +1 -0
  36. package/dist/ide/index.d.ts +5 -0
  37. package/dist/ide/index.d.ts.map +1 -0
  38. package/dist/ide/index.js +11 -0
  39. package/dist/ide/index.js.map +1 -0
  40. package/dist/ide/lsp-bridge.d.ts +27 -0
  41. package/dist/ide/lsp-bridge.d.ts.map +1 -0
  42. package/dist/ide/lsp-bridge.js +267 -0
  43. package/dist/ide/lsp-bridge.js.map +1 -0
  44. package/dist/ide/mcp-server.d.ts +7 -0
  45. package/dist/ide/mcp-server.d.ts.map +1 -0
  46. package/dist/ide/mcp-server.js +451 -0
  47. package/dist/ide/mcp-server.js.map +1 -0
  48. package/dist/learning.d.ts +179 -0
  49. package/dist/learning.d.ts.map +1 -0
  50. package/dist/learning.js +829 -0
  51. package/dist/learning.js.map +1 -0
  52. package/dist/learning.test.d.ts +2 -0
  53. package/dist/learning.test.d.ts.map +1 -0
  54. package/dist/learning.test.js +115 -0
  55. package/dist/learning.test.js.map +1 -0
  56. package/dist/matrix.d.ts +49 -0
  57. package/dist/matrix.d.ts.map +1 -0
  58. package/dist/matrix.js +302 -0
  59. package/dist/matrix.js.map +1 -0
  60. package/dist/memory.d.ts +11 -0
  61. package/dist/memory.d.ts.map +1 -1
  62. package/dist/memory.js +54 -2
  63. package/dist/memory.js.map +1 -1
  64. package/dist/multimodal.d.ts +57 -0
  65. package/dist/multimodal.d.ts.map +1 -0
  66. package/dist/multimodal.js +206 -0
  67. package/dist/multimodal.js.map +1 -0
  68. package/dist/permissions.d.ts +21 -0
  69. package/dist/permissions.d.ts.map +1 -0
  70. package/dist/permissions.js +122 -0
  71. package/dist/permissions.js.map +1 -0
  72. package/dist/planner.d.ts +54 -0
  73. package/dist/planner.d.ts.map +1 -0
  74. package/dist/planner.js +298 -0
  75. package/dist/planner.js.map +1 -0
  76. package/dist/plugins.d.ts +30 -0
  77. package/dist/plugins.d.ts.map +1 -0
  78. package/dist/plugins.js +135 -0
  79. package/dist/plugins.js.map +1 -0
  80. package/dist/sessions.d.ts +38 -0
  81. package/dist/sessions.d.ts.map +1 -0
  82. package/dist/sessions.js +177 -0
  83. package/dist/sessions.js.map +1 -0
  84. package/dist/streaming.d.ts +88 -0
  85. package/dist/streaming.d.ts.map +1 -0
  86. package/dist/streaming.js +317 -0
  87. package/dist/streaming.js.map +1 -0
  88. package/dist/tools/background.d.ts +2 -0
  89. package/dist/tools/background.d.ts.map +1 -0
  90. package/dist/tools/background.js +163 -0
  91. package/dist/tools/background.js.map +1 -0
  92. package/dist/tools/bash.d.ts.map +1 -1
  93. package/dist/tools/bash.js +26 -1
  94. package/dist/tools/bash.js.map +1 -1
  95. package/dist/tools/browser.js +7 -7
  96. package/dist/tools/browser.js.map +1 -1
  97. package/dist/tools/build-matrix.d.ts +2 -0
  98. package/dist/tools/build-matrix.d.ts.map +1 -0
  99. package/dist/tools/build-matrix.js +463 -0
  100. package/dist/tools/build-matrix.js.map +1 -0
  101. package/dist/tools/computer.js +5 -5
  102. package/dist/tools/computer.js.map +1 -1
  103. package/dist/tools/fetch.d.ts +2 -0
  104. package/dist/tools/fetch.d.ts.map +1 -0
  105. package/dist/tools/fetch.js +106 -0
  106. package/dist/tools/fetch.js.map +1 -0
  107. package/dist/tools/files.d.ts.map +1 -1
  108. package/dist/tools/files.js +112 -6
  109. package/dist/tools/files.js.map +1 -1
  110. package/dist/tools/git.js +3 -3
  111. package/dist/tools/git.js.map +1 -1
  112. package/dist/tools/github.d.ts +2 -0
  113. package/dist/tools/github.d.ts.map +1 -0
  114. package/dist/tools/github.js +196 -0
  115. package/dist/tools/github.js.map +1 -0
  116. package/dist/tools/index.d.ts +29 -5
  117. package/dist/tools/index.d.ts.map +1 -1
  118. package/dist/tools/index.js +136 -20
  119. package/dist/tools/index.js.map +1 -1
  120. package/dist/tools/index.test.d.ts +2 -0
  121. package/dist/tools/index.test.d.ts.map +1 -0
  122. package/dist/tools/index.test.js +162 -0
  123. package/dist/tools/index.test.js.map +1 -0
  124. package/dist/tools/matrix.d.ts +2 -0
  125. package/dist/tools/matrix.d.ts.map +1 -0
  126. package/dist/tools/matrix.js +79 -0
  127. package/dist/tools/matrix.js.map +1 -0
  128. package/dist/tools/mcp-client.d.ts +2 -0
  129. package/dist/tools/mcp-client.d.ts.map +1 -0
  130. package/dist/tools/mcp-client.js +295 -0
  131. package/dist/tools/mcp-client.js.map +1 -0
  132. package/dist/tools/notebook.d.ts +2 -0
  133. package/dist/tools/notebook.d.ts.map +1 -0
  134. package/dist/tools/notebook.js +207 -0
  135. package/dist/tools/notebook.js.map +1 -0
  136. package/dist/tools/openclaw.d.ts +2 -0
  137. package/dist/tools/openclaw.d.ts.map +1 -0
  138. package/dist/tools/openclaw.js +187 -0
  139. package/dist/tools/openclaw.js.map +1 -0
  140. package/dist/tools/parallel.d.ts +2 -0
  141. package/dist/tools/parallel.d.ts.map +1 -0
  142. package/dist/tools/parallel.js +60 -0
  143. package/dist/tools/parallel.js.map +1 -0
  144. package/dist/tools/sandbox.d.ts +2 -0
  145. package/dist/tools/sandbox.d.ts.map +1 -0
  146. package/dist/tools/sandbox.js +352 -0
  147. package/dist/tools/sandbox.js.map +1 -0
  148. package/dist/tools/search.d.ts.map +1 -1
  149. package/dist/tools/search.js +135 -28
  150. package/dist/tools/search.js.map +1 -1
  151. package/dist/tools/subagent.d.ts +4 -0
  152. package/dist/tools/subagent.d.ts.map +1 -0
  153. package/dist/tools/subagent.js +260 -0
  154. package/dist/tools/subagent.js.map +1 -0
  155. package/dist/tools/tasks.d.ts +14 -0
  156. package/dist/tools/tasks.d.ts.map +1 -0
  157. package/dist/tools/tasks.js +210 -0
  158. package/dist/tools/tasks.js.map +1 -0
  159. package/dist/tools/worktree.d.ts +2 -0
  160. package/dist/tools/worktree.d.ts.map +1 -0
  161. package/dist/tools/worktree.js +223 -0
  162. package/dist/tools/worktree.js.map +1 -0
  163. package/dist/tui.d.ts +73 -0
  164. package/dist/tui.d.ts.map +1 -0
  165. package/dist/tui.js +257 -0
  166. package/dist/tui.js.map +1 -0
  167. package/dist/ui.d.ts +11 -19
  168. package/dist/ui.d.ts.map +1 -1
  169. package/dist/ui.js +143 -171
  170. package/dist/ui.js.map +1 -1
  171. package/dist/updater.d.ts +3 -0
  172. package/dist/updater.d.ts.map +1 -0
  173. package/dist/updater.js +70 -0
  174. package/dist/updater.js.map +1 -0
  175. package/install.sh +5 -7
  176. 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(/&amp;/g, '&')
33
+ .replace(/&lt;/g, '<')
34
+ .replace(/&gt;/g, '>')
35
+ .replace(/&quot;/g, '"')
36
+ .replace(/&#39;/g, "'")
37
+ .replace(/&nbsp;/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":"AAOA,wBAAgB,iBAAiB,IAAI,IAAI,CAsJxC"}
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/tools/files.ts"],"names":[],"mappings":"AAmFA,wBAAgB,iBAAiB,IAAI,IAAI,CAwLxC"}
@@ -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
- import { readFileSync, writeFileSync, existsSync, statSync } from 'node:fs';
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';
@@ -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: 'starter',
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: 'starter',
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: 'starter',
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) : '';
@@ -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,2 @@
1
+ export declare function registerGitHubTools(): void;
2
+ //# sourceMappingURL=github.d.ts.map
@@ -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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"}