Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
589b456
feat(searchconsole): add url inspection command
laihenyi Sep 7, 2026
617bce8
docs(readme): source URL Inspection in auth services table + credit PR
laihenyi Sep 7, 2026
4223100
docs: correct persistent default account setup
goutamadwant Sep 7, 2026
443c84d
chore: prepare 0.39.2 notes and refresh worker types
steipete Sep 7, 2026
29a5adf
chore(deps): refresh tracking worker types
steipete Sep 8, 2026
2894adb
fix(sheets): preserve zero indices when inserting dimensions
steipete Sep 11, 2026
784a07d
feat(sheets): select a tab in raw API reads
steipete Sep 11, 2026
82233ac
feat(sheets): duplicate tabs within a spreadsheet
steipete Sep 11, 2026
aa949ca
feat(drive): add opt-in file listing sort controls
steipete Sep 11, 2026
113ad2b
feat(slides): delete multiple elements in one batch
steipete Sep 11, 2026
73d0b9e
chore(deps): refresh dependencies and stabilize backup tests
steipete Sep 11, 2026
64452c9
fix(slides): preserve leading style when replacing text
steipete Sep 11, 2026
9a3668a
feat(api): cache Discovery documents with bounded TTL
steipete Sep 11, 2026
208cc26
feat(slides): add paragraph styling for shapes and cells
steipete Sep 11, 2026
1c0912b
chore(tools): update goimports and deadcode to x/tools v0.50.0
steipete Sep 11, 2026
1cf93c6
docs: update 0.39.2 Unreleased notes for API and Slides
steipete Sep 11, 2026
a3065f5
chore: release 0.40.0
steipete Sep 11, 2026
9c076d7
chore: open 0.40.1 unreleased
github-actions[bot] Sep 11, 2026
0b7d1c5
refactor(docs): separate Markdown parsing and remove unused node stat…
steipete Sep 12, 2026
848b1e9
refactor(docs): separate editing operations and refresh architecture …
steipete Sep 12, 2026
fea1662
refactor(auth): remove obsolete forwarding helpers (#1130)
steipete Sep 12, 2026
5d538b6
refactor: retire unused adapters and request placeholders (#1129)
steipete Sep 12, 2026
c4fbece
chore(deps): refresh worker tooling and strengthen CI coverage (#1131)
steipete Sep 12, 2026
8c46d61
feat(searchconsole): add URL inspection with stable error handling
steipete Sep 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .agents/skills/gog-searchconsole/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ gog --readonly --account user@example.com searchconsole --help

| Command | Purpose |
| --- | --- |
| `inspect` | Inspect URL index status (URL Inspection API) |
| `query` | Run a Search Analytics query |
| `searchanalytics` | Search Analytics queries |
| `sitemaps` | List/get/submit/delete sitemaps |
Expand Down
1 change: 1 addition & 0 deletions .agents/skills/gog-sheets/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ gog --readonly --account user@example.com sheets get SHEET_ID 'Sheet1!A1:D20' --
| `datasource` | Manage Connected Sheets data sources and extracts |
| `delete-dimension` | Delete rows or columns while preserving intersecting tables |
| `delete-tab` | Delete a tab/sheet from a spreadsheet (use --force to skip confirmation) |
| `duplicate-tab` | Duplicate a tab within a spreadsheet |
| `export` | Export a Google Sheet (pdf\|xlsx\|csv) via Drive |
| `filter` | Manage basic filters |
| `find-replace` | Find and replace text across a spreadsheet |
Expand Down
1 change: 1 addition & 0 deletions .agents/skills/gog-slides/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ gog --readonly --account user@example.com slides --help
| `locate` | Locate text in shapes and table cells with object IDs and UTF-16 ranges |
| `move-slide` | Move a slide to a zero-based insertion index |
| `new-slide` | Create a native themed slide |
| `paragraph-style` | Set paragraph alignment, spacing, indentation, or direction |
| `raw` | Dump raw Google Slides API response as JSON (Presentations.Get; lossless; for scripting and LLM consumption) |
| `read-slide` | Read slide content: speaker notes, text elements, and images |
| `replace-slide` | Replace an existing slide image from a local file or public URL |
Expand Down
25 changes: 22 additions & 3 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ name: ci

on:
push:
branches:
- main
pull_request:

permissions:
Expand Down Expand Up @@ -34,8 +36,23 @@ jobs:
run: make lint
- name: Deadcode
run: make deadcode
- name: Docs check
run: make docs-check
- name: Docs, skills, and Docker version checks
run: make docs-check agent-skills-check docker-version-check

minimum-go:
runs-on: ubuntu-latest
env:
GOTOOLCHAIN: local
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7.0.0
with:
go-version: "1.26.8"
cache: true
- name: Test minimum supported Go series
run: go test ./...
- name: Build
run: go build ./cmd/gog

worker:
runs-on: ubuntu-latest
Expand All @@ -47,11 +64,13 @@ jobs:
- name: Enable Corepack (pnpm)
run: |
corepack enable
corepack prepare pnpm@11.25.0 --activate
corepack prepare pnpm@11.26.0 --activate
- name: Install dependencies
run: pnpm -C internal/tracking/worker install --frozen-lockfile
- name: Lint
run: pnpm -C internal/tracking/worker lint
- name: Typecheck
run: pnpm -C internal/tracking/worker typecheck
- name: Build
run: pnpm -C internal/tracking/worker build
- name: Test
Expand Down
22 changes: 21 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,26 @@
# Changelog

## 0.39.2 - Unreleased
## 0.40.1 - Unreleased

- Search Console: add `searchconsole inspect` for per-URL index status via the URL Inspection API (coverage state, indexing/page-fetch/robots.txt state, canonical, sitemaps, last crawl time), using the existing `webmasters` OAuth scope. (#1094) — thanks @laihenyi.
- Search Console: preserve permission-denied exit codes when adding API setup or scope guidance. (#1094)
- Dependencies and CI: refresh Google protocol modules and tracking-worker tooling within release-age limits; test the Go 1.26 minimum, check worker types and generated skills, and avoid duplicate pull-request test runs. (#1131)

## 0.40.0 - 2026-09-11

**Highlights:** Preserve Slides styling, format paragraphs, and reuse cached Discovery documents; duplicate or inspect individual spreadsheet tabs and sort Drive files.

- Slides: preserve leading text styling during `insert-text --replace`, including template inheritance, with revision protection and correct empty-target and UTF-16 handling. (#1111, #1122) — thanks @sebsnyk.
- Slides: add `paragraph-style` for shape and table-cell alignment, spacing, indentation, and direction, with explicit field masks and zero-value support. (#1098, #1123) — thanks @sebsnyk.
- API: cache Discovery documents for 24 hours with bounded disk usage, isolated endpoint/version keys, and explicit `--no-cache` bypass; keep API responses and authorization checks uncached. (#1106, #1121) — thanks @gurgeous.
- Sheets: duplicate a tab within its spreadsheet, with an explicit destination name and optional insertion index. (#1102, #1116) — thanks @gurgeous.
- Sheets: filter raw API reads by exact tab title with `--sheet`, including A1-like names and apostrophes, while retaining spreadsheet metadata and the grid-data opt-in. (#1104, #1115) — thanks @gurgeous.
- Drive: add opt-in `ls --sort` and `--order` controls while preserving the existing modification-time default and native pagination. (#1105, #1117) — thanks @gurgeous.
- Slides: delete several page elements in one guarded API batch, retain single-element output compatibility, and document replacing WordArt elements. (#1109) — thanks @sebsnyk.
- Sheets: preserve zero-valued dimension indices so inserting before the first row or column succeeds. (#1107, #1114) — thanks @gurgeous.
- Docs: replace the reserved `default` alias command with the account manager's **Set default** action and explain account-selection precedence. (#1092, #1093) — thanks @gianpaj and @goutamadwant.
- Dependencies: refresh Go networking, authentication and cryptography modules and tracking-worker tooling, including the patched Sharp dependency, while retaining Go 1.26 compatibility and the worker's 24-hour release-age policy.
- Tooling: refresh goimports and deadcode to x/tools v0.50.0 while retaining the Go 1.26 minimum. (#1120)

## 0.39.1 - 2026-09-05

Expand Down
7 changes: 4 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ GOIMPORTS := $(TOOLS_DIR)/goimports
GOLANGCI_LINT := $(TOOLS_DIR)/golangci-lint
DEADCODE := $(TOOLS_DIR)/deadcode
TOOLS_STAMP := $(TOOLS_DIR)/.versions
TOOLS_VERSION := gofumpt=v0.11.0;goimports=v0.49.0;golangci-lint=v2.13.2;deadcode=v0.49.0
TOOLS_VERSION := gofumpt=v0.11.0;goimports=v0.50.0;golangci-lint=v2.13.2;deadcode=v0.50.0

# Allow passing CLI args as extra "targets":
# make gogcli -- --help
Expand Down Expand Up @@ -91,9 +91,9 @@ tools:
else \
set -e; \
GOBIN=$(TOOLS_DIR) go install mvdan.cc/gofumpt@v0.11.0; \
GOBIN=$(TOOLS_DIR) go install golang.org/x/tools/cmd/goimports@v0.49.0; \
GOBIN=$(TOOLS_DIR) go install golang.org/x/tools/cmd/goimports@v0.50.0; \
GOBIN=$(TOOLS_DIR) go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.13.2; \
GOBIN=$(TOOLS_DIR) go install golang.org/x/tools/cmd/deadcode@v0.49.0; \
GOBIN=$(TOOLS_DIR) go install golang.org/x/tools/cmd/deadcode@v0.50.0; \
printf '%s\n' "$(TOOLS_VERSION)" > "$(TOOLS_STAMP)"; \
fi

Expand Down Expand Up @@ -164,5 +164,6 @@ ci: pnpm-gate docker-version-check fmt-check lint deadcode test docs-check agent

worker-ci:
@pnpm -C internal/tracking/worker lint
@pnpm -C internal/tracking/worker typecheck
@pnpm -C internal/tracking/worker build
@pnpm -C internal/tracking/worker test
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ binary.
| meet | yes | Meet REST API | `https://www.googleapis.com/auth/meetings.space.created`<br>`https://www.googleapis.com/auth/meetings.space.readonly`<br>`https://www.googleapis.com/auth/meetings.space.settings` | |
| appscript | yes | Apps Script API | `https://www.googleapis.com/auth/script.projects`<br>`https://www.googleapis.com/auth/script.deployments`<br>`https://www.googleapis.com/auth/script.processes` | |
| analytics | yes | Analytics Admin API, Analytics Data API | `https://www.googleapis.com/auth/analytics.readonly` | GA4 account summaries + reporting |
| searchconsole | yes | Search Console API | `https://www.googleapis.com/auth/webmasters` | Search Analytics + sitemap management |
| searchconsole | yes | Search Console API | `https://www.googleapis.com/auth/webmasters` | Search Analytics + sitemap management + URL Inspection |
| adsense | no | AdSense Management API | `https://www.googleapis.com/auth/adsense.readonly` | Consumer OAuth; explicit opt-in with --services adsense; read-only |
| ads | yes | Google Ads API | `https://www.googleapis.com/auth/adwords` | OAuth scope only |
| groups | no | Cloud Identity API | `https://www.googleapis.com/auth/cloud-identity.groups.readonly` | Workspace only |
Expand Down
14 changes: 14 additions & 0 deletions docs/automation.md
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,20 @@ fi

New classifications may be added. Keep a generic non-zero fallback.

## Discovery document cache

`gog api call` and `gog api describe` share a 24-hour on-disk cache of
Discovery documents under the configured cache directory's `discovery`
subdirectory. It keeps at most 32 documents and 64 MiB, evicting the oldest
documents; individual documents are limited to 16 MiB. API versions, endpoint
overrides and service-hosted fallback behavior use separate cache keys.

Pass `--no-cache` to either command to fetch without reading or writing this
cache. Missing, expired or corrupt entries are fetched again. Cache failures
do not prevent network access, and failed fetches are not cached. `api list`
and actual API responses remain uncached; authorization and command-policy
checks still run on every call.

## MCP discovery

MCP uses its standard `tools/list` request for client-side tool discovery. To
Expand Down
7 changes: 5 additions & 2 deletions docs/commands.generated.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ Generated from `gog schema --json`.
- [`gog analytics (ga) report <property> [flags]`](commands/gog-analytics-report.md) - Run a GA4 report (Analytics Data API)
- [`gog api <command> [flags]`](commands/gog-api.md) - Google Discovery APIs and generic method calls
- [`gog api call <api> <version> <method> [flags]`](commands/gog-api-call.md) - Call a Discovery-described API method
- [`gog api describe <api> <version> [<method>]`](commands/gog-api-describe.md) - Describe a Discovery API or method
- [`gog api describe <api> <version> [<method>] [flags]`](commands/gog-api-describe.md) - Describe a Discovery API or method
- [`gog api list [flags]`](commands/gog-api-list.md) - List Google Discovery APIs
- [`gog appscript (script,apps-script) <command> [flags]`](commands/gog-appscript.md) - Google Apps Script
- [`gog appscript (script,apps-script) content (cat) <scriptId>`](commands/gog-appscript-content.md) - Get Apps Script project content
Expand Down Expand Up @@ -574,6 +574,7 @@ Generated from `gog schema --json`.
- [`gog schema (help-json,helpjson) [<command> ...] [flags]`](commands/gog-schema.md) - Machine-readable command/flag schema
- [`gog search (find) <query> ... [flags]`](commands/gog-search.md) - Search Drive files (alias for 'drive search')
- [`gog searchconsole (gsc,search-console,webmasters) <command> [flags]`](commands/gog-searchconsole.md) - Google Search Console
- [`gog searchconsole (gsc,search-console,webmasters) inspect <siteUrl> <url> [flags]`](commands/gog-searchconsole-inspect.md) - Inspect URL index status (URL Inspection API)
- [`gog searchconsole (gsc,search-console,webmasters) query (report) <siteUrl> [flags]`](commands/gog-searchconsole-query.md) - Run a Search Analytics query
- [`gog searchconsole (gsc,search-console,webmasters) searchanalytics (analytics) <command>`](commands/gog-searchconsole-searchanalytics.md) - Search Analytics queries
- [`gog searchconsole (gsc,search-console,webmasters) searchanalytics (analytics) query (run) <siteUrl> [flags]`](commands/gog-searchconsole-searchanalytics-query.md) - Run a Search Analytics query
Expand Down Expand Up @@ -621,6 +622,7 @@ Generated from `gog schema --json`.
- [`gog sheets (sheet) datasource (data-source,data-sources,connected-sheets) update <spreadsheetId> <dataSourceId> [flags]`](commands/gog-sheets-datasource-update.md) - Update one BigQuery Connected Sheets data source
- [`gog sheets (sheet) delete-dimension (delete-dim) --dimension=STRING <spreadsheetId> <rangeOrSheet> [flags]`](commands/gog-sheets-delete-dimension.md) - Delete rows or columns while preserving intersecting tables
- [`gog sheets (sheet) delete-tab (delete-sheet) <spreadsheetId> <tabName>`](commands/gog-sheets-delete-tab.md) - Delete a tab/sheet from a spreadsheet (use --force to skip confirmation)
- [`gog sheets (sheet) duplicate-tab <spreadsheetId> <sourceTab> <newName> [flags]`](commands/gog-sheets-duplicate-tab.md) - Duplicate a tab within a spreadsheet
- [`gog sheets (sheet) export (download,dl) <spreadsheetId> [flags]`](commands/gog-sheets-export.md) - Export a Google Sheet (pdf|xlsx|csv) via Drive
- [`gog sheets (sheet) filter (filters,basic-filter,basic-filters) <command>`](commands/gog-sheets-filter.md) - Manage basic filters
- [`gog sheets (sheet) filter (filters,basic-filter,basic-filters) set (create,add) <spreadsheetId> <range>`](commands/gog-sheets-filter-set.md) - Set a basic filter on a range; replacing an existing filter requires confirmation (or --force)
Expand Down Expand Up @@ -680,7 +682,7 @@ Generated from `gog schema --json`.
- [`gog slides (slide) element alt-text <presentationId> <objectId> [flags]`](commands/gog-slides-element-alt-text.md) - Set or clear element accessibility text
- [`gog slides (slide) element create-line <presentationId> <slideId> [flags]`](commands/gog-slides-element-create-line.md) - Create a native line on a slide
- [`gog slides (slide) element create-shape <presentationId> <slideId> [flags]`](commands/gog-slides-element-create-shape.md) - Create a native shape on a slide
- [`gog slides (slide) element delete (rm) <presentationId> <objectId>`](commands/gog-slides-element-delete.md) - Delete one page element
- [`gog slides (slide) element delete (rm) <presentationId> <objectId> ...`](commands/gog-slides-element-delete.md) - Delete one or more page elements
- [`gog slides (slide) element group <presentationId> <objectId> ... [flags]`](commands/gog-slides-element-group.md) - Group two or more elements
- [`gog slides (slide) element style <presentationId> <objectId> [flags]`](commands/gog-slides-element-style.md) - Style a shape fill/outline or a line
- [`gog slides (slide) element transform (move,resize,rotate) <presentationId> <objectId> [flags]`](commands/gog-slides-element-transform.md) - Move, resize, rotate, or replace an element transform
Expand All @@ -695,6 +697,7 @@ Generated from `gog schema --json`.
- [`gog slides (slide) locate (find-element) <presentationId> <text> [flags]`](commands/gog-slides-locate.md) - Locate text in shapes and table cells with object IDs and UTF-16 ranges
- [`gog slides (slide) move-slide --to-index=TO-INDEX <presentationId> <slideId>`](commands/gog-slides-move-slide.md) - Move a slide to a zero-based insertion index
- [`gog slides (slide) new-slide <presentationId> [flags]`](commands/gog-slides-new-slide.md) - Create a native themed slide
- [`gog slides (slide) paragraph-style <presentationId> <objectId> [flags]`](commands/gog-slides-paragraph-style.md) - Set paragraph alignment, spacing, indentation, or direction
- [`gog slides (slide) raw <presentationId> [flags]`](commands/gog-slides-raw.md) - Dump raw Google Slides API response as JSON (Presentations.Get; lossless; for scripting and LLM consumption)
- [`gog slides (slide) read-slide <presentationId> <slideId> [flags]`](commands/gog-slides-read-slide.md) - Read slide content: speaker notes, text elements, and images
- [`gog slides (slide) replace-slide <presentationId> <slideId> [<image>] [flags]`](commands/gog-slides-replace-slide.md) - Replace an existing slide image from a local file or public URL
Expand Down
7 changes: 5 additions & 2 deletions docs/commands/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Every `gog` command has a generated docs page. The source of truth is the live CLI schema; run `make docs-commands` after changing command names, flags, help text, aliases, or arguments.

Generated pages: 766.
Generated pages: 769.

## Top-level Commands

Expand Down Expand Up @@ -628,6 +628,7 @@ Generated pages: 766.
- [gog schema](gog-schema.md) - Machine-readable command/flag schema
- [gog search](gog-search.md) - Search Drive files (alias for 'drive search')
- [gog searchconsole](gog-searchconsole.md) - Google Search Console
- [gog searchconsole inspect](gog-searchconsole-inspect.md) - Inspect URL index status (URL Inspection API)
- [gog searchconsole query](gog-searchconsole-query.md) - Run a Search Analytics query
- [gog searchconsole searchanalytics](gog-searchconsole-searchanalytics.md) - Search Analytics queries
- [gog searchconsole searchanalytics query](gog-searchconsole-searchanalytics-query.md) - Run a Search Analytics query
Expand Down Expand Up @@ -675,6 +676,7 @@ Generated pages: 766.
- [gog sheets datasource update](gog-sheets-datasource-update.md) - Update one BigQuery Connected Sheets data source
- [gog sheets delete-dimension](gog-sheets-delete-dimension.md) - Delete rows or columns while preserving intersecting tables
- [gog sheets delete-tab](gog-sheets-delete-tab.md) - Delete a tab/sheet from a spreadsheet (use --force to skip confirmation)
- [gog sheets duplicate-tab](gog-sheets-duplicate-tab.md) - Duplicate a tab within a spreadsheet
- [gog sheets export](gog-sheets-export.md) - Export a Google Sheet (pdf|xlsx|csv) via Drive
- [gog sheets filter](gog-sheets-filter.md) - Manage basic filters
- [gog sheets filter set](gog-sheets-filter-set.md) - Set a basic filter on a range; replacing an existing filter requires confirmation (or --force)
Expand Down Expand Up @@ -734,7 +736,7 @@ Generated pages: 766.
- [gog slides element alt-text](gog-slides-element-alt-text.md) - Set or clear element accessibility text
- [gog slides element create-line](gog-slides-element-create-line.md) - Create a native line on a slide
- [gog slides element create-shape](gog-slides-element-create-shape.md) - Create a native shape on a slide
- [gog slides element delete](gog-slides-element-delete.md) - Delete one page element
- [gog slides element delete](gog-slides-element-delete.md) - Delete one or more page elements
- [gog slides element group](gog-slides-element-group.md) - Group two or more elements
- [gog slides element style](gog-slides-element-style.md) - Style a shape fill/outline or a line
- [gog slides element transform](gog-slides-element-transform.md) - Move, resize, rotate, or replace an element transform
Expand All @@ -749,6 +751,7 @@ Generated pages: 766.
- [gog slides locate](gog-slides-locate.md) - Locate text in shapes and table cells with object IDs and UTF-16 ranges
- [gog slides move-slide](gog-slides-move-slide.md) - Move a slide to a zero-based insertion index
- [gog slides new-slide](gog-slides-new-slide.md) - Create a native themed slide
- [gog slides paragraph-style](gog-slides-paragraph-style.md) - Set paragraph alignment, spacing, indentation, or direction
- [gog slides raw](gog-slides-raw.md) - Dump raw Google Slides API response as JSON (Presentations.Get; lossless; for scripting and LLM consumption)
- [gog slides read-slide](gog-slides-read-slide.md) - Read slide content: speaker notes, text elements, and images
- [gog slides replace-slide](gog-slides-replace-slide.md) - Replace an existing slide image from a local file or public URL
Expand Down
1 change: 1 addition & 0 deletions docs/commands/gog-api-call.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ gog api call <api> <version> <method> [flags]
| `-h`<br>`--help` | `kong.helpFlag` | | Show context-sensitive help. |
| `--home` | `string` | | Override gogcli config/data/state/cache root (equivalent to GOG_HOME) |
| `-j`<br>`--json`<br>`--machine` | `bool` | false | Output JSON to stdout (best for scripting) |
| `--no-cache` | `bool` | | Fetch the Discovery document without reading or writing the 24-hour disk cache |
| `--no-input`<br>`--non-interactive`<br>`--noninteractive` | `bool` | | Never prompt; fail instead (useful for CI) |
| `--params` | `string` | {} | JSON object of path and query parameters |
| `-p`<br>`--plain`<br>`--tsv` | `bool` | false | Output stable, parseable text to stdout (TSV; no colors) |
Expand Down
Loading