| 3047 | `),numLines:p.length,...B!==void 0&&{appliedLimit:B},...M>0&&{appliedOffset:M}}}}if(Y==="count"){let{items:I,appliedLimit:B}=ms1(T,J,M),p=I.map((U)=>{let c=U.lastIndexOf(":");if(c>0){let K6=U.substring(0,c),t=U.substring(c);return dW6(K6)+t}return U}),C=0,g=0;for(let U of p){let c=U.lastIndexOf(":");if(c>0){let K6=U.substring(c+1),t=parseInt(K6,10);if(!isNaN(t))C+=t,g+=1}}return{data:{mode:"count",numFiles:g,filenames:[],content:p.join(` |
| 3048 | `),numMatches:C,...B!==void 0&&{appliedLimit:B},...M>0&&{appliedOffset:M}}}}let v=await Promise.allSettled(T.map((I)=>X8().stat(I))),V=T.map((I,B)=>{let p=v[B];return[I,p.status==="fulfilled"?p.value.mtimeMs??0:0]}).sort((I,B)=>{let p=B[1]-I[1];if(p===0)return I[0].localeCompare(B[0]);return p}).map((I)=>I[0]),{items:E,appliedLimit:S}=ms1(V,J,M),R=E.map(dW6);return{data:{mode:"files_with_matches",filenames:R,numFiles:R.length,...S!==void 0&&{appliedLimit:S},...M>0&&{appliedOffset:M}}}}})});function MAK(){return"Search"}function XAK({pattern:q,path:K},{verbose:_}){if(!q)return null;if(!K)return`pattern: "${q}"`;return`pattern: "${q}", path: "${_?K:_3(K)}"`}function PAK(q,{verbose:K}){if(!K&&typeof q==="string"&&o4(q,"tool_use_error")){if(o4(q,"tool_use_error")?.includes(uZ))return sL6.default.createElement(s8,null,sL6.default.createElement(k,{color:"error"},"File not found"));return sL6.default.createElement(s8,null,sL6.default.createElement(k,{color:"error"},"Error searching files"))}return sL6.default.createElement(Y2,{result:q,verbose:K})}function Bs1(q){if(!q?.pattern)return null;return d5(q.pattern,PN)}var sL6,WAK;var DAK=y(()=>{gK();i1();bN();s6();bK();U7();lj6();sL6=O6(D6(),1);WAK=$R.renderToolResultMessage});var Psz,Wsz,kb;var tL6=y(()=>{x7();Bq();I7();y8();bK();e7();OAK();dz();Tz();br();DAK();Psz=B6(()=>L.strictObject({pattern:L.string().describe("The glob pattern to match files against"),path:L.string().optional().describe('The directory to search in. If not specified, the current working directory will be used. IMPORTANT: Omit this field to use the default directory. DO NOT enter "undefined" or "null" - simply omit it for the default behavior. Must be a valid directory path if provided.')})),Wsz=B6(()=>L.object({durationMs:L.number().describe("Time taken to execute the search in milliseconds"),numFiles:L.number().describe("Total number of files found"),filenames:L.array(L.string()).describe("Array of file paths that match the pattern"),truncated:L.boolean().describe("Whether results were truncated (limited to 100 files)")})),kb=sq({name:i9,searchHint:"find files by name pattern or wildcard",maxResultSizeChars:1e5,async description(){return WN1},userFacingName:MAK,getToolUseSummary:Bs1,getActivityDescription(q){let K=Bs1(q);return K?`Finding ${K}`:"Finding files"},get inputSchema(){return Psz()},get outputSchema(){return Wsz()},isConcurrencySafe(){return!0},isReadOnly(){return!0},toAutoClassifierInput(q){return q.pattern},isSearchOrReadCommand(){return{isSearch:!0,isRead:!1}},getPath({path:q}){return q?lq(q):Z8()},async preparePermissionMatcher({pattern:q}){return(K)=>lv(K,q)},async validateInput({path:q}){if(q){let K=X8(),_=lq(q);if(_.startsWith("\\\\")||_.startsWith("//"))return{result:!0};let z;try{z=await K.stat(_)}catch(Y){if(_7(Y)){let $=await pe(_),A=`Directory does not exist: ${q}. ${uZ} ${Z8()}.`;if($)A+=` Did you mean ${$}?`;return{result:!1,message:A,errorCode:1}}throw Y}if(!z.isDirectory())return{result:!1,message:`Path is not a directory: ${q}`,errorCode:2}}return{result:!0}},async checkPermissions(q,K){let _=K.getAppState();return RK6(kb,q,_.toolPermissionContext)},async prompt(){return WN1},renderToolUseMessage:XAK,renderToolUseErrorMessage:PAK,renderToolResultMessage:WAK,extractSearchText({filenames:q}){return q.join(` |
| 3049 | `)},async call(q,{abortController:K,getAppState:_,globLimits:z}){let Y=Date.now(),$=_(),A=z?.maxResults??100,{files:O,truncated:w}=await AAK(q.pattern,kb.getPath(q),{limit:A,offset:0},K.signal,$.toolPermissionContext),j=O.map(dW6);return{data:{filenames:j,durationMs:Date.now()-Y,numFiles:j.length,truncated:w}}},mapToolResultToToolResultBlockParam(q,K){if(q.filenames.length===0)return{tool_use_id:K,type:"tool_result",content:"No files found"};return{tool_use_id:K,type:"tool_result",content:[...q.filenames,...q.truncated?["(Results are truncated. Consider using a more specific path or pattern.)"]:[]].join(` |