# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [2.4.4] - 2026-07-31

### Fixed
- npm package metadata: the published manifest now declares its MIT license, and `keywords` is a real list instead of a single comma-joined string. `mcp` was added to the list

## [2.4.3] - 2026-07-21

### Changed
- Project moved to the `seedfast-ai` GitHub organization: Homebrew tap is now `seedfast-ai/tap` (`brew install seedfast-ai/tap/seedfast`), the update checker polls the relocated tap, and npm package metadata points at the new repository. Existing installs keep working through GitHub redirects

## [2.4.2] - 2026-07-07

### Added
- Per-run verbose debug logging (`SEEDFAST_VERBOSE=1`) that writes a timestamped debug file for each seeding run to help diagnose stalled or disconnected large runs

### Fixed
- Large seeding runs no longer die around the 20-minute mark: mid-stream SQL sends are no longer gated on the local token TTL
- Stream disconnects now render as friendly, actionable errors instead of raw gRPC failures
- Premature stream EOF is treated as a run failure instead of a silent success
- Worker pool no longer stalls indefinitely: SQL execution time is bounded and execution timeouts widened to avoid false cancellations
- `Ctrl+C` stays responsive even while a send is stuck on a dead connection
- Shorter keepalive interval for faster stall detection
- SQL result and read scans are bounded by the gRPC message-size cap to prevent oversize sends that reset the connection

## [2.4.1] - 2026-06-27

### Added
- Client-side gRPC keepalive backstop that drops a dead connection instead of hanging, without requiring any server-side change

### Changed
- Raised the gRPC max message size to 256 MB in both directions to match the backend, so large scope/plan payloads are no longer rejected

### Fixed
- Serialized concurrent writes to the gRPC bidi stream to prevent intermittent `RST_STREAM` `PROTOCOL_ERROR` connection resets on large seeding runs

## [2.3.1] - 2026-04-23

### Changed
- Release pipeline migrated from GitHub Actions + GitHub Releases to a self-hosted ARM64 runner on AWS EC2 publishing archives to `download.seedfa.st` via nginx
- Homebrew tap formula URL rewritten to `https://download.seedfa.st/seedfast/<version>/<artifact>`
- Release workflows (`release.yml`, `release-mcp.yml`) now run on `[self-hosted, linux, ARM64, seedfast-builder]`
- NPM package publication no longer uses OIDC provenance

### Added
- Provisioning scripts under `scripts/aws/` for EC2 baseline, nginx/TLS, and runner setup
- `publish-to-webroot.sh` goreleaser hook for deploying archives to the nginx webroot

## [2.3.0] - 2026-04-15

### Added
- Adaptive throttler with write volume guard in the worker pool
- Multi-row INSERT support in ID column removal
- Inline textarea replaces the "Describe" option in the approve flow

### Changed
- Relaxed throttler limits to reduce over-throttling
- Unified update banner formatting via `FormatWarningNotice`
- Raised gRPC max receive message size to 32 MB

### Fixed
- Mark SQL as write by prefix when server omits `is_write`
- Spacing before suggestion lines in warnings
- Hide Yes/No buttons when warning-fix options are present

## [2.2.2] - 2026-03-30

### Fixed
- Format UUID `[16]byte` arrays as standard hyphenated strings in SQL responses
- Handle write operations (INSERT/UPDATE/DELETE) with RETURNING clauses
- Add network type OIDs (inet, cidr, macaddr) and harden UUID edge cases
- Send column type OIDs in SQL responses for proper type handling
- Upgrade grpc-go to v1.79.3 (CVE-2026-33186)

## [2.2.1] - 2026-03-22

### Fixed
- Updated all user-facing dashboard URLs from `dashboard.seedfa.st` to `seedfa.st/dashboard`

## [2.2.0] - 2026-03-20

### Added
- CI feedback loop with golangci-lint pre-commit hook and GitHub Actions linting step
- golangci-lint configuration (`.golangci.yml`) for consistent code quality

### Changed
- Manifest URL updated from `dashboard.seedfa.st` to `seedfa.st`
- Removed unused files: `cmd/seed_dev.go`, `cmd/seed_prod.go`, `cmd/seed_tui_prod.go`, `cmd/ui_helpers.go`, `internal/seeding/renderer.go`

### Fixed
- All golangci-lint errors resolved (errcheck, empty branches, gofmt formatting)

## [2.1.0] - 2026-03-09

### Added
- Bubble Tea TUI framework with phase-based architecture (plan, prompt, seeding, completion)
- Reusable TUI components: selector, text input, spinner, summary box, info banner
- TUI prompt and scope display wired into production orchestrator
- GitHub Actions CI workflow for automated build and test

### Changed
- Rewrite login, connect, dbinfo commands from pterm to Bubble Tea
- Replace pterm subscription display with lipgloss styling
- Replace emoji spinner with braille animation
- Migrate gRPC client to `grpc.NewClient` from deprecated `DialContext`
- Convert `TokenManager` to standalone functions
- Deduplicate API calls in seed workflow
- Extract shared helpers: `logging.IsVerbose()`, `auth.ExtractUserIdentifier()`, `dsn.ResolveRawFromSources()`
- Remove dead code: unused exports, `internal/secure` package, `ConnectWithTimeout` method

### Performance
- Parallelize HTTP calls in --version handler
- Add 24-hour throttle to update check HTTP calls
- Reduce allocations in MCP server and flag validation

### Fixed
- MCP connection test now uses real database connections
- Subscription limit display on every scope arrival
- Exit code 0 for friendly errors in seed command
- Update golang.org/x/crypto to v0.48.0

## [2.0.0] - 2026-02-21

### Added
- Large seeding support with scope control for million-row datasets
- New TUI framework for interactive terminal output
- Updated proto contract for large seeding operations

### Changed
- Updated gRPC bridge for large seeding protocol
- Improved warnings handling during seeding
- Enhanced CI/CD mode compatibility with large seeding feature
- User feedback echo during scope confirmation

## [1.27.0] - 2026-01-29

### Changed
- Updated documentation and architecture docs

### Fixed
- Dashboard link in MCP server

## [1.26.1] - 2026-01-26

### Changed
- Migrated MCP server to config-based API key authentication via environment variable
- Simplified MCP authentication flow by removing file-based token storage dependency

### Fixed
- Improved interactive renderer reliability

## [1.26.0] - 2026-01-24

### Added
- **MCP Server**: New `seedfast mcp` command for AI agent integration
  - `seedfast_doctor`: Check CLI installation and environment
  - `seedfast_auth_setup`: Configure API key authentication
  - `seedfast_connections_test`: Test database connection
  - `seedfast_plan`: Create seeding plan without execution
  - `seedfast_run`: Execute database seeding
  - `seedfast_run_status`: Get status of a seeding run
  - `seedfast_run_cancel`: Cancel a running seeding operation
  - File-based token storage in `~/.seedfast/mcp_token` for sandboxed environments

### Changed
- Documentation reorganized into structured folders (release, testing, ecosystem, development)
- Improved interactive renderer reliability

## [1.25.2] - 2026-01-12

### Changed
- Added support for typed proto Data parsing in event handlers (new format)
- Added HandleProto method to subscription_limit_handler for typed proto messages
- Maintains backwards compatibility with JSON parsing (legacy format) as fallback

## [1.25.1] - 2026-01-11

### Fixed
- Corrected proto contract to use CI/CD branch version (DataMessage, ProgressMessage, UIControlMessage)
- Removed legacy ConnectionInfo structure in favor of scope-based initialization
- Fixed bridge interface to use correct 3-argument Connect method

## [1.25.0] - 2026-01-11

### Added
- **CI/CD Integration**: Full support for non-interactive environments
  - `--scope` flag for predefined seeding scope with auto-approve
  - `--output` flag with `json` and `plain` modes for machine-readable output
  - `SEEDFAST_API_KEY` environment variable for API key authentication
  - Exit codes for CI/CD pipelines (0=success, 1=error, 2=auth error, 3=db error)
- **API Key Authentication**: Support for programmatic access without interactive login
- **Records Count Tracking**: Display total rows seeded in completion summary

### Changed
- Updated proto contract with typed messages (DataMessage, ProgressMessage, UIControlMessage)
- Improved table_done event to include records_count for accurate statistics
- Skip interactive UI elements (spinners, scope display) in CI/CD mode

### Documentation
- Added CI/CD testing infrastructure and workflows
- New documentation: GITHUB_ACTIONS_TESTING.md, TROUBLESHOOTING_CICD.md

## [1.24.11] - 2026-01-07

### Changed
- Made RemainingThisPeriod nullable in subscription limit info to support backend null values
- Skip displaying "Seedings remaining" line when backend sends null

## [1.24.10] - 2026-01-07

### Fixed
- Changed HTTP method from GET to POST for /api/cli/get-link endpoint to match backend API spec
- Fixed device login polling to treat "access token not found" as pending state instead of error

## [1.24.9] - 2025-12-30

### Fixed
- Synchronized proto contract with server master branch using simplified UIEvent structure
- Simplified gRPC client to forward UIEvent directly instead of complex message type conversions
- Added HTTP base URL metadata transmission for proper backend API callbacks in custom gRPC scenarios

## [1.24.8] - 2025-12-30

### Fixed
- Improved error messages in login command: now shows "Local backend server is not running" or "Could not connect to Seedfast server" instead of confusing "Authentication error" for network failures
- Fixed HTTP base URL preservation when overriding gRPC URL: custom gRPC endpoints now correctly maintain original HTTP API endpoints

## [1.24.7] - 2025-12-24

### Fixed
- Reverted proto definitions to version compatible with production server (master branch) to fix proto unmarshaling errors
- Proto contract on production server still uses UIEvent and ConnectionInfo structure
- Pending server implementation of feat/proto-contract-update branch with new typed messages

## [1.24.6] - 2025-12-24

### Fixed
- Attempted to synchronize gRPC proto contract with server's updated schema (reverted in v1.24.7 due to production server compatibility)

## [1.24.5] - 2025-12-24

### Fixed
- Fixed HTTP API base URL to use dashboard.seedfa.st instead of seedfa.st, fixing authentication endpoint access

## [1.24.4] - 2025-12-24

### Fixed
- Fixed WhoAmI to not return error when local auth state is unavailable, allowing login flow to continue

## [1.24.3] - 2025-12-24

### Fixed
- Fixed GoReleaser ldflags format to properly set version in binary during build

## [1.24.2] - 2025-12-24

### Fixed
- Fixed network error when fetching server configuration by updating endpoint URL to dashboard.seedfa.st
- Corrected manifest fetch endpoint to use new dashboard domain

## [1.24.1] - 2025-12-24

### Fixed
- Updated backend endpoint URL from seedfa.st to dashboard.seedfa.st for manifest and dashboard links

## [1.24.0] - 2025-11-28

### Added
- **Linux Keyring Support**: Seedfast now fully supports Linux keyring backends
  - Automatic detection and fallback chain: Secret Service → pass → File Storage
  - File Storage backend works everywhere (WSL, Docker, headless systems)
  - Support for XDG Base Directory specification
  - Environment variable override: `SEEDFAST_KEYRING_PASSWORD`
  - Comprehensive documentation: [docs/LINUX_KEYRING.md](docs/LINUX_KEYRING.md)
  - Machine ID detection from /etc/machine-id for deterministic encryption
  - Proper file permissions (0600 for files, 0700 for directories)

### Changed
- Updated Platform Support documentation to reflect Linux keyring capabilities
- Updated INSTALL.md with Linux keyring setup instructions
- Enhanced keychain manager to support Linux file-based storage

### Technical
- Added internal/keychain/manager_test.go with 5 comprehensive unit tests
- Added scripts/test_linux_keyring.sh for integration testing
- Thread-safe keychain operations with proper mutex protection

## [1.23.16] - 2025-11-23

### Changed
- Synchronized all npm package versions

## [1.23.15] - 2025-11-22

### Fixed
- Use CustomBackendURL for HTTP API regardless of gRPC config

## [1.23.14] - 2025-11-22

### Fixed
- Updated npm token with bypass 2FA for new package creation

## [1.23.13] - 2025-11-22

### Fixed
- Added token fallback for publishing new npm packages that don't have trusted publishers yet

## [1.23.12] - 2025-11-22

### Fixed
- Added repository URL to npm package.json for OIDC provenance verification

## [1.23.11] - 2025-11-22

### Fixed
- Updated Node.js to v24 and npm to latest for OIDC compatibility
- Added NPM_CONFIG_PROVENANCE environment variable

## [1.23.10] - 2025-11-22

### Fixed
- Fixed goreleaser-npm-publisher installation (use npx instead of go install)

## [1.23.9] - 2025-11-22

### Changed
- Switched to OIDC trusted publishing for npm packages (no tokens required)
- Increased delay between npm publishes to 15 seconds

## [1.23.8] - 2025-11-22

### Fixed
- Added manual npm publish step with 10-second delays between packages

## [1.23.7] - 2025-11-21

### Fixed
- Simplified npm publish workflow with continue-on-error

## [1.23.6] - 2025-11-21

### Fixed
- Increased npm publish retry delay to 120 seconds

## [1.23.5] - 2025-11-21

### Fixed
- Added retry logic for npm publish rate limiting

## [1.23.4] - 2025-11-21

### Fixed
- Republish after npm rate limit issues

## [1.23.3] - 2025-11-21

### Fixed
- Set project_name in goreleaser for correct npm package naming

## [1.23.2] - 2025-11-21

### Fixed
- npm publisher configuration fix

## [1.23.1] - 2025-11-21

### Fixed
- npm package name changed from `seedfast-cli` to `seedfast`

## [1.23.0] - 2025-11-21

### Added
- npm package distribution support for easy installation via `npm install -g seedfast`
- Platform-specific npm packages for optimized download sizes (~10 MB per platform)
- Automatic npm publication through GitHub Actions on release
- Support for npx usage without global installation

## [1.22.1] - 2025-11-15

### Added
- Comprehensive agent integration documentation (AGENT_INTEGRATION_GUIDE.md)

### Changed
- Updated gRPC protocol contract with improved event handling
- Enhanced subscription limit handling logic
- Improved gRPC client error handling and connection management

### Fixed
- Version numbering consistency across releases

## [1.22.0] - 2025-11-12

### Added
- Support for seeding replan when subscription limits exhausted
- Ability to provide feedback and retry seeding after adjustments

### Changed
- Improved UI handling when seeding is rejected or needs replanning
- Refactored endpoint management to remove outdated endpoints
- Enhanced error messages for DSN parsing in connect command
- Standardized error message format with "Please run" pattern
- All user-facing errors now display as normal text instead of error styling
- Authentication error messages now include helpful emojis for better UX

### Fixed
- Critical bug: CLI now sends real DSN to backend server correctly
- Improved error handling throughout the application
- Better stability in UI rendering during seeding process
- Removed usage of invalid endpoints in headers mapping

### Documentation
- Updated project documentation files
- Improved inline code documentation

## [1.21.4] - 2025-11-02

### Changed
- Simplified command descriptions to be user-friendly and non-technical
- Updated help text for all commands to focus on functionality rather than implementation
- Changed logout success message to "Your data has been cleared"

## [1.21.3] - 2025-11-02

### Fixed
- GitHub release workflow token configuration for proper Homebrew distribution
- Separated GITHUB_TOKEN (releases) and HOMEBREW_TAP_TOKEN (tap updates) for correct permissions
- Homebrew installation now works correctly with public repository

### Changed
- GoReleaser now uses HOMEBREW_TAP_TOKEN for updating homebrew-tap repository
- GitHub Actions workflow uses separate tokens for different purposes

## [1.21.2] - 2025-11-02

### Fixed
- User-friendly error messages for subscription and quota limit blocks
- Replace technical "Connection Lost" / "ResourceExhausted" errors with clear guidance
- Handle RESOURCE_EXHAUSTED gRPC errors with actionable next steps

### Changed
- Subscription errors now show "Unable to start seeding" with context-specific help
- Display direct links to activate subscription or upgrade plan when blocked
- Improved error handling for quota limits with monthly reset information

## [1.21.1] - 2025-11-01

### Added
- Masked DSN support in gRPC InitRequest message
- ConnectionInfo structure with parsed database connection details
- CancellationRequest message support for graceful interruption
- Comprehensive test coverage for credential masking

### Security
- Username and password now masked with `*` in DSN string before sending to backend
- ConnectionInfo credentials masked for secure transmission and logging
- All sensitive data protected in gRPC messages and logs

### Changed
- Proto files regenerated to include new DSN and ConnectionInfo fields
- gRPC client Init() method now sends both masked DSN and structured connection info
- Enhanced security for credential handling in transit

## [1.20.3] - 2025-10-30

### Added
- `DisableTLS` build-time parameter for localhost development
- Insecure gRPC connections support when `DisableTLS=true`
- Automatic port selection (50051 for insecure, 443 for TLS)

### Changed
- gRPC client now supports both secure and insecure connections
- TLS can be disabled via `-ldflags` for local backend testing

## [1.20.2] - 2025-10-29

### Changed
- Replace runtime flags with build-time parameters via `-ldflags`
- Custom endpoints now set at compile time instead of runtime
- Dev builds require `-ldflags` to set custom backend/gRPC URLs

### Removed
- Runtime flags `--backend-url` and `--grpc-url`
- `cmd/root_dev.go` and `cmd/root_prod.go` files

## [1.1.20] - 2025-10-23

### Added
- Display database connection info (masked DSN) at start of `seed` command
- Show database name and connection string with masked credentials
- Improved scope acceptance prompt with clear options (yes/no/feedback)

### Changed
- Enhanced user prompt for seeding scope with color-coded options
- Users can now see exactly which database they're seeding before starting
- Better guidance for accepting, rejecting, or providing feedback on scope

### Removed
- Removed Go test files from the project

## [1.1.6] - 2025-10-19

### Fixed
- **Critical**: Fix token corruption - never decode keys containing "token"
- Tokens that start with letter bytes (like 0x62='b') no longer incorrectly decoded
- `whoami` command now works correctly with proper access token

### Changed
- Key-name based decoding strategy: skip decode if key contains "token"
- Only decode non-token hex strings that start with JSON characters ({, [, ")
- More robust distinction between tokens and hex-encoded JSON data

## [1.1.5] - 2025-10-19

### Fixed
- **Critical**: Fix access tokens being corrupted by hex decoding on macOS 26.0
- Smart hex decoding - only decode if result starts with readable character (JSON, text)
- Access tokens and other hex strings now preserved as-is
- `whoami` command now correctly fetches user email from backend

### Changed
- Hex decoding only applies to JSON objects/arrays and text strings
- Tokens remain in their original hex string format

## [1.1.4] - 2025-10-19

### Fixed
- **Critical**: Fix auth state persistence on macOS 26.0 - decode hex-encoded keychain data
- macOS 26.0's `security find-generic-password -w` returns hex instead of plain text
- Auth state now correctly loads after login on macOS 26.0

### Added
- Automatic hex decoding for keychain data on macOS
- `isHexString()` helper to detect hex-encoded strings
- Verbose logging shows both hex and decoded values

## [1.1.3] - 2025-10-19

### Fixed
- **Critical**: Fix verbose mode not working - now checks SEEDFAST_VERBOSE dynamically
- Show raw keychain output to diagnose "invalid character 'b' after top-level value" error
- Verbose logging now actually appears when --verbose flag is used

### Added
- Display raw keychain data (first 100 chars) in verbose mode
- Show both raw and trimmed output from security command
- Hex dump of failed JSON data for debugging

## [1.1.2] - 2025-10-19

### Added
- Comprehensive verbose logging for macOS keychain debugging
- `--verbose` flag for `whoami`, `connect`, and `seed` commands
- Debug output shows auth state load/save flow step-by-step
- Environment variable `SEEDFAST_VERBOSE=1` enables verbose mode globally

### Changed
- Security backend (macOS) now logs all Set/Get/Delete operations in verbose mode
- Auth storage module logs all Load/Save operations with detailed state info
- Commands show auth.Load() errors when `--verbose` flag is used

## [1.1.1] - 2025-10-19

### Fixed
- Add error checking when saving auth state after login
- Show detailed error message if auth state save fails
- Add verbose logging for debugging auth state persistence issues
- Improve error messages in security_darwin.go to show which key failed

### Changed
- Login command now stops with error if auth.Save() fails (was silently ignored)
- Verbose mode (`--verbose`) shows auth state save progress for debugging

## [1.1.0] - 2025-10-19

### Fixed
- **Critical**: Fix auth state not persisting after login on macOS 26.0
- Handle "key not found" errors gracefully in LoadAuthState (treat as empty, not error)
- Fix `whoami` and `connect` commands showing "not logged in" after successful login
- Properly distinguish between "key doesn't exist yet" vs "real keychain error"

### Changed
- LoadAuthState returns nil (no data) instead of error when key doesn't exist
- Better error handling for first-run scenarios

## [1.0.9] - 2025-10-19

### Fixed
- **Critical**: Fix keychain on macOS 26.0 by using native `security` command directly
- Bypass keyring library which doesn't work on macOS 26.0
- Use macOS built-in security command for all keychain operations

### Changed
- macOS now uses `security` command directly (100% compatible with all macOS versions)
- No external dependencies required - works out of the box
- Windows continues using keyring library with WinCredBackend

## [1.0.8] - 2025-10-19

### Fixed
- Add PassBackend support for macOS 26.0 where native Keychain API is unavailable
- Provide clear error message with installation instructions for 'pass' utility
- Fix "No directory provided for file keyring" error on macOS 26.0

### Added
- Support for 'pass' (password store) as secure alternative on macOS 26.0+
- Helpful error message: install pass with `brew install pass gnupg`

### Changed
- macOS backend priority: Keychain first, then pass (both are secure)
- No file-based storage fallback - only encrypted backends

## [1.0.7] - 2025-10-19

### Fixed
- Fix "Specified keyring backend not available" on macOS 26.0 and newer
- Remove hardcoded AllowedBackends restriction to support future macOS versions
- Let keyring library automatically select best available backend

### Changed
- Keyring now adapts to platform-specific backends automatically
- Better compatibility with macOS updates

## [1.0.6] - 2025-10-19

### Fixed
- Fix infinite polling loop when authentication errors occur during login
- Stop silently ignoring errors in `PollLogin` during device authorization
- Display authentication errors immediately instead of continuing to poll

### Added
- Add `--verbose` flag to `login` command for debugging authentication issues
- Show device ID, poll interval, and polling status in verbose mode
- Better error messages when authentication fails

### Changed
- Login command now fails fast when errors occur instead of infinite polling
- Improved debugging experience for authentication troubleshooting

## [1.0.5] - 2025-10-19

### Fixed
- **Critical**: Replace all `MustGetManager()` calls with graceful `GetManager()` error handling
- Fix panic "Specified keyring backend not available" on unsupported platforms (e.g., Linux, MSYS)
- Add proper error handling in all 17 keychain access points across 8 files:
  - `cmd/login.go`: Handle keychain errors during login timeout cleanup
  - `cmd/connect.go`: Display user-friendly message when keychain unavailable
  - `cmd/logout.go`: Gracefully handle keychain errors during logout
  - `cmd/seed.go`: Handle keychain errors when loading DSN and access token
  - `internal/auth/storage.go`: Add error handling for Load/Save/Clear operations
  - `internal/auth/service.go`: Fix 11 keychain calls in auth service methods
- Improve error messages for unsupported platforms (Linux, MSYS/Git Bash on Windows)
- Preserve `MustGetManager()` function for backward compatibility (no longer used internally)

### Changed
- All keychain operations now return errors instead of panicking
- Better UX: informative error messages instead of crashes on unsupported systems

## [1.0.4] - 2025-10-19

### Fixed
- Fix nil pointer dereference in keychain manager after failed initialization
- Replace sync.Once with mutex to allow retry on initialization failure
- Properly handle keychain initialization errors during login flow

## [1.0.3] - 2025-10-19

### Fixed
- Fix keychain initialization panic on first run
- Replace `MustGetManager()` with `GetManager()` for graceful error handling
- Properly initialize keychain before saving tokens during login

## [1.0.2] - 2025-10-19

### Changed
- ⚠️ **Deprecated**: This version introduced an insecure encrypted file storage fallback
- Please upgrade to v1.0.3 which properly fixes the keychain initialization issue

## [1.0.1] - 2025-10-19

### Fixed
- Add `-trimpath` flag to remove absolute build paths from binaries
- Fixes panic with keychain on macOS when using bottles from GitHub Releases

## [1.0.0] - 2025-10-19

### Added
- Initial release of Seedfast CLI
- `seedfast login` command for OAuth-style device flow authentication
- `seedfast connect` command for PostgreSQL database connection configuration
- `seedfast seed` command for AI-powered database seeding
- `seedfast whoami` command to check current authentication status
- `seedfast logout` command to clear stored credentials
- `seedfast version` command to display CLI and backend versions
- OS-level keychain integration for secure credential storage (macOS Keychain, Windows Credential Manager)
- gRPC bidirectional streaming for real-time backend communication
- Interactive terminal UI with spinners and real-time progress tracking
- Concurrent SQL execution with configurable worker pool (4 workers)
- Automatic schema detection and relationship handling
- Support for macOS (Intel & Apple Silicon), Linux, and Windows
- Homebrew tap for easy installation on macOS
- MIT License
- Comprehensive README documentation
- GoReleaser configuration for automated releases

### Technical
- Static binary compilation (`CGO_ENABLED=0`) - no C dependencies required
- Pre-compiled bottles for Homebrew to avoid Xcode/CLT requirement
- pgx v5 PostgreSQL driver for efficient database operations
- Cobra framework for CLI structure
- pterm for rich terminal output
- Secure token storage using OS native keychains

[Unreleased]: https://github.com/argon-it/seedfast-cli/compare/v2.2.0...HEAD
[2.2.0]: https://github.com/argon-it/seedfast-cli/compare/v2.1.0...v2.2.0
[2.1.0]: https://github.com/argon-it/seedfast-cli/compare/v2.0.0...v2.1.0
[2.0.0]: https://github.com/argon-it/seedfast-cli/compare/v1.27.0...v2.0.0
[1.27.0]: https://github.com/argon-it/seedfast-cli/compare/v1.26.1...v1.27.0
[1.26.1]: https://github.com/argon-it/seedfast-cli/compare/v1.26.0...v1.26.1
[1.26.0]: https://github.com/argon-it/seedfast-cli/compare/v1.25.2...v1.26.0
[1.25.2]: https://github.com/argon-it/seedfast-cli/compare/v1.25.1...v1.25.2
[1.25.1]: https://github.com/argon-it/seedfast-cli/compare/v1.25.0...v1.25.1
[1.25.0]: https://github.com/argon-it/seedfast-cli/compare/v1.24.11...v1.25.0
[1.24.11]: https://github.com/argon-it/seedfast-cli/compare/v1.24.10...v1.24.11
[1.24.10]: https://github.com/argon-it/seedfast-cli/compare/v1.24.9...v1.24.10
[1.24.9]: https://github.com/argon-it/seedfast-cli/compare/v1.24.8...v1.24.9
[1.24.8]: https://github.com/argon-it/seedfast-cli/compare/v1.24.7...v1.24.8
[1.24.7]: https://github.com/argon-it/seedfast-cli/compare/v1.24.6...v1.24.7
[1.24.6]: https://github.com/argon-it/seedfast-cli/compare/v1.24.5...v1.24.6
[1.24.5]: https://github.com/argon-it/seedfast-cli/compare/v1.24.4...v1.24.5
[1.24.4]: https://github.com/argon-it/seedfast-cli/compare/v1.24.3...v1.24.4
[1.24.3]: https://github.com/argon-it/seedfast-cli/compare/v1.24.2...v1.24.3
[1.24.2]: https://github.com/argon-it/seedfast-cli/compare/v1.24.1...v1.24.2
[1.24.1]: https://github.com/argon-it/seedfast-cli/compare/v1.24.0...v1.24.1
[1.24.0]: https://github.com/argon-it/seedfast-cli/compare/v1.23.16...v1.24.0
[1.23.8]: https://github.com/argon-it/seedfast-cli/compare/v1.23.7...v1.23.8
[1.23.7]: https://github.com/argon-it/seedfast-cli/compare/v1.23.6...v1.23.7
[1.23.6]: https://github.com/argon-it/seedfast-cli/compare/v1.23.5...v1.23.6
[1.23.5]: https://github.com/argon-it/seedfast-cli/compare/v1.23.4...v1.23.5
[1.23.4]: https://github.com/argon-it/seedfast-cli/compare/v1.23.3...v1.23.4
[1.23.3]: https://github.com/argon-it/seedfast-cli/compare/v1.23.2...v1.23.3
[1.23.2]: https://github.com/argon-it/seedfast-cli/compare/v1.23.1...v1.23.2
[1.23.1]: https://github.com/argon-it/seedfast-cli/compare/v1.23.0...v1.23.1
[1.23.0]: https://github.com/argon-it/seedfast-cli/compare/v1.22.1...v1.23.0
[1.22.1]: https://github.com/argon-it/seedfast-cli/compare/v1.22.0...v1.22.1
[1.22.0]: https://github.com/argon-it/seedfast-cli/compare/v1.21.4...v1.22.0
[1.21.4]: https://github.com/argon-it/seedfast-cli/compare/v1.21.3...v1.21.4
[1.21.3]: https://github.com/argon-it/seedfast-cli/compare/v1.21.2...v1.21.3
[1.21.2]: https://github.com/argon-it/seedfast-cli/compare/v1.21.1...v1.21.2
[1.21.1]: https://github.com/argon-it/seedfast-cli/compare/v1.20.3...v1.21.1
[1.20.3]: https://github.com/argon-it/seedfast-cli/compare/v1.20.2...v1.20.3
[1.20.2]: https://github.com/argon-it/seedfast-cli/compare/v1.1.20...v1.20.2
[1.1.20]: https://github.com/argon-it/seedfast-cli/compare/v1.1.6...v1.1.20
[1.1.6]: https://github.com/argon-it/seedfast-cli/compare/v1.1.5...v1.1.6
[1.1.5]: https://github.com/argon-it/seedfast-cli/compare/v1.1.4...v1.1.5
[1.1.4]: https://github.com/argon-it/seedfast-cli/compare/v1.1.3...v1.1.4
[1.1.3]: https://github.com/argon-it/seedfast-cli/compare/v1.1.2...v1.1.3
[1.1.2]: https://github.com/argon-it/seedfast-cli/compare/v1.1.1...v1.1.2
[1.1.1]: https://github.com/argon-it/seedfast-cli/compare/v1.1.0...v1.1.1
[1.1.0]: https://github.com/argon-it/seedfast-cli/compare/v1.0.9...v1.1.0
[1.0.9]: https://github.com/argon-it/seedfast-cli/compare/v1.0.8...v1.0.9
[1.0.8]: https://github.com/argon-it/seedfast-cli/compare/v1.0.7...v1.0.8
[1.0.7]: https://github.com/argon-it/seedfast-cli/compare/v1.0.6...v1.0.7
[1.0.6]: https://github.com/argon-it/seedfast-cli/compare/v1.0.5...v1.0.6
[1.0.5]: https://github.com/argon-it/seedfast-cli/compare/v1.0.4...v1.0.5
[1.0.4]: https://github.com/argon-it/seedfast-cli/compare/v1.0.3...v1.0.4
[1.0.3]: https://github.com/argon-it/seedfast-cli/compare/v1.0.2...v1.0.3
[1.0.2]: https://github.com/argon-it/seedfast-cli/compare/v1.0.1...v1.0.2
[1.0.1]: https://github.com/argon-it/seedfast-cli/compare/v1.0.0...v1.0.1
[1.0.0]: https://github.com/argon-it/seedfast-cli/releases/tag/v1.0.0
