grokcodecli 0.1.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 (99) hide show
  1. package/.claude/settings.local.json +32 -0
  2. package/README.md +1464 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +61 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/loader.d.ts +34 -0
  8. package/dist/commands/loader.d.ts.map +1 -0
  9. package/dist/commands/loader.js +192 -0
  10. package/dist/commands/loader.js.map +1 -0
  11. package/dist/config/manager.d.ts +21 -0
  12. package/dist/config/manager.d.ts.map +1 -0
  13. package/dist/config/manager.js +203 -0
  14. package/dist/config/manager.js.map +1 -0
  15. package/dist/conversation/chat.d.ts +50 -0
  16. package/dist/conversation/chat.d.ts.map +1 -0
  17. package/dist/conversation/chat.js +1145 -0
  18. package/dist/conversation/chat.js.map +1 -0
  19. package/dist/conversation/history.d.ts +24 -0
  20. package/dist/conversation/history.d.ts.map +1 -0
  21. package/dist/conversation/history.js +103 -0
  22. package/dist/conversation/history.js.map +1 -0
  23. package/dist/grok/client.d.ts +86 -0
  24. package/dist/grok/client.d.ts.map +1 -0
  25. package/dist/grok/client.js +106 -0
  26. package/dist/grok/client.js.map +1 -0
  27. package/dist/index.d.ts +7 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +8 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/permissions/manager.d.ts +26 -0
  32. package/dist/permissions/manager.d.ts.map +1 -0
  33. package/dist/permissions/manager.js +170 -0
  34. package/dist/permissions/manager.js.map +1 -0
  35. package/dist/tools/bash.d.ts +8 -0
  36. package/dist/tools/bash.d.ts.map +1 -0
  37. package/dist/tools/bash.js +102 -0
  38. package/dist/tools/bash.js.map +1 -0
  39. package/dist/tools/edit.d.ts +9 -0
  40. package/dist/tools/edit.d.ts.map +1 -0
  41. package/dist/tools/edit.js +61 -0
  42. package/dist/tools/edit.js.map +1 -0
  43. package/dist/tools/glob.d.ts +7 -0
  44. package/dist/tools/glob.d.ts.map +1 -0
  45. package/dist/tools/glob.js +38 -0
  46. package/dist/tools/glob.js.map +1 -0
  47. package/dist/tools/grep.d.ts +8 -0
  48. package/dist/tools/grep.d.ts.map +1 -0
  49. package/dist/tools/grep.js +78 -0
  50. package/dist/tools/grep.js.map +1 -0
  51. package/dist/tools/read.d.ts +8 -0
  52. package/dist/tools/read.d.ts.map +1 -0
  53. package/dist/tools/read.js +96 -0
  54. package/dist/tools/read.js.map +1 -0
  55. package/dist/tools/registry.d.ts +42 -0
  56. package/dist/tools/registry.d.ts.map +1 -0
  57. package/dist/tools/registry.js +230 -0
  58. package/dist/tools/registry.js.map +1 -0
  59. package/dist/tools/webfetch.d.ts +10 -0
  60. package/dist/tools/webfetch.d.ts.map +1 -0
  61. package/dist/tools/webfetch.js +108 -0
  62. package/dist/tools/webfetch.js.map +1 -0
  63. package/dist/tools/websearch.d.ts +7 -0
  64. package/dist/tools/websearch.d.ts.map +1 -0
  65. package/dist/tools/websearch.js +180 -0
  66. package/dist/tools/websearch.js.map +1 -0
  67. package/dist/tools/write.d.ts +7 -0
  68. package/dist/tools/write.d.ts.map +1 -0
  69. package/dist/tools/write.js +80 -0
  70. package/dist/tools/write.js.map +1 -0
  71. package/dist/utils/security.d.ts +36 -0
  72. package/dist/utils/security.d.ts.map +1 -0
  73. package/dist/utils/security.js +227 -0
  74. package/dist/utils/security.js.map +1 -0
  75. package/dist/utils/ui.d.ts +49 -0
  76. package/dist/utils/ui.d.ts.map +1 -0
  77. package/dist/utils/ui.js +302 -0
  78. package/dist/utils/ui.js.map +1 -0
  79. package/package.json +45 -0
  80. package/src/cli.ts +68 -0
  81. package/src/commands/loader.ts +244 -0
  82. package/src/config/manager.ts +239 -0
  83. package/src/conversation/chat.ts +1294 -0
  84. package/src/conversation/history.ts +131 -0
  85. package/src/grok/client.ts +192 -0
  86. package/src/index.ts +8 -0
  87. package/src/permissions/manager.ts +208 -0
  88. package/src/tools/bash.ts +119 -0
  89. package/src/tools/edit.ts +73 -0
  90. package/src/tools/glob.ts +49 -0
  91. package/src/tools/grep.ts +96 -0
  92. package/src/tools/read.ts +116 -0
  93. package/src/tools/registry.ts +248 -0
  94. package/src/tools/webfetch.ts +127 -0
  95. package/src/tools/websearch.ts +219 -0
  96. package/src/tools/write.ts +94 -0
  97. package/src/utils/security.ts +259 -0
  98. package/src/utils/ui.ts +382 -0
  99. package/tsconfig.json +22 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read.js","sourceRoot":"","sources":["../../src/tools/read.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { Tool } from '../grok/client.js';
2
+ import { ReadToolParams } from './read.js';
3
+ import { WriteToolParams } from './write.js';
4
+ import { EditToolParams } from './edit.js';
5
+ import { BashToolParams } from './bash.js';
6
+ import { GlobToolParams } from './glob.js';
7
+ import { GrepToolParams } from './grep.js';
8
+ import { WebFetchToolParams } from './webfetch.js';
9
+ import { WebSearchToolParams } from './websearch.js';
10
+ export type ToolParams = {
11
+ name: 'Read';
12
+ params: ReadToolParams;
13
+ } | {
14
+ name: 'Write';
15
+ params: WriteToolParams;
16
+ } | {
17
+ name: 'Edit';
18
+ params: EditToolParams;
19
+ } | {
20
+ name: 'Bash';
21
+ params: BashToolParams;
22
+ } | {
23
+ name: 'Glob';
24
+ params: GlobToolParams;
25
+ } | {
26
+ name: 'Grep';
27
+ params: GrepToolParams;
28
+ } | {
29
+ name: 'WebFetch';
30
+ params: WebFetchToolParams;
31
+ } | {
32
+ name: 'WebSearch';
33
+ params: WebSearchToolParams;
34
+ };
35
+ export interface ToolResult {
36
+ success: boolean;
37
+ output: string;
38
+ error?: string;
39
+ }
40
+ export declare const allTools: Tool[];
41
+ export declare function executeTool(name: string, params: Record<string, unknown>): Promise<ToolResult>;
42
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAY,cAAc,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAa,eAAe,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAY,cAAc,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAY,cAAc,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAY,cAAc,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAY,cAAc,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAgB,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAiB,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAEpE,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,kBAAkB,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAEvD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,QAAQ,EAAE,IAAI,EAsM1B,CAAC;AAEF,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,CAqBpG"}
@@ -0,0 +1,230 @@
1
+ import { readTool } from './read.js';
2
+ import { writeTool } from './write.js';
3
+ import { editTool } from './edit.js';
4
+ import { bashTool } from './bash.js';
5
+ import { globTool } from './glob.js';
6
+ import { grepTool } from './grep.js';
7
+ import { webFetchTool } from './webfetch.js';
8
+ import { webSearchTool } from './websearch.js';
9
+ export const allTools = [
10
+ {
11
+ type: 'function',
12
+ function: {
13
+ name: 'Read',
14
+ description: 'Read the contents of a file. Returns the file content with line numbers.',
15
+ parameters: {
16
+ type: 'object',
17
+ properties: {
18
+ file_path: {
19
+ type: 'string',
20
+ description: 'The absolute or relative path to the file to read',
21
+ },
22
+ offset: {
23
+ type: 'number',
24
+ description: 'Line number to start reading from (1-based)',
25
+ },
26
+ limit: {
27
+ type: 'number',
28
+ description: 'Maximum number of lines to read',
29
+ },
30
+ },
31
+ required: ['file_path'],
32
+ },
33
+ },
34
+ },
35
+ {
36
+ type: 'function',
37
+ function: {
38
+ name: 'Write',
39
+ description: 'Write content to a file. Creates the file if it doesn\'t exist, overwrites if it does.',
40
+ parameters: {
41
+ type: 'object',
42
+ properties: {
43
+ file_path: {
44
+ type: 'string',
45
+ description: 'The absolute or relative path to the file to write',
46
+ },
47
+ content: {
48
+ type: 'string',
49
+ description: 'The content to write to the file',
50
+ },
51
+ },
52
+ required: ['file_path', 'content'],
53
+ },
54
+ },
55
+ },
56
+ {
57
+ type: 'function',
58
+ function: {
59
+ name: 'Edit',
60
+ description: 'Edit a file by replacing a specific string with a new string.',
61
+ parameters: {
62
+ type: 'object',
63
+ properties: {
64
+ file_path: {
65
+ type: 'string',
66
+ description: 'The absolute or relative path to the file to edit',
67
+ },
68
+ old_string: {
69
+ type: 'string',
70
+ description: 'The exact string to find and replace',
71
+ },
72
+ new_string: {
73
+ type: 'string',
74
+ description: 'The string to replace it with',
75
+ },
76
+ replace_all: {
77
+ type: 'boolean',
78
+ description: 'Replace all occurrences (default: false)',
79
+ },
80
+ },
81
+ required: ['file_path', 'old_string', 'new_string'],
82
+ },
83
+ },
84
+ },
85
+ {
86
+ type: 'function',
87
+ function: {
88
+ name: 'Bash',
89
+ description: 'Execute a bash command. Use for terminal operations, git commands, npm, etc.',
90
+ parameters: {
91
+ type: 'object',
92
+ properties: {
93
+ command: {
94
+ type: 'string',
95
+ description: 'The bash command to execute',
96
+ },
97
+ timeout: {
98
+ type: 'number',
99
+ description: 'Timeout in milliseconds (default: 120000)',
100
+ },
101
+ },
102
+ required: ['command'],
103
+ },
104
+ },
105
+ },
106
+ {
107
+ type: 'function',
108
+ function: {
109
+ name: 'Glob',
110
+ description: 'Find files matching a glob pattern.',
111
+ parameters: {
112
+ type: 'object',
113
+ properties: {
114
+ pattern: {
115
+ type: 'string',
116
+ description: 'The glob pattern to match (e.g., "**/*.ts", "src/**/*.js")',
117
+ },
118
+ path: {
119
+ type: 'string',
120
+ description: 'The directory to search in (default: current directory)',
121
+ },
122
+ },
123
+ required: ['pattern'],
124
+ },
125
+ },
126
+ },
127
+ {
128
+ type: 'function',
129
+ function: {
130
+ name: 'Grep',
131
+ description: 'Search for a pattern in files using regex.',
132
+ parameters: {
133
+ type: 'object',
134
+ properties: {
135
+ pattern: {
136
+ type: 'string',
137
+ description: 'The regex pattern to search for',
138
+ },
139
+ path: {
140
+ type: 'string',
141
+ description: 'The file or directory to search in',
142
+ },
143
+ include: {
144
+ type: 'string',
145
+ description: 'Glob pattern for files to include (e.g., "*.ts")',
146
+ },
147
+ },
148
+ required: ['pattern'],
149
+ },
150
+ },
151
+ },
152
+ {
153
+ type: 'function',
154
+ function: {
155
+ name: 'WebFetch',
156
+ description: 'Fetch content from a URL. Returns the response body as text. HTML is converted to readable text.',
157
+ parameters: {
158
+ type: 'object',
159
+ properties: {
160
+ url: {
161
+ type: 'string',
162
+ description: 'The URL to fetch',
163
+ },
164
+ method: {
165
+ type: 'string',
166
+ enum: ['GET', 'POST', 'PUT', 'DELETE'],
167
+ description: 'HTTP method (default: GET)',
168
+ },
169
+ headers: {
170
+ type: 'object',
171
+ description: 'Additional HTTP headers',
172
+ },
173
+ body: {
174
+ type: 'string',
175
+ description: 'Request body for POST/PUT requests',
176
+ },
177
+ timeout: {
178
+ type: 'number',
179
+ description: 'Timeout in milliseconds (default: 30000)',
180
+ },
181
+ },
182
+ required: ['url'],
183
+ },
184
+ },
185
+ },
186
+ {
187
+ type: 'function',
188
+ function: {
189
+ name: 'WebSearch',
190
+ description: 'Search the web for information. Returns search results with titles, URLs, and snippets. Use this to find current information, documentation, tutorials, or any web content.',
191
+ parameters: {
192
+ type: 'object',
193
+ properties: {
194
+ query: {
195
+ type: 'string',
196
+ description: 'The search query',
197
+ },
198
+ num_results: {
199
+ type: 'number',
200
+ description: 'Number of results to return (default: 10, max: 20)',
201
+ },
202
+ },
203
+ required: ['query'],
204
+ },
205
+ },
206
+ },
207
+ ];
208
+ export async function executeTool(name, params) {
209
+ switch (name) {
210
+ case 'Read':
211
+ return readTool(params);
212
+ case 'Write':
213
+ return writeTool(params);
214
+ case 'Edit':
215
+ return editTool(params);
216
+ case 'Bash':
217
+ return bashTool(params);
218
+ case 'Glob':
219
+ return globTool(params);
220
+ case 'Grep':
221
+ return grepTool(params);
222
+ case 'WebFetch':
223
+ return webFetchTool(params);
224
+ case 'WebSearch':
225
+ return webSearchTool(params);
226
+ default:
227
+ return { success: false, output: '', error: `Unknown tool: ${name}` };
228
+ }
229
+ }
230
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { ToolResult } from './registry.js';
2
+ export interface WebFetchToolParams {
3
+ url: string;
4
+ method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
5
+ headers?: Record<string, string>;
6
+ body?: string;
7
+ timeout?: number;
8
+ }
9
+ export declare function webFetchTool(params: WebFetchToolParams): Promise<ToolResult>;
10
+ //# sourceMappingURL=webfetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webfetch.d.ts","sourceRoot":"","sources":["../../src/tools/webfetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA2BD,wBAAsB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CA2FlF"}
@@ -0,0 +1,108 @@
1
+ // Simple HTML to text converter
2
+ function htmlToText(html) {
3
+ return html
4
+ // Remove script and style tags with content
5
+ .replace(/<script[\s\S]*?<\/script>/gi, '')
6
+ .replace(/<style[\s\S]*?<\/style>/gi, '')
7
+ // Convert block elements to newlines
8
+ .replace(/<\/(p|div|h[1-6]|li|tr|br)>/gi, '\n')
9
+ .replace(/<(br|hr)\s*\/?>/gi, '\n')
10
+ // Remove remaining tags
11
+ .replace(/<[^>]+>/g, '')
12
+ // Decode common HTML entities
13
+ .replace(/&nbsp;/g, ' ')
14
+ .replace(/&amp;/g, '&')
15
+ .replace(/&lt;/g, '<')
16
+ .replace(/&gt;/g, '>')
17
+ .replace(/&quot;/g, '"')
18
+ .replace(/&#39;/g, "'")
19
+ .replace(/&apos;/g, "'")
20
+ // Clean up whitespace
21
+ .replace(/\n\s*\n/g, '\n\n')
22
+ .replace(/[ \t]+/g, ' ')
23
+ .trim();
24
+ }
25
+ export async function webFetchTool(params) {
26
+ const { url, method = 'GET', headers = {}, body, timeout = 30000 } = params;
27
+ // Validate URL
28
+ let parsedUrl;
29
+ try {
30
+ parsedUrl = new URL(url);
31
+ }
32
+ catch {
33
+ return {
34
+ success: false,
35
+ output: '',
36
+ error: `Invalid URL: ${url}`,
37
+ };
38
+ }
39
+ // Only allow http/https
40
+ if (!['http:', 'https:'].includes(parsedUrl.protocol)) {
41
+ return {
42
+ success: false,
43
+ output: '',
44
+ error: `Unsupported protocol: ${parsedUrl.protocol}`,
45
+ };
46
+ }
47
+ try {
48
+ const controller = new AbortController();
49
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
50
+ const response = await fetch(url, {
51
+ method,
52
+ headers: {
53
+ 'User-Agent': 'GrokCodeCLI/1.0',
54
+ ...headers,
55
+ },
56
+ body: body && method !== 'GET' ? body : undefined,
57
+ signal: controller.signal,
58
+ });
59
+ clearTimeout(timeoutId);
60
+ const contentType = response.headers.get('content-type') || '';
61
+ let content;
62
+ if (contentType.includes('application/json')) {
63
+ const json = await response.json();
64
+ content = JSON.stringify(json, null, 2);
65
+ }
66
+ else if (contentType.includes('text/html')) {
67
+ const html = await response.text();
68
+ content = htmlToText(html);
69
+ }
70
+ else {
71
+ content = await response.text();
72
+ }
73
+ // Truncate very long responses
74
+ const maxLength = 50000;
75
+ if (content.length > maxLength) {
76
+ content = content.slice(0, maxLength) + '\n\n... (truncated)';
77
+ }
78
+ const statusInfo = `Status: ${response.status} ${response.statusText}`;
79
+ const headerInfo = `Content-Type: ${contentType}`;
80
+ if (!response.ok) {
81
+ return {
82
+ success: false,
83
+ output: content,
84
+ error: `HTTP ${response.status}: ${response.statusText}`,
85
+ };
86
+ }
87
+ return {
88
+ success: true,
89
+ output: `${statusInfo}\n${headerInfo}\n\n${content}`,
90
+ };
91
+ }
92
+ catch (error) {
93
+ const err = error;
94
+ if (err.name === 'AbortError') {
95
+ return {
96
+ success: false,
97
+ output: '',
98
+ error: `Request timed out after ${timeout}ms`,
99
+ };
100
+ }
101
+ return {
102
+ success: false,
103
+ output: '',
104
+ error: `Fetch error: ${err.message}`,
105
+ };
106
+ }
107
+ }
108
+ //# sourceMappingURL=webfetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webfetch.js","sourceRoot":"","sources":["../../src/tools/webfetch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { ToolResult } from './registry.js';
2
+ export interface WebSearchToolParams {
3
+ query: string;
4
+ num_results?: number;
5
+ }
6
+ export declare function webSearchTool(params: WebSearchToolParams): Promise<ToolResult>;
7
+ //# sourceMappingURL=websearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websearch.d.ts","sourceRoot":"","sources":["../../src/tools/websearch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAwJD,wBAAsB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,CA4DpF"}
@@ -0,0 +1,180 @@
1
+ import chalk from 'chalk';
2
+ // DuckDuckGo HTML search (no API key needed)
3
+ async function searchDuckDuckGo(query, numResults = 10) {
4
+ const results = [];
5
+ try {
6
+ // Use DuckDuckGo HTML version
7
+ const searchUrl = `https://html.duckduckgo.com/html/?q=${encodeURIComponent(query)}`;
8
+ const response = await fetch(searchUrl, {
9
+ headers: {
10
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
11
+ 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
12
+ 'Accept-Language': 'en-US,en;q=0.5',
13
+ },
14
+ });
15
+ if (!response.ok) {
16
+ throw new Error(`Search failed: ${response.status} ${response.statusText}`);
17
+ }
18
+ const html = await response.text();
19
+ // Parse results from HTML
20
+ // DuckDuckGo HTML results are in <a class="result__a"> tags
21
+ const resultPattern = /<a[^>]*class="result__a"[^>]*href="([^"]*)"[^>]*>([^<]*)<\/a>/gi;
22
+ const snippetPattern = /<a[^>]*class="result__snippet"[^>]*>([^<]*(?:<[^>]*>[^<]*)*)<\/a>/gi;
23
+ // Alternative: Parse result blocks
24
+ const resultBlocks = html.split('<div class="result results_links results_links_deep web-result');
25
+ for (let i = 1; i < resultBlocks.length && results.length < numResults; i++) {
26
+ const block = resultBlocks[i];
27
+ // Extract URL
28
+ const urlMatch = block.match(/href="([^"]+)"/);
29
+ // Extract title
30
+ const titleMatch = block.match(/class="result__a"[^>]*>([^<]+)</);
31
+ // Extract snippet
32
+ const snippetMatch = block.match(/class="result__snippet"[^>]*>([^<]+)/);
33
+ if (urlMatch && titleMatch) {
34
+ let url = urlMatch[1];
35
+ // DuckDuckGo uses redirect URLs, try to extract actual URL
36
+ if (url.includes('uddg=')) {
37
+ const actualUrl = url.match(/uddg=([^&]+)/);
38
+ if (actualUrl) {
39
+ url = decodeURIComponent(actualUrl[1]);
40
+ }
41
+ }
42
+ results.push({
43
+ title: decodeHtmlEntities(titleMatch[1].trim()),
44
+ url: url,
45
+ snippet: snippetMatch ? decodeHtmlEntities(snippetMatch[1].trim()) : '',
46
+ });
47
+ }
48
+ }
49
+ // If no results found with block parsing, try simpler approach
50
+ if (results.length === 0) {
51
+ const links = html.matchAll(/<a[^>]*class="result__a"[^>]*href="([^"]*)"[^>]*>([^<]*)<\/a>/gi);
52
+ for (const match of links) {
53
+ if (results.length >= numResults)
54
+ break;
55
+ let url = match[1];
56
+ if (url.includes('uddg=')) {
57
+ const actualUrl = url.match(/uddg=([^&]+)/);
58
+ if (actualUrl) {
59
+ url = decodeURIComponent(actualUrl[1]);
60
+ }
61
+ }
62
+ results.push({
63
+ title: decodeHtmlEntities(match[2].trim()),
64
+ url: url,
65
+ snippet: '',
66
+ });
67
+ }
68
+ }
69
+ }
70
+ catch (error) {
71
+ // Fallback: try alternative search
72
+ return await searchWithAlternative(query, numResults);
73
+ }
74
+ return results;
75
+ }
76
+ // Fallback using a simple web scraping approach
77
+ async function searchWithAlternative(query, numResults) {
78
+ const results = [];
79
+ try {
80
+ // Try using DuckDuckGo Lite
81
+ const searchUrl = `https://lite.duckduckgo.com/lite/?q=${encodeURIComponent(query)}`;
82
+ const response = await fetch(searchUrl, {
83
+ headers: {
84
+ 'User-Agent': 'Mozilla/5.0 (compatible; GrokCode/1.0)',
85
+ 'Accept': 'text/html',
86
+ },
87
+ });
88
+ if (!response.ok) {
89
+ return results;
90
+ }
91
+ const html = await response.text();
92
+ // Parse lite version results
93
+ const linkMatches = html.matchAll(/<a[^>]*rel="nofollow"[^>]*href="([^"]+)"[^>]*>([^<]+)<\/a>/gi);
94
+ for (const match of linkMatches) {
95
+ if (results.length >= numResults)
96
+ break;
97
+ const url = match[1];
98
+ const title = match[2];
99
+ // Skip DuckDuckGo internal links
100
+ if (url.startsWith('/') || url.includes('duckduckgo.com'))
101
+ continue;
102
+ results.push({
103
+ title: decodeHtmlEntities(title.trim()),
104
+ url: url,
105
+ snippet: '',
106
+ });
107
+ }
108
+ }
109
+ catch {
110
+ // Return empty results if all methods fail
111
+ }
112
+ return results;
113
+ }
114
+ function decodeHtmlEntities(text) {
115
+ return text
116
+ .replace(/&amp;/g, '&')
117
+ .replace(/&lt;/g, '<')
118
+ .replace(/&gt;/g, '>')
119
+ .replace(/&quot;/g, '"')
120
+ .replace(/&#39;/g, "'")
121
+ .replace(/&nbsp;/g, ' ')
122
+ .replace(/&#x27;/g, "'")
123
+ .replace(/&#x2F;/g, '/')
124
+ .replace(/&apos;/g, "'");
125
+ }
126
+ export async function webSearchTool(params) {
127
+ try {
128
+ const query = params.query.trim();
129
+ const numResults = Math.min(params.num_results ?? 10, 20);
130
+ if (!query) {
131
+ return {
132
+ success: false,
133
+ output: '',
134
+ error: 'Search query cannot be empty',
135
+ };
136
+ }
137
+ if (query.length > 500) {
138
+ return {
139
+ success: false,
140
+ output: '',
141
+ error: 'Search query too long (maximum 500 characters)',
142
+ };
143
+ }
144
+ const results = await searchDuckDuckGo(query, numResults);
145
+ if (results.length === 0) {
146
+ return {
147
+ success: true,
148
+ output: `${chalk.yellow('No results found for:')} "${query}"\n\nTry:\n • Using different keywords\n • Checking spelling\n • Using fewer, more general terms`,
149
+ };
150
+ }
151
+ let output = `${chalk.cyan('🔍 Search Results for:')} "${query}"\n`;
152
+ output += `${chalk.gray(`Found ${results.length} results`)}\n\n`;
153
+ results.forEach((result, index) => {
154
+ output += `${chalk.bold(`${index + 1}. ${result.title}`)}\n`;
155
+ output += ` ${chalk.blue(result.url)}\n`;
156
+ if (result.snippet) {
157
+ output += ` ${chalk.gray(result.snippet)}\n`;
158
+ }
159
+ output += '\n';
160
+ });
161
+ // Add sources section like Claude Code
162
+ output += `${chalk.cyan('Sources:')}\n`;
163
+ results.forEach((result) => {
164
+ output += ` • [${result.title}](${result.url})\n`;
165
+ });
166
+ return {
167
+ success: true,
168
+ output,
169
+ };
170
+ }
171
+ catch (error) {
172
+ const err = error;
173
+ return {
174
+ success: false,
175
+ output: '',
176
+ error: `Search failed: ${err.message}`,
177
+ };
178
+ }
179
+ }
180
+ //# sourceMappingURL=websearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websearch.js","sourceRoot":"","sources":["../../src/tools/websearch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { ToolResult } from './registry.js';
2
+ export interface WriteToolParams {
3
+ file_path: string;
4
+ content: string;
5
+ }
6
+ export declare function writeTool(params: WriteToolParams): Promise<ToolResult>;
7
+ //# sourceMappingURL=write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../../src/tools/write.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAI3C,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAKD,wBAAsB,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CAyE5E"}