mirror of
https://github.com/akadeepesh/contextzip.git
synced 2026-10-20 08:36:20 +02:00
10 KiB
10 KiB
Changelog
All notable changes to contextzip are documented here.
The format follows Keep a Changelog. This project uses Semantic Versioning.
[0.1.1] — 2026-05-15
Fixed
- LICENSE link in README now points to GitHub instead of a relative path that broke on PyPI
- License metadata updated to SPDX string format (
"MIT") to comply with setuptools ≥ 77
[0.1.2] — 2026-05-15
Added
- Smart framework and language detection (Next.js, Node.js, Python, Django, FastAPI, Rust, Go, Ruby)
- Automatic exclusion rules per detected ecosystem
.gitignorepatterns respected automatically (--no-gitignoreto bypass)--includeflag for scoping to specific directories (exact path-boundary matching)--excludeflag for additional gitignore-style exclusion patterns--dry-runflag to preview without creating any files--verboseflag showing every file with its size--outputflag for custom ZIP destination--no-clipboardflag to skip clipboard/folder-open step- Tiered clipboard strategy: file-on-clipboard (macOS/Linux), Explorer with file selected (Windows), path fallback
- Warnings for large files (≥ 1 MB), binary files, and skipped files (dangling symlinks, permission errors)
- Rich terminal output with panels, progress bars, and colour-coded detection results
- Compression stats (ratio, size before/after) shown after ZIP creation
[0.2.0] — 2026-05-15
Added
--git-changesmode for packaging only files reported as changed by git- Automatic detection of:
- staged files
- unstaged modifications
- untracked files
- Dedicated git-aware packaging pipeline optimised for AI/code review workflows
- Rich git change summary panel with staged/unstaged/untracked breakdown
- Verbose git mode output showing categorized changed files
- Graceful handling for:
- repositories with no changes
- deleted files
- submodules
- repositories outside the selected project tree
- missing git installations
- non-git directories
- Support for monorepo-aware repository root resolution
- Binary and large-file checks now also apply in git-changes mode
Improved
- File resolution architecture refactored to support multiple packaging strategies cleanly
- Internal file scanning pipeline separated from git-based file selection logic
- CLI output consistency improved between standard scan mode and git-changes mode
Developer Notes
- Introduced new
contextzip.gitmodule for git integration and porcelain parsing - Added
resolve_files_from_git()pipeline for pre-selected file resolution - Added structured
GitChangesandGitErrormodels for cleaner error handling and extensibility
[0.2.1] — 2026-05-16
Fixed
--exclude/-epatterns containing Windows-style paths (e.g..\CHANGELOG.md) were silently ignored due to backslash and leading.\— patterns are now normalized to forward-slash posix paths before matching- Files passed to
-ewere not being excluded from the ZIP despite appearing in the exclusion list
Improved
-enow accepts multiple space-separated patterns in a single flag invocation:-e file1 file2 folder/in addition to the existing repeatable form-e file1 -e file2- Folder exclusion via
-e folder/*is now supported and normalized tofolder/automatically
[0.2.2] - 2026-05-16
Added
contextzip exclude PATTERN…subcommand — exclude multiple files and folders in a single invocation without repeating-e(e.g.contextzip exclude CHANGELOG.md LICENSE .github/)contextzip include PATH…subcommand — symmetric counterpart toexclude; packages only the specified paths (e.g.contextzip include src/ app/)- All modifier flags (
--dry-run,--verbose,--output,--no-clipboard,--git-changes,--no-gitignore) work on both subcommands
Changed
-e/--excludeflag on the main command restored and kept for full backwards compatibility alongside the new subcommand- Warning messages for large files now mention both
-e PATTERNandcontextzip exclude PATTERNas remediation options _normalize_patternpromoted to a named module-level function (testable, documented); behaviour is unchanged
Fixed
- Removed the previous positional-argument approach to exclusions on the main command, which was ambiguous and undiscoverable
[0.2.3] — 2026-05-19
Added
- Dedicated Ruby ecosystem exclusion rules via new
contextzip.rules.rubymodule - Automatic exclusion of common Ruby / Rails artifacts:
- Bundler directories and lockfiles
- Rails logs, temp files, assets, storage, and Spring cache
- Built gems and compiled Ruby extensions
- Coverage and generated documentation directories
- Additional package discovery keywords for AI tooling and code packaging:
claudechatgptcode-packaging
Changed
- Ruby project detection now uses the dedicated Ruby rule module instead of the generic base rules
- Git-based packaging now enforces base exclusion safety rules even for tracked files
- Repository governance and metadata files are now excluded by default:
CHANGELOG*LICENSE*CONTRIBUTING*SECURITY.md.githubissue / PR templates
.gitignoreis no longer excluded automatically from packaged context archives
Fixed
- Prevented git-tracked sensitive files (e.g.
.env, secrets, binaries) from being included in--git-changesmode - Improved ZIP packaging resilience when file stat operations fail during archive creation
- Fixed progress tracking during ZIP generation to avoid repeated filesystem stat calls
- Fixed Ruby framework detection routing so Ruby projects receive ecosystem-specific exclusion behaviour
[0.2.4] — 2026-05-20
Added
-
Persistent
.contextzip/workspace directory for generated context packages -
Automatic output naming based on packaging mode:
codebase.zipfor standard packagingchanges.zipfor--git-changes
-
Automatic
.contextzip/exclusion from packaged archives and file scanning -
Automatic
.gitignoreintegration:.contextzip/is appended when a git repository is detected- missing entries are added only once
-
Repository-root-aware workspace placement:
.contextzip/is created at the git repository root when.git/is detected- falls back to the current working directory outside git repositories
Changed
- ZIP outputs are now written to the persistent
.contextzip/workspace by default instead of temporary system directories - Generated archives now overwrite previous outputs with the same logical name instead of creating temporary randomized filenames
--outputnow bypasses all.contextzip/workspace logic and writes directly to the user-specified destination
Improved
-
Generated context packages are now easier to rediscover, reuse, and inspect across AI-assisted development workflows
-
Workspace output structure now provides a foundation for future features such as:
- timestamped package history
- metadata indexing
- incremental packaging
- AI debug sessions
- package caching
Fixed
- Prevented
.contextzip/contents from recursively packaging previous generated archives - Improved fallback behaviour when workspace creation fails due to filesystem permissions or read-only directories
[0.3.0] — 2026-05-24
Added
--prompt/-pflag for AI-powered file selection — describe your task in plain English and contextzip automatically selects the minimum relevant files (e.g.contextzip --prompt "Change toast color on failed login")- Gemini 2.5 Flash Lite integration via a thin
httpxclient — no Google SDK required; a single lightweight POST call to the Gemini API - First-run onboarding flow for users without an API key:
- Displays a guided panel with a link to Google AI Studio (free, no credit card)
- Optionally opens the browser automatically
- Saves the key persistently on confirmation
- Persistent API key storage in the platform-appropriate config directory:
~/.config/contextzip/config.jsonon Linux / macOS%APPDATA%\contextzip\config.jsonon WindowsGEMINI_API_KEYenvironment variable always takes precedence
contextzip configsubcommand for key management:contextzip config— show current key status and sourcecontextzip config --reset-key— clear stored key and re-run onboardingcontextzip config --show-key-path— print config file location
prompt.txtis written as the first entry in every AI-generated ZIP, containing the task description, detected framework, and selected file list — so any AI tool receiving the archive immediately knows the context- Keyword-based heuristic file scorer as a rate-limit fallback:
- Activates only on confirmed HTTP 429 from Gemini
- Scores files by token overlap with the prompt, directory semantics, and extension type
- User is warned clearly that heuristic was used and Gemini results are preferred
--prompt --dry-runcombination — preview AI-selected files without creating a ZIP- API key validation on load — keys not starting with
AIzaare treated as unconfigured and trigger onboarding rather than a cryptic API error diagnose_api_key()surfaces a human-readable explanation when a key exists but fails validation, before any API call is attempted
Changed
create_zip()inpackager.pynow accepts an optionalprompt_txtparameter; when provided,prompt.txtis written as the first ZIP entry- xdg-open on Linux now runs with stdout and stderr suppressed to prevent KDE / DBus / MIME warnings from appearing over the API key prompt
Developer Notes
- Introduced
contextzip.configmodule for cross-platform config path resolution and key read / write / delete operations - Introduced
contextzip.aipackage with three modules:gemini.py— Gemini API client with typed exception hierarchy (GeminiError,GeminiRateLimitError,GeminiUnavailable)heuristic.py— keyword + directory scoring fallback scorerselector.py— project map builder, AI orchestration,prompt.txtgeneration; returns(paths, prompt_txt, method)so callers know which selection path was taken
- Added
httpxas a required runtime dependency