From 8fd18b44da66486dd7a48a38653569bd3fe26b32 Mon Sep 17 00:00:00 2001 From: Gav Verma Date: Tue, 24 Mar 2026 19:13:31 -0700 Subject: [PATCH] Stage pre-google-unification plugins --- .agents/plugins/marketplace.json | 48 ++ plugins/google-docs/.app.json | 7 + plugins/google-docs/.codex-plugin/plugin.json | 41 ++ .../google-docs/assets/google-docs-small.svg | 6 + plugins/google-docs/assets/google-docs.png | Bin 0 -> 26317 bytes .../google-docs/skills/google-docs/SKILL.md | 51 +++ .../skills/google-docs/agents/openai.yaml | 7 + .../google-docs/assets/google-docs-small.svg | 7 + .../skills/google-docs/assets/google-docs.svg | 8 + plugins/google-drive-old/.app.json | 7 + .../.codex-plugin/plugin.json | 28 ++ plugins/google-drive-old/assets/app-icon.png | Bin 0 -> 47525 bytes plugins/google-sheets/.app.json | 7 + .../google-sheets/.codex-plugin/plugin.json | 41 ++ .../assets/google-sheets-small.svg | 5 + .../google-sheets/assets/google-sheets.png | Bin 0 -> 29569 bytes .../google-sheets-chart-builder/SKILL.md | 28 ++ .../agents/openai.yaml | 4 + .../references/chart-recipes.md | 425 ++++++++++++++++++ .../google-sheets-formula-builder/SKILL.md | 33 ++ .../agents/openai.yaml | 4 + .../references/formula-patterns.md | 102 +++++ .../skills/google-sheets/SKILL.md | 26 ++ .../skills/google-sheets/agents/openai.yaml | 7 + .../assets/google-sheets-small.svg | 9 + .../google-sheets/assets/google-sheets.svg | 10 + .../references/batch-update-recipes.md | 291 ++++++++++++ plugins/google-slides/.app.json | 7 + .../google-slides/.codex-plugin/plugin.json | 45 ++ plugins/google-slides/assets/app-icon.png | Bin 0 -> 25617 bytes .../SKILL.md | 66 +++ .../agents/openai.yaml | 5 + .../google-slides-template-migration/SKILL.md | 121 +++++ .../agents/openai.yaml | 4 + .../references/migration-playbook.md | 100 +++++ .../references/slide-archetype-mapping.md | 91 ++++ .../google-slides-template-surgery/SKILL.md | 88 ++++ .../agents/openai.yaml | 4 + .../references/batch-update-recipes.md | 166 +++++++ .../references/template-surgery-playbook.md | 81 ++++ .../google-slides-visual-iteration/SKILL.md | 198 ++++++++ .../agents/openai.yaml | 4 + .../skills/google-slides/SKILL.md | 109 +++++ .../skills/google-slides/agents/openai.yaml | 5 + 44 files changed, 2296 insertions(+) create mode 100644 plugins/google-docs/.app.json create mode 100644 plugins/google-docs/.codex-plugin/plugin.json create mode 100644 plugins/google-docs/assets/google-docs-small.svg create mode 100644 plugins/google-docs/assets/google-docs.png create mode 100644 plugins/google-docs/skills/google-docs/SKILL.md create mode 100644 plugins/google-docs/skills/google-docs/agents/openai.yaml create mode 100644 plugins/google-docs/skills/google-docs/assets/google-docs-small.svg create mode 100644 plugins/google-docs/skills/google-docs/assets/google-docs.svg create mode 100644 plugins/google-drive-old/.app.json create mode 100644 plugins/google-drive-old/.codex-plugin/plugin.json create mode 100644 plugins/google-drive-old/assets/app-icon.png create mode 100644 plugins/google-sheets/.app.json create mode 100644 plugins/google-sheets/.codex-plugin/plugin.json create mode 100644 plugins/google-sheets/assets/google-sheets-small.svg create mode 100644 plugins/google-sheets/assets/google-sheets.png create mode 100644 plugins/google-sheets/skills/google-sheets-chart-builder/SKILL.md create mode 100644 plugins/google-sheets/skills/google-sheets-chart-builder/agents/openai.yaml create mode 100644 plugins/google-sheets/skills/google-sheets-chart-builder/references/chart-recipes.md create mode 100644 plugins/google-sheets/skills/google-sheets-formula-builder/SKILL.md create mode 100644 plugins/google-sheets/skills/google-sheets-formula-builder/agents/openai.yaml create mode 100644 plugins/google-sheets/skills/google-sheets-formula-builder/references/formula-patterns.md create mode 100644 plugins/google-sheets/skills/google-sheets/SKILL.md create mode 100644 plugins/google-sheets/skills/google-sheets/agents/openai.yaml create mode 100644 plugins/google-sheets/skills/google-sheets/assets/google-sheets-small.svg create mode 100644 plugins/google-sheets/skills/google-sheets/assets/google-sheets.svg create mode 100644 plugins/google-sheets/skills/google-sheets/references/batch-update-recipes.md create mode 100644 plugins/google-slides/.app.json create mode 100644 plugins/google-slides/.codex-plugin/plugin.json create mode 100644 plugins/google-slides/assets/app-icon.png create mode 100644 plugins/google-slides/skills/google-slides-import-presentation/SKILL.md create mode 100644 plugins/google-slides/skills/google-slides-import-presentation/agents/openai.yaml create mode 100644 plugins/google-slides/skills/google-slides-template-migration/SKILL.md create mode 100644 plugins/google-slides/skills/google-slides-template-migration/agents/openai.yaml create mode 100644 plugins/google-slides/skills/google-slides-template-migration/references/migration-playbook.md create mode 100644 plugins/google-slides/skills/google-slides-template-migration/references/slide-archetype-mapping.md create mode 100644 plugins/google-slides/skills/google-slides-template-surgery/SKILL.md create mode 100644 plugins/google-slides/skills/google-slides-template-surgery/agents/openai.yaml create mode 100644 plugins/google-slides/skills/google-slides-template-surgery/references/batch-update-recipes.md create mode 100644 plugins/google-slides/skills/google-slides-template-surgery/references/template-surgery-playbook.md create mode 100644 plugins/google-slides/skills/google-slides-visual-iteration/SKILL.md create mode 100644 plugins/google-slides/skills/google-slides-visual-iteration/agents/openai.yaml create mode 100644 plugins/google-slides/skills/google-slides/SKILL.md create mode 100644 plugins/google-slides/skills/google-slides/agents/openai.yaml diff --git a/.agents/plugins/marketplace.json b/.agents/plugins/marketplace.json index 704d4bb2..7896c124 100644 --- a/.agents/plugins/marketplace.json +++ b/.agents/plugins/marketplace.json @@ -40,6 +40,30 @@ }, "category": "Productivity" }, + { + "name": "google-docs", + "source": { + "source": "local", + "path": "./plugins/google-docs" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "Productivity" + }, + { + "name": "google-sheets", + "source": { + "source": "local", + "path": "./plugins/google-sheets" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "Productivity" + }, { "name": "slack", "source": { @@ -2828,6 +2852,30 @@ "authentication": "ON_INSTALL" } }, + { + "name": "google-slides", + "source": { + "source": "local", + "path": "./plugins/google-slides" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "Productivity" + }, + { + "name": "google-drive-old", + "source": { + "source": "local", + "path": "./plugins/google-drive-old" + }, + "policy": { + "installation": "AVAILABLE", + "authentication": "ON_INSTALL" + }, + "category": "Productivity" + }, { "name": "hubspot-legacy", "source": { diff --git a/plugins/google-docs/.app.json b/plugins/google-docs/.app.json new file mode 100644 index 00000000..92885b0e --- /dev/null +++ b/plugins/google-docs/.app.json @@ -0,0 +1,7 @@ +{ + "apps": { + "google-docs": { + "id": "connector_4964e3b22e3e427e9b4ae1acf2c1fa34" + } + } +} diff --git a/plugins/google-docs/.codex-plugin/plugin.json b/plugins/google-docs/.codex-plugin/plugin.json new file mode 100644 index 00000000..9bc14d44 --- /dev/null +++ b/plugins/google-docs/.codex-plugin/plugin.json @@ -0,0 +1,41 @@ +{ + "name": "google-docs", + "version": "0.1.0", + "description": "Work with Google Docs using the configured Google Docs app connector.", + "author": { + "name": "OpenAI", + "email": "support@openai.com", + "url": "https://openai.com/" + }, + "homepage": "https://workspace.google.com/products/docs/", + "repository": "https://github.com/openai/plugins", + "license": "MIT", + "keywords": [ + "google-docs", + "documents", + "google" + ], + "skills": "./skills/", + "apps": "./.app.json", + "interface": { + "displayName": "Google Docs", + "shortDescription": "Work with Google Docs", + "longDescription": "Use Google Docs to summarize documents, draft edits, and organize written work through the connected Google Docs app.", + "developerName": "OpenAI", + "category": "Productivity", + "capabilities": [ + "Interactive", + "Write" + ], + "websiteURL": "https://workspace.google.com/products/docs/", + "privacyPolicyURL": "https://policies.google.com/privacy", + "termsOfServiceURL": "https://policies.google.com/terms", + "defaultPrompt": [ + "Summarize document, draft revisions, or organize written" + ], + "brandColor": "#1A73E8", + "composerIcon": "./assets/google-docs-small.svg", + "logo": "./assets/google-docs.png", + "screenshots": [] + } +} diff --git a/plugins/google-docs/assets/google-docs-small.svg b/plugins/google-docs/assets/google-docs-small.svg new file mode 100644 index 00000000..76e52bb4 --- /dev/null +++ b/plugins/google-docs/assets/google-docs-small.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/plugins/google-docs/assets/google-docs.png b/plugins/google-docs/assets/google-docs.png new file mode 100644 index 0000000000000000000000000000000000000000..578f383f9a2afb95d56ecb9f259c2db091dff34b GIT binary patch literal 26317 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%0D+Lq4Pu>ES{pTA@S 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
    =~ssL*IBbkRCW&%fWh?bZ02 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 literal 0 HcmV?d00001 diff --git a/plugins/google-docs/skills/google-docs/SKILL.md b/plugins/google-docs/skills/google-docs/SKILL.md new file mode 100644 index 00000000..f627be7f --- /dev/null +++ b/plugins/google-docs/skills/google-docs/SKILL.md @@ -0,0 +1,51 @@ +--- +name: google-docs +description: Summarize and revise connected Google Docs. Use when the user asks to inspect a doc, review structure, convert notes into prose, plan section-level revisions, or apply edits while preserving heading hierarchy. +--- + +# Google Docs + +## Overview + +Use this skill to turn document content into clear summaries, revision plans, and structured edits. Read the document first, preserve its organization, and distinguish between summarizing, rewriting, and directly editing content. + +## Preferred Deliverables + +- Document briefs that summarize purpose, structure, and missing or weak sections. +- Revision plans that show which headings or sections will change and why. +- Rewritten passages that preserve the surrounding structure and audience. + +## Workflow + +1. Read the document structure before writing. Capture the title, major headings, important sections, and any existing style or organization that should be preserved. +2. Decide whether the request is a summary, a targeted edit, or a broader rewrite. If the scope is unclear, summarize the current state before proposing changes. +3. For larger edits, present a revision plan before applying changes. Make the intended section-level updates easy to review. +4. Preserve the document's structure while drafting. Keep headings, section order, and existing intent unless the user asks for a reorganization. +5. If the user asks for a revision but not direct editing, default to a proposed rewrite or section-by-section plan. +6. Only apply major rewrites or destructive edits when the user has clearly requested them. + +## Write Safety + +- Preserve exact section names, links, dates, and structured content from the source document unless the user asks to change them. +- Treat long-form rewrites, deletions, and restructuring as explicit actions that should be clearly scoped. +- If a request could be satisfied with either comments, a revision plan, or direct edits, state which path you are taking. +- If the document has multiple sections with similar themes, identify the exact target section before editing. + +## Output Conventions + +- Reference headings or section names when summarizing or planning changes. +- Use concise revision plans for multi-section edits before presenting rewritten content. +- When presenting rewrites, label the affected section so the user can compare old and new structure easily. +- Keep rewritten text aligned with the existing audience and purpose unless the user asks to change tone or format. +- When summarizing, lead with the main purpose of the document and then list the most important sections or unresolved gaps. + +## Example Requests + +- "Summarize this project brief and tell me what is still missing before review." +- "Rewrite the executive summary so it is clearer and more concise." +- "Turn these bullet notes into polished prose in the existing document style." +- "Plan the edits needed to make the onboarding doc accurate for the new launch process." + +## Light Fallback + +If document content is missing, say that Google Docs access may be unavailable or pointed at the wrong document and ask the user to reconnect or clarify which document should be used. diff --git a/plugins/google-docs/skills/google-docs/agents/openai.yaml b/plugins/google-docs/skills/google-docs/agents/openai.yaml new file mode 100644 index 00000000..95b437ef --- /dev/null +++ b/plugins/google-docs/skills/google-docs/agents/openai.yaml @@ -0,0 +1,7 @@ +interface: + display_name: "Google Docs" + short_description: "Summarize docs and plan revisions" + icon_small: "./assets/google-docs-small.svg" + icon_large: "./assets/google-docs.png" + brand_color: "#1A73E8" + default_prompt: "Use $google-docs to summarize a document, outline revisions, or rewrite a section." diff --git a/plugins/google-docs/skills/google-docs/assets/google-docs-small.svg b/plugins/google-docs/skills/google-docs/assets/google-docs-small.svg new file mode 100644 index 00000000..ca9a8a12 --- /dev/null +++ b/plugins/google-docs/skills/google-docs/assets/google-docs-small.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/plugins/google-docs/skills/google-docs/assets/google-docs.svg b/plugins/google-docs/skills/google-docs/assets/google-docs.svg new file mode 100644 index 00000000..dbfb29b6 --- /dev/null +++ b/plugins/google-docs/skills/google-docs/assets/google-docs.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/plugins/google-drive-old/.app.json b/plugins/google-drive-old/.app.json new file mode 100644 index 00000000..46fc28a8 --- /dev/null +++ b/plugins/google-drive-old/.app.json @@ -0,0 +1,7 @@ +{ + "apps": { + "google-drive-old": { + "id": "connector_5f3c8c41a1e54ad7a76272c89e2554fa" + } + } +} diff --git a/plugins/google-drive-old/.codex-plugin/plugin.json b/plugins/google-drive-old/.codex-plugin/plugin.json new file mode 100644 index 00000000..b0c16a8b --- /dev/null +++ b/plugins/google-drive-old/.codex-plugin/plugin.json @@ -0,0 +1,28 @@ +{ + "name": "google-drive-old", + "description": "Search and reference files from your Drive.", + "author": { + "name": "OpenAI", + "url": "https://www.google.com/" + }, + "homepage": "https://www.google.com/", + "repository": "https://github.com/openai/plugins", + "license": "MIT", + "keywords": [], + "apps": "./.app.json", + "interface": { + "displayName": "Google Drive old", + "shortDescription": "Search and reference files from your Drive.", + "developerName": "OpenAI", + "category": "Productivity", + "capabilities": [], + "websiteURL": "https://www.google.com/", + "privacyPolicyURL": "https://policies.google.com/privacy", + "defaultPrompt": [ + "Find a Drive doc and summarize the key points" + ], + "composerIcon": "./assets/app-icon.png", + "logo": "./assets/app-icon.png", + "screenshots": [] + } +} diff --git a/plugins/google-drive-old/assets/app-icon.png b/plugins/google-drive-old/assets/app-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..99c56f661fd6ad112f97571ba7da507af3254989 GIT binary patch literal 47525 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 P_@{bJ^J>v$%X|L^&akG9 literal 0 HcmV?d00001 diff --git a/plugins/google-sheets/.app.json b/plugins/google-sheets/.app.json new file mode 100644 index 00000000..68f525ed --- /dev/null +++ b/plugins/google-sheets/.app.json @@ -0,0 +1,7 @@ +{ + "apps": { + "google-sheets": { + "id": "connector_9d7cfa34e6654a5f98d3387af34b2e1c" + } + } +} diff --git a/plugins/google-sheets/.codex-plugin/plugin.json b/plugins/google-sheets/.codex-plugin/plugin.json new file mode 100644 index 00000000..06e91f9a --- /dev/null +++ b/plugins/google-sheets/.codex-plugin/plugin.json @@ -0,0 +1,41 @@ +{ + "name": "google-sheets", + "version": "0.1.0", + "description": "Work with Google Sheets using the configured Google Sheets app connector.", + "author": { + "name": "OpenAI", + "email": "support@openai.com", + "url": "https://openai.com/" + }, + "homepage": "https://workspace.google.com/products/sheets/", + "repository": "https://github.com/openai/plugins", + "license": "MIT", + "keywords": [ + "google-sheets", + "spreadsheets", + "google" + ], + "skills": "./skills/", + "apps": "./.app.json", + "interface": { + "displayName": "Google Sheets", + "shortDescription": "Analyze Google Sheets", + "longDescription": "Use Google Sheets to inspect spreadsheet data, draft formulas, and organize tabular work through the connected Google Sheets app.", + "developerName": "OpenAI", + "category": "Productivity", + "capabilities": [ + "Interactive", + "Write" + ], + "websiteURL": "https://workspace.google.com/products/sheets/", + "privacyPolicyURL": "https://policies.google.com/privacy", + "termsOfServiceURL": "https://policies.google.com/terms", + "defaultPrompt": [ + "Analyze spreadsheet data, suggest formulas, or update" + ], + "brandColor": "#0F9D58", + "composerIcon": "./assets/google-sheets-small.svg", + "logo": "./assets/google-sheets.png", + "screenshots": [] + } +} diff --git a/plugins/google-sheets/assets/google-sheets-small.svg b/plugins/google-sheets/assets/google-sheets-small.svg new file mode 100644 index 00000000..0e34eb18 --- /dev/null +++ b/plugins/google-sheets/assets/google-sheets-small.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/plugins/google-sheets/assets/google-sheets.png b/plugins/google-sheets/assets/google-sheets.png new file mode 100644 index 0000000000000000000000000000000000000000..e0f4fd0885cc97bd22fc3370d6850217a22e70be GIT binary patch literal 29569 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 XvNT5CFRRyv?(8X(^T$6Qb-Mk3M|Y}e literal 0 HcmV?d00001 diff --git a/plugins/google-sheets/skills/google-sheets-chart-builder/SKILL.md b/plugins/google-sheets/skills/google-sheets-chart-builder/SKILL.md new file mode 100644 index 00000000..96129950 --- /dev/null +++ b/plugins/google-sheets/skills/google-sheets-chart-builder/SKILL.md @@ -0,0 +1,28 @@ +--- +name: google-sheets-chart-builder +description: Design, create, and revise Google Sheets charts with better chart-spec recall and editing discipline. Use when the user wants to add a chart to a sheet, choose the right chart type for existing data, repair a broken chart, update a chart's data series, or reposition or resize a chart after creating it. +--- + +# Google Sheets Chart Builder + +Use this skill when the chart itself is the task. + +Read `./references/chart-recipes.md` before the first chart write. The point is to refresh chart request shapes and a few non-obvious API constraints before building or editing. + +## Workflow + +1. Ground the chart in the live sheet first: exact source tab, domain column, series columns, headers, and whether the data is contiguous. +2. Choose the simplest chart type that matches the table shape and user intent. +3. Draft one chart spec first, using a clean anchor position that will not collide with existing content. +4. If the chart needs revision, update the chart spec deliberately rather than trying to patch a tiny nested fragment from memory. +5. Treat chart content changes and chart position changes as separate operations. + +## Output Conventions + +- Name the source sheet and the exact domain and series ranges. +- State the chosen chart type and why it fits the data. +- For edits, state whether you are changing the chart spec, the chart position, or both. + +## References + +- For chart-type heuristics, request-shape reminders, and official Google Sheets docs links, read `./references/chart-recipes.md`. diff --git a/plugins/google-sheets/skills/google-sheets-chart-builder/agents/openai.yaml b/plugins/google-sheets/skills/google-sheets-chart-builder/agents/openai.yaml new file mode 100644 index 00000000..f0e352ef --- /dev/null +++ b/plugins/google-sheets/skills/google-sheets-chart-builder/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "Google Sheets Chart Builder" + short_description: "Build and revise charts with better spec recall" + default_prompt: "Use $google-sheets-chart-builder to create or repair a Google Sheets chart, choose a sensible chart type, and use the right chart request shapes." diff --git a/plugins/google-sheets/skills/google-sheets-chart-builder/references/chart-recipes.md b/plugins/google-sheets/skills/google-sheets-chart-builder/references/chart-recipes.md new file mode 100644 index 00000000..0606cc20 --- /dev/null +++ b/plugins/google-sheets/skills/google-sheets-chart-builder/references/chart-recipes.md @@ -0,0 +1,425 @@ +# Chart Recipes + +Use this file as a chart-spec refresher, not a full charting manual. + +## High-Value API Reminders + +- Official chart samples: https://developers.google.com/workspace/sheets/api/samples/charts +- Official chart spec reference: https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/charts +- Official request reference: https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request + +- Create charts with `addChart`. +- Edit chart content with `updateChartSpec`. +- Move or resize charts with `updateEmbeddedObjectPosition`. +- Delete charts with `deleteEmbeddedObject`. +- Google documents that `updateChartSpec` replaces the chart `spec`; it is not a tiny partial edit surface. +- Google also notes that the API does not expose full control over every chart setting, and some unsupported settings can reset to defaults when edited through the API. + +## Chart Choice Heuristics + +- Use a column or bar chart for discrete category comparisons. +- Use a line chart for trends over an ordered domain, especially time. +- Use a pie chart only for a small number of parts-of-whole values. +- Start with a basic chart unless the user explicitly wants a more specialized chart family. + +## Styling Defaults + +- Always set a meaningful title, and add a subtitle only when it clarifies units, timeframe, or source. +- Prefer one accent color plus muted supporting series instead of the default rainbow palette. +- Use `legendPosition` intentionally. If the series names are obvious or there is only one series, prefer a cleaner layout over a large legend. +- Use data labels only when the chart is sparse enough that labels improve readability instead of adding clutter. +- Avoid 3D styling by default, even when the chart type supports it. +- Give the chart enough size and whitespace to breathe. Clean placement and reasonable dimensions do a lot of the styling work. +- For line charts, use smoothing and point styling only when they improve readability rather than decoration. +- Keep axis titles concise and use them when the metric or unit is not obvious from context. + +## Styling Syntax Reminders + +These are the main styling knobs worth remembering: + +- Chart-level text and defaults live on `ChartSpec`, including `title`, `subtitle`, `titleTextFormat`, `subtitleTextFormat`, `fontName`, `backgroundColorStyle`, and `maximized`. +- Basic chart styling lives mostly on `BasicChartSpec`, including `legendPosition`, `axis[].title`, `lineSmoothing`, and `threeDimensional`. +- Series-level styling lives on `BasicChartSeries`, including `dataLabel`, `colorStyle`, and `pointStyle`. +- Prefer `colorStyle` over deprecated `color` fields when both exist. +- Pie charts have their own styling surface, especially `legendPosition`, `threeDimensional`, and `pieHole`. + +Example chart-level styling: + +```json +{ + "title": "Weekly Active Users", + "subtitle": "Last 12 weeks", + "fontName": "Google Sans", + "titleTextFormat": { + "fontSize": 18, + "bold": true + }, + "subtitleTextFormat": { + "fontSize": 11, + "foregroundColorStyle": { + "rgbColor": { + "red": 0.4, + "green": 0.4, + "blue": 0.4 + } + } + }, + "backgroundColorStyle": { + "rgbColor": { + "red": 1, + "green": 1, + "blue": 1 + } + } +} +``` + +Example basic-chart styling: + +```json +{ + "basicChart": { + "legendPosition": "BOTTOM_LEGEND", + "lineSmoothing": true, + "axis": [ + { + "position": "BOTTOM_AXIS", + "title": "Week" + }, + { + "position": "LEFT_AXIS", + "title": "WAU" + } + ], + "series": [ + { + "colorStyle": { + "rgbColor": { + "red": 0.1, + "green": 0.45, + "blue": 0.9 + } + }, + "dataLabel": { + "type": "DATA" + }, + "pointStyle": { + "shape": "CIRCLE", + "size": 5 + } + } + ] + } +} +``` + +## Source Range Reminders + +- Google documents that chart data comes from a `ChartSourceRange`, whose `sources` are `GridRange` objects. +- For a chart domain or series, exactly one dimension must have length 1. +- If using multiple non-adjacent ranges, Google requires them to stay aligned across domain and series. +- Google documents that if `headerCount` is not set, Sheets may guess the number of header rows. +- Existing chart IDs can be retrieved via `spreadsheets.get` with `fields=sheets(charts)`. + +## Minimal Column Chart Shape + +Use this when you have one category column and one or more numeric series. + +```json +[ + { + "addChart": { + "chart": { + "spec": { + "title": "Monthly Sales", + "basicChart": { + "chartType": "COLUMN", + "legendPosition": "BOTTOM_LEGEND", + "axis": [ + { + "position": "BOTTOM_AXIS", + "title": "Model" + }, + { + "position": "LEFT_AXIS", + "title": "Sales" + } + ], + "domains": [ + { + "domain": { + "sourceRange": { + "sources": [ + { + "sheetId": 123456789, + "startRowIndex": 0, + "endRowIndex": 7, + "startColumnIndex": 0, + "endColumnIndex": 1 + } + ] + } + } + } + ], + "series": [ + { + "series": { + "sourceRange": { + "sources": [ + { + "sheetId": 123456789, + "startRowIndex": 0, + "endRowIndex": 7, + "startColumnIndex": 1, + "endColumnIndex": 2 + } + ] + } + }, + "targetAxis": "LEFT_AXIS" + } + ], + "headerCount": 1 + } + }, + "position": { + "overlayPosition": { + "anchorCell": { + "sheetId": 123456789, + "rowIndex": 0, + "columnIndex": 6 + }, + "offsetXPixels": 0, + "offsetYPixels": 0, + "widthPixels": 720, + "heightPixels": 440 + } + } + } + } + } +] +``` + +## Minimal Line Chart Shape + +Use this for trends over dates or other ordered domains. + +```json +[ + { + "addChart": { + "chart": { + "spec": { + "title": "Weekly Active Users", + "basicChart": { + "chartType": "LINE", + "legendPosition": "BOTTOM_LEGEND", + "domains": [ + { + "domain": { + "sourceRange": { + "sources": [ + { + "sheetId": 123456789, + "startRowIndex": 0, + "endRowIndex": 13, + "startColumnIndex": 0, + "endColumnIndex": 1 + } + ] + } + } + } + ], + "series": [ + { + "series": { + "sourceRange": { + "sources": [ + { + "sheetId": 123456789, + "startRowIndex": 0, + "endRowIndex": 13, + "startColumnIndex": 1, + "endColumnIndex": 2 + } + ] + } + }, + "targetAxis": "LEFT_AXIS" + } + ], + "headerCount": 1 + } + }, + "position": { + "overlayPosition": { + "anchorCell": { + "sheetId": 123456789, + "rowIndex": 0, + "columnIndex": 5 + } + } + } + } + } + } +] +``` + +## Minimal Pie Chart Shape + +Use this only for a small categorical breakdown. + +```json +[ + { + "addChart": { + "chart": { + "spec": { + "title": "Channel Mix", + "pieChart": { + "legendPosition": "RIGHT_LEGEND", + "domain": { + "sourceRange": { + "sources": [ + { + "sheetId": 123456789, + "startRowIndex": 0, + "endRowIndex": 6, + "startColumnIndex": 0, + "endColumnIndex": 1 + } + ] + } + }, + "series": { + "sourceRange": { + "sources": [ + { + "sheetId": 123456789, + "startRowIndex": 0, + "endRowIndex": 6, + "startColumnIndex": 1, + "endColumnIndex": 2 + } + ] + } + }, + "threeDimensional": false + } + }, + "position": { + "overlayPosition": { + "anchorCell": { + "sheetId": 123456789, + "rowIndex": 0, + "columnIndex": 4 + } + } + } + } + } + } +] +``` + +## Update Chart Content + +Use `updateChartSpec` when the chart type, data ranges, title, legend, or axis config should change. + +```json +[ + { + "updateChartSpec": { + "chartId": 9001, + "spec": { + "title": "Weekly Active Users", + "basicChart": { + "chartType": "LINE", + "legendPosition": "BOTTOM_LEGEND", + "domains": [ + { + "domain": { + "sourceRange": { + "sources": [ + { + "sheetId": 123456789, + "startRowIndex": 0, + "endRowIndex": 13, + "startColumnIndex": 0, + "endColumnIndex": 1 + } + ] + } + } + } + ], + "series": [ + { + "series": { + "sourceRange": { + "sources": [ + { + "sheetId": 123456789, + "startRowIndex": 0, + "endRowIndex": 13, + "startColumnIndex": 1, + "endColumnIndex": 2 + } + ] + } + }, + "targetAxis": "LEFT_AXIS" + } + ], + "headerCount": 1 + } + } + } + } +] +``` + +## Move Or Resize A Chart + +Use `updateEmbeddedObjectPosition` separately from chart-spec edits. + +```json +[ + { + "updateEmbeddedObjectPosition": { + "objectId": 9001, + "newPosition": { + "overlayPosition": { + "anchorCell": { + "rowIndex": 4, + "columnIndex": 6 + }, + "offsetXPixels": 40, + "widthPixels": 840, + "heightPixels": 520 + } + }, + "fields": "anchorCell(rowIndex,columnIndex),offsetXPixels,widthPixels,heightPixels" + } + } +] +``` + +## Common Failure Modes + +- Picking a chart type before inspecting the table shape +- Wiring the wrong domain column or mismatching domain and series lengths +- Forgetting `headerCount` and then getting surprising inferred labels +- Treating `updateChartSpec` like a tiny patch instead of a full spec replacement +- Mixing chart-spec rewrites and layout moves into one confusing edit step + +## Official References + +- Chart samples: https://developers.google.com/workspace/sheets/api/samples/charts +- Charts reference: https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/charts +- Requests reference: https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request +- Batch update guide: https://developers.google.com/workspace/sheets/api/guides/batchupdate diff --git a/plugins/google-sheets/skills/google-sheets-formula-builder/SKILL.md b/plugins/google-sheets/skills/google-sheets-formula-builder/SKILL.md new file mode 100644 index 00000000..bf0d0432 --- /dev/null +++ b/plugins/google-sheets/skills/google-sheets-formula-builder/SKILL.md @@ -0,0 +1,33 @@ +--- +name: google-sheets-formula-builder +description: Design, repair, and roll out Google Sheets formulas with better syntax recall and validation discipline. Use when the user wants to add a formula column, fix a broken formula, choose between a row formula and a spill formula, build a lookup or filter formula, or turn repeated logic into a reusable named function. +--- + +# Google Sheets Formula Builder + +Use this skill when the formula itself is the task. + +Read `./references/formula-patterns.md` before drafting the first formula. The point is not to relearn Sheets from scratch. It is to refresh exact syntax and a few high-value function constraints before writing. + +## Workflow + +1. Ground the formula in the live sheet first: exact input columns, target output cell or column, and a few representative rows. +2. Choose the formula shape deliberately: + - row formula when the logic is local to one row and should copy down + - spill formula when one formula should populate a whole output range + - lookup formula when the task is key-to-value retrieval + - filter/query formula when the task is to derive a subset or summary table + - named function only when the same logic is conceptually reusable +3. Draft the formula in one helper cell or a scratch location first. +4. Test on a small representative slice, including likely edge cases. +5. Iterate until the sample output is correct, then roll the formula out to the intended target range. + +## Output Conventions + +- Name the exact target cell or output column. +- Return the final formula exactly as it should be entered. +- If rollout matters, say whether the formula should be filled down, spilled from one anchor cell, or turned into a named function. + +## References + +- For syntax reminders, formula-shape heuristics, and official Google Sheets docs links, read `./references/formula-patterns.md`. diff --git a/plugins/google-sheets/skills/google-sheets-formula-builder/agents/openai.yaml b/plugins/google-sheets/skills/google-sheets-formula-builder/agents/openai.yaml new file mode 100644 index 00000000..2fd28291 --- /dev/null +++ b/plugins/google-sheets/skills/google-sheets-formula-builder/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "Google Sheets Formula Builder" + short_description: "Design and validate formulas before rolling them out" + default_prompt: "Use $google-sheets-formula-builder to design or repair a Google Sheets formula, validate it on a few representative rows, and then roll it out cleanly." diff --git a/plugins/google-sheets/skills/google-sheets-formula-builder/references/formula-patterns.md b/plugins/google-sheets/skills/google-sheets-formula-builder/references/formula-patterns.md new file mode 100644 index 00000000..93c960e6 --- /dev/null +++ b/plugins/google-sheets/skills/google-sheets-formula-builder/references/formula-patterns.md @@ -0,0 +1,102 @@ +# Formula Patterns + +Use this file as a syntax refresher, not a full formulas manual. + +## Formula Shape Heuristics + +- Use a row formula when the logic is evaluated row-by-row and should be copied down. +- Use a spill formula when one anchor cell should populate the whole output region. +- Prefer `XLOOKUP` for straightforward exact lookups when available. +- If using `VLOOKUP`, explicitly pass `FALSE` for exact match behavior. +- Use `FILTER` when the output should be the original rows or columns that satisfy conditions. +- Use a named function when the same formula pattern should be reused semantically, not just copied. +- Use `MAP` with `LAMBDA` when you need per-item transformation logic that would be awkward as a plain spill formula. + +## High-Value Syntax Reminders + +### ARRAYFORMULA + +- Official doc: https://support.google.com/docs/answer/3093275?hl=en +- Google notes that many array formulas automatically expand into neighboring cells, so explicit `ARRAYFORMULA` is not always required. +- Good when one anchor formula should fill an output column. + +Example: + +```gs +=ARRAYFORMULA(IF(A2:A="", "", IF(E2:E>=90, "On track", "At risk"))) +``` + +### FILTER + +- Official doc: https://support.google.com/docs/answer/3093197?hl=en +- Conditions must match the length of the filtered range. +- Google notes that you cannot mix row conditions and column conditions in the same `FILTER`. +- If no values satisfy the conditions, Google returns `#N/A`. + +Example: + +```gs +=FILTER(A2:D, D2:D="Open", A2:A<>"") +``` + +### XLOOKUP + +- Official doc: https://support.google.com/docs/answer/12405947?hl=en +- `lookup_range` must be a single row or column. +- `result_range` should have the same row or column size as the lookup range. +- Use `missing_value` when you want a cleaner fallback than raw `#N/A`. + +Example: + +```gs +=XLOOKUP(A2, Lookup!A:A, Lookup!D:D, "") +``` + +### VLOOKUP + +- Official doc: https://support.google.com/docs/answer/3093318?hl=en +- Google strongly recommends using `FALSE` for `is_sorted` for more predictable exact-match behavior. +- The search key must be in the first column of the lookup range. +- If you need a friendlier fallback, wrap with `IFNA` or `IFERROR`. + +Example: + +```gs +=IFNA(VLOOKUP(A2, Lookup!A:D, 4, FALSE), "") +``` + +### MAP + +- Official doc: https://support.google.com/docs/answer/12568985?hl=en +- The `LAMBDA` must accept exactly as many names as the number of input arrays. +- Each mapped value must resolve to a single value, not another array. +- Useful for per-item transformations that are more expressive than a plain copied formula. + +Example: + +```gs +=MAP(A2:A, LAMBDA(item, JOIN("-", SPLIT(item, ",")))) +``` + +### Named Functions + +- Official doc: https://support.google.com/docs/answer/12504534?hl=en +- Named functions are appropriate when the formula pattern should be reused conceptually across a sheet or across files. +- Google requires placeholder names rather than A1-style references for function arguments. + +## Practical Rollout Pattern + +1. Draft in one helper cell or scratch column. +2. Test on representative rows, including blanks, missing lookups, and unusual values. +3. Decide whether the final rollout should be copy-down, spill-from-anchor, or named-function-based. +4. Only then replace the target formula region. + +## Official References + +- Google Sheets function list: https://support.google.com/docs/table/25273?hl=en +- ARRAYFORMULA: https://support.google.com/docs/answer/3093275?hl=en +- FILTER: https://support.google.com/docs/answer/3093197?hl=en +- XLOOKUP: https://support.google.com/docs/answer/12405947?hl=en +- VLOOKUP: https://support.google.com/docs/answer/3093318?hl=en +- MAP: https://support.google.com/docs/answer/12568985?hl=en +- Named functions: https://support.google.com/docs/answer/12504534?hl=en diff --git a/plugins/google-sheets/skills/google-sheets/SKILL.md b/plugins/google-sheets/skills/google-sheets/SKILL.md new file mode 100644 index 00000000..ed053ed4 --- /dev/null +++ b/plugins/google-sheets/skills/google-sheets/SKILL.md @@ -0,0 +1,26 @@ +--- +name: google-sheets +description: Analyze and edit connected Google Sheets with range precision. Use when the user wants to find a spreadsheet, inspect tabs or ranges, search rows, plan formulas, clean or restructure tables, write concise summaries, or make explicit cell-range updates. +--- + +# Google Sheets + +Use this skill to keep spreadsheet work grounded in the exact spreadsheet, sheet, range, headers, and formulas that matter. + +## Workflow + +1. If the spreadsheet or tab is not already grounded, identify it first and read metadata before deeper reads or writes. +2. Prefer narrow reads and row search over dumping large tabs into context. +3. Ground the task in exact sheet, range, header, and formula context before proposing changes. +4. Before the first write-heavy `batch_update`, read `./references/batch-update-recipes.md` for request-shape recall. +5. Cluster logically related edits into one `batch_update` so the batch is coherent and atomic. Avoid both mega-batches and one-request micro-batches. +6. If the user asks to clean, normalize, or restructure data, summarize the intended table shape before writing. + +## Output Conventions + +- Always reference the spreadsheet, sheet name, and range when describing findings or planned edits. +- For `batch_update` work, use a compact table or list with the request type, target range or sheet, proposed change, and reason. + +## References + +- For raw Sheets write shapes and example `batch_update` bodies, read `./references/batch-update-recipes.md`. diff --git a/plugins/google-sheets/skills/google-sheets/agents/openai.yaml b/plugins/google-sheets/skills/google-sheets/agents/openai.yaml new file mode 100644 index 00000000..4aefb684 --- /dev/null +++ b/plugins/google-sheets/skills/google-sheets/agents/openai.yaml @@ -0,0 +1,7 @@ +interface: + display_name: "Google Sheets" + short_description: "Find sheets, inspect ranges, and plan batch updates" + icon_small: "./assets/google-sheets-small.svg" + icon_large: "./assets/google-sheets.png" + brand_color: "#0F9D58" + default_prompt: "Use $google-sheets to find the right spreadsheet, inspect a range, search rows, or plan an exact batch_update." diff --git a/plugins/google-sheets/skills/google-sheets/assets/google-sheets-small.svg b/plugins/google-sheets/skills/google-sheets/assets/google-sheets-small.svg new file mode 100644 index 00000000..50da7315 --- /dev/null +++ b/plugins/google-sheets/skills/google-sheets/assets/google-sheets-small.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/plugins/google-sheets/skills/google-sheets/assets/google-sheets.svg b/plugins/google-sheets/skills/google-sheets/assets/google-sheets.svg new file mode 100644 index 00000000..73dc0bed --- /dev/null +++ b/plugins/google-sheets/skills/google-sheets/assets/google-sheets.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/plugins/google-sheets/skills/google-sheets/references/batch-update-recipes.md b/plugins/google-sheets/skills/google-sheets/references/batch-update-recipes.md new file mode 100644 index 00000000..48d13132 --- /dev/null +++ b/plugins/google-sheets/skills/google-sheets/references/batch-update-recipes.md @@ -0,0 +1,291 @@ +# Batch Update Recipes + +Use these patterns as copy-and-fill templates. The goal is request-shape recall, not a second copy of the Sheets docs. + +## Rules + +- Each request object must set exactly one request type key. +- Use exact Google field names and structured objects instead of stringified JSON. +- Prefer `sheetId` from `get_spreadsheet_metadata` when building `GridRange`, `GridCoordinate`, or `DimensionRange`. +- For `GridRange`, row and column indexes are zero-based, start-inclusive, and end-exclusive. +- For update-style requests, set a precise `fields` mask. Do not include the root object name in the mask. +- Keep batches logically clustered. Group edits that should succeed or fail together, but do not mix unrelated table rewrites, formatting passes, and structure changes into one mega-batch. + +## Coordinate Templates + +Use these shapes repeatedly: + +```json +{ + "sheetId": 123456789, + "startRowIndex": 0, + "endRowIndex": 10, + "startColumnIndex": 0, + "endColumnIndex": 4 +} +``` + +`GridRange` for rectangular regions. + +```json +{ + "sheetId": 123456789, + "rowIndex": 0, + "columnIndex": 0 +} +``` + +`GridCoordinate` for a single starting cell. + +```json +{ + "sheetId": 123456789, + "dimension": "ROWS", + "startIndex": 1, + "endIndex": 4 +} +``` + +`DimensionRange` for whole rows or columns. + +## High-Signal Request Families + +Reach for these first: + +- Content and formulas: `updateCells`, `appendCells`, `repeatCell`, `copyPaste`, `autoFill` +- Row and column layout: `insertDimension`, `deleteDimension`, `moveDimension`, `updateDimensionProperties`, `autoResizeDimensions` +- Table operations: `sortRange`, `setBasicFilter`, `clearBasicFilter`, `deleteDuplicates`, `trimWhitespace` +- Validation and protection: `setDataValidation`, `addProtectedRange`, `updateProtectedRange`, `deleteProtectedRange` +- Sheet structure: `addSheet`, `deleteSheet`, `duplicateSheet`, `updateSheetProperties` + +For the full request catalog, use the official reference linked below. + +## Write A Fixed Block Of Values Or Formulas + +Use `updateCells` for a known rectangle. This is the most common raw write recipe. + +```json +[ + { + "updateCells": { + "range": { + "sheetId": 123456789, + "startRowIndex": 0, + "endRowIndex": 2, + "startColumnIndex": 0, + "endColumnIndex": 2 + }, + "rows": [ + { + "values": [ + { "userEnteredValue": { "stringValue": "Owner" } }, + { "userEnteredValue": { "stringValue": "Status" } } + ] + }, + { + "values": [ + { "userEnteredValue": { "stringValue": "Alex" } }, + { "userEnteredValue": { "formulaValue": "=IF(B1=\"\",\"Missing\",\"Ready\")" } } + ] + } + ], + "fields": "userEnteredValue" + } + } +] +``` + +## Format A Header Row And Freeze It + +Use `repeatCell` for shared formatting across a range, then `updateSheetProperties` for sheet-level behavior. + +```json +[ + { + "repeatCell": { + "range": { + "sheetId": 123456789, + "startRowIndex": 0, + "endRowIndex": 1 + }, + "cell": { + "userEnteredFormat": { + "backgroundColorStyle": { + "rgbColor": { + "red": 0.12, + "green": 0.47, + "blue": 0.71 + } + }, + "textFormat": { + "bold": true, + "foregroundColorStyle": { + "rgbColor": { + "red": 1, + "green": 1, + "blue": 1 + } + } + } + } + }, + "fields": "userEnteredFormat(backgroundColorStyle,textFormat)" + } + }, + { + "updateSheetProperties": { + "properties": { + "sheetId": 123456789, + "gridProperties": { + "frozenRowCount": 1 + } + }, + "fields": "gridProperties.frozenRowCount" + } + } +] +``` + +## Append New Rows + +Use `appendCells` when the user wants to add new rows after the existing data. + +```json +[ + { + "appendCells": { + "sheetId": 123456789, + "rows": [ + { + "values": [ + { "userEnteredValue": { "stringValue": "2026-03-13" } }, + { "userEnteredValue": { "numberValue": 42 } }, + { "userEnteredValue": { "stringValue": "complete" } } + ] + } + ], + "fields": "userEnteredValue" + } + } +] +``` + +## Resize Or Delete Rows Or Columns + +Use `updateDimensionProperties` for size changes and `deleteDimension` for destructive row or column removal. + +```json +[ + { + "updateDimensionProperties": { + "range": { + "sheetId": 123456789, + "dimension": "COLUMNS", + "startIndex": 0, + "endIndex": 3 + }, + "properties": { + "pixelSize": 180 + }, + "fields": "pixelSize" + } + }, + { + "deleteDimension": { + "range": { + "sheetId": 123456789, + "dimension": "ROWS", + "startIndex": 10, + "endIndex": 12 + } + } + } +] +``` + +## Sort A Table And Turn On A Basic Filter + +Use this for spreadsheet workflows that should behave like a table view instead of manual row shuffling. + +```json +[ + { + "sortRange": { + "range": { + "sheetId": 123456789, + "startRowIndex": 1, + "startColumnIndex": 0, + "endColumnIndex": 5 + }, + "sortSpecs": [ + { + "dimensionIndex": 2, + "sortOrder": "ASCENDING" + } + ] + } + }, + { + "setBasicFilter": { + "filter": { + "range": { + "sheetId": 123456789, + "startRowIndex": 0, + "startColumnIndex": 0, + "endColumnIndex": 5 + } + } + } + } +] +``` + +## Add Dropdown Validation + +Use `setDataValidation` for restricted inputs, including status dropdowns. + +```json +[ + { + "setDataValidation": { + "range": { + "sheetId": 123456789, + "startRowIndex": 1, + "endRowIndex": 200, + "startColumnIndex": 3, + "endColumnIndex": 4 + }, + "rule": { + "condition": { + "type": "ONE_OF_LIST", + "values": [ + { "userEnteredValue": "todo" }, + { "userEnteredValue": "in_progress" }, + { "userEnteredValue": "done" } + ] + }, + "strict": true, + "showCustomUi": true + } + } + } +] +``` + +## Common Failure Modes + +- Confusing `spreadsheets.batchUpdate` with `spreadsheets.values.batchUpdate` +- Stringifying the `requests` array instead of sending structured objects +- Using A1 notation where the request expects `GridRange` or `DimensionRange` +- Forgetting that indexes are zero-based and end-exclusive +- Omitting `fields` on update-style requests +- Mixing too many unrelated operations into one batch + +## Official References + +- Request catalog: https://developers.google.com/workspace/sheets/api/reference/rest/v4/spreadsheets/request +- Sheets API samples index: https://developers.google.com/workspace/sheets/api/samples +- Basic writing samples: https://developers.google.com/workspace/sheets/api/samples/writing +- Basic formatting samples: https://developers.google.com/workspace/sheets/api/samples/formatting +- Row and column samples: https://developers.google.com/workspace/sheets/api/samples/rowcolumn +- Sheet operations samples: https://developers.google.com/workspace/sheets/api/samples/sheet diff --git a/plugins/google-slides/.app.json b/plugins/google-slides/.app.json new file mode 100644 index 00000000..349847f4 --- /dev/null +++ b/plugins/google-slides/.app.json @@ -0,0 +1,7 @@ +{ + "apps": { + "google-slides": { + "id": "connector_6f1ec045b8fa4ced8738e32c7f74514b" + } + } +} diff --git a/plugins/google-slides/.codex-plugin/plugin.json b/plugins/google-slides/.codex-plugin/plugin.json new file mode 100644 index 00000000..c8e313bb --- /dev/null +++ b/plugins/google-slides/.codex-plugin/plugin.json @@ -0,0 +1,45 @@ +{ + "name": "google-slides", + "version": "0.1.0", + "description": "Work with Google Slides decks and import presentation files using the configured Google Slides app connector.", + "author": { + "name": "OpenAI", + "email": "support@openai.com", + "url": "https://openai.com/" + }, + "homepage": "https://workspace.google.com/products/slides/", + "repository": "https://github.com/openai/plugins", + "license": "MIT", + "keywords": [ + "google-slides", + "pptx", + "presentation-import", + "presentations", + "template-migration", + "visual-iteration", + "productivity" + ], + "skills": "./skills/", + "apps": "./.app.json", + "interface": { + "displayName": "Google Slides", + "shortDescription": "Inspect and edit Google Slides decks", + "longDescription": "Use Google Slides to import presentation files, inspect deck structure, polish slide layouts, repair repeated template issues, and migrate deck content onto a company template through the connected Google Slides app.", + "developerName": "OpenAI", + "category": "Productivity", + "capabilities": [ + "Interactive", + "Write" + ], + "websiteURL": "https://workspace.google.com/products/slides/", + "privacyPolicyURL": "https://policies.google.com/privacy", + "termsOfServiceURL": "https://policies.google.com/terms", + "defaultPrompt": [ + "Inspect a deck and clean up slide layouts" + ], + "brandColor": "#F9AB00", + "composerIcon": "./assets/app-icon.png", + "logo": "./assets/app-icon.png", + "screenshots": [] + } +} diff --git a/plugins/google-slides/assets/app-icon.png b/plugins/google-slides/assets/app-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ef4ef4e6466b69a327dc8dd11369d27982c819b0 GIT binary patch literal 25617 zcmeFY`9GBJ8#jCn!bG+RrD#ziTgeg`ZHP*etz={`g%GmM6p<22Xt5QgkR|)aG8081 zlw{wM>}JF;&2~M<^u3?g>-is^`v=LjoyU2s?_)V*PoFYbw|3)N1VPpvH$8d=LHOXm ze25@F{32{tiG*KRUsHR31QA-#{lOql(`4Wx#{Z1TVWhBKZkqeN$Dxyl5TqnQh;?xd z{4El2%r3yn$2}nEqMsXLe97bL#f*{^7X)#MJAU-g*36l#%xw9-g-+=(1oYGRGr&j0lzdf-YVy{>ZT^PFXfM5Hx@MEU&6&J_%l#PVemxR(1B+?)=W0 z{dPzwta@J(M&3WnVami!i zsa9x>T!ZBOH~3KdM|wk5D8qe_F>2A|Iyvi7>t}*Rj8^Wx)B1xjuI_zuo6d0Y_uuaL zH<=*WG4yxQj_|YlaqT|yx+ga`Q0B?%`-emqMiyu9PSt8(BjbZMPb_tebC6NmG7kZ)dWh@Z}X(! z05N*LpVQfO^m`$lc*2Q1)W?=kwyN3pB>Zif!?sP=rC#~jA21B%^w-sCCx2zQ6b$P$ z4!>en+8gVgODOM74qpDY>Dqkwh8pI8wd6dS<6=Xxbxj$;sCYLM$N;u0^tJ0|Nu|-m}aGLzxqHBMg^g{KyJZtbJk3YGL^8%BIR>1aY;%Aj^jjo-XoW%_dY5Xry@kjxa54!@mkUy9o)o zPdJPKcTyO=Pe}*=a{eBc=`qXYrz)6w;p} z7p=b)Rewi!Igi_Fdw4K2`O&wJ2hqQeYuW0#YshEWwCT%4?S$+64+C=e9&Z-W7-n-G z&($6rs{F2qAiv0K5e0kNF|(O*_N*c*>c}b#c4lQSj^l7XS64%`>t2{rM_FmL=z?hru_(+X-XJJThNhpYmmf8 z>~VG_C48HALAc2v`%O>&B4f@qBB=&v^@WA{?I)5Vn&L=g!L%c=2i z@%((9?6Bp&%fC^N{JQS)K0owW{1W9#Z0QOnWa5#8lPwk@8|_Aj?cE+s^}L((rlC~l zw=AJ+sI>ft8OHs`2K3uXI)-}sKhTD#Yfcz{GveY=ctzviE2Zf9^P=NT3z_NBXma;# zsXh9(Cyz?_Y|i|Qe(`;AEP5&!OVtC?8gmfjKsn(XiS`B6-4Yh&zkx%s9wTkMW0A@Z z3b}++*kty{cYM=jG9m z1RGdSyM|t;kI-2O&9wUj$MCUJQXJft684H;18zC`h4OBo_v?Jjm3C((ohy?_M%Ll~s2aEn1tspmA}J?f>j-T9$9>~$aA(cqD=kGwt=D|`wa|e@jY1y5I&nORr*-&G(u<8}N6xV+ zE?8VW$SH7yo(WK5tsJALZckI#3QT&c5PS8SUtzCjXc^)nsT?n4inplCQCA7Gu=x=(eg+hUqy#j5Z|0B~ zvGVbs2Sl@jm%TIx)?jg+%0AVt&r*<@1ao3XyBQM0i*!l@0aDCTw8N0eE?N9jcgIBC zCUUymGcJ*LN$S0I+ir|8up;Czu;TaI9z&^;#m_Pa^9&Pas3WdsJ&4wevI~b`O+4_y z=6fr;tBB3+Wei5%`C^-gSvJ#pRT`%(cSIX_v787yI4(;G84)V+M@zdiJjxjz$F*J< z(AQ+y3n-F@vK7e{5(rU?`=wgeG(oE5nvU~qa&s!%%T=$MDq7}wj%Q9z6>}JtdkVIo zVl&M7+RK>Bb=lA%r(dRC9v=ZU|Z8r4KuL7k)Z0lIy_ByqlQsC$0ygu$QAR9 zQvNjjK*H%5Eba%3j}M2?k}T^PXZDn}_Nnu%__GHS_C6mK^}PdMih?aPT^&MQ=jvC! z&CQ`g`uP~d^fBBy3U_`Fp>}iLhItWIA2i&~n7Lkicx=sjb3ZezMqdOs40>=spFvs* zoV#*$P3w-=-=t+pHj|H#Y&r&vC*2Z3?uRb_F0vUPeZJt$cWqSI-<%ktNNmI)o|(Yn z!TIw0m&FW3h9YU~|T>xedaq*8~0r@2L8%JBg?su;i(=Nk(uX#S%_?Ez@|4!`321A@MAtqTU&v zxO|Dxmon0&jTqzX2SCG~bfED4>BIi7#z;xysFdpRM=5-Mvn@|8wdD|Y)E5DZ!yuiT z4r>ZOgw;|Y&D*dotn^B|9(gN>`Wyf}UE8%=Uu82#{}4Jey3B~Gu!+{^a5)JXG@O)E za9J`VK7dyzP9sQ~a`I`Vw0C@t#%#?>K6G4 zFVrv#r_{w?^C6>qB@tv-j^wr|-%mfv_<9Y?B(l^n^@RTCV!x&$LfxiH6L5 zml$0r<1Q8pFS@Ub~*Lt5CVIr*lwZRN&SB+-m~(OHk z=Ws{H%D+F|XTzg}L3B@HkR2~-8=A!gPt3QvK2r(Y_^>nZpe0Y3Bk;rlc-lU(rPD8j z)u6lX$$6eI^!-0FzXK=J&31@ARgC87gP!>LUPoa6fSi!cGkL+MgN5%+E|FzZ1<&#z zAlj+8KD0KVIQ?Mx4e*=3Yu6w~yP^pFogbHG_a{eHE0SZ#7eRNHYlKT=HpO4W?*gE=W)e-t^*IX!aY}5Rc{_0nJ(AKJmbAV{70FF1I5aQf!1lgGEM5lzUjQk-?#YrFvUa(e^AbRQZRLQK|MlIs~d_Lq; z3P^goC6Ro}rKYSg@V8vE88IgF#&Il?h*^V>&nU{(I;tUQIa>^JRTU(HqENJ7N z`&2@O8s&&>rE1p0Dp1{%iU?T@)-2q!sEE3AmVQqEei5IHB+N)SUHN}+9qm7NBEA&8 zu=w;!JF#;9fj?Io(PkLLclSZPubF+Q$VA!vW)vs*j|hOJ!VpA84~GOqqpl64tREYn zJDWVDw3ZZ*Ri zu0Di)7H;83e+AUB_l9x~gjQ9{p_yYGFar%;V9fTAEi6^G1#tou{sel|SW^0i51HBy zOB|Y_+#tSN#yua1!RUe9WmHsvzlH!;o@_Lo8rj8~RL!421Hj8`2m;Jo?}{LdD3`A^LrU`0;2$hlP$@ppig)Dv}xURgni1VgznR zr-6_YD({&xjwbn4@!92@6H~#GV`0tZSZbzHD>_|cUjO*iZcHFtJ`U6`-*(}2B+gcp zurm1|YT7j6e$7Dr4esO=if}$h6ApE1d)}K*D;rlN=i;RQ?fN@t-kFr;0)q0YYL}De zF;k%{<3f7ZxQ1YK8SLYY1V_4)#{Q(Ku=ZmbgxN$bP|3S(3w|5aMN=++R#$@O-obOb zk28YNaCfwZ#2!4w$z7aE=Pm+-?FQY-c_CfOxg}FgJx6-C-c|r)8UTJYk!K9OwKszu z6f79Nm+Jr}kgV+>I5nE{XTnK(^B?r$<%`TMyD>lVBt}2x@zD>#S^}`v1V&fr@6kHs13^8|E*>ezg{tIctCjOI{zfFQVX14@tya3mT+p_&D-gL9e)T1G%ERg zosEcYKw_GE@pD2Zm7raU4vBqumP*$)1iyF+`_J_g!(({S(Z*D2hrNMlz#QQ3(4`Cs zWOOaW*ZOyBS5RXD343y}cA7F0+CcCLuB&KUIR%S2U4lh6whK{t zI8uV>y?xBg$*V~Q;91T9fA~+*DN=45(iVKH@oWCZl&->sMRYjz#-QG51sdkQMrJ|^LG-AB>r0?!p? z3?jlcT(c2(w%6`qJP2bXVpHV>KG`QJ$a%|!E#Qg?Im(z}h{a^HT&r;d{EG~6iv!Ql>9}*^rW_gCR|@I zBmT!%1)k^~gmY7yOo0V=`;HXm%B9K0RGQ{kpEUA>i;YevBO~$yK>iaTZ%1xNDX07_ zrRF7?Fmc*Q(waU{puO7uylD5UcYZm1c5lpx9k!W-Pu&<|0T|Q6ud858oQ@p?+AFdm#Eppiu+CZkda*ZU>3iI*fW6jKP6oC--`GoZ~&z3`LXjbL6z3* zI!)MdUH(87TbWMr4pY0^u$FkShU_&9j^NFV+n;P}tdk;=C;(0_J6eY2^#=DUY9TYW zw_P&(+6isPf`;L2A}^pF3mZjZGGep^#9*%T!HpAxMTN}WrwQQYLv_y24JLe!Om%;* zzUf@9|7LJt&MpK+@~dQoTnubWai02Tk(#&cQd|B*>|{T#JR{kK*NY2(l^S-5F(a0D zcZ0WcEhspLMTDP$FZkw%WizAtgmzo?IX-FUP==Q23|eo*xQphwYFXcg2NI*5W(aJQ zpBs6%R^R5F!*3}X=UBAVmc221{54oEDKsH9b^>=?BA<6msw~ru)Ulr zFK6oN@_h}tUn!7MC! zu`L=(tYtn{rDX{FF5RZwUn~z2IMO-l6*dgcMn2yRfz5D0g*Wfs#2Nh=h31QMw!dLg z?d&JYlQ+$l(EfC+qq`DULd~xi@bx}UK?+5XWyn<&Lc>)~O4Js8mRs!@oP5Ff=2;%+ ze0~3x@EQ3gI-?XbdEiblDOt3T-@5tO#8-`;OW@6(N>XM&K13_ zGqW57{p}crcmW?y1rf=u#H3 zOFLrB$E0NC17d^uWy1@C?s)6^vt^8BxAm0-2Hmj5JF7+alP2YqgHs-sDBI zs@g0{SoCS4{|*%hP(r@wpW`uL{mKOa3&2l3yaRBDoJG@n{c0m;yQVv;e&$n~8rBXk zK5BC%oU_YiwmkE$^ZaMx$Ab_&a}~*x?kX7V%_2w+RQ5DX!!u|_FXcF@Y)TD-h35C{ zv~(aG&^BDr$^wy?Y!Q0Ft%>g*?M z9Lu7qr$xy)N#^ZHTqy3Zbbg0L%;DSj^c;8!I=~w+B0(FEgOUh0h}|NnPBbgXWqcpG zdS=16U`RRNq*&ruwbUwsLAty6Wp#CmCE}QHNjJio++m|gPS}khx`OS7Ts3`<8*6^x zpd`t8l|rp87*6|;Qzc#_>KM<&F>Rg0W`)uuHIDCAMR5yIYl;OsexApT#R>;OD2^M= zs6~n#-6+&bc$8*)FeSMg zQPC*;I?>|eO#dqQNXTi2fZ;oG<1Pvi#?YTp_1Y)$zSKs9Qud#7NGKmTR!e(8xg(It z>a(j`s;3$RJTDqxO>r}pus6z>h$>|agpYuHCG**SqWe`S@j8hg8QHu#x~M42@p4B+ zwGLj{oi}9@Zt&mv6T8^Wv)RG)Z_g|T87;xTpVh1G)VF?}@9vj9$NZ;Gi`s;DI33kuI;kuom&I)y1#uN=B+v89Mg zBC;CL`jD4|>P;orNoI5vw>d+(k4>#LmNxsUbPVYe*O>X7bh}UnFI2wnD+N{L5jxMV z&qAiqFIxb?oCOpB3D`M6HycxZFo{bG)^ySVb2MSfujmb7F-2`~Q*n7nnTf855Q~w@#ZNn{{t*b$bg~AI=1`gBl zpzU?~RC?vd;fomk?)taNh_>VAk1gdh9j(rc)tw32&hP4E^Mf+(dr{c$>K7{!INJf$X!H!2; zBfW0zyIATmRKj7iF|=5@Ey1=m*e)4a#mhB&zBHgSmQ!aUEGp!iT>bamO-{C}V;9<0 zv+M1`8R44smTbOjaZ+|_c=({j4>S&S>dIm4>?*2fbcdqiS zyI(_Sj4G+~=LfFM^UBA?Y$E9uj`$ACW$8h@yv9~T=C*bGD4pNV!V_Pj`zD?cwEAlf zkn2*7yXNo~3-U@L>{n?=t7|q-to)cuBo58UC)~TtUnPQO_kHHINHZ!PZ_XSLD@lqu zKQc9UqexW!2BR|Uy20WX+y>+%3_Bd|BngiZs;=Zd@vk_dS@$8dz(IZd_fk^ua)|i& z<->$`7tYFewUMML?xYPWUR?<=tV1uTqLdlU4(}kh^0>F@L2LeTO=wGpZ$PNL zUHlgB)?baJm*}o#x0Px&3^dmQ{R0U)jyMrV`wQxZrvZS`SF{vHRIBYh`>P{V=_HXeV8C+j#A!!~qwB`UMH>SI2j zg0ab$$O;SG3v6Uu`Hy5MIeN#Ejn;j~%l-Yc^@-a1jzT0jtfq^{=^(NZY-d#XU`F}| zj=CwGF!ykEj5>ydDw2ce=aK~5NpFN33C%h~PmUzqct;ZE%Q^&Wo%%XS&18gE&Jl`N z%!%h|TM_W*e%3q%q4gcz(>rG(R!G_xFdAlzHZd{+h5UHk>*wCdN1^5#Ote>Gp>Y^6 z8I&-amXfBeF&l8t9ShxVKFp!iIA+NMFrAYnPwlImO;Nv19l3KvkxcX0RZ`j=^W*|0 zQ>~9-v`G#+Ky?^l{UqElA#7+H1ZlS)sJ`3O$qAU9;N)gBy+zMZk+CzP(wX zBgJ9*D4C;^ed-wRlxyRC$7#$L*;%0(@fHSCok7nK&)a~f^mz|-o~4s`%+d4yQxZ36 zV@T4M8v;mdc5s>MpFT(J}iUFG#O2%ChMq888ou8{?xP@D%VgT%- z5!0A4^u*_=;S@@9tVGtGua^T}H%>n9>LGqx^C=0Q^5s8JEXA?^Zy}`~r-o?(=j!)x z_WX|4BU^}%xQV9=dHal`>Vs3X`loD*mNGsi&;U-taf2{_NtJxJ)@QHaYZ^?#Eoa2@ zCPdfOXgThp*fG?hT8*7KNi`$BgEa1wr=n5(=1#q$@W1k&k*x^N@|hb`E?H5iqUJ!x ztGY=y5?_^d6U}31H|1W+L#GNaDzAcv4L3nlD~${fO>008w{bdx;49)WHax<#`HbcvsABmgqyOyvK0Ne|)`f+}!~_^w;dv?7QM8OYFJAyyCC0j{ETL z9@)KPgd2SEhI!`1=2StskDk|^I$R1Uw}N>&DF{h4wM!rK?2~ z)WvmUO?>v$@Fng&Upe&>O+SK(5fD1GC>l!f?{11iw z)7b*1P`k*oc5{_ycnLH!gwR$+R_?s>fD4K5vEybZXq8Q7UzhItm9Zsj4XA==n&psq zT{;aGW`9orFEE!W<6FcRyzHJ(BvL%Jm+tOu@LwtYs)fgd9O%LcsB{F}>UF3S;p`tn z5AR{)<6-aV$;d1%7LzaG6!u1f9I^X)Qn8k_CzRJlTZ9Wb+bKh7JoDg@BnzI~xUUb!RUnot={Xu@qFr*INtqqU(bK?&wWz(1_oAo$4PB z3!vxZ7f3yq7%5D-`BdZ>-iGJ#8UZfA`t<0~C6_2P#g0L!$jG4kV0N`*i_cX=$Zz=e z*Q&E<0!>1=#CX2n#``=!gJG9N8C2k6Ig;cU$=XCjAlOSX`-Y;?WXJI)=7c%R)L#n8 zS_frEah@=rbvq#uM$N@Jlb)OiIX$`2`8o-Om$@&xGzJ=zP-yW9rTOp?Tc3#p#O$3_ zXLaG2F}w~n`(i(@Jms`TIh>I>aAJ@5X>K(OA4|oV=&XXsstogrM8q^_0-`2+3BM1dN!(FU#@@4>14~ABF0M$=`KRB-=dr+UA$wfnv@<>Nr~Ro*xPa z7CY}YPx9IMl=DFuJ@LRA1mP70EgnBB7#QT3HDB08-5 z^C6;{Hou5P@2%%Zm*9CMHDljanrP;!i_4q@D|XY{{1y`c6MTu!_Hg%w-#CW5=HZjT zZp7q`e9W$saI%YD48HqKWs_$HD8HX3-HpR!&}D9;5i=bX;0S*#oN#_uI(OrD9De(- zyio`EN)6Y(wiU|kxQi4=-FWoC<;8i+R0O(K8h4Lh`JsaOk)k;WQR*{DAF8 z9$nyCp1C3`bNiR|X!<0?4VoV2uJ!GfmrvLNA*S$6N&9F>>g7wR1kDEYo!lej;|}eS zjUPQ}?{@LG1+S29KC6HlMkHNboVUaJ9%}CuSOy=M znV$LYCsu8UXUFlh~6(* zM&%kGvvF4lfbUNczXU}G$C9^{y#D6}6|DQzDY(LpfkSkX9IQJrlF+C~{^5u{T@fa) z_G)~f_0Tg2d&l)+H`@y6UPyZOQcyiK>l(NtH7sjV zjI(L-F}g-LXaz0)kI!xZlx$kjXrY;-6UrREZ`1{hyZWwxaOg;{VFNm0&mf%9UmZV+ zE&fejeiITHA%WCE-OKYKnSga?pWn*zzsr`$QrcN^0l#^4^aJrp2S<9{NQC&Q|5HER z)4-8>Li4##C1uq@S}{O6Iy#=u`Zp=iWlLwMpH$kSk)}yOREc|^c4j;rd52ajN zfjfD8cSP2$wxI%T99~s!SMOM-PiJDq8!BOc10nB~t$^Lg{hupJ6%@*5k;H-DZ{&S8 zjSX&vwhjQ7VLn#;W13HTDSP!aPltW_YU{S99`_jD6XwKg1FI^lDx%09=zDn%KN!{Y z2yv0!w`HOMpJV0D)_)K{*J0xD8&|UjYvd<(h?o(-4>vCib;XOoKa-7Ztw<9>Jd8b!bS-15!FzO zES$fvjp`^J!&_#$BESzCXvE8hwqwzQ$v?iK)dZU&KD!b9UF5nK?zDLAQ<5Nu8+)}0h>$6zk?lk9(74%)gK-8t90&3W#2m$x7LFPc?wv`2^%d3@o++% z(~-iNLm!ZIR59)ZLarlL6x`Y2$?%>F8WLZGgZPja(i&~+xV4ib>! zEIH#>2gBn&#}G92i8mT{d1DhTo} zdG?A`f_xV`lV6uSkU=p8BwMSkZgDhj%1mmCa z?)JRjX&y=N4{;WQv3xliOdor-P7$!v4Su3V2MLf>O4%`R7JWaxW z{H^43RG)iP(qn@ZPDkBmh+q;$6fMxHe(>2cl98XAqtHM>G~6n%>?%lOoAYEu+BNX~ z3zj=RVxdc~J1Cg7+Hyo**!jF5YWqu>FL$?o#MP7L#PYp1-ltv+-fv6x;OsJ558-P{ zar?)={KXfdP)tkEG-@!BGYDYOdGe603Z^#VrUADu^WKSeg|`n}frRb?s^w<3>K3AF zBzufTO202DBH%fYHu*v@27}z^79)<2;^Rg~495u9uxl1v9bFPACKq_(@+7jh#4TKD zJ0;xPUUy>Y1K}O6lOGr%!N<8L+qojaN&OHybr$RM)E+CQSvV{JwHJ*RZ$ApJOyL(!Sfw)N#a9W1FMR}J1>lK|9^^{7TZEt}^d30X zoKi}21ore6%8;jEO?JwSl@ptKwZWiF={Tzn$II}+JPD_lug!=8 zS2NaUsZL07B%SoY6Q;UX{V2eAtaZ}EPlw&owoa`pU*d4qf}yy@*TM#7|U zG8NOQgd1JSh!-^YA>(*&ZOgOl5=xKdE#pook&B~Ch3T}dEFB{t^vtu#%R#?QvBj3` z`WO{V%MlV!4)DjwgbyuS9y1g|C#T1+p&k*bgi|b@s`3*PiWa%8G z<2uAZt^8~G>{z};$%>dhf`V$K?%TCU_~~eB=C(0{7=PI^VIgP`a*;=t3&s`>zWTvW zcvXwR5~JNT^5*B;@`2(@n^$pVFHwKeQW@WCfg-m#Z^_95zNv^%hlMS={D^0Y6!h?R zM9Kob7*QA_h)+kMzX9EiZxTUSTvyBdJAX(c29L?3X(LP6}W17ZOWGjDUWsKF>w)IWFr{*sIY8@JI#;_ zAoKkP3G#FJ%~^rVX$T?*x-}|;Jwo?MqLPY##WO7?>f08Yp?P2Cz+=Y{UA_&}iZNCN zIjZY9>WAr>lT&P6OP;vw+p$qhnD!)PMthX>n&t9iWbMzlE*w>pN zf$^9|2MOi2JaIi9B+^VjduN7xq+b>{Z(5E{BwUQt_YaYmPoNSkPceGpwga}FPD9-G zHFNZzBV15m^p1~XzUh}@R~theTCDXK(<4VmeYpu>#Zx^^1)~-)&EsM#sm{ecX40J0 z4q24xc4N~d^v~4ncy!fyJA;6ir(}+*rQ4%N!OK7VbsUYZ$^7pM)+yQW-_0g0^Zwr1 zOtCTaT@+fX<&Rf$+OrR3*Gi}#V7vH51)H~nxst%3^#QN`Kvo)dlpU&aAu2r z7<-p8$rW#TewWevZ|ML0DkQ#&+wgHH^IkBuuP+myKP>d|T$|(Eh0h)<=qJ^A{APvU z7q%6rGoN?y^#ir%e3Rc>mE=(Tw~R$p&rH7EXz6qIkjH%BBYFCYQYMUzBl1FvsQ=s-PHOgx5OvAYgB?wi*}=5XZHBA3V~hRGdE2tM5XPENylK8= zA4`7l=b!|cgO%9;o{Yc*k9wvzMZaqa5){G$8Wye|~=IbYlFBFz5&L)gyuW613z&mf+) zV2O%vj0OuNJgD!@OT4;a__Sa+xZcGWyE-~ecLf_O z_=mjlHOkw**VV<}UOpp)#tvrc z39v2n0rtKQ@;RBg-bj&G3&I>(@$Ays0c)}9rS1}@HNk`)V{A>SOuxKBnE(5jwUBw| z=R)1hx{(mE&{bQW0v4%@3jtlM@q095ds&NUqY|l6?C-oWIvH?Zzsfz zogsAIOb2ad=4XekpQMfR^ex3Yk2uuAX?+G6v3+{@XI zX`VNF@h>jmg`uR=xaEoZ<(h5U+T$#1-JcV03N>aU=xK;;My(E0wCpJCbNZFl`HAuO z)7deae@F38)edE(m#>{VdToGQ1bP#PE_ib2!VZp+VNaaS}gIo;#di*(RBt`GZ zyz{w+wAI<;t6Q_tzP#1(g&i%coY*__F&?ag=BPz^&d*<2e0Hk29*gRCg(5z;oFCY8_DLqqj2!%1lh@ajj+{BI*jBF08etgG>J1&*UdkxO=rakd z^9gx8P7Zj5mucx4i{BHbw<6bm@n&5DkG{3Wc?#!z_UH{ZyL=BD^PGQc zWHOR8L)w{?ByhGHAM{A-U#4#r6|SJtfZh-h5qLb8j5PC-F^UuPLZ_c;GCFuK?l1=bLzRJ$U?FhU`42KKYDv;T6u^xKs+Aa9t_?IVw&3 z4V|9fn?=4|&EU}K^Nu?@g;1lSfG2XQY|Oz8qsa2N?rwu)7BxHJF7PQ*8!ukr0m6p;p; z1t_cm?TaF0;keH)$Bc6@YQQ{%ygO}~a-~Hu3(vjYwskP$%L;}8Ni0Iv1UWpTiY|AV zA>?Y|z^(EPIPz(rM)x*G=a&f`ml?jj6VFW~HH&YDVbRIb1U?3QGI4*TeU>{ON#q6n zuo3=qb6jFb{V`j>4oYR@EZJfn4{?sP3x2II6p5Tp3!k}p42ohU_%+eMs7^2bS7f3f zirj~RgXQR(O2vEH>7t1+D{1slIO^uBUecbXK%QtIuTwAbM3!ni6CcOkt8oH!{fEqH zo(nJ|=z?D-oC;rlBP@4Q5{@PS08}FzNlk5sENf+nJNH5qmL0`Zi*ckUJ$N->3Oj2J zzcn%sWx2^o$;22CiG~Kx{LeG}HpdVxC`%xnp%c4F7I8_O^u`qow_<=y)v=$rj6t{m zKZ^#)dV%jolw?S^&R$-H7qnoM05S59Lf3p>ZC*r;mK@f=w7WI$Pv`wDn|ikIJY?Y} zb!p~Oa{A2p*JoWl-kV;PXikjJ+(y?t{wvTAQ~C-gKc16(mKnQ9VnvG2QsNDS_XwVy zCZ#PeX(p%MP}})T+=886O&s(~m^A|>HJoHlW|^(u)-auu}k&k&XLC-`7(|){ddda;u`g zX%I#HABD=-8N3WNi9Xm#K})9K1wm9uf^(DG{?~0XqW$5opKoJS8q-N@nHt0{F0%J1 z4!eGfz=%R$N^sQ4h8s*{xSb#V?AE0B6_T9uiY)wXs;KW4P`puDqFUzYh?>-_0k zV3W$Y2|MIxLhnfY-#{Boq%lom+btO!YlP=Cl zJwz9%5{A!b3k!Coj`(Y(O+eL{B;J6o>FeQTXCX+HL}Wdug<8GodjV8{eWIwM8g`)A zZ$eJn%P|f%KAQGdp$DC!P+48p7N`!nmhW|ciRvy>S_C0KL+%$rOWFbu1{9Z5J& z$MZL{d9@%5HxiWzkl#w*^+^+L-Ol3Gg0WR3T(g%up$GL({6nfJ*YuGyI#d7OOCUK! zLc47}YkocJJamq^kHHQQ39Y$*kA1z@^MESa3D6nYag=J2P9-@U);4+u>Xk?w6X5P{ z;~08Zay|D17LsKiiF=PfN%cvl5{@m4!5zJqGe?2R-jhU_2 zfZl#2Kti;*Ii(VR!rPX;|DJRia7;^j%fp2l%PE+^T`g>jTLjV#RBIRQ>a(A7gxyTu zw_xTwEKVOkTv5v2|2`9Zr}S?{Y#G!n5{0wLJKQ$I7!vLtSVP-2)TkA>^LB6N?CrTD zgsYwjBcVn1urhROxWmilZW=vaw+Mn9hcqfd&+(ZN6E5Z+2s3u)EkCrLX%@bIJ~(~=#19vDKoN$lfo1!{+Q;N8{PV_e$U`syC*3HHmGF&c z!S&n+pSH3wSn$T3J`ymNos82;8Upb$8kB|Z_ zFo`jF)5oCEu2S!({RCxion=O$D&m}*AGpe7%SU*+joXb9UFJH(kgch{U&ov6)$OMz zhA6G+r}S6?M(VJX!lhdTpA(GWAK=zn92P{U#JS3PoJvV{R6{p#icZi4LO|lk@z1+Y z2%_G;fVS5YSm+TDQ<_XeXYme?eE#|giSdTiHV_)42*jOS zcX$~`?aGp?ETWFQH5~F7lh4`>o+2%onJMf!u$8|0)E?acQS>Aj?ytkW6e!ie#Iq2* z%*8d)ro9$M?E{WW(_27d1yIgyTuHlxZ&au4u3%N&+1eUuyChiJ-Y%*wvc%$EQI1g!E@$H&0> zsDDc-=XHVif4YB0d>{6Fbm1M|(BOCv_8`ffut{F(X$mr)@-QsAm(<266>h*8DZ~1% z?PPREDQC|;s%WAFa9?)sXr=|#;|aX>9r*Ss>LzEJzy4}etq8DZH?T*;iJ$JVo@HN= zamBxAoq`oO3jQWCCrtLrc1#g3)VEIlZyJN&sP}x_sD%}T8Y*KAx5to`EBr`$7rkr8 z7(s7_Y0JkQCqb6)BnD|dxuQNsIufqiH}YN`yR?zNAKXNifN;FJF*SEx1L_yNnRlLx z{G41RcSNBgG`G(v_rU}F{VySk4zFijf^xQjW9vVQ>^y%9cNJ>B&9kyo(Om7@RZ3N0 z?J}anWUWV*KG(6`7CsU=nkfj)_1afAy+OjDh`0;WUzZeEynDd&Ajey@_6VY}Q&x0J zV>sGx#2i6R0Ek+x=&HhI_{wjkj=w%BD&zAi^j*f>%RUOKAfP$ftiWAMS8<=H zBa_WLSn8?aDv1zJ0oa*#DbPg|M#1gMkA8!#NA6F=OgS}u<$3R$$`nH1PJMjB@fw~r z`Va2a=?uPi*XxV_YD}x{y;HyY7H{>h=jk)gz3aA2yjJfZQAuG9xI}QtMn10E#c5|R z&Gbt*{}PR;U3+#Ktx{guHj5F@~Ym9;1=Hnhx}T2D&^wn07cn9neN zg_j#ik(35RW7jPldpk>~u^yR{2FT#Re_c*-xy#~U*w9))q#!X>4bvByQ4x$Ui<~bd zJ_v)04r2t_!jaSwIi_G133e)W3wLB2OQ$)4XNn83`Xm^#8=9FqtsI^y9Q&r3$i0FJQ|i@Jcmc>aLmJ7G!>mBvPp3kXSbt~cF5-ySzANIr%#ZX#Qai-wI>gb&1;HCw;BaIYbG~&DyNi={9{$(N!vP`1T4fJXx00t0?HF$NLvO=nVk$wjgh}^># zs=e}b$*+cyYD6nq;13AsN4lp-?Q;0rrg{{S2!BLRQFTI}a= zXR6M5JXzOyW7xT7dw_-{~v54r1YY< zukcorvD}{h{QucXBj<~3w*OaOuYQ~Guia&L;vf^9Dp&TULt{i~c966fd--Tj^Xf}@ zUpreDN-Asa|9szJjnlK?H9cY}<^Qos=-_z_G%G|q;gmfhwA$+)5j_A!T=_!D1rnnu(HBy$f zR$sJ-*+*&2Ysiptk4<*)w9nD%42E?&^S@tsx&SvrBR90rEaM#Mg?DCkc&BVi7X9KJ z*`E8KnpY?8oBf}6o>Xb=GpYMU?;_|szq4nrdLx^wujw0;R#LaWNp@1nT4p7VHyV!h6Fz5QQ;O1<>gCD0;p@JF*MTDzvhacqI?u%Cgn5q(UV>&vH$gr#gv#&^`}3#Z8B95=a>9hkGD$p@p{lcN61WNL0!NROfdZ2Tp!CEpt6*a_eXj*Vdu~E z1ncL&Y?LrrhbGzsK7N_nju)R$dg+F`voQ?t+ldcLc_NbWy78ePi%G_>7mg?kf=64>>;XEh5rH}&FXzI~H z^y8h`ptSW!%B%ielHI50WA!yT9;EHYMeHS|q8<-6i zvWL`+dY&@Id*tq72M36}SCn9vA5rU2v;V?>!VX7i8L~xZU-nyB*3t=0Evtt1*D*!M zs_OyyJPqGZHiVN}wfWI=J8^ayj5MUu+j#M}1w3XTo^8R>5$}PnU;q4Lc2!B;Sir=b z1fg=_r~&<@4Em|)-eL!9QOV~lep3%j7Pe}ca|SNTW4Y-#`Oo)#kMhTre1_w`sw$mT&UZ7Nud3d)MUTfB{(0s+ zv7MxP*CexW*ko3-<~u(1eR0S0vvdJnZ$-qZ4+{OY5p|4{Kq5OqlaWl?kTigoS)7x< z`{#|%-9JB4ZEsFK$=g#^V#{x|b0*oOWfR!`Qk zNFto1sfZt>B1YiIZ9*2z>mwWYp4WD;+4ro(=4i>%UnNI6ep|$RjR(O2-*V+FyU){= zrLQY%@ciTOq>#t*<$)7<_UxfA)4TW1+(ss5UWa7H<>n*q18TQRS*yvA5Ob3#)yEgw z3mo3^w9kwcQ5M2;nzC4ad;7g7hSgK;$$Ja?BfGnsM}AM~%%2{~#6gHR05T4oJ-RVo z^n+D3KD>m)-rMIrAtnzHR1Go!fF{HfvPAsJ=z$^wx|`FUzdotqqW@1j*ZvRH*2YIf zb5ar=w-`heg;Yairu&h~+bJS3qUfA3A%_7D5xv&`OW?X}kPtmpe&zU|teCk+c8V^1w)1+Y8IZWRju zV`MCQJalRymp>3eFHQzc%s1DS?`h8D3rtrcSFHze9Q4duxL3P4H;Se;YUtA7X&SWR z^8;W>`6@oS3ry8?S0te4j0~!}K`>?f8y2oJlu+uTSO0<@VfE@(^iA{ArXnGcgo}?- zzYPM)7;Q_Jfb8kL{V2$UD~GFBqE#QnTZ*?U&sRF;F3w{AF{Ck?7yi?~jSU^;&0-y3 z88ig$X|EX9FMX< z3Bg!+ui-za6S%}4)qM@W@4%b20OvKDB>A^S*tfdisA6gy)Jg?Wbfef|FbP-RbJmx{ zT7oBy0N?~Tqx7_V%Du+RU(dxstVJn5ENw*{7)nkv=Jv(8YiEB6MbU6komf>JmADo0 zTZ6uaFwJWr-Tx^#&)@z?T&*loc=sn1!vIHWP39^kwX7exnG<|?uPa@X<)%h*ToM1`f82z&0lr_U_MGflX>>-D~53hX3cP5I7v1ftaOdcFz4edG;xw} ze31R4$URp@F>60B?fi~OC3BPqV8R?9VB;KD4R$-zLy&1jP4z4CUmUWfe$a8A zqnjhH?!x*X0LPrTAKD~`sKem5HkR(kPyJ(wE5_6essDwnqrnrCfud|_EE)58;qN97v6^ap{Z8Gs+yH>#ot6(W=FN4Z8qL<=LH=_mICXp}!NQ*MM^L=#tHENNZ zjb+ze(exvf_yO~}g+o8J9|1WOOn@e`!Q>X|$-lK%mW+M47_kbuuOf*(2s&_C5zjWj zN{c|)y^%_&*?}5Wy79e#W2L^J$zG)3g36<>dD!&zxq7mdK1fsTB4~h5Ub`^K4nY@}!M3N`{k)&s}kb#>lL zx&4SC5GnH*VD-!H1>bh|${_J+VrYQE9)kr^EQhcWoKmQ}WW6V`fryo!$(RhaoGdT^ z$Poj^ZJO>N*am)O`afWH#c4mX{%e&~4!MAZYiht8a2}XWlk{t$9I)S1!PfUw-jDnV zdfa)t5tvZ2pvRaFm%gExetHqFU}r5(-3q*R%CdQA9s3k-7TB&RpJ7ZSR2qu~{t)!Sxi?WaJ4F;T#Z zD;#R!QECKsAE^*|6+-+5rfT6<&5#~jYD|Nxf&T^!_m`Ye3AS`P?IT!P7;^x8xbB*F z(O$MnM!Ec1ZJ;0lMFM7Eok-S{h~UTn9ywkD$pR%n{D zy}zvp6jc;m3`K5DupE8_Abw6hAk*$02V=qp+kgk5kN6IXQY4;y0je9mBopV4x_g^t zBoIC};*P*EFt6&qS<$p*P2;uFwC~RzvYI|#tG6-RJW?!4lQzjPpcMonFnH9Hc-c8-Jc zz7cLTIoAiXAahLK1)x;Qo4$*u{j;WDyGm3nm);GVhexYrbIUZxx!UzqWJ}s#i7xJD zBZK2onRbH%L4|?jfU1aVn#7;4I+qia=b946q+US-&a!J@*>iJ{OSOdXQ9mCV`Uh$g zxrbSiAsKGDq?Mf4DpOeDy{5_Gk)X9OknO9mxAEaa^#bD;1JQPvyssNUb<9Vj=wNCU zZGC#s`ir=Tm}^tc8^yCKkW5y?p*GPX_qM9@OVT!q$po^kAFeA8(O`wcP8tk;pK;kt(mJ&+VuD zRvNUKLcxCBjV;T<#y@qARN%$P@=;rUZK4oPMLf^``A@o-4~2ryU%n4n=fmyBI#p$w z++Fd|ulhVZt1QYi-rwSh;dFC^DWIe((@}kCw}m^}L_cnpiGJR#>NV|ofxA9bM9(*c zP1G_sm{g|sRN3TttiZn2%7SOq{Q z>w}p{3CQ0*3pCwXI*q2niXMQ}9Hlq3_`F&xooc6Jj)`(-Ht{Hpp@c0DIpi+n+@cqK zxdo8Pc_dM)eeoWU5V4cK1q1LG>>*A%J3Bu18jp5&0lHkV27p;hFMSARsFU>jyOAm%rwD1h;fc~B& zu~}Od#>x;gj}=ewHnwDc3e~v4Bad4+4TV;nEm$C{vfWJhQ`uQ3C8@ZAe5Io8buxXx zDBE+gV0B@>v|PFdv6_kG_#8WYs9!u~e6v$G!bjM_t*~?F{`u)0 zSXkP{o2RS6_@Sro5G`)`;@1XP#c;H(uqE`^ zgRL?i>egF0x>&K4vt;e&!}hsS%k1KL_bCBR#bKl~u>MV=QGPhdb}v)bSbCe1lc6V(y-x#7Md$YF_6-iEx{>&2yoK?IPyaQqqK{H;xiFW% zz`7N9o4TWAN|-rz*+QdDv>N#O&AylT!gvpDr7>hF}odLLi1e6GK0K7XPq z;5wuW2ugIV0goDUSy0Y@%G4@hRIGpa`!Z99Fc8Kvcz?MQ)BJmkNhzBZKNcRC8(>n4 z9L1kxiPTJ#l}Kh@lh5^U0?);fi?;Jx-QM$bhUVo-e2YXD^{?3%v#_Oa-)d3_FtcHr z1-Vs;k`g;V{rwYskvfo6E_l&&72`Z3f28NpSnE7w5r^4J~O&`I!U`TPj^7TvB)#cdRnix2#s zc&0w3Sk5KtLGr7a6`Sv1EB#XE^UAGip|CzIO67UsSx(#XtnHI*q`RB?)KNg!A`gj# zBNJqi+xA5T0}#G4@P~eW1ec3hj4dw+qNK3thLhCf(4qvHFEsP+{O#V0&ek^JA>=c1 zUn)oR|FHg<8xmx#LBWQOjx$_2@hVRr>B3G1OzjM#`6^CzM&xc@5!Z{{3395~hn_$P-exvj!T zN89<>A)hWBN<+|YBhEg3P28I8weX3cOgBRG2Sxn`Wz8pdg|hFj84UHI;TJc^e%JSW z?Gfcs0((Y^w6vG2_v+d6_E){V=PL#fw$#v;G1AlcH{;bY<;uHGpCqNr5+0v*+sjt0 zP}#}KrtEc>PF2hwteTsdO%;M;boYHee)30l>iDBN*^)|f4Ur{PbvPRQ%HL6g&r7t@B8K5-8AcmnXl~r2;R*-H6;yKZeL4?&i>nW!MYC5Tlk_E z!S*aITHnhqAPJVX`P{wqHurleDVu52u)up6pH{s;Omq221oGrpUvW|X7VlSrbCK{~ zF}w;4m}K4!jvoor~w7-=sWY5$BIfLsz_o7v*%7w1SR z*%Ua%Woa8^kspPe$>S@atdoj|t8GjKk9k9pqaA^W3S>6ZFJ^KDBEVE|Y5iTH{%)OC zpKC1(9h$LBnX<7joP;Z_c8qKDDMvy$W+O@L#m)=*I{pJU@myhJR{~rYhLj*TTwL7& zHrof}IiALJW1Gq91oWp-JmBkL^Vx`fRiz|1tb5t4K@i{VE$ti3m7x?f=L;GAg|*ra z|Iu;xf43u}(ayJzqirh0%?+<@ESP*|W3}}G!*8m!8tK{QMVSt*3K#bFR4i7GOdByQ z^2H%ce15b*mgYt{Z7i#p1Zwp@3%Z>B$b%^nvsK!Zp-79F{wItwn)TinD!RvS_+`J@ z;c@E$*q%3yxV^$Ef^!$y*^qZ!4~K@`!L`G)8kAaKE`UHPxKP$KkZ~dpUVfe|