@zds-ai/cli 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.
- package/LICENSE +21 -0
- package/README.md +497 -0
- package/dist/agent/grok-agent.d.ts +250 -0
- package/dist/agent/grok-agent.js +2480 -0
- package/dist/agent/grok-agent.js.map +1 -0
- package/dist/agent/index.d.ts +14 -0
- package/dist/agent/index.js +136 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/commands/mcp.d.ts +2 -0
- package/dist/commands/mcp.js +239 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/grok/client.d.ts +55 -0
- package/dist/grok/client.js +276 -0
- package/dist/grok/client.js.map +1 -0
- package/dist/grok/tools.d.ts +8 -0
- package/dist/grok/tools.js +878 -0
- package/dist/grok/tools.js.map +1 -0
- package/dist/hooks/use-enhanced-input.d.ts +38 -0
- package/dist/hooks/use-enhanced-input.js +228 -0
- package/dist/hooks/use-enhanced-input.js.map +1 -0
- package/dist/hooks/use-input-handler.d.ts +36 -0
- package/dist/hooks/use-input-handler.js +1099 -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 +61 -0
- package/dist/hooks/use-input-history.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +869 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/client.d.ts +41 -0
- package/dist/mcp/client.js +224 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/config.d.ts +13 -0
- package/dist/mcp/config.js +56 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/transports.d.ts +53 -0
- package/dist/mcp/transports.js +256 -0
- package/dist/mcp/transports.js.map +1 -0
- package/dist/tools/character-tool.d.ts +27 -0
- package/dist/tools/character-tool.js +194 -0
- package/dist/tools/character-tool.js.map +1 -0
- package/dist/tools/clear-cache-tool.d.ts +14 -0
- package/dist/tools/clear-cache-tool.js +82 -0
- package/dist/tools/clear-cache-tool.js.map +1 -0
- package/dist/tools/confirmation-tool.d.ts +16 -0
- package/dist/tools/confirmation-tool.js +72 -0
- package/dist/tools/confirmation-tool.js.map +1 -0
- package/dist/tools/env-tool.d.ts +17 -0
- package/dist/tools/env-tool.js +89 -0
- package/dist/tools/env-tool.js.map +1 -0
- package/dist/tools/file-conversion-tool.d.ts +16 -0
- package/dist/tools/file-conversion-tool.js +181 -0
- package/dist/tools/file-conversion-tool.js.map +1 -0
- package/dist/tools/image-tool.d.ts +22 -0
- package/dist/tools/image-tool.js +268 -0
- package/dist/tools/image-tool.js.map +1 -0
- package/dist/tools/index.d.ts +14 -0
- package/dist/tools/index.js +15 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/internet-tool.d.ts +11 -0
- package/dist/tools/internet-tool.js +108 -0
- package/dist/tools/internet-tool.js.map +1 -0
- package/dist/tools/introspect-tool.d.ts +11 -0
- package/dist/tools/introspect-tool.js +243 -0
- package/dist/tools/introspect-tool.js.map +1 -0
- package/dist/tools/morph-editor.d.ts +38 -0
- package/dist/tools/morph-editor.js +318 -0
- package/dist/tools/morph-editor.js.map +1 -0
- package/dist/tools/restart-tool.d.ts +7 -0
- package/dist/tools/restart-tool.js +24 -0
- package/dist/tools/restart-tool.js.map +1 -0
- package/dist/tools/search.d.ts +71 -0
- package/dist/tools/search.js +340 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/task-tool.d.ts +19 -0
- package/dist/tools/task-tool.js +115 -0
- package/dist/tools/task-tool.js.map +1 -0
- package/dist/tools/text-editor.d.ts +35 -0
- package/dist/tools/text-editor.js +669 -0
- package/dist/tools/text-editor.js.map +1 -0
- package/dist/tools/tool-discovery.d.ts +20 -0
- package/dist/tools/tool-discovery.js +45 -0
- package/dist/tools/tool-discovery.js.map +1 -0
- package/dist/tools/zsh.d.ts +13 -0
- package/dist/tools/zsh.js +168 -0
- package/dist/tools/zsh.js.map +1 -0
- package/dist/types/index.d.ts +31 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/ui/app.d.ts +7 -0
- package/dist/ui/app.js +99 -0
- package/dist/ui/app.js.map +1 -0
- package/dist/ui/components/active-task-status.d.ts +7 -0
- package/dist/ui/components/active-task-status.js +37 -0
- package/dist/ui/components/active-task-status.js.map +1 -0
- package/dist/ui/components/api-key-input.d.ts +7 -0
- package/dist/ui/components/api-key-input.js +80 -0
- package/dist/ui/components/api-key-input.js.map +1 -0
- package/dist/ui/components/backend-status.d.ts +7 -0
- package/dist/ui/components/backend-status.js +85 -0
- package/dist/ui/components/backend-status.js.map +1 -0
- package/dist/ui/components/chat-history.d.ts +8 -0
- package/dist/ui/components/chat-history.js +187 -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 +63 -0
- package/dist/ui/components/chat-input.js.map +1 -0
- package/dist/ui/components/chat-interface.d.ts +9 -0
- package/dist/ui/components/chat-interface.js +389 -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 +22 -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 +105 -0
- package/dist/ui/components/confirmation-dialog.js.map +1 -0
- package/dist/ui/components/context-status.d.ts +7 -0
- package/dist/ui/components/context-status.js +36 -0
- package/dist/ui/components/context-status.js.map +1 -0
- package/dist/ui/components/diff-renderer.d.ts +13 -0
- package/dist/ui/components/diff-renderer.js +206 -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 +64 -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 +57 -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 +17 -0
- package/dist/ui/components/model-selection.js.map +1 -0
- package/dist/ui/components/mood-status.d.ts +7 -0
- package/dist/ui/components/mood-status.js +34 -0
- package/dist/ui/components/mood-status.js.map +1 -0
- package/dist/ui/components/persona-status.d.ts +7 -0
- package/dist/ui/components/persona-status.js +34 -0
- package/dist/ui/components/persona-status.js.map +1 -0
- package/dist/ui/shared/max-sized-box.d.ts +8 -0
- package/dist/ui/shared/max-sized-box.js +6 -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 +7 -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 +15 -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 +40 -0
- package/dist/ui/utils/markdown-renderer.js.map +1 -0
- package/dist/utils/auth-helper.d.ts +63 -0
- package/dist/utils/auth-helper.js +129 -0
- package/dist/utils/auth-helper.js.map +1 -0
- package/dist/utils/chat-history-manager-sqlite.d.ts +92 -0
- package/dist/utils/chat-history-manager-sqlite.js +334 -0
- package/dist/utils/chat-history-manager-sqlite.js.map +1 -0
- package/dist/utils/chat-history-manager.d.ts +87 -0
- package/dist/utils/chat-history-manager.js +273 -0
- package/dist/utils/chat-history-manager.js.map +1 -0
- package/dist/utils/chat-history-manager.json-backup.d.ts +69 -0
- package/dist/utils/chat-history-manager.json-backup.js +215 -0
- package/dist/utils/chat-history-manager.json-backup.js.map +1 -0
- package/dist/utils/confirmation-service.d.ts +46 -0
- package/dist/utils/confirmation-service.js +165 -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 +30 -0
- package/dist/utils/custom-instructions.js.map +1 -0
- package/dist/utils/database-connection.d.ts +27 -0
- package/dist/utils/database-connection.js +81 -0
- package/dist/utils/database-connection.js.map +1 -0
- package/dist/utils/database-schema.d.ts +17 -0
- package/dist/utils/database-schema.js +93 -0
- package/dist/utils/database-schema.js.map +1 -0
- package/dist/utils/error-logger.d.ts +13 -0
- package/dist/utils/error-logger.js +56 -0
- package/dist/utils/error-logger.js.map +1 -0
- package/dist/utils/hook-executor.d.ts +59 -0
- package/dist/utils/hook-executor.js +351 -0
- package/dist/utils/hook-executor.js.map +1 -0
- package/dist/utils/model-config.d.ts +28 -0
- package/dist/utils/model-config.js +42 -0
- package/dist/utils/model-config.js.map +1 -0
- package/dist/utils/path-utils.d.ts +4 -0
- package/dist/utils/path-utils.js +12 -0
- package/dist/utils/path-utils.js.map +1 -0
- package/dist/utils/settings-manager.d.ts +169 -0
- package/dist/utils/settings-manager.js +403 -0
- package/dist/utils/settings-manager.js.map +1 -0
- package/dist/utils/settings.d.ts +1 -0
- package/dist/utils/settings.js +4 -0
- package/dist/utils/settings.js.map +1 -0
- package/dist/utils/slash-commands.d.ts +25 -0
- package/dist/utils/slash-commands.js +454 -0
- package/dist/utils/slash-commands.js.map +1 -0
- package/dist/utils/startup-hook.d.ts +13 -0
- package/dist/utils/startup-hook.js +44 -0
- package/dist/utils/startup-hook.js.map +1 -0
- package/dist/utils/text-utils.d.ts +80 -0
- package/dist/utils/text-utils.js +182 -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 +78 -0
- package/dist/utils/token-counter.js.map +1 -0
- package/package.json +102 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export class RestartTool {
|
|
2
|
+
/**
|
|
3
|
+
* Restart the application by exiting with code 51
|
|
4
|
+
*/
|
|
5
|
+
async restart() {
|
|
6
|
+
try {
|
|
7
|
+
// Exit with code 51 to signal restart
|
|
8
|
+
process.exit(51);
|
|
9
|
+
// This line will never be reached, but TypeScript requires a return
|
|
10
|
+
return {
|
|
11
|
+
success: true,
|
|
12
|
+
output: "Restarting application..."
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
return {
|
|
17
|
+
success: false,
|
|
18
|
+
error: error instanceof Error ? error.message : "Unknown error during restart",
|
|
19
|
+
output: error instanceof Error ? error.message : "Unknown error during restart"
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=restart-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restart-tool.js","sourceRoot":"","sources":["../../src/tools/restart-tool.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,WAAW;IACtB;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,sCAAsC;YACtC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEjB,oEAAoE;YACpE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,2BAA2B;aACpC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B;gBAC9E,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,8BAA8B;aAChF,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { ToolResult } from "../types/index.js";
|
|
2
|
+
import { ToolDiscovery } from "./tool-discovery.js";
|
|
3
|
+
export interface SearchResult {
|
|
4
|
+
file: string;
|
|
5
|
+
line: number;
|
|
6
|
+
column: number;
|
|
7
|
+
text: string;
|
|
8
|
+
match: string;
|
|
9
|
+
}
|
|
10
|
+
export interface FileSearchResult {
|
|
11
|
+
path: string;
|
|
12
|
+
name: string;
|
|
13
|
+
score: number;
|
|
14
|
+
}
|
|
15
|
+
export interface UnifiedSearchResult {
|
|
16
|
+
type: "text" | "file";
|
|
17
|
+
file: string;
|
|
18
|
+
line?: number;
|
|
19
|
+
column?: number;
|
|
20
|
+
text?: string;
|
|
21
|
+
match?: string;
|
|
22
|
+
score?: number;
|
|
23
|
+
}
|
|
24
|
+
export declare class SearchTool implements ToolDiscovery {
|
|
25
|
+
private confirmationService;
|
|
26
|
+
private currentDirectory;
|
|
27
|
+
/**
|
|
28
|
+
* Unified search method that can search for text content or find files
|
|
29
|
+
*/
|
|
30
|
+
universalSearch(query: string, options?: {
|
|
31
|
+
searchType?: "text" | "files" | "both";
|
|
32
|
+
includePattern?: string;
|
|
33
|
+
excludePattern?: string;
|
|
34
|
+
caseSensitive?: boolean;
|
|
35
|
+
wholeWord?: boolean;
|
|
36
|
+
regex?: boolean;
|
|
37
|
+
maxResults?: number;
|
|
38
|
+
fileTypes?: string[];
|
|
39
|
+
excludeFiles?: string[];
|
|
40
|
+
includeHidden?: boolean;
|
|
41
|
+
}): Promise<ToolResult>;
|
|
42
|
+
/**
|
|
43
|
+
* Execute ripgrep command with specified options
|
|
44
|
+
*/
|
|
45
|
+
private _executeRipgrep;
|
|
46
|
+
/**
|
|
47
|
+
* Parse ripgrep JSON output into SearchResult objects
|
|
48
|
+
*/
|
|
49
|
+
private parseRipgrepOutput;
|
|
50
|
+
/**
|
|
51
|
+
* Find files by pattern using a simple file walking approach
|
|
52
|
+
*/
|
|
53
|
+
private _findFilesByPattern;
|
|
54
|
+
/**
|
|
55
|
+
* Calculate fuzzy match score for file names
|
|
56
|
+
*/
|
|
57
|
+
private calculateFileScore;
|
|
58
|
+
/**
|
|
59
|
+
* Format unified search results for display
|
|
60
|
+
*/
|
|
61
|
+
private formatUnifiedResults;
|
|
62
|
+
/**
|
|
63
|
+
* Update current working directory
|
|
64
|
+
*/
|
|
65
|
+
setCurrentDirectory(directory: string): void;
|
|
66
|
+
/**
|
|
67
|
+
* Get current working directory
|
|
68
|
+
*/
|
|
69
|
+
getCurrentDirectory(): string;
|
|
70
|
+
getHandledToolNames(): string[];
|
|
71
|
+
}
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
import { spawn } from "child_process";
|
|
2
|
+
import { ConfirmationService } from "../utils/confirmation-service.js";
|
|
3
|
+
import fs from "fs-extra";
|
|
4
|
+
import * as path from "path";
|
|
5
|
+
import { getHandledToolNames } from "./tool-discovery.js";
|
|
6
|
+
export class SearchTool {
|
|
7
|
+
confirmationService = ConfirmationService.getInstance();
|
|
8
|
+
currentDirectory = process.cwd();
|
|
9
|
+
/**
|
|
10
|
+
* Unified search method that can search for text content or find files
|
|
11
|
+
*/
|
|
12
|
+
async universalSearch(query, options = {}) {
|
|
13
|
+
try {
|
|
14
|
+
const searchType = options.searchType || "both";
|
|
15
|
+
const results = [];
|
|
16
|
+
// Search for text content if requested
|
|
17
|
+
if (searchType === "text" || searchType === "both") {
|
|
18
|
+
const textResults = await this._executeRipgrep(query, options);
|
|
19
|
+
results.push(...textResults.map((r) => ({
|
|
20
|
+
type: "text",
|
|
21
|
+
file: r.file,
|
|
22
|
+
line: r.line,
|
|
23
|
+
column: r.column,
|
|
24
|
+
text: r.text,
|
|
25
|
+
match: r.match,
|
|
26
|
+
})));
|
|
27
|
+
}
|
|
28
|
+
// Search for files if requested
|
|
29
|
+
if (searchType === "files" || searchType === "both") {
|
|
30
|
+
const fileResults = await this._findFilesByPattern(query, options);
|
|
31
|
+
results.push(...fileResults.map((r) => ({
|
|
32
|
+
type: "file",
|
|
33
|
+
file: r.path,
|
|
34
|
+
score: r.score,
|
|
35
|
+
})));
|
|
36
|
+
}
|
|
37
|
+
if (results.length === 0) {
|
|
38
|
+
return {
|
|
39
|
+
success: true,
|
|
40
|
+
output: `No results found for "${query}"`,
|
|
41
|
+
displayOutput: "",
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const formattedOutput = this.formatUnifiedResults(results, query, searchType);
|
|
45
|
+
// Count unique files for displayOutput
|
|
46
|
+
const textResults = results.filter((r) => r.type === "text");
|
|
47
|
+
const fileResults = results.filter((r) => r.type === "file");
|
|
48
|
+
const allFiles = new Set();
|
|
49
|
+
textResults.forEach((r) => allFiles.add(r.file));
|
|
50
|
+
fileResults.forEach((r) => allFiles.add(r.file));
|
|
51
|
+
const fileCount = allFiles.size;
|
|
52
|
+
const matchCount = textResults.length;
|
|
53
|
+
let summary = `Found ${fileCount} ${fileCount === 1 ? 'file' : 'files'}`;
|
|
54
|
+
if (matchCount > 0) {
|
|
55
|
+
summary += ` (${matchCount} ${matchCount === 1 ? 'match' : 'matches'})`;
|
|
56
|
+
}
|
|
57
|
+
// Prepend summary to formattedOutput for display
|
|
58
|
+
const outputWithSummary = `${summary}\n\n${formattedOutput}`;
|
|
59
|
+
return {
|
|
60
|
+
success: true,
|
|
61
|
+
output: outputWithSummary,
|
|
62
|
+
displayOutput: "",
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
return {
|
|
67
|
+
success: false,
|
|
68
|
+
error: `Search error: ${error.message}`,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Execute ripgrep command with specified options
|
|
74
|
+
*/
|
|
75
|
+
async _executeRipgrep(query, options) {
|
|
76
|
+
return new Promise((resolve, reject) => {
|
|
77
|
+
const args = [
|
|
78
|
+
"--json",
|
|
79
|
+
"--with-filename",
|
|
80
|
+
"--line-number",
|
|
81
|
+
"--column",
|
|
82
|
+
"--no-heading",
|
|
83
|
+
"--color=never",
|
|
84
|
+
];
|
|
85
|
+
// Add case sensitivity
|
|
86
|
+
if (!options.caseSensitive) {
|
|
87
|
+
args.push("--ignore-case");
|
|
88
|
+
}
|
|
89
|
+
// Add whole word matching
|
|
90
|
+
if (options.wholeWord) {
|
|
91
|
+
args.push("--word-regexp");
|
|
92
|
+
}
|
|
93
|
+
// Add regex mode
|
|
94
|
+
if (!options.regex) {
|
|
95
|
+
args.push("--fixed-strings");
|
|
96
|
+
}
|
|
97
|
+
// Add max results limit
|
|
98
|
+
if (options.maxResults) {
|
|
99
|
+
args.push("--max-count", options.maxResults.toString());
|
|
100
|
+
}
|
|
101
|
+
// Add file type filters
|
|
102
|
+
if (options.fileTypes) {
|
|
103
|
+
options.fileTypes.forEach((type) => {
|
|
104
|
+
args.push("--type", type);
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
// Add include pattern
|
|
108
|
+
if (options.includePattern) {
|
|
109
|
+
args.push("--glob", options.includePattern);
|
|
110
|
+
}
|
|
111
|
+
// Add exclude pattern
|
|
112
|
+
if (options.excludePattern) {
|
|
113
|
+
args.push("--glob", `!${options.excludePattern}`);
|
|
114
|
+
}
|
|
115
|
+
// Add exclude files
|
|
116
|
+
if (options.excludeFiles) {
|
|
117
|
+
options.excludeFiles.forEach((file) => {
|
|
118
|
+
args.push("--glob", `!${file}`);
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
// Respect gitignore and common ignore patterns
|
|
122
|
+
args.push("--no-require-git", "--follow", "--glob", "!.git/**", "--glob", "!node_modules/**", "--glob", "!.DS_Store", "--glob", "!*.log");
|
|
123
|
+
// Add query (search current directory)
|
|
124
|
+
args.push(query, ".");
|
|
125
|
+
const rg = spawn("rg", args, {
|
|
126
|
+
cwd: this.currentDirectory,
|
|
127
|
+
});
|
|
128
|
+
let output = "";
|
|
129
|
+
let errorOutput = "";
|
|
130
|
+
rg.stdout.on("data", (data) => {
|
|
131
|
+
output += data.toString();
|
|
132
|
+
});
|
|
133
|
+
rg.stderr.on("data", (data) => {
|
|
134
|
+
errorOutput += data.toString();
|
|
135
|
+
});
|
|
136
|
+
rg.on("close", (code) => {
|
|
137
|
+
if (code === 0 || code === 1) {
|
|
138
|
+
// 0 = found, 1 = not found
|
|
139
|
+
const results = this.parseRipgrepOutput(output);
|
|
140
|
+
resolve(results);
|
|
141
|
+
}
|
|
142
|
+
else if (code === 2) {
|
|
143
|
+
// Code 2 means an error occurred (e.g., file path issues)
|
|
144
|
+
// Return partial results if we have them, otherwise fail silently
|
|
145
|
+
const results = this.parseRipgrepOutput(output);
|
|
146
|
+
resolve(results);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
reject(new Error(`Ripgrep failed with code ${code}: ${errorOutput}`));
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
rg.on("error", (error) => {
|
|
153
|
+
reject(error);
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Parse ripgrep JSON output into SearchResult objects
|
|
159
|
+
*/
|
|
160
|
+
parseRipgrepOutput(output) {
|
|
161
|
+
const results = [];
|
|
162
|
+
const lines = output
|
|
163
|
+
.trim()
|
|
164
|
+
.split("\n")
|
|
165
|
+
.filter((line) => line.length > 0);
|
|
166
|
+
for (const line of lines) {
|
|
167
|
+
try {
|
|
168
|
+
const parsed = JSON.parse(line);
|
|
169
|
+
if (parsed.type === "match") {
|
|
170
|
+
const data = parsed.data;
|
|
171
|
+
results.push({
|
|
172
|
+
file: data.path.text,
|
|
173
|
+
line: data.line_number,
|
|
174
|
+
column: data.submatches[0]?.start || 0,
|
|
175
|
+
text: data.lines.text.trim(),
|
|
176
|
+
match: data.submatches[0]?.match?.text || "",
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
catch (e) {
|
|
181
|
+
// Skip invalid JSON lines
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return results;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Find files by pattern using a simple file walking approach
|
|
189
|
+
*/
|
|
190
|
+
async _findFilesByPattern(pattern, options) {
|
|
191
|
+
const files = [];
|
|
192
|
+
const maxResults = options.maxResults || 50;
|
|
193
|
+
const searchPattern = pattern.toLowerCase();
|
|
194
|
+
const walkDir = async (dir, depth = 0) => {
|
|
195
|
+
if (depth > 10 || files.length >= maxResults)
|
|
196
|
+
return; // Prevent infinite recursion and limit results
|
|
197
|
+
try {
|
|
198
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
199
|
+
for (const entry of entries) {
|
|
200
|
+
if (files.length >= maxResults)
|
|
201
|
+
break;
|
|
202
|
+
const fullPath = path.join(dir, entry.name);
|
|
203
|
+
const relativePath = path.relative(this.currentDirectory, fullPath);
|
|
204
|
+
// Skip hidden files unless explicitly included
|
|
205
|
+
if (!options.includeHidden && entry.name.startsWith(".")) {
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
// Skip common directories
|
|
209
|
+
if (entry.isDirectory() &&
|
|
210
|
+
[
|
|
211
|
+
"node_modules",
|
|
212
|
+
".git",
|
|
213
|
+
".svn",
|
|
214
|
+
".hg",
|
|
215
|
+
"dist",
|
|
216
|
+
"build",
|
|
217
|
+
".next",
|
|
218
|
+
".cache",
|
|
219
|
+
].includes(entry.name)) {
|
|
220
|
+
continue;
|
|
221
|
+
}
|
|
222
|
+
// Apply exclude pattern
|
|
223
|
+
if (options.excludePattern &&
|
|
224
|
+
relativePath.includes(options.excludePattern)) {
|
|
225
|
+
continue;
|
|
226
|
+
}
|
|
227
|
+
if (entry.isFile()) {
|
|
228
|
+
const score = this.calculateFileScore(entry.name, relativePath, searchPattern);
|
|
229
|
+
if (score > 0) {
|
|
230
|
+
files.push({
|
|
231
|
+
path: relativePath,
|
|
232
|
+
name: entry.name,
|
|
233
|
+
score,
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
else if (entry.isDirectory()) {
|
|
238
|
+
// Check if directory name matches pattern and add it to results
|
|
239
|
+
const score = this.calculateFileScore(entry.name, relativePath, searchPattern);
|
|
240
|
+
if (score > 0) {
|
|
241
|
+
files.push({
|
|
242
|
+
path: relativePath,
|
|
243
|
+
name: entry.name,
|
|
244
|
+
score,
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
// Recurse into directory
|
|
248
|
+
await walkDir(fullPath, depth + 1);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
// Skip directories we can't read
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
await walkDir(this.currentDirectory);
|
|
257
|
+
// Sort by score (descending) and return top results
|
|
258
|
+
return files.sort((a, b) => b.score - a.score).slice(0, maxResults);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Calculate fuzzy match score for file names
|
|
262
|
+
*/
|
|
263
|
+
calculateFileScore(fileName, filePath, pattern) {
|
|
264
|
+
const lowerFileName = fileName.toLowerCase();
|
|
265
|
+
const lowerFilePath = filePath.toLowerCase();
|
|
266
|
+
// Exact matches get highest score
|
|
267
|
+
if (lowerFileName === pattern)
|
|
268
|
+
return 100;
|
|
269
|
+
if (lowerFileName.includes(pattern))
|
|
270
|
+
return 80;
|
|
271
|
+
// Path matches get medium score
|
|
272
|
+
if (lowerFilePath.includes(pattern))
|
|
273
|
+
return 60;
|
|
274
|
+
// Fuzzy matching - check if all characters of pattern exist in order
|
|
275
|
+
let patternIndex = 0;
|
|
276
|
+
for (let i = 0; i < lowerFileName.length && patternIndex < pattern.length; i++) {
|
|
277
|
+
if (lowerFileName[i] === pattern[patternIndex]) {
|
|
278
|
+
patternIndex++;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
if (patternIndex === pattern.length) {
|
|
282
|
+
// All characters found in order - score based on how close they are
|
|
283
|
+
return Math.max(10, 40 - (fileName.length - pattern.length));
|
|
284
|
+
}
|
|
285
|
+
return 0;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Format unified search results for display
|
|
289
|
+
*/
|
|
290
|
+
formatUnifiedResults(results, query, searchType) {
|
|
291
|
+
if (results.length === 0) {
|
|
292
|
+
return `No results found for "${query}"`;
|
|
293
|
+
}
|
|
294
|
+
let output = `Search results for "${query}":\n`;
|
|
295
|
+
// Separate text and file results
|
|
296
|
+
const textResults = results.filter((r) => r.type === "text");
|
|
297
|
+
const fileResults = results.filter((r) => r.type === "file");
|
|
298
|
+
// Show all unique files (from both text matches and file matches)
|
|
299
|
+
const allFiles = new Set();
|
|
300
|
+
// Add files from text results
|
|
301
|
+
textResults.forEach((result) => {
|
|
302
|
+
allFiles.add(result.file);
|
|
303
|
+
});
|
|
304
|
+
// Add files from file search results
|
|
305
|
+
fileResults.forEach((result) => {
|
|
306
|
+
allFiles.add(result.file);
|
|
307
|
+
});
|
|
308
|
+
const fileList = Array.from(allFiles);
|
|
309
|
+
const displayLimit = 8;
|
|
310
|
+
// Show files in compact format
|
|
311
|
+
fileList.slice(0, displayLimit).forEach((file) => {
|
|
312
|
+
// Count matches in this file for text results
|
|
313
|
+
const matchCount = textResults.filter((r) => r.file === file).length;
|
|
314
|
+
const matchIndicator = matchCount > 0 ? ` (${matchCount} matches)` : "";
|
|
315
|
+
output += ` ${file}${matchIndicator}\n`;
|
|
316
|
+
});
|
|
317
|
+
// Show "+X more" if there are additional results
|
|
318
|
+
if (fileList.length > displayLimit) {
|
|
319
|
+
const remaining = fileList.length - displayLimit;
|
|
320
|
+
output += ` ... +${remaining} more\n`;
|
|
321
|
+
}
|
|
322
|
+
return output.trim();
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Update current working directory
|
|
326
|
+
*/
|
|
327
|
+
setCurrentDirectory(directory) {
|
|
328
|
+
this.currentDirectory = directory;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* Get current working directory
|
|
332
|
+
*/
|
|
333
|
+
getCurrentDirectory() {
|
|
334
|
+
return this.currentDirectory;
|
|
335
|
+
}
|
|
336
|
+
getHandledToolNames() {
|
|
337
|
+
return getHandledToolNames(this);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
//# 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,19 @@
|
|
|
1
|
+
import { ToolResult } from "../types/index.js";
|
|
2
|
+
import { ToolDiscovery } from "./tool-discovery.js";
|
|
3
|
+
export declare class TaskTool implements ToolDiscovery {
|
|
4
|
+
private agent;
|
|
5
|
+
setAgent(agent: any): void;
|
|
6
|
+
getHandledToolNames(): string[];
|
|
7
|
+
/**
|
|
8
|
+
* Start a new active task with action and optional color
|
|
9
|
+
*/
|
|
10
|
+
startActiveTask(activeTask: string, action: string, color?: string): Promise<ToolResult>;
|
|
11
|
+
/**
|
|
12
|
+
* Transition the current active task to a new status/action
|
|
13
|
+
*/
|
|
14
|
+
transitionActiveTaskStatus(action: string, color?: string): Promise<ToolResult>;
|
|
15
|
+
/**
|
|
16
|
+
* Stop the current active task with reason and documentation file
|
|
17
|
+
*/
|
|
18
|
+
stopActiveTask(reason: string, documentationFile: string, color?: string): Promise<ToolResult>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
export class TaskTool {
|
|
2
|
+
agent; // Reference to the GrokAgent
|
|
3
|
+
setAgent(agent) {
|
|
4
|
+
this.agent = agent;
|
|
5
|
+
}
|
|
6
|
+
getHandledToolNames() {
|
|
7
|
+
return ["startActiveTask", "transitionActiveTaskStatus", "stopActiveTask"];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Start a new active task with action and optional color
|
|
11
|
+
*/
|
|
12
|
+
async startActiveTask(activeTask, action, color) {
|
|
13
|
+
try {
|
|
14
|
+
if (!this.agent) {
|
|
15
|
+
return {
|
|
16
|
+
success: false,
|
|
17
|
+
error: "Agent not available",
|
|
18
|
+
output: "Agent not available"
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// Start the active task
|
|
22
|
+
const result = await this.agent.startActiveTask(activeTask, action, color);
|
|
23
|
+
if (!result.success) {
|
|
24
|
+
return {
|
|
25
|
+
success: false,
|
|
26
|
+
error: result.error,
|
|
27
|
+
output: result.error || "Failed to start active task"
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
success: true,
|
|
32
|
+
output: `Active task started: ${action}: ${activeTask}${color ? ` (color: ${color})` : ''}`,
|
|
33
|
+
displayOutput: `Active task started`
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
return {
|
|
38
|
+
success: false,
|
|
39
|
+
error: error instanceof Error ? error.message : "Unknown error starting active task",
|
|
40
|
+
output: error instanceof Error ? error.message : "Unknown error starting active task"
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Transition the current active task to a new status/action
|
|
46
|
+
*/
|
|
47
|
+
async transitionActiveTaskStatus(action, color) {
|
|
48
|
+
try {
|
|
49
|
+
if (!this.agent) {
|
|
50
|
+
return {
|
|
51
|
+
success: false,
|
|
52
|
+
error: "Agent not available",
|
|
53
|
+
output: "Agent not available"
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
// Transition the active task status
|
|
57
|
+
const result = await this.agent.transitionActiveTaskStatus(action, color);
|
|
58
|
+
if (!result.success) {
|
|
59
|
+
return {
|
|
60
|
+
success: false,
|
|
61
|
+
error: result.error,
|
|
62
|
+
output: result.error || "Failed to transition active task status"
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
success: true,
|
|
67
|
+
output: `Active task status transitioned to: ${action}${color ? ` (color: ${color})` : ''}`,
|
|
68
|
+
displayOutput: `Active task status updated`
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
return {
|
|
73
|
+
success: false,
|
|
74
|
+
error: error instanceof Error ? error.message : "Unknown error transitioning active task status",
|
|
75
|
+
output: error instanceof Error ? error.message : "Unknown error transitioning active task status"
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Stop the current active task with reason and documentation file
|
|
81
|
+
*/
|
|
82
|
+
async stopActiveTask(reason, documentationFile, color) {
|
|
83
|
+
try {
|
|
84
|
+
if (!this.agent) {
|
|
85
|
+
return {
|
|
86
|
+
success: false,
|
|
87
|
+
error: "Agent not available",
|
|
88
|
+
output: "Agent not available"
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
// Stop the active task
|
|
92
|
+
const result = await this.agent.stopActiveTask(reason, documentationFile, color);
|
|
93
|
+
if (!result.success) {
|
|
94
|
+
return {
|
|
95
|
+
success: false,
|
|
96
|
+
error: result.error,
|
|
97
|
+
output: result.error || "Failed to stop active task"
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
success: true,
|
|
102
|
+
output: `Active task stopped: ${reason}${color ? ` (color: ${color})` : ''}`,
|
|
103
|
+
displayOutput: `Active task stopped`
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
return {
|
|
108
|
+
success: false,
|
|
109
|
+
error: error instanceof Error ? error.message : "Unknown error stopping active task",
|
|
110
|
+
output: error instanceof Error ? error.message : "Unknown error stopping active task"
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=task-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-tool.js","sourceRoot":"","sources":["../../src/tools/task-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ToolResult, EditorCommand } from "../types/index.js";
|
|
2
|
+
import { ToolDiscovery } from "./tool-discovery.js";
|
|
3
|
+
export declare class TextEditorTool implements ToolDiscovery {
|
|
4
|
+
private editHistory;
|
|
5
|
+
private confirmationService;
|
|
6
|
+
private agent;
|
|
7
|
+
setAgent(agent: any): void;
|
|
8
|
+
/**
|
|
9
|
+
* Get the maximum characters allowed based on current context usage
|
|
10
|
+
* Returns null if viewFile should be disabled
|
|
11
|
+
*/
|
|
12
|
+
private getMaxCharsAllowed;
|
|
13
|
+
viewFile(filePath: string, viewRange?: [number, number]): Promise<ToolResult>;
|
|
14
|
+
strReplace(filePath: string, oldStr: string, newStr: string, replaceAll?: boolean): Promise<ToolResult>;
|
|
15
|
+
createNewFile(filePath: string, content: string): Promise<ToolResult>;
|
|
16
|
+
replaceLines(filePath: string, startLine: number, endLine: number, newContent: string): Promise<ToolResult>;
|
|
17
|
+
insertLines(filePath: string, insertLine: number, content: string): Promise<ToolResult>;
|
|
18
|
+
undoEdit(): Promise<ToolResult>;
|
|
19
|
+
private findFuzzyMatch;
|
|
20
|
+
private normalizeForComparison;
|
|
21
|
+
private isSimilarStructure;
|
|
22
|
+
/**
|
|
23
|
+
* Compute Longest Common Subsequence using dynamic programming
|
|
24
|
+
* Returns array of indices in oldLines that are part of LCS
|
|
25
|
+
*/
|
|
26
|
+
private computeLCS;
|
|
27
|
+
/**
|
|
28
|
+
* Extract changes from LCS table
|
|
29
|
+
* Returns array of change regions
|
|
30
|
+
*/
|
|
31
|
+
private extractChanges;
|
|
32
|
+
private generateDiff;
|
|
33
|
+
getEditHistory(): EditorCommand[];
|
|
34
|
+
getHandledToolNames(): string[];
|
|
35
|
+
}
|