Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
fix(blocks): restore field renames to tool() for serialization-time v…
…alidation

Field renames (e.g. personalApiKey→apiKey) must be in tool() because
validateRequiredFieldsBeforeExecution calls selectToolId()→tool() then
checks renamed field names on params. Only type coercions (Number(),
boolean) stay in params() to avoid destroying dynamic variable references.
  • Loading branch information
waleedlatif1 committed Feb 20, 2026
commit 0ecf6355879382be95fd71ddc743d73f4233712e
10 changes: 5 additions & 5 deletions apps/sim/blocks/blocks/grafana.ts
Original file line number Diff line number Diff line change
Expand Up @@ -606,6 +606,11 @@ Return ONLY the folder title - no explanations, no quotes, no extra text.`,
],
config: {
tool: (params) => {
if (params.alertTitle) params.title = params.alertTitle
if (params.folderTitle) params.title = params.folderTitle
if (params.folderUidNew) params.uid = params.folderUidNew
if (params.annotationTags) params.tags = params.annotationTags
if (params.annotationDashboardUid) params.dashboardUid = params.annotationDashboardUid
return params.operation
},
params: (params) => {
Expand All @@ -616,11 +621,6 @@ Return ONLY the folder title - no explanations, no quotes, no extra text.`,
if (params.timeEnd) result.timeEnd = Number(params.timeEnd)
if (params.from) result.from = Number(params.from)
if (params.to) result.to = Number(params.to)
if (params.alertTitle) result.title = params.alertTitle
if (params.folderTitle) result.title = params.folderTitle
if (params.folderUidNew) result.uid = params.folderUidNew
if (params.annotationTags) result.tags = params.annotationTags
if (params.annotationDashboardUid) result.dashboardUid = params.annotationDashboardUid
return result
},
},
Expand Down
2 changes: 1 addition & 1 deletion apps/sim/blocks/blocks/lemlist.ts
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ export const LemlistBlock: BlockConfig<LemlistResponse> = {
access: ['lemlist_get_activities', 'lemlist_get_lead', 'lemlist_send_email'],
config: {
tool: (params) => {
if (params.filterLeadId) params.leadId = params.filterLeadId
switch (params.operation) {
case 'get_activities':
return 'lemlist_get_activities'
Expand All @@ -184,7 +185,6 @@ export const LemlistBlock: BlockConfig<LemlistResponse> = {
const result: Record<string, unknown> = {}
if (params.limit) result.limit = Number(params.limit)
if (params.offset) result.offset = Number(params.offset)
if (params.filterLeadId) result.leadId = params.filterLeadId
return result
},
},
Expand Down
7 changes: 2 additions & 5 deletions apps/sim/blocks/blocks/parallel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,8 @@ export const ParallelBlock: BlockConfig<ToolResponse> = {
access: ['parallel_search', 'parallel_extract', 'parallel_deep_research'],
config: {
tool: (params) => {
if (params.extract_objective) params.objective = params.extract_objective
if (params.research_input) params.input = params.research_input
switch (params.operation) {
case 'search':
return 'parallel_search'
Expand Down Expand Up @@ -183,15 +185,10 @@ export const ParallelBlock: BlockConfig<ToolResponse> = {
}

if (operation === 'extract') {
result.objective = params.extract_objective
result.excerpts = !(params.excerpts === 'false' || params.excerpts === false)
Comment thread
waleedlatif1 marked this conversation as resolved.
result.full_content = params.full_content === 'true' || params.full_content === true
}

if (operation === 'deep_research') {
result.input = params.research_input
}

return result
},
},
Expand Down
48 changes: 25 additions & 23 deletions apps/sim/blocks/blocks/posthog.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1185,20 +1185,13 @@ Return ONLY the timestamp string - no explanations, no quotes, no extra text.`,
],
config: {
tool: (params) => {
return params.operation as string
},
params: (params) => {
const result: Record<string, unknown> = {}
if (params.limit) result.limit = Number(params.limit)
if (params.offset) result.offset = Number(params.offset)
if (params.rolloutPercentage) result.rolloutPercentage = Number(params.rolloutPercentage)
if (params.responsesLimit) result.responsesLimit = Number(params.responsesLimit)

// Field renames in tool() are safe (they copy values, not coerce types)
// and are needed for serialization-time validation of required fields
if (params.operation === 'posthog_get_project' && params.projectIdParam) {
result.projectId = params.projectIdParam
params.projectId = params.projectIdParam
}
if (params.personalApiKey) {
result.apiKey = params.personalApiKey
params.apiKey = params.personalApiKey
}

const flagOps = [
Expand All @@ -1207,47 +1200,47 @@ Return ONLY the timestamp string - no explanations, no quotes, no extra text.`,
'posthog_delete_feature_flag',
]
if (flagOps.includes(params.operation as string) && params.featureFlagId) {
result.flagId = params.featureFlagId
params.flagId = params.featureFlagId
}

if (
(params.operation === 'posthog_create_survey' ||
params.operation === 'posthog_update_survey') &&
params.surveyType
) {
result.type = params.surveyType
params.type = params.surveyType
}

if (params.operation === 'posthog_create_cohort' && params.isStatic !== undefined) {
result.is_static = params.isStatic
params.is_static = params.isStatic
}

if (params.operation === 'posthog_create_annotation' && params.dateMarker) {
result.date_marker = params.dateMarker
params.date_marker = params.dateMarker
}

if (params.operation === 'posthog_update_property_definition' && params.propertyType) {
result.property_type = params.propertyType
params.property_type = params.propertyType
}

if (params.operation === 'posthog_create_insight' && params.insightQuery) {
result.query = params.insightQuery
params.query = params.insightQuery
}

if (params.operation === 'posthog_create_insight' && params.insightTags) {
result.tags = params.insightTags
params.tags = params.insightTags
}

if (params.operation === 'posthog_list_persons' && params.distinctIdFilter) {
result.distinctId = params.distinctIdFilter
params.distinctId = params.distinctIdFilter
}

if (params.operation === 'posthog_create_experiment') {
if (params.experimentStartDate) {
result.startDate = params.experimentStartDate
params.startDate = params.experimentStartDate
}
if (params.experimentEndDate) {
result.endDate = params.experimentEndDate
params.endDate = params.experimentEndDate
}
}

Expand All @@ -1256,13 +1249,22 @@ Return ONLY the timestamp string - no explanations, no quotes, no extra text.`,
params.operation === 'posthog_update_survey'
) {
if (params.surveyStartDate) {
result.startDate = params.surveyStartDate
params.startDate = params.surveyStartDate
}
if (params.surveyEndDate) {
result.endDate = params.surveyEndDate
params.endDate = params.surveyEndDate
}
}

return params.operation as string
},
params: (params) => {
const result: Record<string, unknown> = {}
if (params.limit) result.limit = Number(params.limit)
if (params.offset) result.offset = Number(params.offset)
if (params.rolloutPercentage) result.rolloutPercentage = Number(params.rolloutPercentage)
if (params.responsesLimit) result.responsesLimit = Number(params.responsesLimit)

return result
},
},
Expand Down
6 changes: 3 additions & 3 deletions apps/sim/blocks/blocks/spotify.ts
Original file line number Diff line number Diff line change
Expand Up @@ -755,6 +755,9 @@ export const SpotifyBlock: BlockConfig<ToolResponse> = {
],
config: {
tool: (params) => {
if (params.followType) params.type = params.followType
if (params.newName) params.name = params.newName
if (params.playUris) params.uris = params.playUris
return params.operation || 'spotify_search'
},
params: (params) => {
Expand All @@ -765,9 +768,6 @@ export const SpotifyBlock: BlockConfig<ToolResponse> = {
if (params.insert_before) result.insert_before = Number(params.insert_before)
if (params.range_length) result.range_length = Number(params.range_length)
if (params.position_ms) result.position_ms = Number(params.position_ms)
if (params.followType) result.type = params.followType
if (params.newName) result.name = params.newName
if (params.playUris) result.uris = params.playUris
if (params.coverImage !== undefined) {
result.coverImage = normalizeFileInput(params.coverImage, { single: true })
}
Expand Down