MCPcopy Create free account
hub / github.com/anus-dev/ANUS / execute

Method execute

packages/core/src/tools/glob.ts:107–238  ·  view source on GitHub ↗
(signal: AbortSignal)

Source from the content-addressed store, hash-verified

105 }
106
107 async execute(signal: AbortSignal): Promise<ToolResult> {
108 try {
109 const workspaceContext = this.config.getWorkspaceContext();
110 const workspaceDirectories = workspaceContext.getDirectories();
111
112 // If a specific path is provided, resolve it and check if it's within workspace
113 let searchDirectories: readonly string[];
114 if (this.params.path) {
115 const searchDirAbsolute = path.resolve(
116 this.config.getTargetDir(),
117 this.params.path,
118 );
119 if (!workspaceContext.isPathWithinWorkspace(searchDirAbsolute)) {
120 return {
121 llmContent: `Error: Path "${this.params.path}" is not within any workspace directory`,
122 returnDisplay: `Path is not within workspace`,
123 };
124 }
125 searchDirectories = [searchDirAbsolute];
126 } else {
127 // Search across all workspace directories
128 searchDirectories = workspaceDirectories;
129 }
130
131 // Get centralized file discovery service
132 const respectGitIgnore =
133 this.params.respect_git_ignore ??
134 this.config.getFileFilteringRespectGitIgnore();
135 const fileDiscovery = this.config.getFileService();
136
137 // Collect entries from all search directories
138 let allEntries: GlobPath[] = [];
139
140 for (const searchDir of searchDirectories) {
141 const entries = (await glob(this.params.pattern, {
142 cwd: searchDir,
143 withFileTypes: true,
144 nodir: true,
145 stat: true,
146 nocase: !this.params.case_sensitive,
147 dot: true,
148 ignore: ['**/node_modules/**', '**/.git/**'],
149 follow: false,
150 signal,
151 })) as GlobPath[];
152
153 allEntries = allEntries.concat(entries);
154 }
155
156 const entries = allEntries;
157
158 // Apply git-aware filtering if enabled and in git repository
159 let filteredEntries = entries;
160 let gitIgnoredCount = 0;
161
162 if (respectGitIgnore) {
163 const relativePaths = entries.map((p) =>
164 path.relative(this.config.getTargetDir(), p.fullpath()),

Callers

nothing calls this directly

Calls 9

sortFileEntriesFunction · 0.85
getWorkspaceContextMethod · 0.80
getDirectoriesMethod · 0.80
getTargetDirMethod · 0.80
isPathWithinWorkspaceMethod · 0.80
getFileServiceMethod · 0.80
fullpathMethod · 0.80
filterFilesMethod · 0.80

Tested by

no test coverage detected