on main help sign in
fix: ensure all tools work when behind a http proxy (#2065)
47f5f42BitToby
internal/agent/agentic_fetch_tool.go+7−6
@@ -52,13 +52,14 @@ var agenticFetchPromptTmpl []byte
52
52
53func (c *coordinator) agenticFetchTool(_ context.Context, client *http.Client) (fantasy.AgentTool, error) {
53func (c *coordinator) agenticFetchTool(_ context.Context, client *http.Client) (fantasy.AgentTool, error) {
54 if client == nil {
54 if client == nil {
55+ transport := http.DefaultTransport.(*http.Transport).Clone()
56+ transport.MaxIdleConns = 100
57+ transport.MaxIdleConnsPerHost = 10
58+ transport.IdleConnTimeout = 90 * time.Second
59+
55 client = &http.Client{
60 client = &http.Client{
56− Timeout: 30 * time.Second,
61+ Timeout: 30 * time.Second,
57− Transport: &http.Transport{
62+ Transport: transport,
58− MaxIdleConns: 100,
59− MaxIdleConnsPerHost: 10,
60− IdleConnTimeout: 90 * time.Second,
61− },
62 }
63 }
63 }
64 }
64
65
internal/agent/tools/download.go+7−6
@@ -36,13 +36,14 @@ var downloadDescription []byte
36
36
37func NewDownloadTool(permissions permission.Service, workingDir string, client *http.Client) fantasy.AgentTool {
37func NewDownloadTool(permissions permission.Service, workingDir string, client *http.Client) fantasy.AgentTool {
38 if client == nil {
38 if client == nil {
39+ transport := http.DefaultTransport.(*http.Transport).Clone()
40+ transport.MaxIdleConns = 100
41+ transport.MaxIdleConnsPerHost = 10
42+ transport.IdleConnTimeout = 90 * time.Second
43+
39 client = &http.Client{
44 client = &http.Client{
40− Timeout: 5 * time.Minute, // Default 5 minute timeout for downloads
45+ Timeout: 5 * time.Minute, // Default 5 minute timeout for downloads
41− Transport: &http.Transport{
46+ Transport: transport,
42− MaxIdleConns: 100,
43− MaxIdleConnsPerHost: 10,
44− IdleConnTimeout: 90 * time.Second,
45− },
46 }
47 }
47 }
48 }
48 return fantasy.NewParallelAgentTool(
49 return fantasy.NewParallelAgentTool(
internal/agent/tools/fetch.go+7−6
@@ -23,13 +23,14 @@ var fetchDescription []byte
23
23
24func NewFetchTool(permissions permission.Service, workingDir string, client *http.Client) fantasy.AgentTool {
24func NewFetchTool(permissions permission.Service, workingDir string, client *http.Client) fantasy.AgentTool {
25 if client == nil {
25 if client == nil {
26+ transport := http.DefaultTransport.(*http.Transport).Clone()
27+ transport.MaxIdleConns = 100
28+ transport.MaxIdleConnsPerHost = 10
29+ transport.IdleConnTimeout = 90 * time.Second
30+
26 client = &http.Client{
31 client = &http.Client{
27− Timeout: 30 * time.Second,
32+ Timeout: 30 * time.Second,
28− Transport: &http.Transport{
33+ Transport: transport,
29− MaxIdleConns: 100,
30− MaxIdleConnsPerHost: 10,
31− IdleConnTimeout: 90 * time.Second,
32− },
33 }
34 }
34 }
35 }
35
36
internal/agent/tools/sourcegraph.go+7−6
@@ -33,13 +33,14 @@ var sourcegraphDescription []byte
33
33
34func NewSourcegraphTool(client *http.Client) fantasy.AgentTool {
34func NewSourcegraphTool(client *http.Client) fantasy.AgentTool {
35 if client == nil {
35 if client == nil {
36+ transport := http.DefaultTransport.(*http.Transport).Clone()
37+ transport.MaxIdleConns = 100
38+ transport.MaxIdleConnsPerHost = 10
39+ transport.IdleConnTimeout = 90 * time.Second
40+
36 client = &http.Client{
41 client = &http.Client{
37− Timeout: 30 * time.Second,
42+ Timeout: 30 * time.Second,
38− Transport: &http.Transport{
43+ Transport: transport,
39− MaxIdleConns: 100,
40− MaxIdleConnsPerHost: 10,
41− IdleConnTimeout: 90 * time.Second,
42− },
43 }
44 }
44 }
45 }
45 return fantasy.NewParallelAgentTool(
46 return fantasy.NewParallelAgentTool(
internal/agent/tools/web_fetch.go+7−6
@@ -18,13 +18,14 @@ var webFetchToolDescription []byte
18// NewWebFetchTool creates a simple web fetch tool for sub-agents (no permissions needed).
18// NewWebFetchTool creates a simple web fetch tool for sub-agents (no permissions needed).
19func NewWebFetchTool(workingDir string, client *http.Client) fantasy.AgentTool {
19func NewWebFetchTool(workingDir string, client *http.Client) fantasy.AgentTool {
20 if client == nil {
20 if client == nil {
21+ transport := http.DefaultTransport.(*http.Transport).Clone()
22+ transport.MaxIdleConns = 100
23+ transport.MaxIdleConnsPerHost = 10
24+ transport.IdleConnTimeout = 90 * time.Second
25+
21 client = &http.Client{
26 client = &http.Client{
22− Timeout: 30 * time.Second,
27+ Timeout: 30 * time.Second,
23− Transport: &http.Transport{
28+ Transport: transport,
24− MaxIdleConns: 100,
25− MaxIdleConnsPerHost: 10,
26− IdleConnTimeout: 90 * time.Second,
27− },
28 }
29 }
29 }
30 }
30
31
internal/agent/tools/web_search.go+7−6
@@ -16,13 +16,14 @@ var webSearchToolDescription []byte
16// NewWebSearchTool creates a web search tool for sub-agents (no permissions needed).
16// NewWebSearchTool creates a web search tool for sub-agents (no permissions needed).
17func NewWebSearchTool(client *http.Client) fantasy.AgentTool {
17func NewWebSearchTool(client *http.Client) fantasy.AgentTool {
18 if client == nil {
18 if client == nil {
19+ transport := http.DefaultTransport.(*http.Transport).Clone()
20+ transport.MaxIdleConns = 100
21+ transport.MaxIdleConnsPerHost = 10
22+ transport.IdleConnTimeout = 90 * time.Second
23+
19 client = &http.Client{
24 client = &http.Client{
20− Timeout: 30 * time.Second,
25+ Timeout: 30 * time.Second,
21− Transport: &http.Transport{
26+ Transport: transport,
22− MaxIdleConns: 100,
23− MaxIdleConnsPerHost: 10,
24− IdleConnTimeout: 90 * time.Second,
25− },
26 }
27 }
27 }
28 }
28
29