grok-cli-hurry-mode 1.0.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/.grok/settings.json +3 -0
- package/LICENSE +21 -0
- package/README.md +452 -0
- package/dist/agent/grok-agent.d.ts +54 -0
- package/dist/agent/grok-agent.js +674 -0
- package/dist/agent/grok-agent.js.map +1 -0
- package/dist/agent/index.d.ts +14 -0
- package/dist/agent/index.js +137 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/commands/mcp.d.ts +2 -0
- package/dist/commands/mcp.js +245 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/grok/client.d.ts +49 -0
- package/dist/grok/client.js +85 -0
- package/dist/grok/client.js.map +1 -0
- package/dist/grok/tools.d.ts +8 -0
- package/dist/grok/tools.js +357 -0
- package/dist/grok/tools.js.map +1 -0
- package/dist/hooks/use-enhanced-input.d.ts +37 -0
- package/dist/hooks/use-enhanced-input.js +217 -0
- package/dist/hooks/use-enhanced-input.js.map +1 -0
- package/dist/hooks/use-input-handler.d.ts +34 -0
- package/dist/hooks/use-input-handler.js +611 -0
- package/dist/hooks/use-input-handler.js.map +1 -0
- package/dist/hooks/use-input-history.d.ts +9 -0
- package/dist/hooks/use-input-history.js +64 -0
- package/dist/hooks/use-input-history.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +151949 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/client.d.ts +29 -0
- package/dist/mcp/client.js +167 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/config.d.ts +13 -0
- package/dist/mcp/config.js +51 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/transports.d.ts +51 -0
- package/dist/mcp/transports.js +229 -0
- package/dist/mcp/transports.js.map +1 -0
- package/dist/node_modules/react/index.js +1841 -0
- package/dist/tools/bash.d.ts +10 -0
- package/dist/tools/bash.js +81 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/confirmation-tool.d.ts +16 -0
- package/dist/tools/confirmation-tool.js +75 -0
- package/dist/tools/confirmation-tool.js.map +1 -0
- package/dist/tools/index.d.ts +6 -0
- package/dist/tools/index.js +16 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/morph-editor.d.ts +36 -0
- package/dist/tools/morph-editor.js +347 -0
- package/dist/tools/morph-editor.js.map +1 -0
- package/dist/tools/search.d.ts +69 -0
- package/dist/tools/search.js +341 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/text-editor.d.ts +16 -0
- package/dist/tools/text-editor.js +565 -0
- package/dist/tools/text-editor.js.map +1 -0
- package/dist/tools/todo-tool.d.ts +20 -0
- package/dist/tools/todo-tool.js +135 -0
- package/dist/tools/todo-tool.js.map +1 -0
- package/dist/types/index.d.ts +30 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/ui/app.d.ts +7 -0
- package/dist/ui/app.js +160 -0
- package/dist/ui/app.js.map +1 -0
- package/dist/ui/components/api-key-input.d.ts +7 -0
- package/dist/ui/components/api-key-input.js +124 -0
- package/dist/ui/components/api-key-input.js.map +1 -0
- package/dist/ui/components/chat-history.d.ts +8 -0
- package/dist/ui/components/chat-history.js +177 -0
- package/dist/ui/components/chat-history.js.map +1 -0
- package/dist/ui/components/chat-input.d.ts +9 -0
- package/dist/ui/components/chat-input.js +87 -0
- package/dist/ui/components/chat-input.js.map +1 -0
- package/dist/ui/components/chat-interface.d.ts +8 -0
- package/dist/ui/components/chat-interface.js +344 -0
- package/dist/ui/components/chat-interface.js.map +1 -0
- package/dist/ui/components/command-suggestions.d.ts +17 -0
- package/dist/ui/components/command-suggestions.js +68 -0
- package/dist/ui/components/command-suggestions.js.map +1 -0
- package/dist/ui/components/confirmation-dialog.d.ts +11 -0
- package/dist/ui/components/confirmation-dialog.js +167 -0
- package/dist/ui/components/confirmation-dialog.js.map +1 -0
- package/dist/ui/components/diff-renderer.d.ts +13 -0
- package/dist/ui/components/diff-renderer.js +217 -0
- package/dist/ui/components/diff-renderer.js.map +1 -0
- package/dist/ui/components/loading-spinner.d.ts +8 -0
- package/dist/ui/components/loading-spinner.js +92 -0
- package/dist/ui/components/loading-spinner.js.map +1 -0
- package/dist/ui/components/mcp-status.d.ts +5 -0
- package/dist/ui/components/mcp-status.js +74 -0
- package/dist/ui/components/mcp-status.js.map +1 -0
- package/dist/ui/components/model-selection.d.ts +12 -0
- package/dist/ui/components/model-selection.js +28 -0
- package/dist/ui/components/model-selection.js.map +1 -0
- package/dist/ui/shared/max-sized-box.d.ts +8 -0
- package/dist/ui/shared/max-sized-box.js +15 -0
- package/dist/ui/shared/max-sized-box.js.map +1 -0
- package/dist/ui/utils/code-colorizer.d.ts +2 -0
- package/dist/ui/utils/code-colorizer.js +18 -0
- package/dist/ui/utils/code-colorizer.js.map +1 -0
- package/dist/ui/utils/colors.d.ts +14 -0
- package/dist/ui/utils/colors.js +18 -0
- package/dist/ui/utils/colors.js.map +1 -0
- package/dist/ui/utils/markdown-renderer.d.ts +4 -0
- package/dist/ui/utils/markdown-renderer.js +29 -0
- package/dist/ui/utils/markdown-renderer.js.map +1 -0
- package/dist/utils/confirmation-service.d.ts +33 -0
- package/dist/utils/confirmation-service.js +113 -0
- package/dist/utils/confirmation-service.js.map +1 -0
- package/dist/utils/custom-instructions.d.ts +1 -0
- package/dist/utils/custom-instructions.js +53 -0
- package/dist/utils/custom-instructions.js.map +1 -0
- package/dist/utils/model-config.d.ts +28 -0
- package/dist/utils/model-config.js +49 -0
- package/dist/utils/model-config.js.map +1 -0
- package/dist/utils/settings-manager.d.ts +94 -0
- package/dist/utils/settings-manager.js +275 -0
- package/dist/utils/settings-manager.js.map +1 -0
- package/dist/utils/settings.d.ts +1 -0
- package/dist/utils/settings.js +8 -0
- package/dist/utils/settings.js.map +1 -0
- package/dist/utils/text-utils.d.ts +80 -0
- package/dist/utils/text-utils.js +197 -0
- package/dist/utils/text-utils.js.map +1 -0
- package/dist/utils/token-counter.d.ts +33 -0
- package/dist/utils/token-counter.js +83 -0
- package/dist/utils/token-counter.js.map +1 -0
- package/dist/yoga.wasm +0 -0
- package/eslint.config.mjs +28 -0
- package/fix.awk +41 -0
- package/grok-logo-screenshot.png +0 -0
- package/package.json +68 -0
- package/sed_cmd.sh +35 -0
- package/temp.txt +29 -0
@@ -0,0 +1,69 @@
|
|
1
|
+
import { ToolResult } from "../types/index.js";
|
2
|
+
export interface SearchResult {
|
3
|
+
file: string;
|
4
|
+
line: number;
|
5
|
+
column: number;
|
6
|
+
text: string;
|
7
|
+
match: string;
|
8
|
+
}
|
9
|
+
export interface FileSearchResult {
|
10
|
+
path: string;
|
11
|
+
name: string;
|
12
|
+
score: number;
|
13
|
+
}
|
14
|
+
export interface UnifiedSearchResult {
|
15
|
+
type: "text" | "file";
|
16
|
+
file: string;
|
17
|
+
line?: number;
|
18
|
+
column?: number;
|
19
|
+
text?: string;
|
20
|
+
match?: string;
|
21
|
+
score?: number;
|
22
|
+
}
|
23
|
+
export declare class SearchTool {
|
24
|
+
private confirmationService;
|
25
|
+
private currentDirectory;
|
26
|
+
/**
|
27
|
+
* Unified search method that can search for text content or find files
|
28
|
+
*/
|
29
|
+
search(query: string, options?: {
|
30
|
+
searchType?: "text" | "files" | "both";
|
31
|
+
includePattern?: string;
|
32
|
+
excludePattern?: string;
|
33
|
+
caseSensitive?: boolean;
|
34
|
+
wholeWord?: boolean;
|
35
|
+
regex?: boolean;
|
36
|
+
maxResults?: number;
|
37
|
+
fileTypes?: string[];
|
38
|
+
excludeFiles?: string[];
|
39
|
+
includeHidden?: boolean;
|
40
|
+
}): Promise<ToolResult>;
|
41
|
+
/**
|
42
|
+
* Execute ripgrep command with specified options
|
43
|
+
*/
|
44
|
+
private executeRipgrep;
|
45
|
+
/**
|
46
|
+
* Parse ripgrep JSON output into SearchResult objects
|
47
|
+
*/
|
48
|
+
private parseRipgrepOutput;
|
49
|
+
/**
|
50
|
+
* Find files by pattern using a simple file walking approach
|
51
|
+
*/
|
52
|
+
private findFilesByPattern;
|
53
|
+
/**
|
54
|
+
* Calculate fuzzy match score for file names
|
55
|
+
*/
|
56
|
+
private calculateFileScore;
|
57
|
+
/**
|
58
|
+
* Format unified search results for display
|
59
|
+
*/
|
60
|
+
private formatUnifiedResults;
|
61
|
+
/**
|
62
|
+
* Update current working directory
|
63
|
+
*/
|
64
|
+
setCurrentDirectory(directory: string): void;
|
65
|
+
/**
|
66
|
+
* Get current working directory
|
67
|
+
*/
|
68
|
+
getCurrentDirectory(): string;
|
69
|
+
}
|
@@ -0,0 +1,341 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
19
|
+
var ownKeys = function(o) {
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
21
|
+
var ar = [];
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
23
|
+
return ar;
|
24
|
+
};
|
25
|
+
return ownKeys(o);
|
26
|
+
};
|
27
|
+
return function (mod) {
|
28
|
+
if (mod && mod.__esModule) return mod;
|
29
|
+
var result = {};
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
31
|
+
__setModuleDefault(result, mod);
|
32
|
+
return result;
|
33
|
+
};
|
34
|
+
})();
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
36
|
+
exports.SearchTool = void 0;
|
37
|
+
const child_process_1 = require("child_process");
|
38
|
+
const confirmation_service_js_1 = require("../utils/confirmation-service.js");
|
39
|
+
const fs = __importStar(require("fs-extra"));
|
40
|
+
const path = __importStar(require("path"));
|
41
|
+
class SearchTool {
|
42
|
+
constructor() {
|
43
|
+
this.confirmationService = confirmation_service_js_1.ConfirmationService.getInstance();
|
44
|
+
this.currentDirectory = process.cwd();
|
45
|
+
}
|
46
|
+
/**
|
47
|
+
* Unified search method that can search for text content or find files
|
48
|
+
*/
|
49
|
+
async search(query, options = {}) {
|
50
|
+
try {
|
51
|
+
const searchType = options.searchType || "both";
|
52
|
+
const results = [];
|
53
|
+
// Search for text content if requested
|
54
|
+
if (searchType === "text" || searchType === "both") {
|
55
|
+
const textResults = await this.executeRipgrep(query, options);
|
56
|
+
results.push(...textResults.map((r) => ({
|
57
|
+
type: "text",
|
58
|
+
file: r.file,
|
59
|
+
line: r.line,
|
60
|
+
column: r.column,
|
61
|
+
text: r.text,
|
62
|
+
match: r.match,
|
63
|
+
})));
|
64
|
+
}
|
65
|
+
// Search for files if requested
|
66
|
+
if (searchType === "files" || searchType === "both") {
|
67
|
+
const fileResults = await this.findFilesByPattern(query, options);
|
68
|
+
results.push(...fileResults.map((r) => ({
|
69
|
+
type: "file",
|
70
|
+
file: r.path,
|
71
|
+
score: r.score,
|
72
|
+
})));
|
73
|
+
}
|
74
|
+
if (results.length === 0) {
|
75
|
+
return {
|
76
|
+
success: true,
|
77
|
+
output: `No results found for "${query}"`,
|
78
|
+
};
|
79
|
+
}
|
80
|
+
const formattedOutput = this.formatUnifiedResults(results, query, searchType);
|
81
|
+
return {
|
82
|
+
success: true,
|
83
|
+
output: formattedOutput,
|
84
|
+
};
|
85
|
+
}
|
86
|
+
catch (error) {
|
87
|
+
return {
|
88
|
+
success: false,
|
89
|
+
error: `Search error: ${error.message}`,
|
90
|
+
};
|
91
|
+
}
|
92
|
+
}
|
93
|
+
/**
|
94
|
+
* Execute ripgrep command with specified options
|
95
|
+
*/
|
96
|
+
async executeRipgrep(query, options) {
|
97
|
+
return new Promise((resolve, reject) => {
|
98
|
+
const args = [
|
99
|
+
"--json",
|
100
|
+
"--with-filename",
|
101
|
+
"--line-number",
|
102
|
+
"--column",
|
103
|
+
"--no-heading",
|
104
|
+
"--color=never",
|
105
|
+
];
|
106
|
+
// Add case sensitivity
|
107
|
+
if (!options.caseSensitive) {
|
108
|
+
args.push("--ignore-case");
|
109
|
+
}
|
110
|
+
// Add whole word matching
|
111
|
+
if (options.wholeWord) {
|
112
|
+
args.push("--word-regexp");
|
113
|
+
}
|
114
|
+
// Add regex mode
|
115
|
+
if (!options.regex) {
|
116
|
+
args.push("--fixed-strings");
|
117
|
+
}
|
118
|
+
// Add max results limit
|
119
|
+
if (options.maxResults) {
|
120
|
+
args.push("--max-count", options.maxResults.toString());
|
121
|
+
}
|
122
|
+
// Add file type filters
|
123
|
+
if (options.fileTypes) {
|
124
|
+
options.fileTypes.forEach((type) => {
|
125
|
+
args.push("--type", type);
|
126
|
+
});
|
127
|
+
}
|
128
|
+
// Add include pattern
|
129
|
+
if (options.includePattern) {
|
130
|
+
args.push("--glob", options.includePattern);
|
131
|
+
}
|
132
|
+
// Add exclude pattern
|
133
|
+
if (options.excludePattern) {
|
134
|
+
args.push("--glob", `!${options.excludePattern}`);
|
135
|
+
}
|
136
|
+
// Add exclude files
|
137
|
+
if (options.excludeFiles) {
|
138
|
+
options.excludeFiles.forEach((file) => {
|
139
|
+
args.push("--glob", `!${file}`);
|
140
|
+
});
|
141
|
+
}
|
142
|
+
// Respect gitignore and common ignore patterns
|
143
|
+
args.push("--no-require-git", "--follow", "--glob", "!.git/**", "--glob", "!node_modules/**", "--glob", "!.DS_Store", "--glob", "!*.log");
|
144
|
+
// Add query and search directory
|
145
|
+
args.push(query, this.currentDirectory);
|
146
|
+
const rg = (0, child_process_1.spawn)("rg", args);
|
147
|
+
let output = "";
|
148
|
+
let errorOutput = "";
|
149
|
+
rg.stdout.on("data", (data) => {
|
150
|
+
output += data.toString();
|
151
|
+
});
|
152
|
+
rg.stderr.on("data", (data) => {
|
153
|
+
errorOutput += data.toString();
|
154
|
+
});
|
155
|
+
rg.on("close", (code) => {
|
156
|
+
if (code === 0 || code === 1) {
|
157
|
+
// 0 = found, 1 = not found
|
158
|
+
const results = this.parseRipgrepOutput(output);
|
159
|
+
resolve(results);
|
160
|
+
}
|
161
|
+
else {
|
162
|
+
reject(new Error(`Ripgrep failed with code ${code}: ${errorOutput}`));
|
163
|
+
}
|
164
|
+
});
|
165
|
+
rg.on("error", (error) => {
|
166
|
+
reject(error);
|
167
|
+
});
|
168
|
+
});
|
169
|
+
}
|
170
|
+
/**
|
171
|
+
* Parse ripgrep JSON output into SearchResult objects
|
172
|
+
*/
|
173
|
+
parseRipgrepOutput(output) {
|
174
|
+
const results = [];
|
175
|
+
const lines = output
|
176
|
+
.trim()
|
177
|
+
.split("\n")
|
178
|
+
.filter((line) => line.length > 0);
|
179
|
+
for (const line of lines) {
|
180
|
+
try {
|
181
|
+
const parsed = JSON.parse(line);
|
182
|
+
if (parsed.type === "match") {
|
183
|
+
const data = parsed.data;
|
184
|
+
results.push({
|
185
|
+
file: data.path.text,
|
186
|
+
line: data.line_number,
|
187
|
+
column: data.submatches[0]?.start || 0,
|
188
|
+
text: data.lines.text.trim(),
|
189
|
+
match: data.submatches[0]?.match?.text || "",
|
190
|
+
});
|
191
|
+
}
|
192
|
+
}
|
193
|
+
catch (e) {
|
194
|
+
// Skip invalid JSON lines
|
195
|
+
continue;
|
196
|
+
}
|
197
|
+
}
|
198
|
+
return results;
|
199
|
+
}
|
200
|
+
/**
|
201
|
+
* Find files by pattern using a simple file walking approach
|
202
|
+
*/
|
203
|
+
async findFilesByPattern(pattern, options) {
|
204
|
+
const files = [];
|
205
|
+
const maxResults = options.maxResults || 50;
|
206
|
+
const searchPattern = pattern.toLowerCase();
|
207
|
+
const walkDir = async (dir, depth = 0) => {
|
208
|
+
if (depth > 10 || files.length >= maxResults)
|
209
|
+
return; // Prevent infinite recursion and limit results
|
210
|
+
try {
|
211
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
212
|
+
for (const entry of entries) {
|
213
|
+
if (files.length >= maxResults)
|
214
|
+
break;
|
215
|
+
const fullPath = path.join(dir, entry.name);
|
216
|
+
const relativePath = path.relative(this.currentDirectory, fullPath);
|
217
|
+
// Skip hidden files unless explicitly included
|
218
|
+
if (!options.includeHidden && entry.name.startsWith(".")) {
|
219
|
+
continue;
|
220
|
+
}
|
221
|
+
// Skip common directories
|
222
|
+
if (entry.isDirectory() &&
|
223
|
+
[
|
224
|
+
"node_modules",
|
225
|
+
".git",
|
226
|
+
".svn",
|
227
|
+
".hg",
|
228
|
+
"dist",
|
229
|
+
"build",
|
230
|
+
".next",
|
231
|
+
".cache",
|
232
|
+
].includes(entry.name)) {
|
233
|
+
continue;
|
234
|
+
}
|
235
|
+
// Apply exclude pattern
|
236
|
+
if (options.excludePattern &&
|
237
|
+
relativePath.includes(options.excludePattern)) {
|
238
|
+
continue;
|
239
|
+
}
|
240
|
+
if (entry.isFile()) {
|
241
|
+
const score = this.calculateFileScore(entry.name, relativePath, searchPattern);
|
242
|
+
if (score > 0) {
|
243
|
+
files.push({
|
244
|
+
path: relativePath,
|
245
|
+
name: entry.name,
|
246
|
+
score,
|
247
|
+
});
|
248
|
+
}
|
249
|
+
}
|
250
|
+
else if (entry.isDirectory()) {
|
251
|
+
await walkDir(fullPath, depth + 1);
|
252
|
+
}
|
253
|
+
}
|
254
|
+
}
|
255
|
+
catch (error) {
|
256
|
+
// Skip directories we can't read
|
257
|
+
}
|
258
|
+
};
|
259
|
+
await walkDir(this.currentDirectory);
|
260
|
+
// Sort by score (descending) and return top results
|
261
|
+
return files.sort((a, b) => b.score - a.score).slice(0, maxResults);
|
262
|
+
}
|
263
|
+
/**
|
264
|
+
* Calculate fuzzy match score for file names
|
265
|
+
*/
|
266
|
+
calculateFileScore(fileName, filePath, pattern) {
|
267
|
+
const lowerFileName = fileName.toLowerCase();
|
268
|
+
const lowerFilePath = filePath.toLowerCase();
|
269
|
+
// Exact matches get highest score
|
270
|
+
if (lowerFileName === pattern)
|
271
|
+
return 100;
|
272
|
+
if (lowerFileName.includes(pattern))
|
273
|
+
return 80;
|
274
|
+
// Path matches get medium score
|
275
|
+
if (lowerFilePath.includes(pattern))
|
276
|
+
return 60;
|
277
|
+
// Fuzzy matching - check if all characters of pattern exist in order
|
278
|
+
let patternIndex = 0;
|
279
|
+
for (let i = 0; i < lowerFileName.length && patternIndex < pattern.length; i++) {
|
280
|
+
if (lowerFileName[i] === pattern[patternIndex]) {
|
281
|
+
patternIndex++;
|
282
|
+
}
|
283
|
+
}
|
284
|
+
if (patternIndex === pattern.length) {
|
285
|
+
// All characters found in order - score based on how close they are
|
286
|
+
return Math.max(10, 40 - (fileName.length - pattern.length));
|
287
|
+
}
|
288
|
+
return 0;
|
289
|
+
}
|
290
|
+
/**
|
291
|
+
* Format unified search results for display
|
292
|
+
*/
|
293
|
+
formatUnifiedResults(results, query, searchType) {
|
294
|
+
if (results.length === 0) {
|
295
|
+
return `No results found for "${query}"`;
|
296
|
+
}
|
297
|
+
let output = `Search results for "${query}":\n`;
|
298
|
+
// Separate text and file results
|
299
|
+
const textResults = results.filter((r) => r.type === "text");
|
300
|
+
const fileResults = results.filter((r) => r.type === "file");
|
301
|
+
// Show all unique files (from both text matches and file matches)
|
302
|
+
const allFiles = new Set();
|
303
|
+
// Add files from text results
|
304
|
+
textResults.forEach((result) => {
|
305
|
+
allFiles.add(result.file);
|
306
|
+
});
|
307
|
+
// Add files from file search results
|
308
|
+
fileResults.forEach((result) => {
|
309
|
+
allFiles.add(result.file);
|
310
|
+
});
|
311
|
+
const fileList = Array.from(allFiles);
|
312
|
+
const displayLimit = 8;
|
313
|
+
// Show files in compact format
|
314
|
+
fileList.slice(0, displayLimit).forEach((file) => {
|
315
|
+
// Count matches in this file for text results
|
316
|
+
const matchCount = textResults.filter((r) => r.file === file).length;
|
317
|
+
const matchIndicator = matchCount > 0 ? ` (${matchCount} matches)` : "";
|
318
|
+
output += ` ${file}${matchIndicator}\n`;
|
319
|
+
});
|
320
|
+
// Show "+X more" if there are additional results
|
321
|
+
if (fileList.length > displayLimit) {
|
322
|
+
const remaining = fileList.length - displayLimit;
|
323
|
+
output += ` ... +${remaining} more\n`;
|
324
|
+
}
|
325
|
+
return output.trim();
|
326
|
+
}
|
327
|
+
/**
|
328
|
+
* Update current working directory
|
329
|
+
*/
|
330
|
+
setCurrentDirectory(directory) {
|
331
|
+
this.currentDirectory = directory;
|
332
|
+
}
|
333
|
+
/**
|
334
|
+
* Get current working directory
|
335
|
+
*/
|
336
|
+
getCurrentDirectory() {
|
337
|
+
return this.currentDirectory;
|
338
|
+
}
|
339
|
+
}
|
340
|
+
exports.SearchTool = SearchTool;
|
341
|
+
//# sourceMappingURL=search.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import { ToolResult, EditorCommand } from "../types/index.js";
|
2
|
+
export declare class TextEditorTool {
|
3
|
+
private editHistory;
|
4
|
+
private confirmationService;
|
5
|
+
view(filePath: string, viewRange?: [number, number]): Promise<ToolResult>;
|
6
|
+
strReplace(filePath: string, oldStr: string, newStr: string, replaceAll?: boolean): Promise<ToolResult>;
|
7
|
+
create(filePath: string, content: string): Promise<ToolResult>;
|
8
|
+
replaceLines(filePath: string, startLine: number, endLine: number, newContent: string): Promise<ToolResult>;
|
9
|
+
insert(filePath: string, insertLine: number, content: string): Promise<ToolResult>;
|
10
|
+
undoEdit(): Promise<ToolResult>;
|
11
|
+
private findFuzzyMatch;
|
12
|
+
private normalizeForComparison;
|
13
|
+
private isSimilarStructure;
|
14
|
+
private generateDiff;
|
15
|
+
getEditHistory(): EditorCommand[];
|
16
|
+
}
|