Skip to content

Releases: brianwestphal/gitgist

v1.2.0

Choose a tag to compare

@github-actions github-actions released this 28 Jul 04:47

Features

  • Diff-grounded release notes. gitgist now reads the range's actual code diff and treats it as the authority for what changed, so a feature buried under chore: tidy up still gets described and claims the code doesn't support get dropped. On by default; --no-diff returns to commit-messages-only summarizing.
  • New antigravity provider (agy -p) — a no-API-key Google backend that supersedes the Gemini CLI, which stopped serving individual tiers on 2026-06-18. It precedes gemini in auto-selection; gemini stays for Code Assist Standard/Enterprise licensees.
  • New openai-api provider — the OpenAI chat-completions API over OPENAI_API_KEY / OPENAI_BASE_URL, with no new runtime dependency.
  • --link-commits makes every bullet cite the commit it came from, linking to the commit page. The URL is derived from the git remote automatically (GitHub, GitLab, Bitbucket, and ssh/scp/https remote forms), or set explicitly with --commit-url '<url>/{hash}'.
  • Project config file. gitgist.config.json (or a gitgist key in package.json) pins exclude, provider, model, maxDiffChars, linkCommits, commitUrl, endpoint, and the fallback settings per repository; explicitly passed flags still win. --no-config skips it.
  • Configurable diff exclusions. --exclude <pathspec> (repeatable) adds to the built-in noise list — lockfiles, build output, vendored deps, generated assets — and --no-default-excludes replaces it entirely. Excluded files still appear in the changed-file list and stat, so nothing changed is invisible to the model.
  • Per-commit attribution. The model now receives each commit's short hash and touched files, so it can group related changes, order them correctly, and attribute work. --no-attribution turns it off.
  • Per-provider diff budgets. Each backend advertises how much diff it can absorb — ~200k chars for the hosted APIs, ~120k for the agent CLIs, 4k for Apple's on-device model — instead of one fixed cap. --max-diff-chars still overrides.

Bug Fixes

  • --model is now honoured by every provider. claude-cli was silently discarding it and running the CLI's default model; local now puts the requested model ahead of its config and environment defaults.
  • CLI-backed providers spawn in the repository --cwd names rather than gitgist's own working directory, so gitgist --cwd <repo> --provider codex works from outside a repo.
  • The gemini provider passes --skip-trust, so headless runs no longer fail with exit 55 in untrusted workspaces.
  • Failures against OpenAI-compatible endpoints report the real cause — a timeout now says it timed out instead of claiming the server was unreachable — and local models get a much longer generation budget.
  • Hash citations are now stripped from output structurally rather than only being discouraged in the prompt, so weaker backends can no longer append a hash to every bullet unless --link-commits asked for it.
  • The model no longer emits "carried over / dedupe against the draft above" meta sections when a CHANGELOG.md Unreleased entry is part of the input.
  • The diff budget is allocated fairly across changed files instead of first-come in path order, so alphabetically-late source files are no longer starved by scaffolding at the top of the tree.
  • The working-tree path (--staged / --working) now uses the same configurable budget and noise filtering as the commit-range path, instead of a separate hardcoded 8000-char cap with no filtering.

API

  • The public API surface grew considerably: parseArgs / USAGE / CliArgs, the config loaders (loadConfig, parseConfig, applyConfig), the new git helpers (readRangeDiff, readCommitFiles, detectCommitUrl, commitUrlFromRemote, DEFAULT_EXCLUDES, buildExcludePathspecs), prompt pieces (rangeDiffToMaterial, stripUnrequestedHashes, ATTRIBUTION_RULES, buildCommitLinkRules, the shared rule blocks), and the new provider exports are all importable.
  • PROVIDER_NAMES is exported as a runtime array alongside the ProviderName type.
  • describeFetchFailure, isAbort, and defaultFetch are no longer exported — they were never usable from outside their module.

v1.1.0

Choose a tag to compare

@github-actions github-actions released this 29 Jun 07:54

Features

  • Added three zero-config, no-API-key AI providers — Codex, Gemini, and OpenCode — each using the tool's own CLI sign-in, alongside the existing claude CLI backend.
  • Added a configurable fallback provider (--fallback-provider, --fallback-endpoint, --fallback-model) that's tried when the primary provider errors out.
  • Empty release notes are now treated as suspect: when the AI returns _No user-facing changes._ for a range that actually had commits, gitgist falls back to the deterministic Conventional-Commit changelog instead of trusting it silently.

Bug Fixes

  • Fixed the claude CLI provider passing gitgist's instructions as user input, which caused it to echo _No user-facing changes._ instead of generating notes; the system prompt now rides the CLI's own system layer.
  • A fallback provider no longer inherits a --model/--endpoint that doesn't apply to it — those are only carried over when the fallback targets the same provider as the primary.

Documentation

  • The README now advertises the fallback/resilience behavior and includes a --template demo showing commits shaped to a fixed house-style layout.

v1.0.0

Choose a tag to compare

@github-actions github-actions released this 19 Jun 11:06

Bug Fixes

  • Fixed the apple provider rejecting commit ranges given as full SHAs (e.g. <sha>^ <sha>); the on-device language guardrail no longer trips on SHA-heavy prompts.

Changes

  • The apple provider now uses the published apple-fm package, which ships its own signed and notarized Foundation Models binary ??? the provider works out of the box with no Swift toolchain or bundled helper.

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 18 Jun 06:22

Features

  • New npm run compare tool runs the same changes through every available AI backend (Claude, local OpenAI-compatible, Apple Foundation Models, and the deterministic --no-ai grouping) and prints the results side by side, so you can compare how each provider summarizes the same history.

Documentation

  • Added a "Choosing a provider" guide to the README, with a quality/cost/privacy comparison table and a "pick by what you care about most" summary to help you choose between providers.
  • Refreshed the README's "See it" section with an animated demo for drafting commit messages from staged changes (gitgist --staged --commit-message), so the demos now flow as a progression: AI release notes, commit messages, then offline grouping.
  • Better-organized release notes: each change now appears in exactly one section, with breaking changes always grouped on their own.

v0.1.0-beta.1

v0.1.0-beta.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 18 Jun 04:51

Beta / pre-release — install with npm install gitgist@beta.

GitHub's releases/latest ignores prereleases, so this beta does not affect anyone tracking the stable channel.


Full annotated tag message follows:

Add an on-device Apple Foundation Models provider (GG-3, GG-19)

Add an apple provider for on-device, free, private release-note generation via macOS Apple Foundation Models, and a release pipeline that ships a signed, notarized prebuilt helper so users don't need a Swift toolchain.

GG-3 — the provider:

  • apple-fm-helper/main.swift: a tiny Swift CLI wrapping the FoundationModels framework. Unlike the Hot Sheet reference (which uses @generable guided JSON), gitgist wants freeform Markdown, so it just runs LanguageModelSession.respond(to:) and prints the text. Protocol: --probe prints available/unavailable; --generate reads {system,prompt} JSON on stdin and writes Markdown to stdout. scripts/build-apple-fm-helper.sh compiles it (swiftc -O -target arm64-apple-macos26), guarded to no-op on non-macOS / missing swiftc / missing SDK; build:apple-fm npm script.
  • src/providers/apple.ts (createAppleProvider): isAvailable() requires darwin plus the helper plus a --probe of available; generate() spawns --generate with stderr capture and an AbortController timeout, then strips code fences. Binary resolution checks GITGIST_APPLE_FM_BIN, then the binary shipped with the package (resolved relative to the module), then ./bin/apple-fm-helper or ./apple-fm-helper. Injectable runner/platform/path for tests.
  • Register apple in ProviderName, PROVIDERS, and AUTO_ORDER (last, as a free on-device fallback only reached when no Claude backend is available, and a no-op when the helper isn't built). --provider apple opt-in too. Verified live on a macOS 26 Apple Silicon machine: the helper builds, probes available, and a full gitgist --provider apple run produces grouped Markdown.

GG-19 — ship a notarized prebuilt binary from CI:

  • release.yml gains an apple-fm job (runs-on macos-26) that imports a Developer ID certificate into a temporary keychain, builds and signs the helper (hardened runtime plus secure timestamp), notarizes it with notarytool using an app-specific password, and uploads the binary as an artifact. The npm-publish job now waits for that job but does not require it (if: always with create-release and detect success), downloads the artifact with continue-on-error, and otherwise publishes with the helper as source. The required Apple secrets are an account-level setup step (tracked on the ticket).
  • bin/apple-fm-helper is added to package files so the prebuilt binary is force-included by npm even though bin/ is gitignored; the source and build script still ship as a fallback.

Tests: apple.test.ts drives the provider with an injected runner — the availability matrix (non-darwin, missing binary, probe available, probe unavailable), a generate round-trip with fence stripping, stderr on failure, and the missing-helper error. The AUTO_ORDER assertion is updated to claude-cli, anthropic-api, apple. Full suite is 109 passing tests.

Docs: docs/3-requirements.md (FR-15, FR-16, FR-10 trimmed), both docs/ai summaries, README (providers section, flags, feature bullet, roadmap), and CLAUDE.md. The compiled binary lives under bin/ and is gitignored.

All checks pass: typecheck, lint, build, and 109 tests.