Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: simstudioai/sim
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: main
Choose a base ref
...
head repository: simstudioai/sim
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: staging
Choose a head ref
Checking mergeability… Don’t worry, you can still create the pull request.
  • 1 commit
  • 32 files changed
  • 2 contributors

Commits on Apr 10, 2026

  1. feat(trigger): add Google Sheets, Drive, and Calendar polling triggers (

    #4081)
    
    * feat(trigger): add Google Sheets, Drive, and Calendar polling triggers
    
    Add polling triggers for Google Sheets (new rows), Google Drive (file
    changes via changes.list API), and Google Calendar (event updates via
    updatedMin). Each includes OAuth credential support, configurable
    filters (event type, MIME type, folder, search term, render options),
    idempotency, and first-poll seeding. Wire triggers into block configs
    and regenerate integrations.json. Update add-trigger skill with polling
    instructions and versioned block wiring guidance.
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    
    * fix(polling): address PR review feedback for Google polling triggers
    
    - Fix Drive cursor stall: use nextPageToken as resume point when
      breaking early from pagination instead of re-using the original token
    - Eliminate redundant Drive API call in Sheets poller by returning
      modifiedTime from the pre-check function
    - Add 403/429 rate-limit handling to Sheets API calls matching the
      Calendar handler pattern
    - Remove unused changeType field from DriveChangeEntry interface
    - Rename triggers/google_drive to triggers/google-drive for consistency
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    
    * fix(polling): fix Drive pre-check never activating in Sheets poller
    
    isDriveFileUnchanged short-circuited when lastModifiedTime was
    undefined, never calling the Drive API — so currentModifiedTime
    was never populated, creating a permanent chicken-and-egg loop.
    Now always calls the Drive API and returns the modifiedTime
    regardless of whether there's a previous value to compare against.
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    
    * chore(lint): fix import ordering in triggers registry
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
    
    * fix(polling): address PR review feedback for Google polling handlers
    
    - Fix fetchHeaderRow to throw on 403/429 rate limits instead of silently
      returning empty headers (prevents rows from being processed without
      headers and lastKnownRowCount from advancing past them permanently)
    - Fix Drive pagination to avoid advancing resume cursor past sliced
      changes (prevents permanent change loss when allChanges > maxFiles)
    - Remove unused logger import from Google Drive trigger config
    
    * fix(polling): prevent data loss on partial row failures and harden idempotency key
    
    - Sheets: only advance lastKnownRowCount by processedCount when there
      are failures, so failed rows are retried on the next poll cycle
      (idempotency deduplicates already-processed rows on re-fetch)
    - Drive: add fallback for change.time in idempotency key to prevent
      key collisions if the field is ever absent from the API response
    
    * fix(polling): remove unused variable and preserve lastModifiedTime on Drive API failure
    
    - Remove unused `now` variable from Google Drive polling handler
    - Preserve stored lastModifiedTime when Drive API pre-check fails
      (previously wrote undefined, disabling the optimization until the
      next successful Drive API call)
    
    * fix(polling): don't advance state when all events fail across sheets, calendar, drive handlers
    
    * fix(polling): retry failed idempotency keys, fix drive cursor overshoot, fix calendar inclusive updatedMin
    
    * fix(polling): revert calendar timestamp on any failure, not just all-fail
    
    * fix(polling): revert drive cursor on any failure, not just all-fail
    
    * feat(triggers): add canonical selector toggle to google polling triggers
    
    - Add 'trigger-advanced' mode to SubBlockConfig so canonical pairs work in trigger mode
    - Fix buildCanonicalIndex: trigger-mode subblocks don't overwrite non-trigger basicId, deduplicate advancedIds from block spreads
    - Update editor, subblock layout, and trigger config aggregation to include trigger-advanced subblocks
    - Replace dropdown+fetchOptions in Calendar/Sheets/Drive pollers with file-selector (basic) + short-input (advanced) canonical pairs
    - Add canonicalParamId: 'oauthCredential' to triggerCredentials for selector context resolution
    - Update polling handlers to read canonical fallbacks (calendarId||manualCalendarId, etc.)
    
    * test(blocks): handle trigger-advanced mode in canonical validation tests
    
    * fix(triggers): handle trigger-advanced mode in deploy, preview, params, and copilot
    
    * fix(polling): use position-only idempotency key for sheets rows
    
    * fix(polling): don't advance calendar timestamp to client clock on empty poll
    
    * fix(polling): remove extraneous comment from calendar poller
    
    * fix(polling): drive cursor stall on full page, calendar latestUpdated past filtered events
    
    * fix(polling): advance calendar cursor past fully-filtered event batches
    
    ---------
    
    Co-authored-by: Claude Opus 4.6 <[email protected]>
    waleedlatif1 and claude authored Apr 10, 2026
    Configuration menu
    Copy the full SHA
    6099683 View commit details
    Browse the repository at this point in the history
Loading