@@ -296,8 +296,13 @@ func readTool(ctx context.Context, cache *cache.Client, prg *types.Program, base
296296}
297297
298298func linkAll (ctx context.Context , cache * cache.Client , prg * types.Program , base * source , tools []types.Tool , localTools types.ToolSet ) (result []types.Tool , _ error ) {
299+ localToolsMapping := make (map [string ]string , len (tools ))
300+ for _ , localTool := range localTools {
301+ localToolsMapping [strings .ToLower (localTool .Parameters .Name )] = localTool .ID
302+ }
303+
299304 for _ , tool := range tools {
300- tool , err := link (ctx , cache , prg , base , tool , localTools )
305+ tool , err := link (ctx , cache , prg , base , tool , localTools , localToolsMapping )
301306 if err != nil {
302307 return nil , err
303308 }
@@ -306,7 +311,7 @@ func linkAll(ctx context.Context, cache *cache.Client, prg *types.Program, base
306311 return
307312}
308313
309- func link (ctx context.Context , cache * cache.Client , prg * types.Program , base * source , tool types.Tool , localTools types.ToolSet ) (types.Tool , error ) {
314+ func link (ctx context.Context , cache * cache.Client , prg * types.Program , base * source , tool types.Tool , localTools types.ToolSet , localToolsMapping map [ string ] string ) (types.Tool , error ) {
310315 if existing , ok := prg .ToolSet [tool .ID ]; ok {
311316 return existing , nil
312317 }
@@ -331,7 +336,7 @@ func link(ctx context.Context, cache *cache.Client, prg *types.Program, base *so
331336 linkedTool = existing
332337 } else {
333338 var err error
334- linkedTool , err = link (ctx , cache , prg , base , localTool , localTools )
339+ linkedTool , err = link (ctx , cache , prg , base , localTool , localTools , localToolsMapping )
335340 if err != nil {
336341 return types.Tool {}, fmt .Errorf ("failed linking %s at %s: %w" , targetToolName , base , err )
337342 }
@@ -351,9 +356,7 @@ func link(ctx context.Context, cache *cache.Client, prg *types.Program, base *so
351356 }
352357 }
353358
354- for _ , localTool := range localTools {
355- tool .LocalTools [strings .ToLower (localTool .Parameters .Name )] = localTool .ID
356- }
359+ tool .LocalTools = localToolsMapping
357360
358361 tool = builtin .SetDefaults (tool )
359362 prg .ToolSet [tool .ID ] = tool
@@ -438,7 +441,16 @@ func resolve(ctx context.Context, cache *cache.Client, prg *types.Program, base
438441 return nil , err
439442 }
440443
441- return readTool (ctx , cache , prg , s , subTool )
444+ result , err := readTool (ctx , cache , prg , s , subTool )
445+ if err != nil {
446+ return nil , err
447+ }
448+
449+ if len (result ) == 0 {
450+ return nil , types .NewErrToolNotFound (types .ToToolName (name , subTool ))
451+ }
452+
453+ return result , nil
442454}
443455
444456func input (ctx context.Context , cache * cache.Client , base * source , name string ) (* source , error ) {
0 commit comments