#94

feat: Convert HTTP Request from system action to native plugin (plus other related changes)

Openbensabicwants to merge intofrom

This PR refactors the HTTP Request action from a hardcoded system action into a proper plugin (plugins/native/), making it extensible and consistent with the plugin architecture. Other related changes have also been made.

New Plugin: Native

Created plugins/native/ with:

  • index.ts: Plugin definition with HTTP Request action
  • icon.tsx: Globe icon for the Native category
  • steps/http-request.ts: Step function with execution logic
  • codegen/http-request.ts: Code generation template

New Components

ObjectBuilder Added components/workflow/config/object-builder.tsx - a reusable component for building key-value pairs (similar to SchemaBuilder). Used for HTTP headers configuration.

IntegrationSelectField Added integration selector component that displays HTTP-enabled integrations grouped by type. Allows selecting an existing integration to auto-inject authentication headers.

New Config Field Types

Added to plugins/registry.ts and action-config-renderer.tsx:

  • object-builder: Key-value pair builder with validation support
  • integration-select: Dropdown for selecting HTTP-enabled integrations
  • json-editor: Monaco-based JSON editor with real-time validation

Integration-Based HTTP Requests

Plugins can now define httpConfig for HTTP integration support:

  • New PluginHttpConfig type with baseUrl, authHeader, authPrefix, authCredentialKey
  • Added httpConfig to Resend, Slack, Firecrawl, and Linear plugins
  • HTTP Request step auto-injects auth headers from selected integration
  • Endpoint field shows baseUrl prefix when integration is selected

Plugin System Enhancements

  • Added requiresIntegration flag to hide plugins that don't need credentials from setup dialog
  • Added requiresIntegration() helper function to centralize integration checks

Header Validation

  • Added validateKey/validateValue functions to ActionConfigField
  • Plugin-defined validation (validation logic lives in plugin, not renderer)
  • HTTP headers validated to alphanumeric + hyphen/underscore only
  • Content-Type header blocked (auto-set to application/json)

Integration Loading Optimization

  • Cached integrations in Jotai store for faster loading when switching actions
  • Prefetch integrations when workflow loads

Migration & Backward Compatibility

  • Added HTTP Request -> native/http-request legacy mapping
  • Updated codegen files to support both legacy and new action IDs
  • Existing workflows using "HTTP Request" will continue to work

UI Improvements

  • TemplateBadgeInput supports optional prefix prop (for adding the plugin's API base to the endpoint field)
  • Extracted PropertyRow component to reduce ObjectBuilder complexity
  • Horizontal scroll instead of wrap for long input values (useful for long header names or values)

Bug Fixes

  • Fixed required field validation to respect defaultValue - fields with defaults (like HTTP Method) are no longer incorrectly flagged as missing

Cleanup

Removed HTTP Request from system actions:

  • Deleted lib/steps/http-request.ts
  • Deleted lib/codegen-templates/http-request.ts
  • Removed from lib/workflow-executor.workflow.ts, lib/steps/index.ts, and UI components