Skip to content

feat(connectors): add Google Meet knowledge base connector#5149

Merged
waleedlatif1 merged 4 commits into
stagingfrom
worktree-add-connectors-survey
Jun 20, 2026
Merged

feat(connectors): add Google Meet knowledge base connector#5149
waleedlatif1 merged 4 commits into
stagingfrom
worktree-add-connectors-survey

Conversation

@waleedlatif1

Copy link
Copy Markdown
Collaborator

Summary

  • Add a Google Meet knowledge base connector that syncs meeting transcripts into a knowledge base
  • Uses the Meet REST API v2: lists conference records, fetches transcript entries lazily per meeting (contentDeferred), resolves speaker display names, and links back to the exported transcript Doc
  • Maps participants, duration, and meeting-date tags
  • OAuth via the existing google-meet provider (meetings.space.readonly scope) — no new auth wiring
  • Registered in both the server registry and the client-safe meta registry

Type of Change

  • New feature (Google Meet connector)

Testing

Tested manually: TypeScript compiles clean, Biome clean. Every endpoint, field shape, OAuth scope, and the conferenceRecords.list filter syntax verified against the live Meet REST v2 docs.

Note: Google retains Meet conference records/transcripts for ~30 days, and conferenceRecords.list returns meetings the connected user organized.

Checklist

  • Code follows project style guidelines
  • Self-reviewed my changes
  • Tests added/updated and passing
  • No new warnings introduced
  • I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)

Syncs Google Meet meeting transcripts into a knowledge base via the Meet
REST API v2. Lists conference records, fetches transcript entries lazily
per meeting (contentDeferred), resolves speaker display names, and maps
participants/duration/meeting-date tags. OAuth via the existing google-meet
provider (meetings.space.readonly).
@vercel

vercel Bot commented Jun 20, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
docs Skipped Skipped Jun 20, 2026 6:19am

Request Review

@cursor

cursor Bot commented Jun 20, 2026

Copy link
Copy Markdown

PR Summary

Medium Risk
New third-party sync path handles OAuth-backed meeting/transcript data and sync-engine edge cases (caps, deferred content, hash-based change detection), though it follows existing connector patterns without new auth wiring.

Overview
Adds a Google Meet knowledge-base connector so users can sync meeting transcripts into a knowledge base, wired through the existing google-meet OAuth provider (meetings.space.readonly).

Listing uses Meet REST API v2 conferenceRecords with optional lookback (start_time filter) and max meetings caps; sync context tracks totals and only sets listingCapped when truncation actually hides upstream records (so deletion reconciliation still works when the source exactly hits the cap).

Content is loaded lazily: listDocuments returns deferred stubs keyed by a hash on conference endTime; getDocument pulls transcripts and entries, waits until every transcript is FILE_GENERATED (avoids indexing partial text that would never refresh), merges multi-transcript entries by start time, resolves speaker display names (bounded concurrency), and can attach the exported Google Doc exportUri as sourceUrl.

Metadata exposes participants, duration, and meetingDate tags; config validation checks numeric fields and probes the API. The connector is registered as google_meet in both server and client meta registries.

Reviewed by Cursor Bugbot for commit 412217f. Configure here.

Comment thread apps/sim/connectors/google-meet/google-meet.ts
Comment thread apps/sim/connectors/google-meet/google-meet.ts
@greptile-apps

greptile-apps Bot commented Jun 20, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR adds a Google Meet knowledge base connector that syncs meeting transcripts into a knowledge base using the Meet REST API v2. It follows the established connector pattern with deferred loading, a FILE_GENERATED-only guard to prevent partial transcript indexing, batched participant name resolution, and full pagination for all sub-resources.

  • Introduces apps/sim/connectors/google-meet/google-meet.ts with listDocuments (stub-based deferred loading), getDocument (transcript hydration with speaker attribution), validateConfig, and mapTags.
  • Registers the connector in both the server registry (registry.server.ts) and the client-safe meta registry (registry.ts), with metadata and OAuth wiring in meta.ts.

Confidence Score: 5/5

This PR adds a self-contained connector with no changes to shared infrastructure, and all edge cases (partial transcripts, expired records, empty meetings) are handled correctly.

The connector follows the established deferred-loading pattern, correctly guards against partial transcript indexing with a FILE_GENERATED-only check, handles all pagination loops safely, and uses the existing OAuth provider without any new auth wiring.

No files require special attention.

Important Files Changed

Filename Overview
apps/sim/connectors/google-meet/google-meet.ts Core connector implementation; well-structured with proper pagination, FILE_GENERATED state guard, deferred content loading, and batched participant resolution. No functional issues found.
apps/sim/connectors/google-meet/meta.ts Client-safe connector metadata with correct OAuth provider reference, config fields, and tag definitions. Follows established meta.ts pattern.
apps/sim/connectors/google-meet/index.ts Minimal re-export barrel file, consistent with other connectors in the directory.
apps/sim/connectors/registry.server.ts Adds google_meet to the server registry in alphabetical order, consistent with surrounding entries.
apps/sim/connectors/registry.ts Adds google_meet to the client-safe meta registry, matching the server registry entry.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
    participant SE as Sync Engine
    participant C as GoogleMeetConnector
    participant API as Meet REST API v2

    SE->>C: listDocuments(accessToken, sourceConfig, cursor)
    C->>API: "GET /conferenceRecords?pageSize=100&filter=..."
    API-->>C: ConferenceRecordsListResponse (stubs, nextPageToken)
    C-->>SE: "ExternalDocumentList (contentDeferred=true stubs)"

    SE->>C: getDocument(accessToken, sourceConfig, externalId)
    C->>API: "GET /conferenceRecords/{id}"
    API-->>C: ConferenceRecord
    C->>API: "GET /conferenceRecords/{id}/transcripts"
    API-->>C: Transcripts[]
    Note over C: Guard: all transcripts must be FILE_GENERATED
    C->>API: "GET /transcripts/{id}/entries (per transcript, parallel)"
    API-->>C: TranscriptEntry[][]
    C->>API: "GET /participants/{id} (batched, concurrency=5)"
    API-->>C: Participant display names
    C-->>SE: ExternalDocument (formatted transcript text, metadata)
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
    participant SE as Sync Engine
    participant C as GoogleMeetConnector
    participant API as Meet REST API v2

    SE->>C: listDocuments(accessToken, sourceConfig, cursor)
    C->>API: "GET /conferenceRecords?pageSize=100&filter=..."
    API-->>C: ConferenceRecordsListResponse (stubs, nextPageToken)
    C-->>SE: "ExternalDocumentList (contentDeferred=true stubs)"

    SE->>C: getDocument(accessToken, sourceConfig, externalId)
    C->>API: "GET /conferenceRecords/{id}"
    API-->>C: ConferenceRecord
    C->>API: "GET /conferenceRecords/{id}/transcripts"
    API-->>C: Transcripts[]
    Note over C: Guard: all transcripts must be FILE_GENERATED
    C->>API: "GET /transcripts/{id}/entries (per transcript, parallel)"
    API-->>C: TranscriptEntry[][]
    C->>API: "GET /participants/{id} (batched, concurrency=5)"
    API-->>C: Participant display names
    C-->>SE: ExternalDocument (formatted transcript text, metadata)
Loading

Reviews (3): Last reviewed commit: "fix(connectors): only flag Meet listing ..." | Re-trigger Greptile

Comment thread apps/sim/connectors/google-meet/google-meet.ts
Comment thread apps/sim/connectors/google-meet/google-meet.ts
- Only index a meeting once every transcript is FILE_GENERATED, so a
  partial transcript is never stored under an endTime-keyed hash that
  would never refresh
- Sort merged transcript entries by start time to preserve chronology
  across multiple transcripts in one conference
@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cursor review

Comment thread apps/sim/connectors/google-meet/google-meet.ts Outdated
Previously listingCapped was set whenever the fetched count reached
maxMeetings, even when the API returned every record and no next page
existed. That suppressed the sync engine's deletion reconciliation when
the cap happened to equal the true source size. Now flag only when more
pages remain or records were dropped from the page.
@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@greptile

@waleedlatif1

Copy link
Copy Markdown
Collaborator Author

@cursor review

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 412217f. Configure here.

@waleedlatif1 waleedlatif1 merged commit 3ebb9a5 into staging Jun 20, 2026
16 checks passed
@waleedlatif1 waleedlatif1 deleted the worktree-add-connectors-survey branch June 20, 2026 06:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant