kagent-ts 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 +395 -0
- package/dist/compression/interface.d.ts +26 -0
- package/dist/compression/interface.d.ts.map +1 -0
- package/dist/compression/interface.js +3 -0
- package/dist/compression/interface.js.map +1 -0
- package/dist/compression/sliding-window.d.ts +21 -0
- package/dist/compression/sliding-window.d.ts.map +1 -0
- package/dist/compression/sliding-window.js +55 -0
- package/dist/compression/sliding-window.js.map +1 -0
- package/dist/compression/types.d.ts +12 -0
- package/dist/compression/types.d.ts.map +1 -0
- package/dist/compression/types.js +3 -0
- package/dist/compression/types.js.map +1 -0
- package/dist/context/context-manager.d.ts +76 -0
- package/dist/context/context-manager.d.ts.map +1 -0
- package/dist/context/context-manager.js +132 -0
- package/dist/context/context-manager.js.map +1 -0
- package/dist/context/types.d.ts +35 -0
- package/dist/context/types.d.ts.map +1 -0
- package/dist/context/types.js +3 -0
- package/dist/context/types.js.map +1 -0
- package/dist/core/agent.d.ts +288 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +398 -0
- package/dist/core/agent.js.map +1 -0
- package/dist/core/hooks.d.ts +34 -0
- package/dist/core/hooks.d.ts.map +1 -0
- package/dist/core/hooks.js +3 -0
- package/dist/core/hooks.js.map +1 -0
- package/dist/core/plan-solve-agent.d.ts +114 -0
- package/dist/core/plan-solve-agent.d.ts.map +1 -0
- package/dist/core/plan-solve-agent.js +450 -0
- package/dist/core/plan-solve-agent.js.map +1 -0
- package/dist/core/react-agent.d.ts +52 -0
- package/dist/core/react-agent.d.ts.map +1 -0
- package/dist/core/react-agent.js +266 -0
- package/dist/core/react-agent.js.map +1 -0
- package/dist/core/response-schema.d.ts +91 -0
- package/dist/core/response-schema.d.ts.map +1 -0
- package/dist/core/response-schema.js +292 -0
- package/dist/core/response-schema.js.map +1 -0
- package/dist/core/types.d.ts +6 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +67 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/interface.d.ts +87 -0
- package/dist/llm/interface.d.ts.map +1 -0
- package/dist/llm/interface.js +3 -0
- package/dist/llm/interface.js.map +1 -0
- package/dist/llm/openai-provider.d.ts +92 -0
- package/dist/llm/openai-provider.d.ts.map +1 -0
- package/dist/llm/openai-provider.js +262 -0
- package/dist/llm/openai-provider.js.map +1 -0
- package/dist/messages/message.d.ts +50 -0
- package/dist/messages/message.d.ts.map +1 -0
- package/dist/messages/message.js +87 -0
- package/dist/messages/message.js.map +1 -0
- package/dist/messages/types.d.ts +31 -0
- package/dist/messages/types.d.ts.map +1 -0
- package/dist/messages/types.js +14 -0
- package/dist/messages/types.js.map +1 -0
- package/dist/preferences/preference-manager.d.ts +88 -0
- package/dist/preferences/preference-manager.d.ts.map +1 -0
- package/dist/preferences/preference-manager.js +196 -0
- package/dist/preferences/preference-manager.js.map +1 -0
- package/dist/preferences/types.d.ts +27 -0
- package/dist/preferences/types.d.ts.map +1 -0
- package/dist/preferences/types.js +3 -0
- package/dist/preferences/types.js.map +1 -0
- package/dist/session/session-manager.d.ts +56 -0
- package/dist/session/session-manager.d.ts.map +1 -0
- package/dist/session/session-manager.js +156 -0
- package/dist/session/session-manager.js.map +1 -0
- package/dist/session/session-types.d.ts +51 -0
- package/dist/session/session-types.d.ts.map +1 -0
- package/dist/session/session-types.js +3 -0
- package/dist/session/session-types.js.map +1 -0
- package/dist/skills/file-skill-loader.d.ts +88 -0
- package/dist/skills/file-skill-loader.d.ts.map +1 -0
- package/dist/skills/file-skill-loader.js +365 -0
- package/dist/skills/file-skill-loader.js.map +1 -0
- package/dist/skills/index.d.ts +4 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +10 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/skill-manager.d.ts +133 -0
- package/dist/skills/skill-manager.d.ts.map +1 -0
- package/dist/skills/skill-manager.js +310 -0
- package/dist/skills/skill-manager.js.map +1 -0
- package/dist/skills/types.d.ts +42 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +3 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/tools/builtin/edit-file.d.ts +12 -0
- package/dist/tools/builtin/edit-file.d.ts.map +1 -0
- package/dist/tools/builtin/edit-file.js +123 -0
- package/dist/tools/builtin/edit-file.js.map +1 -0
- package/dist/tools/builtin/glob-search.d.ts +11 -0
- package/dist/tools/builtin/glob-search.d.ts.map +1 -0
- package/dist/tools/builtin/glob-search.js +264 -0
- package/dist/tools/builtin/glob-search.js.map +1 -0
- package/dist/tools/builtin/grep-search.d.ts +14 -0
- package/dist/tools/builtin/grep-search.d.ts.map +1 -0
- package/dist/tools/builtin/grep-search.js +264 -0
- package/dist/tools/builtin/grep-search.js.map +1 -0
- package/dist/tools/builtin/index.d.ts +21 -0
- package/dist/tools/builtin/index.d.ts.map +1 -0
- package/dist/tools/builtin/index.js +53 -0
- package/dist/tools/builtin/index.js.map +1 -0
- package/dist/tools/builtin/read-file.d.ts +11 -0
- package/dist/tools/builtin/read-file.d.ts.map +1 -0
- package/dist/tools/builtin/read-file.js +122 -0
- package/dist/tools/builtin/read-file.js.map +1 -0
- package/dist/tools/builtin/write-file.d.ts +10 -0
- package/dist/tools/builtin/write-file.d.ts.map +1 -0
- package/dist/tools/builtin/write-file.js +89 -0
- package/dist/tools/builtin/write-file.js.map +1 -0
- package/dist/tools/circuit-breaker.d.ts +77 -0
- package/dist/tools/circuit-breaker.d.ts.map +1 -0
- package/dist/tools/circuit-breaker.js +102 -0
- package/dist/tools/circuit-breaker.js.map +1 -0
- package/dist/tools/error-tracker.d.ts +116 -0
- package/dist/tools/error-tracker.d.ts.map +1 -0
- package/dist/tools/error-tracker.js +484 -0
- package/dist/tools/error-tracker.js.map +1 -0
- package/dist/tools/tool-registry.d.ts +87 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +188 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/tools/types.d.ts +95 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +14 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/utils/token-counter.d.ts +31 -0
- package/dist/utils/token-counter.d.ts.map +1 -0
- package/dist/utils/token-counter.js +105 -0
- package/dist/utils/token-counter.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,123 @@
|
|
|
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.EditFileTool = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
/**
|
|
40
|
+
* Edit a file by finding and replacing exact text.
|
|
41
|
+
*
|
|
42
|
+
* Parameters:
|
|
43
|
+
* - file_path (required): Absolute path to the file to edit.
|
|
44
|
+
* - old_string (required): The exact text to find (must match exactly).
|
|
45
|
+
* - new_string (required): The replacement text.
|
|
46
|
+
* - replace_all (optional): Replace all occurrences (default: false).
|
|
47
|
+
*/
|
|
48
|
+
exports.EditFileTool = {
|
|
49
|
+
name: "edit_file",
|
|
50
|
+
description: "Edit a file by performing an exact string replacement. " +
|
|
51
|
+
"The old_string must match the file contents exactly, including whitespace and indentation. " +
|
|
52
|
+
"Useful for making targeted edits without rewriting the entire file.",
|
|
53
|
+
parameters: {
|
|
54
|
+
type: "object",
|
|
55
|
+
properties: {
|
|
56
|
+
file_path: {
|
|
57
|
+
type: "string",
|
|
58
|
+
description: "Absolute path to the file to edit.",
|
|
59
|
+
},
|
|
60
|
+
old_string: {
|
|
61
|
+
type: "string",
|
|
62
|
+
description: "The exact text to search for and replace. " +
|
|
63
|
+
"Must match the file contents exactly (including indentation).",
|
|
64
|
+
},
|
|
65
|
+
new_string: {
|
|
66
|
+
type: "string",
|
|
67
|
+
description: "The text to replace old_string with.",
|
|
68
|
+
},
|
|
69
|
+
replace_all: {
|
|
70
|
+
type: "boolean",
|
|
71
|
+
description: "If true, replace all occurrences of old_string. " +
|
|
72
|
+
"If false (default), only replace the first occurrence.",
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
required: ["file_path", "old_string", "new_string"],
|
|
76
|
+
},
|
|
77
|
+
async execute(args) {
|
|
78
|
+
const filePath = args.file_path;
|
|
79
|
+
const oldString = args.old_string;
|
|
80
|
+
const newString = args.new_string;
|
|
81
|
+
const replaceAll = args.replace_all === true;
|
|
82
|
+
if (!filePath || typeof filePath !== "string") {
|
|
83
|
+
return 'Error: "file_path" must be a non-empty string.';
|
|
84
|
+
}
|
|
85
|
+
if (!oldString || typeof oldString !== "string") {
|
|
86
|
+
return 'Error: "old_string" must be a non-empty string.';
|
|
87
|
+
}
|
|
88
|
+
if (newString === undefined || newString === null) {
|
|
89
|
+
return 'Error: "new_string" is required.';
|
|
90
|
+
}
|
|
91
|
+
const resolvedPath = path.resolve(filePath);
|
|
92
|
+
// Validate file exists
|
|
93
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
94
|
+
return `Error: File not found: ${resolvedPath}`;
|
|
95
|
+
}
|
|
96
|
+
try {
|
|
97
|
+
const content = fs.readFileSync(resolvedPath, "utf-8");
|
|
98
|
+
// Check that old_string exists in the file
|
|
99
|
+
if (!content.includes(oldString)) {
|
|
100
|
+
return (`Error: The specified text was not found in the file.\n` +
|
|
101
|
+
`Make sure the text matches exactly, including whitespace and indentation.`);
|
|
102
|
+
}
|
|
103
|
+
// Perform the replacement
|
|
104
|
+
const newContent = replaceAll
|
|
105
|
+
? content.split(oldString).join(newString)
|
|
106
|
+
: content.replace(oldString, newString);
|
|
107
|
+
// Write back
|
|
108
|
+
fs.writeFileSync(resolvedPath, newContent, "utf-8");
|
|
109
|
+
// Count occurrences replaced
|
|
110
|
+
const oldCount = content.split(oldString).length - 1;
|
|
111
|
+
const newLen = newContent.length;
|
|
112
|
+
const diff = newLen - content.length;
|
|
113
|
+
return (`Successfully applied edit to ${resolvedPath}\n` +
|
|
114
|
+
`Replaced ${replaceAll ? oldCount : 1} occurrence(s). ` +
|
|
115
|
+
`File size: ${diff > 0 ? "+" : ""}${diff} bytes (${content.length} → ${newLen}).`);
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
119
|
+
return `Error editing file "${resolvedPath}": ${message}`;
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
//# sourceMappingURL=edit-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edit-file.js","sourceRoot":"","sources":["../../../src/tools/builtin/edit-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Tool } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Find files matching a glob pattern.
|
|
4
|
+
*
|
|
5
|
+
* Parameters:
|
|
6
|
+
* - pattern (required): Glob pattern (e.g. "**\/*.ts", "src/**\/*.json").
|
|
7
|
+
* - path (optional): Root directory to search in (default: current directory).
|
|
8
|
+
* - max_results (optional): Maximum number of results (default: 100).
|
|
9
|
+
*/
|
|
10
|
+
export declare const GlobSearchTool: Tool;
|
|
11
|
+
//# sourceMappingURL=glob-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob-search.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/glob-search.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,EAAE,IA+F5B,CAAC"}
|
|
@@ -0,0 +1,264 @@
|
|
|
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.GlobSearchTool = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
/**
|
|
40
|
+
* Find files matching a glob pattern.
|
|
41
|
+
*
|
|
42
|
+
* Parameters:
|
|
43
|
+
* - pattern (required): Glob pattern (e.g. "**\/*.ts", "src/**\/*.json").
|
|
44
|
+
* - path (optional): Root directory to search in (default: current directory).
|
|
45
|
+
* - max_results (optional): Maximum number of results (default: 100).
|
|
46
|
+
*/
|
|
47
|
+
exports.GlobSearchTool = {
|
|
48
|
+
name: "glob_search",
|
|
49
|
+
description: "Find files matching a glob pattern. Supports ** for recursive matching, " +
|
|
50
|
+
"* for wildcards, {a,b} for alternatives. Skips node_modules and hidden directories. " +
|
|
51
|
+
"Results are sorted by modification time (newest first).",
|
|
52
|
+
parameters: {
|
|
53
|
+
type: "object",
|
|
54
|
+
properties: {
|
|
55
|
+
pattern: {
|
|
56
|
+
type: "string",
|
|
57
|
+
description: "Glob pattern to match file paths against. " +
|
|
58
|
+
"Examples: '** / *.ts', 'src/** / *.json', '*.{ts,js}'.",
|
|
59
|
+
},
|
|
60
|
+
path: {
|
|
61
|
+
type: "string",
|
|
62
|
+
description: "Root directory to search in. Defaults to the current working directory.",
|
|
63
|
+
},
|
|
64
|
+
max_results: {
|
|
65
|
+
type: "number",
|
|
66
|
+
description: "Maximum number of results to return (default: 100).",
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
required: ["pattern"],
|
|
70
|
+
},
|
|
71
|
+
async execute(args) {
|
|
72
|
+
const rawPattern = args.pattern ?? "";
|
|
73
|
+
const searchPath = args.path || process.cwd();
|
|
74
|
+
const maxResults = args.max_results ?? 100;
|
|
75
|
+
if (!rawPattern || typeof rawPattern !== "string") {
|
|
76
|
+
return 'Error: "pattern" must be a non-empty string.';
|
|
77
|
+
}
|
|
78
|
+
const resolvedPath = path.resolve(searchPath);
|
|
79
|
+
if (!fs.existsSync(resolvedPath)) {
|
|
80
|
+
return `Error: Path not found: ${resolvedPath}`;
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
const allFiles = listAllFiles(resolvedPath);
|
|
84
|
+
const matcher = buildGlobMatcher(rawPattern, resolvedPath);
|
|
85
|
+
const matched = allFiles.filter(matcher);
|
|
86
|
+
// Sort by modification time (newest first)
|
|
87
|
+
matched.sort((a, b) => {
|
|
88
|
+
try {
|
|
89
|
+
return fs.statSync(b).mtimeMs - fs.statSync(a).mtimeMs;
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
return 0;
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
const results = matched.slice(0, maxResults);
|
|
96
|
+
const cwd = process.cwd();
|
|
97
|
+
if (results.length === 0) {
|
|
98
|
+
return `No files found matching pattern "${rawPattern}" in ${resolvedPath}.`;
|
|
99
|
+
}
|
|
100
|
+
const formatted = results
|
|
101
|
+
.map((filePath) => {
|
|
102
|
+
const relative = path.relative(cwd, filePath);
|
|
103
|
+
try {
|
|
104
|
+
const stat = fs.statSync(filePath);
|
|
105
|
+
const size = stat.size;
|
|
106
|
+
const mtime = stat.mtime.toISOString().split("T")[0];
|
|
107
|
+
const sizeStr = size > 1024 * 1024
|
|
108
|
+
? `${(size / 1024 / 1024).toFixed(1)} MB`
|
|
109
|
+
: size > 1024
|
|
110
|
+
? `${(size / 1024).toFixed(1)} KB`
|
|
111
|
+
: `${size} B`;
|
|
112
|
+
return `${relative} (${sizeStr}, ${mtime})`;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return relative;
|
|
116
|
+
}
|
|
117
|
+
})
|
|
118
|
+
.join("\n");
|
|
119
|
+
const summary = results.length < matched.length
|
|
120
|
+
? `Found ${matched.length} files, showing ${results.length} (newest first):`
|
|
121
|
+
: `Found ${results.length} files:`;
|
|
122
|
+
return `${summary}\n\n${formatted}`;
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
126
|
+
return `Error during glob search: ${message}`;
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────
|
|
131
|
+
/**
|
|
132
|
+
* Recursively list all non-binary files under a root path.
|
|
133
|
+
*/
|
|
134
|
+
function listAllFiles(rootPath) {
|
|
135
|
+
const results = [];
|
|
136
|
+
const SKIP_DIRS = new Set([
|
|
137
|
+
"node_modules",
|
|
138
|
+
".git",
|
|
139
|
+
".hg",
|
|
140
|
+
".svn",
|
|
141
|
+
".claude",
|
|
142
|
+
"__pycache__",
|
|
143
|
+
".cache",
|
|
144
|
+
]);
|
|
145
|
+
function walk(dir) {
|
|
146
|
+
try {
|
|
147
|
+
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
148
|
+
for (const entry of entries) {
|
|
149
|
+
const fullPath = path.join(dir, entry.name);
|
|
150
|
+
if (entry.isDirectory()) {
|
|
151
|
+
if (entry.name.startsWith(".") || SKIP_DIRS.has(entry.name))
|
|
152
|
+
continue;
|
|
153
|
+
walk(fullPath);
|
|
154
|
+
}
|
|
155
|
+
else if (entry.isFile()) {
|
|
156
|
+
results.push(fullPath);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// Permission denied, skip
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
try {
|
|
165
|
+
if (fs.statSync(rootPath).isFile()) {
|
|
166
|
+
return [rootPath];
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
catch {
|
|
170
|
+
return [];
|
|
171
|
+
}
|
|
172
|
+
walk(rootPath);
|
|
173
|
+
return results;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Build a glob matcher function.
|
|
177
|
+
* Supports: ** (recursive), * (single-segment wildcard), ? (single char),
|
|
178
|
+
* {a,b} (alternatives).
|
|
179
|
+
*
|
|
180
|
+
* Tries three matching strategies in order:
|
|
181
|
+
* 1. Match against the absolute path directly.
|
|
182
|
+
* 2. Match relative to the search root directory.
|
|
183
|
+
* 3. Match against just the file basename (for simple patterns like "*.ts").
|
|
184
|
+
*/
|
|
185
|
+
function buildGlobMatcher(pattern, rootPath) {
|
|
186
|
+
// Normalize separators
|
|
187
|
+
const normalized = pattern.replace(/\\/g, "/");
|
|
188
|
+
const normalizedRoot = path
|
|
189
|
+
.resolve(rootPath)
|
|
190
|
+
.replace(/\\/g, "/")
|
|
191
|
+
.replace(/\/+$/, "");
|
|
192
|
+
// Build regex from glob
|
|
193
|
+
let regexStr = "^";
|
|
194
|
+
let i = 0;
|
|
195
|
+
while (i < normalized.length) {
|
|
196
|
+
const c = normalized[i];
|
|
197
|
+
if (c === "*" && normalized[i + 1] === "*" && normalized[i + 2] === "/") {
|
|
198
|
+
// **/ - matches zero or more directory levels
|
|
199
|
+
regexStr += "(.*/)?";
|
|
200
|
+
i += 3;
|
|
201
|
+
}
|
|
202
|
+
else if (c === "*" &&
|
|
203
|
+
normalized[i + 1] === "*" &&
|
|
204
|
+
i + 2 === normalized.length) {
|
|
205
|
+
// ** at end
|
|
206
|
+
regexStr += ".*";
|
|
207
|
+
i += 2;
|
|
208
|
+
}
|
|
209
|
+
else if (c === "*") {
|
|
210
|
+
regexStr += "[^/]*";
|
|
211
|
+
i += 1;
|
|
212
|
+
}
|
|
213
|
+
else if (c === "?") {
|
|
214
|
+
regexStr += "[^/]";
|
|
215
|
+
i += 1;
|
|
216
|
+
}
|
|
217
|
+
else if (c === ".") {
|
|
218
|
+
regexStr += "\\.";
|
|
219
|
+
i += 1;
|
|
220
|
+
}
|
|
221
|
+
else if (c === "{") {
|
|
222
|
+
const end = normalized.indexOf("}", i);
|
|
223
|
+
if (end > i) {
|
|
224
|
+
const items = normalized.substring(i + 1, end).split(",");
|
|
225
|
+
regexStr +=
|
|
226
|
+
"(" +
|
|
227
|
+
items
|
|
228
|
+
.map((item) => item.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"))
|
|
229
|
+
.join("|") +
|
|
230
|
+
")";
|
|
231
|
+
i = end + 1;
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
regexStr += "\\{";
|
|
235
|
+
i += 1;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
regexStr += c;
|
|
240
|
+
i += 1;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
regexStr += "$";
|
|
244
|
+
const regex = new RegExp(regexStr);
|
|
245
|
+
return (filePath) => {
|
|
246
|
+
const normalizedPath = filePath.replace(/\\/g, "/");
|
|
247
|
+
// 1. Try matching the absolute path directly
|
|
248
|
+
if (regex.test(normalizedPath))
|
|
249
|
+
return true;
|
|
250
|
+
// 2. Try matching relative to the root search directory
|
|
251
|
+
if (normalizedPath.startsWith(normalizedRoot + "/") ||
|
|
252
|
+
normalizedPath === normalizedRoot) {
|
|
253
|
+
const relativePath = normalizedPath === normalizedRoot
|
|
254
|
+
? "."
|
|
255
|
+
: normalizedPath.slice(normalizedRoot.length + 1);
|
|
256
|
+
if (regex.test(relativePath))
|
|
257
|
+
return true;
|
|
258
|
+
}
|
|
259
|
+
// 3. Try matching just the basename (for simple patterns like "*.ts")
|
|
260
|
+
const basename = normalizedPath.split("/").pop() ?? "";
|
|
261
|
+
return regex.test(basename);
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=glob-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glob-search.js","sourceRoot":"","sources":["../../../src/tools/builtin/glob-search.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAG7B;;;;;;;GAOG;AACU,QAAA,cAAc,GAAS;IAClC,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,0EAA0E;QAC1E,sFAAsF;QACtF,yDAAyD;IAC3D,UAAU,EAAE;QACV,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,4CAA4C;oBAC5C,wDAAwD;aAC3D;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,yEAAyE;aAC5E;YACD,WAAW,EAAE;gBACX,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,qDAAqD;aACnE;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;IAED,KAAK,CAAC,OAAO,CAAC,IAA6B;QACzC,MAAM,UAAU,GAAI,IAAI,CAAC,OAAkB,IAAI,EAAE,CAAC;QAClD,MAAM,UAAU,GAAI,IAAI,CAAC,IAAe,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1D,MAAM,UAAU,GAAI,IAAI,CAAC,WAAsB,IAAI,GAAG,CAAC;QAEvD,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;YAClD,OAAO,8CAA8C,CAAC;QACxD,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAE9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,OAAO,0BAA0B,YAAY,EAAE,CAAC;QAClD,CAAC;QAED,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAEzC,2CAA2C;YAC3C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACpB,IAAI,CAAC;oBACH,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;gBACzD,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,CAAC,CAAC;gBACX,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YAE1B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,oCAAoC,UAAU,QAAQ,YAAY,GAAG,CAAC;YAC/E,CAAC;YAED,MAAM,SAAS,GAAG,OAAO;iBACtB,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAChB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAC9C,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;oBACvB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;oBACrD,MAAM,OAAO,GACX,IAAI,GAAG,IAAI,GAAG,IAAI;wBAChB,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;wBACzC,CAAC,CAAC,IAAI,GAAG,IAAI;4BACX,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;4BAClC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;oBACpB,OAAO,GAAG,QAAQ,MAAM,OAAO,KAAK,KAAK,GAAG,CAAC;gBAC/C,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,QAAQ,CAAC;gBAClB,CAAC;YACH,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,MAAM,OAAO,GACX,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM;gBAC7B,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,mBAAmB,OAAO,CAAC,MAAM,kBAAkB;gBAC5E,CAAC,CAAC,SAAS,OAAO,CAAC,MAAM,SAAS,CAAC;YAEvC,OAAO,GAAG,OAAO,OAAO,SAAS,EAAE,CAAC;QACtC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,6BAA6B,OAAO,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;CACF,CAAC;AAEF,4EAA4E;AAE5E;;GAEG;AACH,SAAS,YAAY,CAAC,QAAgB;IACpC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;QACxB,cAAc;QACd,MAAM;QACN,KAAK;QACL,MAAM;QACN,SAAS;QACT,aAAa;QACb,QAAQ;KACT,CAAC,CAAC;IAEH,SAAS,IAAI,CAAC,GAAW;QACvB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;wBAAE,SAAS;oBACtE,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACjB,CAAC;qBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;oBAC1B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,0BAA0B;QAC5B,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YACnC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,CAAC;IACf,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,gBAAgB,CACvB,OAAe,EACf,QAAgB;IAEhB,uBAAuB;IACvB,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,IAAI;SACxB,OAAO,CAAC,QAAQ,CAAC;SACjB,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;SACnB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAEvB,wBAAwB;IACxB,IAAI,QAAQ,GAAG,GAAG,CAAC;IACnB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACxE,8CAA8C;YAC9C,QAAQ,IAAI,QAAQ,CAAC;YACrB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IACL,CAAC,KAAK,GAAG;YACT,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG;YACzB,CAAC,GAAG,CAAC,KAAK,UAAU,CAAC,MAAM,EAC3B,CAAC;YACD,YAAY;YACZ,QAAQ,IAAI,IAAI,CAAC;YACjB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,QAAQ,IAAI,OAAO,CAAC;YACpB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,QAAQ,IAAI,MAAM,CAAC;YACnB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,QAAQ,IAAI,KAAK,CAAC;YAClB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACvC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;gBACZ,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1D,QAAQ;oBACN,GAAG;wBACH,KAAK;6BACF,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;6BAC1D,IAAI,CAAC,GAAG,CAAC;wBACZ,GAAG,CAAC;gBACN,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,QAAQ,IAAI,KAAK,CAAC;gBAClB,CAAC,IAAI,CAAC,CAAC;YACT,CAAC;QACH,CAAC;aAAM,CAAC;YACN,QAAQ,IAAI,CAAC,CAAC;YACd,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;IACH,CAAC;IACD,QAAQ,IAAI,GAAG,CAAC;IAEhB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEnC,OAAO,CAAC,QAAgB,EAAE,EAAE;QAC1B,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAEpD,6CAA6C;QAC7C,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC;YAAE,OAAO,IAAI,CAAC;QAE5C,wDAAwD;QACxD,IACE,cAAc,CAAC,UAAU,CAAC,cAAc,GAAG,GAAG,CAAC;YAC/C,cAAc,KAAK,cAAc,EACjC,CAAC;YACD,MAAM,YAAY,GAChB,cAAc,KAAK,cAAc;gBAC/B,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACtD,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC5C,CAAC;QAED,sEAAsE;QACtE,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QACvD,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Tool } from "../types";
|
|
2
|
+
/**
|
|
3
|
+
* Search file contents using regex or plain text patterns.
|
|
4
|
+
*
|
|
5
|
+
* Parameters:
|
|
6
|
+
* - pattern (required): Regex or plain text to search for.
|
|
7
|
+
* - path (optional): File or directory to search in (default: current directory).
|
|
8
|
+
* - glob (optional): File pattern filter (e.g. "*.ts", "*.{ts,js}").
|
|
9
|
+
* - case_sensitive (optional): Whether the search is case-sensitive (default: false).
|
|
10
|
+
*
|
|
11
|
+
* Uses a recursive file walk with Node.js built-in fs — no external dependencies.
|
|
12
|
+
*/
|
|
13
|
+
export declare const GrepSearchTool: Tool;
|
|
14
|
+
//# sourceMappingURL=grep-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grep-search.d.ts","sourceRoot":"","sources":["../../../src/tools/builtin/grep-search.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAEhC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,EAAE,IAoH5B,CAAC"}
|