Conversation
Add `code` step type to the DSL so dynamic integrations can execute arbitrary JavaScript alongside declarative steps — enabling 100% coverage of all possible integration patterns (AWS SDK, Promise.all, data transforms, JWT signing, etc.). Add dynamic employee sync support so integrations created via the dynamic integration system can sync employees without hand-written TypeScript. Includes a generic sync service, sync run log persistence, and frontend support for dynamic sync providers. Key changes: - New `code` DSL step with full CheckContext access (ctx.fetch, ctx.pass, etc.) - SyncEmployee schema + interpretDeclarativeSync function - GenericEmployeeSyncService extracting common import/deactivation pattern - Generic POST /dynamic/:slug/employees sync endpoint - GET /available-providers endpoint for frontend - Sync trigger routes dynamic providers automatically - Execution logs persisted to DB for both checks and syncs - Agent debugging endpoints: validate, check-runs, check-run-by-id - Frontend dynamically renders sync providers from API - All existing sync endpoints (GWS, Rippling, JumpCloud, Ramp) unchanged Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
syncDefinition was validated by Zod and read from the DB but never written. Both upsert and create in the controller and repository omitted the field, silently dropping it. This would cause syncDynamicProviderEmployees to always fail with "has no sync definition." Fixed in: repository create/upsertBySlug, controller upsert/create, and seed script. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…x success flag - Parse syncDefinition through SyncDefinitionSchema.parse() before persisting to DB, ensuring Zod defaults (employeesPath: 'employees') are applied. Previously stored raw unvalidated JSON. - Set results.success = false when errors > 0 in GenericEmployeeSyncService. Previously success was always true, causing the sync trigger to misreport partial failures as successes. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…n validate endpoint The per-check CheckDefinitionSchema.safeParse loop was dead code — validateIntegrationDefinition already validates all check definitions via the nested Zod schema. Simplified to return valid: true with summary when top-level validation passes. Also added checkSlugs to the summary for agent convenience. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…plicate VariableSchema - Upsert now sends Prisma.DbNull when syncDefinition is removed from the definition, instead of undefined (which Prisma skips). This prevents stale sync definitions from persisting after removal. - Deduplicated VariableSchema — was defined 3 times identically. Now defined once and reused in CheckDefinitionSchema, SyncDefinitionSchema, and DynamicIntegrationDefinitionSchema. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…e-step-and-sync feat(integration-platform): add code step and dynamic employee sync
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
PR SummaryHigh Risk Overview Extends the integration DSL with a new Improves observability and agent debugging: check runs now persist execution Written by Cursor Bugbot for commit 9f50fde. This will update automatically on new commits. Configure here. |
There was a problem hiding this comment.
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.
Prisma.DbNull is a runtime value, not a type. Changed from
`import type { Prisma }` to `import { Prisma }` to fix build error:
TS1361: 'Prisma' cannot be used as a value because it was imported
using 'import type'.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
fix: use value import for Prisma (DbNull requires runtime access)
|
🎉 This PR is included in version 3.12.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |

This is an automated pull request to release the candidate branch into production, which will trigger a deployment.
It was created by the [Production PR] action.