feat(fathom): add Fathom AI Notetaker integration#3531
feat(fathom): add Fathom AI Notetaker integration#3531waleedlatif1 merged 27 commits intostagingfrom
Conversation
…keyboard shortcuts, audit logs
…rects to rewrites
…stash, algolia tools; isolated-vm robustness improvements, tables backend (#3271) * feat(tools): advanced fields for youtube, vercel; added cloudflare and dataverse tools (#3257) * refactor(vercel): mark optional fields as advanced mode Move optional/power-user fields behind the advanced toggle: - List Deployments: project filter, target, state - Create Deployment: project ID override, redeploy from, target - List Projects: search - Create/Update Project: framework, build/output/install commands - Env Vars: variable type - Webhooks: project IDs filter - Checks: path, details URL - Team Members: role filter - All operations: team ID scope Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * style(youtube): mark optional params as advanced mode Hide pagination, sort order, and filter fields behind the advanced toggle for a cleaner default UX across all YouTube operations. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * added advanced fields for vercel and youtube, added cloudflare and dataverse block * addded desc for dataverse * add more tools * ack comment * more * ops --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * feat(tables): added tables (#2867) * updates * required * trashy table viewer * updates * updates * filtering ui * updates * updates * updates * one input mode * format * fix lints * improved errors * updates * updates * chages * doc strings * breaking down file * update comments with ai * updates * comments * changes * revert * updates * dedupe * updates * updates * updates * refactoring * renames & refactors * refactoring * updates * undo * update db * wand * updates * fix comments * fixes * simplify comments * u[dates * renames * better comments * validation * updates * updates * updates * fix sorting * fix appearnce * updating prompt to make it user sort * rm * updates * rename * comments * clean comments * simplicifcaiton * updates * updates * refactor * reduced type confusion * undo * rename * undo changes * undo * simplify * updates * updates * revert * updates * db updates * type fix * fix * fix error handling * updates * docs * docs * updates * rename * dedupe * revert * uncook * updates * fix * fix * fix * fix * prepare merge * readd migrations * add back missed code * migrate enrichment logic to general abstraction * address bugbot concerns * adhere to size limits for tables * remove conflicting migration * add back migrations * fix tables auth * fix permissive auth * fix lint * reran migrations * migrate to use tanstack query for all server state * update table-selector * update names * added tables to permission groups, updated subblock types --------- Co-authored-by: Vikhyath Mondreti <vikhyath@simstudio.ai> Co-authored-by: waleed <walif6@gmail.com> * fix(snapshot): changed insert to upsert when concurrent identical child workflows are running (#3259) * fix(snapshot): changed insert to upsert when concurrent identical child workflows are running * fixed ci tests failing * fix(workflows): disallow duplicate workflow names at the same folder level (#3260) * feat(tools): added redis, upstash, algolia, and revenuecat (#3261) * feat(tools): added redis, upstash, algolia, and revenuecat * ack comment * feat(models): add gemini-3.1-pro-preview and update gemini-3-pro thinking levels (#3263) * fix(audit-log): lazily resolve actor name/email when missing (#3262) * fix(blocks): move type coercions from tools.config.tool to tools.config.params (#3264) * fix(blocks): move type coercions from tools.config.tool to tools.config.params Number() coercions in tools.config.tool ran at serialization time before variable resolution, destroying dynamic references like <block.result.count> by converting them to NaN/null. Moved all coercions to tools.config.params which runs at execution time after variables are resolved. Fixed in 15 blocks: exa, arxiv, sentry, incidentio, wikipedia, ahrefs, posthog, elasticsearch, dropbox, hunter, lemlist, spotify, youtube, grafana, parallel. Also added mode: 'advanced' to optional exa fields. Closes #3258 * fix(blocks): address PR review — move remaining param mutations from tool() to params() - Moved field mappings from tool() to params() in grafana, posthog, lemlist, spotify, dropbox (same dynamic reference bug) - Fixed parallel.ts excerpts/full_content boolean logic - Fixed parallel.ts search_queries empty case (must set undefined) - Fixed elasticsearch.ts timeout not included when already ends with 's' - Restored dropbox.ts tool() switch for proper default fallback * fix(blocks): restore field renames to tool() for serialization-time validation 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. * improvement(resolver): resovled empty sentinel to not pass through unexecuted valid refs to text inputs (#3266) * fix(blocks): add required constraint for serviceDeskId in JSM block (#3268) * fix(blocks): add required constraint for serviceDeskId in JSM block * fix(blocks): rename custom field values to request field values in JSM create request * fix(trigger): add isolated-vm support to trigger.dev container builds (#3269) Scheduled workflow executions running in trigger.dev containers were failing to spawn isolated-vm workers because the native module wasn't available in the container. This caused loop condition evaluation to silently fail and exit after one iteration. - Add isolated-vm to build.external and additionalPackages in trigger config - Include isolated-vm-worker.cjs via additionalFiles for child process spawning - Add fallback path resolution for worker file in trigger.dev environment * fix(tables): hide tables from sidebar and block registry (#3270) * fix(tables): hide tables from sidebar and block registry * fix(trigger): add isolated-vm support to trigger.dev container builds (#3269) Scheduled workflow executions running in trigger.dev containers were failing to spawn isolated-vm workers because the native module wasn't available in the container. This caused loop condition evaluation to silently fail and exit after one iteration. - Add isolated-vm to build.external and additionalPackages in trigger config - Include isolated-vm-worker.cjs via additionalFiles for child process spawning - Add fallback path resolution for worker file in trigger.dev environment * lint * fix(trigger): update node version to align with main app (#3272) * fix(build): fix corrupted sticky disk cache on blacksmith (#3273) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Lakee Sivaraya <71339072+lakeesiv@users.noreply.github.com> Co-authored-by: Vikhyath Mondreti <vikhyath@simstudio.ai> Co-authored-by: Vikhyath Mondreti <vikhyathvikku@gmail.com>
… fixes, removed retired models, hex integration
…ogle tasks and bigquery integrations, workflow lock
…gespeed insights, pagerduty
…, brandfetch, google meet
… pagination, memory improvements
… selectors for 14 blocks
…ory instrumentation
…aders, webhook trigger configs (#3530)
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
PR SummaryMedium Risk Overview Introduces two Fathom webhook triggers ( Updates docs to include a new Written by Cursor Bugbot for commit 2d394ca. Configure here. |
Greptile SummaryThis PR adds a full Fathom AI Notetaker integration to Sim, including 5 tools (list meetings, get summary, get transcript, list team members, list teams), 2 webhook triggers (new meeting content, generic), automatic webhook lifecycle management, a block with operation dropdown and conditional subBlocks, an icon, and a docs page. The implementation follows the established patterns for provider integrations in the codebase (e.g., Grain, Circleback) and incorporates several fixes from prior review rounds. Key observations:
Confidence Score: 3/5
Important Files Changed
Sequence DiagramsequenceDiagram
participant User as User (UI)
participant Sim as Sim Backend
participant FathomAPI as Fathom API
participant Webhook as Sim Webhook Endpoint
Note over User,FathomAPI: Webhook Registration Flow
User->>Sim: Save trigger config (apiKey, triggeredFor, include flags)
Sim->>Sim: createFathomWebhookSubscription()
Sim->>FathomAPI: POST /external/v1/webhooks<br/>{destination_url, triggered_for, include_*}
FathomAPI-->>Sim: {id: "fathom-webhook-id"}
Sim->>Sim: Store externalId in webhookData
Note over FathomAPI,Webhook: Incoming Event Flow
FathomAPI->>Webhook: POST /api/webhooks/trigger/{path}<br/>Meeting payload
Webhook->>Sim: Process trigger (no signature check)
Sim->>User: Execute workflow with meeting data
Note over User,FathomAPI: Tool Usage Flow
User->>Sim: List Meetings / Get Summary / Get Transcript
Sim->>FathomAPI: GET /external/v1/meetings<br/>or /recordings/{id}/summary<br/>or /recordings/{id}/transcript
FathomAPI-->>Sim: Meeting data / Summary / Transcript
Sim-->>User: Transformed response
Note over Sim,FathomAPI: Webhook Deletion Flow
User->>Sim: Remove trigger
Sim->>Sim: deleteFathomWebhook()<br/>validateAlphanumericId(externalId)
Sim->>FathomAPI: DELETE /external/v1/webhooks/{externalId}
FathomAPI-->>Sim: 204 No Content
|
- Add response.ok checks to all 5 tool transformResponse functions - Fix include_summary default to respect explicit false (check undefined) - Add externalId validation before URL interpolation in webhook deletion
|
@greptile review |
- Remove redundant 204 status check in deleteFathomWebhook (204 is ok) - Use consistent undefined-guard pattern for all include flags - Add .catch() fallback on webhook creation JSON parse - Change recording_id default from 0 to null to avoid misleading sentinel
|
@cursor review |
|
@greptile review |
…ix action_items type - Add crm_matches pass-through in list_meetings transform (was silently dropped) - Fix action_items type to match API schema (description, user_generated, completed, etc.) - Add crm_matches type with contacts, companies, deals, error fields
|
@greptile |
|
@cursor review |
1 similar comment
|
@cursor review |
|
@greptile review |
- Add type: 'object' to recorded_by and default_summary trigger outputs - Use val === true || val === 'true' pattern for include flag coercion to safely handle both boolean and string values from providerConfig
|
@cursor review |
|
@greptile review |

Summary
Type of Change
Testing
Tested manually
Checklist