feat(google): Maps Pollen/Solar, Custom Search expansion, and live-API fixes across Google integrations#5113
Conversation
…oups/Contacts/Slides New capability: - Google Maps: add Pollen Forecast and Solar Potential tools (API-key, google_cloud BYOK) - Google Custom Search: add start/dateRestrict/fileType/safe/searchType/siteSearch/ siteSearchFilter/lr/gl/sort params, htmlTitle/htmlSnippet/formattedUrl/mime/fileFormat/ cacheId/image result fields, and nextPageStartIndex pagination Fixes (validated against live API docs): - Google Ads: bump all tools from sunset v19 to v24 - Google Groups: forward OAuth credential under oauthCredential (was dropping token in 11 ops), forward all update_settings fields, JSON.stringify update_settings/add_alias bodies - Google Contacts: include required metadata.sources[].etag in updateContact body (fixed 400) - Google Slides: remove unsupported GIF thumbnail mimeType (API only allows PNG) - Google Sheets: wire delete_rows/delete_sheet/delete_spreadsheet into the V2 block - Google Custom Search: throw on API error responses instead of returning empty success; num optional + Number-coerced; pagemap typed unknown
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
PR SummaryMedium Risk Overview Google Custom Search gains optional advanced query params (pagination, filters, image search), richer result fields, Google Sheets V2 exposes Delete Rows, Delete Sheet, and Delete Spreadsheet in the UI block (tools were already registered). Google Ads endpoints move from sunset v19 to v24. Google Groups passes Integration docs and Reviewed by Cursor Bugbot for commit f978967. Configure here. |
Greptile SummaryThis PR adds two new Google Maps tools (Pollen Forecast, Solar Potential), expands Google Custom Search with ten new parameters and enriched result fields, and fixes a batch of correctness defects found by validating integrations against live API docs.
Confidence Score: 5/5Safe to merge — all changes are backwards-compatible additions or targeted correctness fixes with no removed fields or renamed IDs. The new Pollen and Solar tools are self-contained with proper error handling. Every bug fix (Ads version, Groups credential forwarding, JSON body serialization, Contacts etag, Slides MIME type, Sheets delete-op wiring) addresses a documented real failure, and the changes are consistent with the existing patterns in the codebase. TypeScript compiles cleanly and check:api-validation passes per the PR description. No files require special attention. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
subgraph "New Tools"
P[google_maps_pollen\nPollen Forecast]
S[google_maps_solar\nSolar Potential]
end
subgraph "Expanded Tools"
CS[google_search\nCustom Search\n+10 params, error throwing\nnextPageStartIndex]
end
subgraph "Bug Fixes"
ADS[google_ads/*\nv19 to v24]
GG[google_groups/*\ncredential to oauthCredential\nJSON.stringify bodies]
GC[google_contacts/update\nadd metadata.sources etag]
GS[google_slides/get_thumbnail\nremove GIF mime type]
GSH[google_sheets V2 block\nwire delete_rows/sheet/spreadsheet]
end
subgraph "Block/Registry"
REG[tools/registry.ts\n+pollen, +solar]
MAPS[blocks/google_maps.ts\n+pollen, +solar ops]
SHEETS[blocks/google_sheets.ts\n+delete ops]
GROUPS[blocks/google_groups.ts\noauthCredential fix]
end
P --> REG
S --> REG
P --> MAPS
S --> MAPS
GSH --> SHEETS
GG --> GROUPS
%%{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"}}}%%
flowchart TD
subgraph "New Tools"
P[google_maps_pollen\nPollen Forecast]
S[google_maps_solar\nSolar Potential]
end
subgraph "Expanded Tools"
CS[google_search\nCustom Search\n+10 params, error throwing\nnextPageStartIndex]
end
subgraph "Bug Fixes"
ADS[google_ads/*\nv19 to v24]
GG[google_groups/*\ncredential to oauthCredential\nJSON.stringify bodies]
GC[google_contacts/update\nadd metadata.sources etag]
GS[google_slides/get_thumbnail\nremove GIF mime type]
GSH[google_sheets V2 block\nwire delete_rows/sheet/spreadsheet]
end
subgraph "Block/Registry"
REG[tools/registry.ts\n+pollen, +solar]
MAPS[blocks/google_maps.ts\n+pollen, +solar ops]
SHEETS[blocks/google_sheets.ts\n+delete ops]
GROUPS[blocks/google_groups.ts\noauthCredential fix]
end
P --> REG
S --> REG
P --> MAPS
S --> MAPS
GSH --> SHEETS
GG --> GROUPS
Reviews (4): Last reviewed commit: "fix(google_search): clamp num to 1-10 an..." | Re-trigger Greptile |
The Solar API ImageryQuality enum is HIGH/MEDIUM/BASE (+ UNSPECIFIED) per the live docs; there is no LOW. Selecting "Low" sent requiredQuality=LOW which the API rejects as INVALID_ARGUMENT, and the valid BASE tier was unreachable. Replace LOW with BASE in the tool param/output descriptions, the type union, and the block dropdown.
…r channels Address Greptile review: - Pollen and Solar transformResponse now check !response.ok || data.error (matches the Custom Search fix); a gateway error without an error key in the body no longer returns empty/zeroed output silently. - Pollen color channels use ?? instead of || so a legitimate 0 isn't treated as missing (consistent with the other numeric fields in the file).
|
@greptile |
|
@cursor review |
Address Cursor Bugbot: a non-numeric `days` input parsed to NaN and was forwarded as `days=NaN` (the tool's `?? 1` only catches undefined, not NaN), breaking the forecast call. The block now coerces invalid input to undefined, and the tool defaults to 1 unless `days` is a finite number.
|
@greptile |
|
@cursor review |
…ttings fields Address Cursor Bugbot: - Pollen: clamp days to the documented 1-5 range (truncating fractionals) so 0, negatives, or >5 can't be sent to the API. - Google Groups update_settings: the block has no dedicated settings subblocks, so forwarding name/description from params could leak stale values from create_group/update_group and unintentionally rename the group. Forward only oauthCredential + groupEmail from the block (the tool's own param schema still exposes the settings fields for the agent path).
|
@greptile |
|
@cursor review |
Address Cursor Bugbot: delete_sheet/delete_rows parsed deleteSheetId/startIndex/ endIndex with Number.parseInt but didn't validate, so non-numeric UI input became NaN and was forwarded (the v2 delete tools only reject null/undefined), breaking the batchUpdate. The block now throws a clear error when any of these is not a valid number.
|
@greptile |
|
@cursor review |
Address Cursor Bugbot: num was coerced with Number() but not bounded, so values like 11 or fractionals reached the API and failed. The tool now truncates and clamps num to the documented 1-10 range and only sends a positive integer start, ignoring non-numeric/out-of-range input.
|
@greptile |
|
@cursor review |
There was a problem hiding this comment.
✅ 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 f978967. Configure here.
Summary
Adds new Google Maps capabilities, expands Google Custom Search, and fixes a batch of correctness issues found by validating every Google integration against the live API docs.
New capability
google_cloudBYOK; same auth path as the existing Maps tools).start,dateRestrict,fileType,safe,searchType,siteSearch/siteSearchFilter,lr,gl,sort), new result fields (htmlTitle,htmlSnippet,formattedUrl,mime,fileFormat,cacheId,image), and anextPageStartIndexpagination output.Fixes (validated against live API docs)
v19tov24(every call was failing).oauthCredential(11 ops were silently dropping the token); forward allupdate_settingsfields;JSON.stringifytheupdate_settings/add_aliasbodies.metadata.sources[].etaginupdateContact(was 400ing every update).GIFthumbnail mimeType (the API only allowsPNG).delete_rows/delete_sheet/delete_spreadsheettools into the V2 block (were registered but unreachable from the UI).numis now optional + numeric-coerced;pagemaptyped asunknown.Notes
get_settings/update_settingsrequire theapps.groups.settingsscope, which is not granted; those two operations remain non-functional (pre-existing). No new OAuth scopes are added in this PR.generate-docsfor the affected integrations.Verification
tsc— 0 errorsbun run check:api-validation— passes