Repository navigation
Tags
Tags
chore(release): 2.0.0-next.1 [skip ci] ## [2.0.0-next.1](v1.1.0...v2.0.0-next.1) (2026-10-06) ### ⚠ BREAKING CHANGES * **mcp:** MCP tool names are now ga_<operation id> (e.g. ga_report_run); create/update tools need --allow-write and delete/archive tools need --allow-delete plus confirm: true. * admin google-ads-links update requires --ads-personalization-enabled true|false; enum flags are validated (custom-dimensions/metrics scope, measurement unit, key-event counting method, audience clause type, datastream type); numeric flags (--default-value, --membership-duration-days, offsets, limits) must be numbers. * delete and archive commands require --yes when not interactive; JSON output of resource commands is the typed API object. * **skills:** JSON output of resource operations (metadata get, admin *) uses camelCase API fields with typed values instead of table headers; metadata get --type only accepts dims|metrics|all; property IDs must be numeric; Node >=22.12 is required. * **ops:** admin custom-dimensions archive is gated like a delete: it needs --yes (or an interactive confirmation). * **output:** without -f, output is JSON (compact) when stdout is not a TTY or an agent is detected. * **errors:** exit codes are now 0 ok, 1 api/internal, 2 usage, 3 auth, 4 confirmation required, 5 not found, 6 quota. ### Features * **api:** raw gacli api <service> <Method> escape hatch ([9511bf3](9511bf3)) * **auth:** GACLI_ACCESS_TOKEN, ADC fallback, --scopes, auth token, json status ([a1b9db1](a1b9db1)) * **core:** mount operations onto commander with dry-run and delete confirmation ([c27dca3](c27dca3)) * **core:** operation definition and result rendering with --fields projection ([e401c37](e401c37)) * **errors:** typed GacliError with stable exit codes and JSON error output ([9e2f560](9e2f560)) * **mcp:** generate MCP tools from the operation catalogue ([bec5ce5](bec5ce5)) * **mcp:** local Streamable HTTP transport (127.0.0.1, host/origin validated) ([4e4656a](4e4656a)) * **mcp:** MCP SDK v2 server generated from the catalogue, write tools opt-in ([571deab](571deab)) * **ops:** account summaries, annotations, change history, access report, measurement secrets, data retention ([e36df37](e36df37)) * **ops:** admin op helpers and [@file-capable](https://github.com/file-capable) JSON arguments ([45f329c](45f329c)) * **ops:** metric/dimension lists accept comma-separated values ([bf21e2f](bf21e2f)) * **ops:** migrate access-bindings and firebase/google-ads/bigquery links ([ba9196a](ba9196a)) * **ops:** migrate admin accounts, properties and datastreams ([2890eb8](2890eb8)) * **ops:** migrate admin custom-metrics, key-events and audiences ([a7caf4c](a7caf4c)) * **ops:** migrate audience export and recurring ([27004fe](27004fe)) * **ops:** migrate report advanced and metadata check-compatibility ([c49d7cf](c49d7cf)) * **ops:** migrate report run, metadata get and admin custom-dimensions to the operation catalogue ([222dbd0](222dbd0)) * **ops:** property quota, report tasks, chat, conversion spec ([b9c7100](b9c7100)) * **ops:** register phase 4 operations; reject leaf flags that a global option would swallow ([d320f67](d320f67)) * **output:** json by default when piped or driven by an agent; GACLI_FORMAT env ([2b76d49](2b76d49)) * **schema:** gacli schema command and agent-mode help ([ce9970d](ce9970d)) ### Bug Fixes * **auth:** load credentials before building SDK clients ([23f5b1c](23f5b1c)) * **build:** route clustered global flags; SEA bundles its CJS deps; SEA runs for every release ([c2b981f](c2b981f)) * **cli:** --no-color flag now actually disables colour ([6b968c4](6b968c4)) * **cli:** reject unknown --format values; config format can be ndjson and now applies ([25d1f51](25d1f51)) * **config:** reject invalid format in config set; warn and fall back on a stale config value ([29d6b9e](29d6b9e)) * **errors:** classify gRPC errors by code, not unanchored regex; never retry daily quota ([29c18c3](29c18c3)) * gacli api safety and correctness; precise auth hints; positional chat; secrets out of read-only MCP ([505bee0](505bee0)) * **mcp:** no file access from tool arguments, explicit property for deletes, schema caching ([19fb333](19fb333)) * **mcp:** unhandled-rejection backstop; docs: MCP safety model, HTTP listener, auth caching ([adcc97d](adcc97d)) * **ops:** adapt report run --conversion-spec to jsonArg(schema) signature ([191117d](191117d)) * **ops:** funnel step durations, realtime 360 ranges, account prefix in properties list ([3422f08](3422f08)) * **output:** batch reports emit one valid json/ndjson document and one -o file; auth URL to stderr ([5d7f79d](5d7f79d)) * **output:** honour --no-color/NO_COLOR in tables and charts ([c1655d9](c1655d9)) * readable JSON-flag errors, pivot coercion, timestamps and wrappers in tables ([cef6838](cef6838)) * **schema:** describe the -f json envelope, not the internal result shape ([4933cb9](4933cb9)) * **security:** atomic 0600 writes for config/tokens, 0700 config dir, warn on corrupt files ([72e921e](72e921e)) * **startup:** reach enableCompileCache via namespace import so Node 22.0 still starts ([4ab7a6e](4ab7a6e)) ### Performance * **startup:** build-time version hook; load ora and cli-table3 on demand ([15f2bed](15f2bed)) * **startup:** lazy top-level commands; google-auth-library and zod off the startup path ([9be99fa](9be99fa)) * **startup:** lazy-load GA and MCP SDKs, enable compile cache; fix MCP server version drift ([a3c8fcf](a3c8fcf)) ### Refactoring * **core:** transport-neutral operation invocation and JSON envelope ([796f034](796f034)) * every GA command is an operation; remove legacy command and admin service code ([e7bd472](e7bd472)) ### Documentation * 2.0 migration guide, README, contract and skill packages ([9568c0f](9568c0f)) * 2.0-accurate skills, help, README and migration notes ([f7f99f1](f7f99f1)) * build and distribution for 2.0 (bundle, startup budget, next channel, experimental SEA) ([1b404cf](1b404cf)) * correct auth precedence (env var beats config credentials) ([7dada23](7dada23)) * gacli 2.0 modernization spec and phase 0 plan ([2130da2](2130da2)) * generate the operation reference, skills catalogue and llms.txt from the catalogue ([734b205](734b205)) * MCP v2 server (ga_* tools, allow flags, local HTTP) ([2440a78](2440a78)) * phase 1 contract (operations, exit codes, auto format, schema) ([e8268a7](e8268a7)) * phase 1 plan ([a6f61d7](a6f61d7)) * phase 2 layout; --yes on destructive examples ([de4fa51](de4fa51)) * phase 2 plan ([90a29aa](90a29aa)) * phase 3 plan ([7bb376b](7bb376b)) * phase 4 capabilities (auth for agents, quota, tasks, chat, admin additions, gacli api) ([5980d26](5980d26)) * phase 4 plan ([40da2ac](40da2ac)) * phase 5 plan ([85cc348](85cc348)) * phase 6 plan ([a40b5e7](a40b5e7)) * record remaining 2.0 behaviour changes from the migration ([bb944e2](bb944e2)) * refresh contract and memories for phase 0 ([422f9aa](422f9aa)) * **skills:** 2.0 exit codes, confirmation gate and JSON shapes for agents ([8dc1757](8dc1757))
ci(release): tag-only releases on protected main main's branch protection rejects the release bot's commit push, so on main semantic-release now skips the changelog/git plugins: it tags, publishes to npm and creates the GitHub release without committing back. Pre-release branches keep the release commit. The post-publish smoke test detects a release by the v<version> tag on HEAD and waits for npm propagation.
gacli 1.0.1 — first npm publish (@nalyk/gacli) Same code as v1.0.0 plus the npm publish wiring. This is the first version shipped to npm under the @nalyk/gacli scope (the unscoped `gacli` name is held by an unrelated deprecated package on the registry). Install: npm install -g @nalyk/gacli Published with npm provenance attestation. Verify with: npm audit signatures
gacli 1.0.0 Initial release. - Full GA4 Data API surface: report run/batch/pivot/batch-pivot/realtime/funnel/cohort. - Full GA4 Admin API surface: properties, datastreams, custom dimensions/metrics, key events, audiences, access bindings, Firebase/Google Ads/BigQuery links. - Audience export create/get/list/query (with --watch for LROs) and recurring audience list create/get/list. - Auth: OAuth 2.0 (interactive) and service account, with priority chain oauth-tokens > config.credentials > GOOGLE_APPLICATION_CREDENTIALS. - Output: table | json | ndjson | csv | chart, with --output <file> support. - Filters: shorthand (==, !=, =~, !~, >, >=, <, <=) plus JSON. - Retry-with-backoff on gRPC quota (8) and unavailable (14); other codes never retry. - gacli mcp serve — stdio MCP server exposing four read-only tools to any MCP client (Claude Desktop, Cursor, Cline, Zed). - gacli explore — interactive REPL to browse the metric/dimension catalog. - ESM-only TypeScript 6 on Node >= 22, type-safe at the SDK boundary. - 70 tests, CI matrix on Node 22 and 24, CodeQL weekly.