Skip to content

Conversation

@icecrasher321
Copy link
Collaborator

Summary

Need to have null body handling in execute tool. e.g. Discord tools killing execution because of errors.

Type of Change

  • Bug fix

Testing

Tested manually

Checklist

  • Code follows project style guidelines
  • Self-reviewed my changes
  • Tests added/updated and passing
  • No new warnings introduced
  • I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)

@vercel
Copy link

vercel bot commented Jan 22, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Review Updated (UTC)
docs Skipped Skipped Jan 22, 2026 1:39am

Request Review

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Jan 22, 2026

Greptile Summary

Added proper handling for HTTP status codes that must not have response bodies (101, 204, 205, 304) by checking the status code before attempting to read the response body. Previously, calling .arrayBuffer() on responses with these status codes would cause errors.

Key changes:

  • Created a nullBodyStatuses Set containing status codes that should have null bodies per HTTP spec
  • Added conditional logic to create Response objects with null body for these status codes
  • Extended the existing 202 handling to also cover 204 at the response parsing stage

Impact:

  • Fixes execution failures in Discord tools (delete message, add reaction) and other APIs that return 204 No Content
  • Aligns with HTTP specification requirements for status codes that prohibit message bodies

Confidence Score: 4/5

  • This PR is safe to merge with low risk
  • The fix correctly addresses a real issue with HTTP spec compliance. The status codes (101, 204, 205, 304) are well-established as requiring null bodies. However, confidence is 4 rather than 5 because the change affects the critical tool execution path and could benefit from additional test coverage to verify behavior with all four null-body status codes
  • No files require special attention

Important Files Changed

Filename Overview
apps/sim/tools/index.ts Added proper handling for HTTP status codes that should not have response bodies (101, 204, 205, 304), preventing errors when reading responses from APIs like Discord that return 204 No Content

Sequence Diagram

sequenceDiagram
    participant Tool as Discord/API Tool
    participant Execute as executeToolRequest
    participant Fetch as secureFetchWithPinnedIP
    participant API as External API
    participant Response as Response Handler

    Tool->>Execute: Execute tool request
    Execute->>Fetch: Make HTTP request (DELETE/PUT)
    Fetch->>API: Send request
    API-->>Fetch: 204 No Content (empty body)
    Fetch-->>Execute: secureResponse (status 204)
    
    alt Status in nullBodyStatuses (101, 204, 205, 304)
        Execute->>Response: new Response(null, {status, headers})
        Note over Execute,Response: Skip arrayBuffer() call<br/>to avoid errors
    else Other statuses
        Execute->>Fetch: await arrayBuffer()
        Execute->>Response: new Response(bodyBuffer, {status, headers})
    end
    
    alt response.ok
        Response->>Execute: Parse success response
        alt status === 202 || status === 204
            Execute->>Tool: Return {status}
        else
            Execute->>Response: await response.json()
            Execute->>Tool: Return parsed data
        end
    else !response.ok
        Response->>Execute: Handle error
        Execute->>Tool: Throw error
    end
Loading

cursor[bot]

This comment was marked as outdated.

@icecrasher321
Copy link
Collaborator Author

@cursor review

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

@icecrasher321 icecrasher321 merged commit d681451 into staging Jan 22, 2026
11 checks passed
@icecrasher321 icecrasher321 deleted the fix/null-statuses branch January 22, 2026 02:10
waleedlatif1 added a commit that referenced this pull request Jan 22, 2026
* fix(zustand): updated to useShallow from deprecated createWithEqualityFn (#2919)

* fix(logger): use direct env access for webpack inlining (#2920)

* fix(notifications): text overflow with line-clamp (#2921)

* chore(helm): add env vars for Vertex AI, orgs, and telemetry (#2922)

* fix(auth): improve reset password flow and consolidate brand detection (#2924)

* fix(auth): improve reset password flow and consolidate brand detection

* fix(auth): set errorHandled for EMAIL_NOT_VERIFIED to prevent duplicate error

* fix(auth): clear success message on login errors

* chore(auth): fix import order per lint

* fix(action-bar): duplicate subflows with children (#2923)

* fix(action-bar): duplicate subflows with children

* fix(action-bar): add validateTriggerPaste for subflow duplicate

* fix(resolver): agent response format, input formats, root level (#2925)

* fix(resolvers): agent response format, input formats, root level

* fix response block initial seeding

* fix tests

* fix(messages-input): fix cursor alignment and auto-resize with overlay (#2926)

* fix(messages-input): fix cursor alignment and auto-resize with overlay

* fixed remaining zustand warnings

* fix(stores): remove dead code causing log spam on startup (#2927)

* fix(stores): remove dead code causing log spam on startup

* fix(stores): replace custom tools zustand store with react query cache

* improvement(ui): use BrandedButton and BrandedLink components (#2930)

- Refactor auth forms to use BrandedButton component
- Add BrandedLink component for changelog page
- Reduce code duplication in login, signup, reset-password forms
- Update star count default value

* fix(custom-tools): remove unsafe title fallback in getCustomTool (#2929)

* fix(custom-tools): remove unsafe title fallback in getCustomTool

* fix(custom-tools): restore title fallback in getCustomTool lookup

Custom tools are referenced by title (custom_${title}), not database ID.
The title fallback is required for client-side tool resolution to work.

* fix(null-bodies): empty bodies handling (#2931)

* fix(null-statuses): empty bodies handling

* address bugbot comment

* fix(token-refresh): microsoft, notion, x, linear (#2933)

* fix(microsoft): proactive refresh needed

* fix(x): missing token refresh flag

* notion and linear missing flag too

* address bugbot comment

* fix(auth): handle EMAIL_NOT_VERIFIED in onError callback (#2932)

* fix(auth): handle EMAIL_NOT_VERIFIED in onError callback

* refactor(auth): extract redirectToVerify helper to reduce duplication

* fix(workflow-selector): use dedicated selector for workflow dropdown (#2934)

* feat(workflow-block): preview (#2935)

* improvement(copilot): tool configs to show nested props (#2936)

* fix(auth): add genericOAuth providers to trustedProviders (#2937)

---------

Co-authored-by: Vikhyath Mondreti <vikhyathvikku@gmail.com>
Co-authored-by: Emir Karabeg <78010029+emir-karabeg@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants