diff --git a/codersdk/toolsdk/bash.go b/codersdk/toolsdk/bash.go index 0df5f69aa71c9..e45ca6a49e29a 100644 --- a/codersdk/toolsdk/bash.go +++ b/codersdk/toolsdk/bash.go @@ -79,13 +79,12 @@ Examples: } // Wait for agent to be ready - err = cliui.Agent(ctx, nil, workspaceAgent.ID, cliui.AgentOptions{ + if err := cliui.Agent(ctx, io.Discard, workspaceAgent.ID, cliui.AgentOptions{ FetchInterval: 0, Fetch: deps.coderClient.WorkspaceAgent, FetchLogs: deps.coderClient.WorkspaceAgentLogsAfter, Wait: true, // Always wait for startup scripts - }) - if err != nil { + }); err != nil { return WorkspaceBashResult{}, xerrors.Errorf("agent not ready: %w", err) } diff --git a/codersdk/toolsdk/toolsdk.go b/codersdk/toolsdk/toolsdk.go index 6ef310f510369..670b5af145786 100644 --- a/codersdk/toolsdk/toolsdk.go +++ b/codersdk/toolsdk/toolsdk.go @@ -6,12 +6,14 @@ import ( "context" "encoding/json" "io" + "runtime/debug" "github.com/google/uuid" "golang.org/x/xerrors" "github.com/coder/aisdk-go" + "github.com/coder/coder/v2/buildinfo" "github.com/coder/coder/v2/codersdk" ) @@ -122,7 +124,14 @@ func WithRecover(h GenericHandlerFunc) GenericHandlerFunc { return func(ctx context.Context, deps Deps, args json.RawMessage) (ret json.RawMessage, err error) { defer func() { if r := recover(); r != nil { - err = xerrors.Errorf("tool handler panic: %v", r) + if buildinfo.IsDev() { + // Capture stack trace in dev builds + stack := debug.Stack() + err = xerrors.Errorf("tool handler panic: %v\nstack trace:\n%s", r, stack) + } else { + // Simple error message in production builds + err = xerrors.Errorf("tool handler panic: %v", r) + } } }() return h(ctx, deps, args)
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: