Repository navigation
Releases: brianwestphal/gitgist
Release list
v1.2.0
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 upstill gets described and claims the code doesn't support get dropped. On by default;--no-diffreturns to commit-messages-only summarizing. - New
antigravityprovider (agy -p) — a no-API-key Google backend that supersedes the Gemini CLI, which stopped serving individual tiers on 2026-06-18. It precedesgeminiin auto-selection;geministays for Code Assist Standard/Enterprise licensees. - New
openai-apiprovider — the OpenAI chat-completions API overOPENAI_API_KEY/OPENAI_BASE_URL, with no new runtime dependency. --link-commitsmakes 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 agitgistkey inpackage.json) pinsexclude,provider,model,maxDiffChars,linkCommits,commitUrl,endpoint, and the fallback settings per repository; explicitly passed flags still win.--no-configskips it. - Configurable diff exclusions.
--exclude <pathspec>(repeatable) adds to the built-in noise list — lockfiles, build output, vendored deps, generated assets — and--no-default-excludesreplaces 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-attributionturns 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-charsstill overrides.
Bug Fixes
--modelis now honoured by every provider.claude-cliwas silently discarding it and running the CLI's default model;localnow puts the requested model ahead of its config and environment defaults.- CLI-backed providers spawn in the repository
--cwdnames rather than gitgist's own working directory, sogitgist --cwd <repo> --provider codexworks from outside a repo. - The
geminiprovider 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-commitsasked for it. - The model no longer emits "carried over / dedupe against the draft above" meta sections when a
CHANGELOG.mdUnreleasedentry 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_NAMESis exported as a runtime array alongside theProviderNametype.describeFetchFailure,isAbort, anddefaultFetchare no longer exported — they were never usable from outside their module.
v1.1.0
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
claudeCLI 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
claudeCLI 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/--endpointthat 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
--templatedemo showing commits shaped to a fixed house-style layout.
v1.0.0
Bug Fixes
- Fixed the
appleprovider 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
appleprovider now uses the publishedapple-fmpackage, 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
Features
- New
npm run comparetool runs the same changes through every available AI backend (Claude, local OpenAI-compatible, Apple Foundation Models, and the deterministic--no-aigrouping) 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
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.