Skip to content

feat(workflows): agent node#50934

Closed
kappa90 wants to merge 2 commits into03-13-feat_ph-ai_background_sandbox_agent_apifrom
03-13-feat_workflows_agent_node
Closed

feat(workflows): agent node#50934
kappa90 wants to merge 2 commits into03-13-feat_ph-ai_background_sandbox_agent_apifrom
03-13-feat_workflows_agent_node

Conversation

@kappa90
Copy link
Copy Markdown
Contributor

@kappa90 kappa90 commented Mar 13, 2026

Problem

This adds support for AI agent functionality in workflows, allowing users to run AI agents that can analyze data, answer questions, and return structured output. The feature is gated behind the WORKFLOW_AI_AGENT feature flag.

To test this, you need to have this branch checked out in the code repository, follow SETUP_GUIDE.md on how to test sandbox agents locally, and set these env vars:

SANDBOX_MCP_URL=http://host.docker.internal:8787/mcp

Screen Recording 2026-03-12 at 21.23.34.mov (uploaded via Graphite)

Changes

  • Added postHogRunAgent async function that makes HTTP requests to /agent/run endpoint with configurable timeout (11 minutes)
  • Created new "Run AI agent" workflow template with agent configuration input type
  • Added agent_config input type support across frontend and backend systems
  • Implemented CyclotronJobInputAgentConfig React component for configuring:
    • Agent prompts with variable interpolation support
    • Optional GitHub repository integration
    • Optional structured output schema definition with field types
  • Added AI action category to workflow registry with feature flag protection
  • Enhanced test panel to display agent execution output in JSON format
  • Added timeout support to fetch parameters in Cyclotron job execution

The agent configuration UI uses collapsible sections for optional settings and includes:

  • Prompt text area with variable reference hints
  • GitHub integration picker and repository selector
  • Dynamic output schema builder with add/remove field functionality

How did you test this code?

The code includes mock functionality for the postHogRunAgent function that returns a sample response structure. Frontend components were tested for proper state management and UI interactions. Backend validation ensures proper input schema handling and async function registration.

Publish to changelog?

Yes - this introduces a new AI agent capability for workflows that allows users to integrate AI-powered analysis and data processing into their automation flows.

Copy link
Copy Markdown
Contributor Author

kappa90 commented Mar 13, 2026

Warning

This pull request is not mergeable via GitHub because a downstack PR is open. Once all requirements are satisfied, merge this PR as a stack on Graphite.
Learn more

This stack of pull requests is managed by Graphite. Learn more about stacking.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 13, 2026

Size Change: +321 B (0%)

Total Size: 109 MB

ℹ️ View Unchanged
Filename Size Change
frontend/dist/368Hedgehogs 5.27 kB 0 B
frontend/dist/abap 14.2 kB 0 B
frontend/dist/Action 20.2 kB 0 B
frontend/dist/Actions 1.03 kB 0 B
frontend/dist/AdvancedActivityLogsScene 33.9 kB 0 B
frontend/dist/apex 3.96 kB 0 B
frontend/dist/ApprovalDetail 16.2 kB 0 B
frontend/dist/array.full.es5.js 330 kB 0 B
frontend/dist/array.full.js 428 kB 0 B
frontend/dist/array.js 183 kB 0 B
frontend/dist/AsyncMigrations 13.2 kB 0 B
frontend/dist/AuthorizationStatus 717 B 0 B
frontend/dist/azcli 852 B 0 B
frontend/dist/bat 1.85 kB 0 B
frontend/dist/BatchExportScene 50.1 kB 0 B
frontend/dist/bicep 2.56 kB 0 B
frontend/dist/Billing 493 B 0 B
frontend/dist/BillingSection 20.7 kB 0 B
frontend/dist/BoxPlot 5.01 kB 0 B
frontend/dist/browserAll-0QZMN1W2 37.4 kB 0 B
frontend/dist/ButtonPrimitives 562 B 0 B
frontend/dist/CalendarHeatMap 4.82 kB 0 B
frontend/dist/cameligo 2.2 kB 0 B
frontend/dist/changeRequestsLogic 544 B 0 B
frontend/dist/CLIAuthorize 11.3 kB 0 B
frontend/dist/CLILive 4 kB 0 B
frontend/dist/clojure 9.65 kB 0 B
frontend/dist/coffee 3.6 kB 0 B
frontend/dist/Cohort 23 kB 0 B
frontend/dist/CohortCalculationHistory 6.24 kB 0 B
frontend/dist/Cohorts 9.41 kB 0 B
frontend/dist/ConfirmOrganization 4.5 kB 0 B
frontend/dist/conversations.js 64.5 kB 0 B
frontend/dist/Coupons 731 B 0 B
frontend/dist/cpp 5.31 kB 0 B
frontend/dist/Create 666 B 0 B
frontend/dist/crisp-chat-integration.js 2.11 kB 0 B
frontend/dist/csharp 4.53 kB 0 B
frontend/dist/csp 1.43 kB 0 B
frontend/dist/css 4.51 kB 0 B
frontend/dist/cssMode 4.18 kB 0 B
frontend/dist/CustomCssScene 3.56 kB 0 B
frontend/dist/CustomerAnalyticsConfigurationScene 2 kB 0 B
frontend/dist/CustomerAnalyticsScene 26.2 kB 0 B
frontend/dist/CustomerJourneyBuilderScene 1.56 kB 0 B
frontend/dist/customizations.full.js 18.7 kB 0 B
frontend/dist/CyclotronJobInputAgentConfig 4.44 kB 0 B
frontend/dist/CyclotronJobInputAssignee 1.33 kB 0 B
frontend/dist/CyclotronJobInputTicketTags 717 B 0 B
frontend/dist/cypher 3.4 kB 0 B
frontend/dist/dart 4.26 kB 0 B
frontend/dist/Dashboard 936 B 0 B
frontend/dist/Dashboards 14.7 kB 0 B
frontend/dist/DataManagementScene 646 B 0 B
frontend/dist/DataPipelinesNewScene 2.29 kB 0 B
frontend/dist/DataWarehouseScene 655 B +56 B (+9.35%) 🔍
frontend/dist/DataWarehouseSourceScene 634 B 0 B
frontend/dist/Deactivated 1.14 kB 0 B
frontend/dist/dead-clicks-autocapture.js 13.1 kB 0 B
frontend/dist/DeadLetterQueue 5.41 kB 0 B
frontend/dist/DebugScene 18.5 kB 0 B
frontend/dist/decompressionWorker 2.85 kB 0 B
frontend/dist/decompressionWorker.js 2.85 kB 0 B
frontend/dist/DefinitionEdit 7.13 kB 0 B
frontend/dist/DefinitionView 22.3 kB 0 B
frontend/dist/DestinationsScene 2.69 kB 0 B
frontend/dist/dist 575 B 0 B
frontend/dist/dockerfile 1.88 kB 0 B
frontend/dist/EarlyAccessFeature 685 B 0 B
frontend/dist/EarlyAccessFeatures 2.85 kB 0 B
frontend/dist/ecl 5.35 kB 0 B
frontend/dist/EditorScene 805 B 0 B
frontend/dist/elixir 10.3 kB 0 B
frontend/dist/EmailMFAVerify 2.99 kB 0 B
frontend/dist/EndpointScene 30.1 kB 0 B
frontend/dist/EndpointsScene 21 kB 0 B
frontend/dist/ErrorTrackingConfigurationScene 2.2 kB 0 B
frontend/dist/ErrorTrackingIssueFingerprintsScene 6.99 kB 0 B
frontend/dist/ErrorTrackingIssueScene 85.9 kB 0 B
frontend/dist/ErrorTrackingScene 13 kB 0 B
frontend/dist/EvaluationTemplates 575 B 0 B
frontend/dist/EventsScene 2.45 kB 0 B
frontend/dist/exception-autocapture.js 11.9 kB 0 B
frontend/dist/Experiment 258 kB 0 B
frontend/dist/Experiments 17.7 kB 0 B
frontend/dist/exporter 20.9 MB 0 B
frontend/dist/exporter.js 20.9 MB +53 B (0%)
frontend/dist/ExportsScene 3.88 kB 0 B
frontend/dist/FeatureFlag 101 kB 0 B
frontend/dist/FeatureFlags 572 B 0 B
frontend/dist/FeatureFlagTemplatesScene 7.05 kB 0 B
frontend/dist/FlappyHog 5.8 kB 0 B
frontend/dist/flow9 1.81 kB 0 B
frontend/dist/freemarker2 16.7 kB 0 B
frontend/dist/fsharp 2.99 kB 0 B
frontend/dist/go 2.66 kB 0 B
frontend/dist/graphql 2.27 kB 0 B
frontend/dist/Group 14.3 kB 0 B
frontend/dist/Groups 3.94 kB 0 B
frontend/dist/GroupsNew 7.36 kB 0 B
frontend/dist/handlebars 7.37 kB 0 B
frontend/dist/hcl 3.6 kB 0 B
frontend/dist/HealthScene 11 kB 0 B
frontend/dist/HeatmapNewScene 4.18 kB 0 B
frontend/dist/HeatmapRecordingScene 3.94 kB 0 B
frontend/dist/HeatmapScene 6.05 kB 0 B
frontend/dist/HeatmapsScene 3.89 kB 0 B
frontend/dist/HogFunctionScene 58.8 kB 0 B
frontend/dist/HogRepl 7.38 kB 0 B
frontend/dist/html 5.6 kB 0 B
frontend/dist/htmlMode 4.64 kB 0 B
frontend/dist/image-blob-reduce.esm 49.4 kB 0 B
frontend/dist/InboxScene 54.6 kB 0 B
frontend/dist/index 253 kB 0 B
frontend/dist/index.js 253 kB 0 B
frontend/dist/ini 1.11 kB 0 B
frontend/dist/InsightOptions 4.81 kB 0 B
frontend/dist/InsightScene 26.7 kB 0 B
frontend/dist/IntegrationsRedirect 744 B 0 B
frontend/dist/intercom-integration.js 2.16 kB 0 B
frontend/dist/InviteSignup 13.3 kB 0 B
frontend/dist/java 3.23 kB 0 B
frontend/dist/javascript 996 B 0 B
frontend/dist/jsonMode 13.9 kB 0 B
frontend/dist/julia 7.24 kB 0 B
frontend/dist/kotlin 3.41 kB 0 B
frontend/dist/lazy 153 kB 0 B
frontend/dist/LegacyPluginScene 21.1 kB 0 B
frontend/dist/LemonDialog 482 B 0 B
frontend/dist/less 3.9 kB 0 B
frontend/dist/lexon 2.45 kB 0 B
frontend/dist/lib 2.23 kB 0 B
frontend/dist/Link 468 B 0 B
frontend/dist/LinkScene 24.9 kB 0 B
frontend/dist/LinksScene 4.21 kB 0 B
frontend/dist/liquid 4.54 kB 0 B
frontend/dist/LiveDebugger 19 kB 0 B
frontend/dist/LiveEventsTable 4.46 kB 0 B
frontend/dist/LLMAnalyticsClusterScene 15.7 kB 0 B
frontend/dist/LLMAnalyticsClustersScene 42.5 kB 0 B
frontend/dist/LLMAnalyticsDatasetScene 19.7 kB 0 B
frontend/dist/LLMAnalyticsDatasetsScene 3.29 kB 0 B
frontend/dist/LLMAnalyticsEvaluation 40.5 kB 0 B
frontend/dist/LLMAnalyticsEvaluationsScene 29.3 kB 0 B
frontend/dist/LLMAnalyticsPlaygroundScene 36.4 kB 0 B
frontend/dist/LLMAnalyticsScene 71.6 kB 0 B
frontend/dist/LLMAnalyticsSessionScene 13.4 kB 0 B
frontend/dist/LLMAnalyticsTraceScene 97.9 kB 0 B
frontend/dist/LLMAnalyticsUsers 526 B 0 B
frontend/dist/LLMASessionFeedbackDisplay 4.85 kB 0 B
frontend/dist/LLMPromptScene 16.9 kB 0 B
frontend/dist/LLMPromptsScene 3.54 kB 0 B
frontend/dist/Login 8.37 kB 0 B
frontend/dist/Login2FA 4.22 kB 0 B
frontend/dist/logs.js 39 kB 0 B
frontend/dist/LogsScene 13.4 kB 0 B
frontend/dist/lua 2.13 kB 0 B
frontend/dist/m3 2.82 kB 0 B
frontend/dist/ManagedMigration 14 kB 0 B
frontend/dist/markdown 3.79 kB 0 B
frontend/dist/MarketingAnalyticsScene 23.5 kB 0 B
frontend/dist/MaterializedColumns 10.2 kB 0 B
frontend/dist/Max 767 B 0 B
frontend/dist/mdx 5.38 kB 0 B
frontend/dist/MessageTemplate 16.2 kB 0 B
frontend/dist/mips 2.59 kB 0 B
frontend/dist/ModelsScene 1.72 kB 0 B
frontend/dist/MonacoDiffEditor 403 B 0 B
frontend/dist/MoveToPostHogCloud 4.46 kB 0 B
frontend/dist/msdax 4.92 kB 0 B
frontend/dist/mysql 11.3 kB 0 B
frontend/dist/NavTabChat 4.32 kB 0 B
frontend/dist/NewSourceWizard 724 B 0 B
frontend/dist/NewTabScene 647 B 0 B
frontend/dist/NotebookCanvasScene 2.9 kB 0 B
frontend/dist/NotebookPanel 4.93 kB 0 B
frontend/dist/NotebookScene 7.92 kB 0 B
frontend/dist/NotebooksScene 7.57 kB 0 B
frontend/dist/OAuthAuthorize 9.68 kB 0 B
frontend/dist/objective-c 2.42 kB 0 B
frontend/dist/Onboarding 655 kB 0 B
frontend/dist/OnboardingCouponRedemption 1.2 kB 0 B
frontend/dist/pascal 3 kB 0 B
frontend/dist/pascaligo 2.01 kB 0 B
frontend/dist/passkeyLogic 484 B 0 B
frontend/dist/PasswordReset 4.33 kB 0 B
frontend/dist/PasswordResetComplete 2.94 kB 0 B
frontend/dist/perl 8.26 kB 0 B
frontend/dist/PersonScene 15.7 kB 0 B
frontend/dist/PersonsScene 4.75 kB 0 B
frontend/dist/pgsql 13.5 kB 0 B
frontend/dist/php 8.03 kB 0 B
frontend/dist/PipelineStatusScene 6.24 kB 0 B
frontend/dist/pla 1.69 kB 0 B
frontend/dist/posthog 253 kB 0 B
frontend/dist/postiats 7.86 kB 0 B
frontend/dist/powerquery 17 kB 0 B
frontend/dist/powershell 3.28 kB 0 B
frontend/dist/PreflightCheck 5.54 kB 0 B
frontend/dist/product-tours.js 118 kB 0 B
frontend/dist/ProductTour 274 kB 0 B
frontend/dist/ProductTours 4.72 kB 0 B
frontend/dist/ProjectHomepage 19.1 kB 0 B
frontend/dist/protobuf 9.05 kB 0 B
frontend/dist/pug 4.83 kB 0 B
frontend/dist/python 4.79 kB 0 B
frontend/dist/qsharp 3.2 kB 0 B
frontend/dist/r 3.14 kB 0 B
frontend/dist/razor 9.36 kB 0 B
frontend/dist/recorder-v2.js 113 kB 0 B
frontend/dist/recorder.js 113 kB 0 B
frontend/dist/redis 3.56 kB 0 B
frontend/dist/redshift 11.8 kB 0 B
frontend/dist/RegionMap 134 kB 0 B
frontend/dist/render-query 20.6 MB +53 B (0%)
frontend/dist/render-query.js 20.6 MB +53 B (0%)
frontend/dist/ResourceTransfer 9.16 kB 0 B
frontend/dist/restructuredtext 3.91 kB 0 B
frontend/dist/RevenueAnalyticsScene 25.6 kB 0 B
frontend/dist/ruby 8.51 kB 0 B
frontend/dist/rust 4.17 kB 0 B
frontend/dist/SavedInsights 664 B 0 B
frontend/dist/sb 1.83 kB 0 B
frontend/dist/scala 7.33 kB 0 B
frontend/dist/scheme 1.77 kB 0 B
frontend/dist/scss 6.41 kB 0 B
frontend/dist/SdkDoctorScene 4.61 kB 0 B
frontend/dist/SessionAttributionExplorerScene 6.62 kB 0 B
frontend/dist/SessionGroupSummariesTable 4.64 kB 0 B
frontend/dist/SessionGroupSummaryScene 17.1 kB 0 B
frontend/dist/SessionProfileScene 15.9 kB 0 B
frontend/dist/SessionRecordingDetail 1.74 kB 0 B
frontend/dist/SessionRecordingFilePlaybackScene 4.48 kB 0 B
frontend/dist/SessionRecordings 742 B 0 B
frontend/dist/SessionRecordingsKiosk 8.87 kB 0 B
frontend/dist/SessionRecordingsPlaylistScene 4.08 kB 0 B
frontend/dist/SessionRecordingsSettingsScene 1.91 kB 0 B
frontend/dist/SessionsScene 3.88 kB 0 B
frontend/dist/SettingsScene 3 kB 0 B
frontend/dist/SharedMetric 15.6 kB 0 B
frontend/dist/SharedMetrics 515 B 0 B
frontend/dist/shell 3.08 kB 0 B
frontend/dist/SignupContainer 22.9 kB 0 B
frontend/dist/Site 1.2 kB 0 B
frontend/dist/solidity 18.6 kB 0 B
frontend/dist/sophia 2.77 kB 0 B
frontend/dist/SourcesScene 3.16 kB 0 B
frontend/dist/sourceWizardLogic 662 B 0 B
frontend/dist/sparql 2.56 kB 0 B
frontend/dist/sql 10.3 kB 0 B
frontend/dist/SqlVariableEditScene 7.26 kB 0 B
frontend/dist/st 7.41 kB 0 B
frontend/dist/StartupProgram 21.2 kB 0 B
frontend/dist/SupportSettingsScene 25.6 kB 0 B
frontend/dist/SupportTicketScene 22.1 kB 0 B
frontend/dist/SupportTicketsScene 8.27 kB 0 B
frontend/dist/Survey 746 B 0 B
frontend/dist/SurveyFormBuilder 1.55 kB 0 B
frontend/dist/Surveys 18.2 kB 0 B
frontend/dist/surveys.js 90.2 kB 0 B
frontend/dist/SurveyWizard 56.2 kB 0 B
frontend/dist/swift 5.28 kB 0 B
frontend/dist/SystemStatus 17 kB 0 B
frontend/dist/systemverilog 7.62 kB 0 B
frontend/dist/TaskDetailScene 20.2 kB 0 B
frontend/dist/TaskTracker 16.4 kB 0 B
frontend/dist/tcl 3.57 kB 0 B
frontend/dist/toolbar 9.56 MB +53 B (0%)
frontend/dist/toolbar.js 9.56 MB +53 B (0%)
frontend/dist/ToolbarLaunch 2.53 kB 0 B
frontend/dist/tracing-headers.js 1.93 kB 0 B
frontend/dist/TracingScene 14.4 kB 0 B
frontend/dist/TransformationsScene 1.93 kB 0 B
frontend/dist/tsMode 24 kB 0 B
frontend/dist/twig 5.98 kB 0 B
frontend/dist/TwoFactorReset 4 kB 0 B
frontend/dist/typescript 240 B 0 B
frontend/dist/typespec 2.83 kB 0 B
frontend/dist/Unsubscribe 1.63 kB 0 B
frontend/dist/UserInterview 4.55 kB 0 B
frontend/dist/UserInterviews 2.03 kB 0 B
frontend/dist/vb 5.8 kB 0 B
frontend/dist/VercelConnect 4.04 kB 0 B
frontend/dist/VercelLinkError 1.92 kB 0 B
frontend/dist/VerifyEmail 4.49 kB 0 B
frontend/dist/vimMode 211 kB 0 B
frontend/dist/VisualReviewRunScene 18.5 kB 0 B
frontend/dist/VisualReviewRunsScene 6.01 kB 0 B
frontend/dist/VisualReviewSettingsScene 9.12 kB 0 B
frontend/dist/web-vitals.js 6.6 kB 0 B
frontend/dist/WebAnalyticsScene 5.72 kB 0 B
frontend/dist/WebGLRenderer-DYjOwNoG 60.3 kB 0 B
frontend/dist/WebGPURenderer-B_wkl_Ja 36.3 kB 0 B
frontend/dist/WebScriptsScene 2.55 kB 0 B
frontend/dist/webworkerAll-puPV1rBA 330 B 0 B
frontend/dist/wgsl 7.35 kB 0 B
frontend/dist/Wizard 4.47 kB 0 B
frontend/dist/WorkflowScene 102 kB 0 B
frontend/dist/WorkflowsScene 47.1 kB 0 B
frontend/dist/WorldMap 4.75 kB 0 B
frontend/dist/xml 2.98 kB 0 B
frontend/dist/yaml 4.61 kB 0 B

compressed-size-action

@kappa90 kappa90 marked this pull request as ready for review March 13, 2026 09:59
@assign-reviewers-posthog assign-reviewers-posthog Bot requested review from a team March 13, 2026 09:59
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Mar 13, 2026

Prompt To Fix All With AI
This is a comment left during a code review.
Path: nodejs/src/cdp/async-functions/agent.ts
Line: 25-29

Comment:
**`github_installation` not forwarded to agent endpoint**

The UI collects `github_installation` (the OAuth integration ID) so the agent can authenticate with GitHub, but it is never included in the request body sent to `/agent/run`. Without this, the backend agent has no way to identify which GitHub integration to use when accessing repository data.

```suggestion
            body: JSON.stringify({
                message: prompt,
                github_installation: opts?.github_installation ?? null,
                repository: opts?.repository ?? null,
                output_schema: opts?.output_schema ?? null,
            }),
```

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: nodejs/src/cdp/services/hog-executor.service.ts
Line: 676-678

Comment:
**Falsy check skips `timeout_ms: 0`**

Using `if (params.timeout_ms)` treats `0` as falsy, so a caller that explicitly passes `timeout_ms: 0` would have the timeout silently ignored. Prefer an explicit nullish check to be robust against future callers:

```suggestion
        if (params.timeout_ms != null) {
            fetchParams.timeoutMs = params.timeout_ms
        }
```

How can I resolve this? If you propose a fix, please make it concise.

---

This is a comment left during a code review.
Path: products/workflows/frontend/Workflows/hogflows/steps/components/CyclotronJobInputAgentConfig.tsx
Line: 87-98

Comment:
**`setState` called during render**

Calling `setOutputFields` directly in the render body (outside of `useEffect`) is a React anti-pattern. While React does handle this case by discarding the current render and immediately re-rendering with the new state, it is flagged by React's strict-mode double-render checks and can be harder to reason about than an explicit `useEffect`.

Consider replacing this block with a `useEffect` that watches `config.output_schema`:

```
useEffect(() => {
    const incomingStr = JSON.stringify(config.output_schema)
    const currentStr = JSON.stringify(lastSyncedSchema.current)
    if (incomingStr !== currentStr) {
        setOutputFields(schemaToFields(config.output_schema))
        lastSyncedSchema.current = config.output_schema
    }
}, [config.output_schema])
```

How can I resolve this? If you propose a fix, please make it concise.

Last reviewed commit: 60b05e9

Comment thread nodejs/src/cdp/async-functions/agent.ts
Comment thread nodejs/src/cdp/services/hog-executor.service.ts
Comment on lines +87 to +98
lastSyncedSchema.current = config.output_schema
}
}

const updateFields = useCallback(
(fields: OutputField[]) => {
setOutputFields(fields)
const schema = fieldsToSchema(fields)
lastSyncedSchema.current = schema
update({ output_schema: schema })
},
[update]
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

setState called during render

Calling setOutputFields directly in the render body (outside of useEffect) is a React anti-pattern. While React does handle this case by discarding the current render and immediately re-rendering with the new state, it is flagged by React's strict-mode double-render checks and can be harder to reason about than an explicit useEffect.

Consider replacing this block with a useEffect that watches config.output_schema:

useEffect(() => {
    const incomingStr = JSON.stringify(config.output_schema)
    const currentStr = JSON.stringify(lastSyncedSchema.current)
    if (incomingStr !== currentStr) {
        setOutputFields(schemaToFields(config.output_schema))
        lastSyncedSchema.current = config.output_schema
    }
}, [config.output_schema])
Prompt To Fix With AI
This is a comment left during a code review.
Path: products/workflows/frontend/Workflows/hogflows/steps/components/CyclotronJobInputAgentConfig.tsx
Line: 87-98

Comment:
**`setState` called during render**

Calling `setOutputFields` directly in the render body (outside of `useEffect`) is a React anti-pattern. While React does handle this case by discarding the current render and immediately re-rendering with the new state, it is flagged by React's strict-mode double-render checks and can be harder to reason about than an explicit `useEffect`.

Consider replacing this block with a `useEffect` that watches `config.output_schema`:

```
useEffect(() => {
    const incomingStr = JSON.stringify(config.output_schema)
    const currentStr = JSON.stringify(lastSyncedSchema.current)
    if (incomingStr !== currentStr) {
        setOutputFields(schemaToFields(config.output_schema))
        lastSyncedSchema.current = config.output_schema
    }
}, [config.output_schema])
```

How can I resolve this? If you propose a fix, please make it concise.

@kappa90 kappa90 force-pushed the 03-13-feat_ph-ai_background_sandbox_agent_api branch from ccd69a8 to 9dd9ec2 Compare March 13, 2026 10:08
@kappa90 kappa90 force-pushed the 03-13-feat_workflows_agent_node branch from 60b05e9 to 52bedb0 Compare March 13, 2026 10:08
@kappa90 kappa90 requested a review from a team March 13, 2026 10:09
@kappa90 kappa90 force-pushed the 03-13-feat_workflows_agent_node branch from 52bedb0 to bd62124 Compare March 13, 2026 10:27
@kappa90 kappa90 force-pushed the 03-13-feat_ph-ai_background_sandbox_agent_api branch from 9dd9ec2 to 2e0d5c7 Compare March 13, 2026 10:27
@github-actions
Copy link
Copy Markdown
Contributor

🎭 Playwright report · View test results →

⚠️ 1 flaky test:

  • Save an insight, make changes, discard them, and save a copy (chromium)

These issues are not necessarily caused by your changes.
Annoyed by this comment? Help fix flakies and failures and it'll disappear!

@github-actions
Copy link
Copy Markdown
Contributor

This PR hasn't seen activity in a week! Should it be merged, closed, or further worked on? If you want to keep it open, please remove the stale label – otherwise this will be closed in another week. If you want to permanently keep it open, use the waiting label.

@github-actions github-actions Bot added the stale label Mar 23, 2026
@kappa90 kappa90 closed this Mar 25, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant