← back to Cli Printing Press
fix(catalog): Align Google Flights catalog with Flight Goat's current wrapper (#821)
19702102e9e0f7306c406a4519b76d280ef514c1 · 2026-05-09 11:38:06 -0700 · Trevin Chow
* Fix Google Flights catalog wrapper entry
* test(cli): update google flights catalog golden
Files touched
M catalog/google-flights.yamlM internal/catalog/catalog_test.goM skills/printing-press/SKILL.mdM testdata/golden/expected/catalog-list/stdout.txt
Diff
commit 19702102e9e0f7306c406a4519b76d280ef514c1
Author: Trevin Chow <trevin@trevinchow.com>
Date: Sat May 9 11:38:06 2026 -0700
fix(catalog): Align Google Flights catalog with Flight Goat's current wrapper (#821)
* Fix Google Flights catalog wrapper entry
* test(cli): update google flights catalog golden
---
catalog/google-flights.yaml | 19 ++++++-------------
internal/catalog/catalog_test.go | 5 ++++-
skills/printing-press/SKILL.md | 3 +--
testdata/golden/expected/catalog-list/stdout.txt | 4 +++-
4 files changed, 14 insertions(+), 17 deletions(-)
diff --git a/catalog/google-flights.yaml b/catalog/google-flights.yaml
index 6ec45f36..4e5b77a3 100644
--- a/catalog/google-flights.yaml
+++ b/catalog/google-flights.yaml
@@ -1,15 +1,14 @@
name: google-flights
display_name: Google Flights
-description: Flight search via Google Flights. No public API — reached through community-maintained reverse-engineered wrappers.
-category: other
+description: Flight search via Google Flights. No public API — reached through a community-maintained reverse-engineered wrapper.
+category: travel
tier: community
-verified_date: "2026-04-11"
+verified_date: "2026-05-09"
homepage: https://www.google.com/travel/flights
notes: |
- Google does not publish a Flights API. The wrapper libraries below reverse-engineer
+ Google does not publish a Flights API. The wrapper library below reverse-engineers
the internal protobuf protocol that powers the website. Prefer the native Go wrapper
- for printed CLIs so the resulting binary has no Python runtime dependency. Fall back
- to the subprocess option when the Go wrapper is missing coverage the user needs.
+ for printed CLIs so the resulting binary has no Python runtime dependency.
When this entry is returned for a combo-CLI source, the skill should surface the
wrapper options to the user rather than searching for an OpenAPI spec.
@@ -19,10 +18,4 @@ wrapper_libraries:
language: go
license: MIT
integration_mode: native
- notes: Pure Go, importable. Preferred default — produces a single-binary CLI with no runtime deps.
- - name: punitarani/fli
- url: https://github.com/punitarani/fli
- language: python
- license: MIT
- integration_mode: subprocess
- notes: Python library with broader feature coverage (multi-leg, cabin class filters). Invoke as a subprocess and parse JSON output. Requires Python 3.10+ at runtime.
+ notes: Pure Go, importable. Produces a single-binary CLI with no Python runtime dependency.
diff --git a/internal/catalog/catalog_test.go b/internal/catalog/catalog_test.go
index a9b33a53..31fa0691 100644
--- a/internal/catalog/catalog_test.go
+++ b/internal/catalog/catalog_test.go
@@ -409,7 +409,10 @@ func TestEmbeddedCatalogParsesWrapperOnlyEntries(t *testing.T) {
entry, err := LookupFS(catalogfs.FS, "google-flights")
require.NoError(t, err)
assert.True(t, entry.IsWrapperOnly())
- assert.NotEmpty(t, entry.WrapperLibraries)
+ assert.Equal(t, "travel", entry.Category)
+ require.Len(t, entry.WrapperLibraries, 1)
+ assert.Equal(t, "krisukox/google-flights-api", entry.WrapperLibraries[0].Name)
+ assert.Equal(t, "native", entry.WrapperLibraries[0].IntegrationMode)
}
func TestPublicCategoriesExcludeExample(t *testing.T) {
diff --git a/skills/printing-press/SKILL.md b/skills/printing-press/SKILL.md
index 705779d4..a19ca967 100644
--- a/skills/printing-press/SKILL.md
+++ b/skills/printing-press/SKILL.md
@@ -637,7 +637,6 @@ If the catalog has an entry for this API, branch on the entry type:
Present each `wrapper_libraries` entry as a selectable option with language, integration mode, and notes. Example for `google-flights`:
- **krisukox/google-flights-api** (Go, native, MIT) — Pure Go, importable; single-binary CLI with no runtime deps.
-- **punitarani/fli** (Python, subprocess, MIT) — broader feature coverage (multi-leg, cabin class); requires Python 3.10+ at runtime.
Capture the user's choice and record it in `$API_RUN_DIR/state.json` under an `implementation` field: `{ "library": "<name>", "url": "<url>", "integration_mode": "native|subprocess|html-scrape" }`. Phase 3 generation reads this to decide whether to `go get` a wrapper, emit a subprocess shell-out, or emit HTML-scrape code. Skip the spec-analysis step entirely — there is no spec.
@@ -853,7 +852,7 @@ For each named source, run the "When to offer browser-sniff" decision matrix ind
| Source | Spec state | Expected decision |
|--------|------------|-------------------|
| `flightaware` | Documented OpenAPI spec found (53 endpoints, appears complete) | `skip-silent` with reason `spec-complete` |
-| `google-flights` | No official spec, but community wrapper exists (`fli`) | Ask via `AskUserQuestion` → record user's answer |
+| `google-flights` | No official spec, but community wrapper exists (`krisukox/google-flights-api`) | Ask via `AskUserQuestion` → record user's answer |
| `kayak-direct` | No spec, no wrapper, user named this as a key feature | Ask via `AskUserQuestion` → record user's answer |
The marker file for this run would contain three entries. Phase 1.5 would HALT if any were missing.
diff --git a/testdata/golden/expected/catalog-list/stdout.txt b/testdata/golden/expected/catalog-list/stdout.txt
index 0cf40b8c..10d7a026 100644
--- a/testdata/golden/expected/catalog-list/stdout.txt
+++ b/testdata/golden/expected/catalog-list/stdout.txt
@@ -20,7 +20,6 @@ monitoring:
sentry Error tracking and performance monitoring - projects, issues, events, releases
other:
- google-flights Flight search via Google Flights. No public API — reached through community-maintained reverse-engineered wrappers.
kayak Flight, hotel, and car rental aggregator. No public API and no maintained community wrappers — reached by scraping embedded JSON from server-rendered pages.
payments:
@@ -41,3 +40,6 @@ social-and-messaging:
telegram Telegram Bot API for building bots - send messages, manage chats, webhooks, stickers
twilio Communication APIs for SMS, voice, and messaging
+travel:
+ google-flights Flight search via Google Flights. No public API — reached through a community-maintained reverse-engineered wrapper.
+
← 7a1d83ad fix(cli): default cookie HTML scrapes to browser transport (
·
back to Cli Printing Press
·
chore(main): release 4.2.1 (#805) dfb879de →