96 Commits
Author SHA1 Message Date
akadeepesh a840e7fbc0 feat: add visual config UI and first-run offer with enhanced exclusion suggestions v0.3.7 2026-08-24 02:09:30 +05:30
akadeepesh adda650263 chore: bump version to 0.3.7 2026-08-24 02:07:51 +05:30
akadeepesh ad18a39519 fix: update .gitignore to include config.json for version control 2026-08-24 02:07:48 +05:30
akadeepesh a0042ef837 docs: document the visual config UI 2026-08-24 02:06:43 +05:30
akadeepesh 5575a7899d feat(cli): wire up 'contextzip config --ui' and first-run offer
- 'contextzip config --ui' launches the local config UI directly
- First run in a project with no config at all offers to launch it
  interactively, gated on TTY + no CI env var + no --prompt/--output
- Declining is remembered per-machine (config.py) so it only asks once
- Accepting and saving mid-run reloads config and continues packaging
  immediately in the same invocation
2026-08-24 02:06:35 +05:30
akadeepesh 9d4bc08734 feat(webui): add local config UI frontend
Single-file HTML/CSS/JS, no build step, no CDN calls — colors and
typography matched to the showcase site's design tokens. Live file tree
with checkboxes, one-click exclude suggestions, working-config panel
with raw JSON preview, and a save flow with a success overlay.
2026-08-24 02:06:26 +05:30
akadeepesh a86855cd55 feat(webui): add local config UI server
Stdlib-only HTTP server bound to 127.0.0.1, with a random per-session
token (same approach as Jupyter Notebook) and no outbound network calls
of its own. Auto-shuts down on save, tab idle, or a hard time ceiling.

Includes:
- suggestions.py: detects PDFs, office docs, fonts, media, and anything
  over 1MB that isn't already covered by the default exclusion rules
- persist.py: writes always_include/always_exclude to
  .contextzip/config.json, reusing the existing workspace/.gitignore setup
2026-08-24 02:06:17 +05:30
akadeepesh 7b4e248862 feat(filters): add scan_all_files/classify_scanned_files for reusable tree scans
Splits file-tree scanning into a one-time disk walk (scan_all_files) plus
a pure in-memory classifier (classify_scanned_files) that can be run
against different include/exclude patterns without re-touching the
filesystem. resolve_files() is untouched — this is purely additive.

Prunes known-huge, always-irrelevant directories (.venv, node_modules,
.git, __pycache__, build output, etc.) during the walk itself, and
rejects symlinks that resolve outside the project tree (e.g. a venv's
bin/python pointing at the system interpreter).
2026-08-24 02:06:07 +05:30
akadeepesh 2bca7ceba9 bump version to 0.3.6 v0.3.6 2026-08-23 03:07:18 +05:30
akadeepesh 8dd3f48c8a feat: update workspace structure and improve gitignore handling 2026-08-23 03:03:34 +05:30
akadeepesh dc78feacf1 docs: document contextzip workspace and configuration 2026-08-23 03:03:10 +05:30
akadeepesh c828f50c02 feat: apply ai preferences to file selection 2026-08-23 03:03:02 +05:30
akadeepesh 587b6d2f4f feat: integrate project config into cli 2026-08-23 03:02:51 +05:30
akadeepesh 402266162b feat: organize contextzip output workspace 2026-08-23 03:02:38 +05:30
akadeepesh bcd89d2ac5 feat: apply project config to file selection 2026-08-23 03:02:31 +05:30
akadeepesh f0bbcf5a24 feat: add project-level contextzip configuration 2026-08-23 03:02:22 +05:30
akadeepesh 275fcb5387 feat: add cz as contextzip cli alias 2026-08-23 03:02:09 +05:30
akadeepesh b25406898c docs: document monorepo detection and workspace config; bump to 0.3.5
- README: expand framework detection section, new "Workspace
  location" section, drop stale exports/ mention left over from
  the eod/handoff removal
- Add CHANGELOG.md
- Bump version 0.3.4 -> 0.3.5 (pyproject.toml, __init__.py)
v0.3.5
2026-08-09 19:59:28 +05:30
akadeepesh f0b0f6779c feat(config): configurable .contextzip/ workspace location
Adds a precedence chain for where .contextzip/ is created:
env var (CONTEXTZIP_WORKSPACE_LOCATION) > project config
(.contextzip.json, git-committed, team-shared) > personal config
(per-machine, contextzip config --set-workspace) > default
(git-root, unchanged behavior).

Also fixes a latent bug this surfaced: .gitignore registration
derived git_root as workspace.parent, which only held true when
the workspace was always directly under git root. Now derives it
independently via _find_git_root and only registers .gitignore
when the workspace is actually inside the repo.

New: project_config.py (loads .contextzip.json), config.py
get/save/delete_workspace_location, cli.py --set-workspace/
--reset-workspace on `contextzip config`.
2026-08-09 19:59:01 +05:30
akadeepesh 9032a91ccf feat(detector): scan subdirectories for framework markers
Detection previously only checked project_dir itself, so a monorepo
like root/frontend/package.json + root/backend/requirements.txt
detected nothing and fell through to only the universal base
exclusion rules — leaving node_modules/, .venv/, etc. unexcluded
except by whatever .gitignore happened to catch.

Now scans project_dir plus a shallow, bounded subdirectory tree
(depth 2), skipping dependency/build dirs (node_modules, .venv,
.git, etc.) so it never walks into a large dependency tree. Runs
unconditionally, not just when root comes up empty, since a
root-level marker doesn't imply there's nothing else to find in
sibling directories.

DetectionResult now tracks which subdirectory each ecosystem was
found in (`sources`), surfaced in the CLI panel, e.g.
"Next.js (frontend/) + FastAPI (backend/)".
2026-08-09 19:58:46 +05:30
akadeepesh 64ff135102 Remove Claude.ai session key handling and related artifact fetching functionality 2026-08-09 04:15:04 +05:30
akadeepesh d8faf3acf2 chore: bump version to 0.4.0, add CHANGELOG entry and README section for eod/handoff v0.3.4 2026-07-17 08:10:35 +05:30
akadeepesh 5b54f95390 feat(cli): add eod and handoff subcommands, extend config with session key management 2026-07-17 08:10:21 +05:30
akadeepesh a140a3675d feat(cli_display,cli_onboard): add eod/handoff result panel and session key onboarding 2026-07-17 08:10:15 +05:30
akadeepesh 7a3580e396 feat(clipboard): add text-mode clipboard for eod/handoff prompts 2026-07-17 08:10:06 +05:30
akadeepesh 9e80971a1b refactor(packager,rules): generalise _ensure_gitignore and exclude exports/ from file scanning 2026-07-17 08:06:41 +05:30
akadeepesh 81e8ce3d6f feat(brief): add eod/handoff prompt orchestrator 2026-07-17 08:06:29 +05:30
akadeepesh 752f6261e2 feat(claude): add conversation export locator and artifact fetcher 2026-07-17 08:06:19 +05:30
akadeepesh 0126a909e8 feat(code_changes): add three-case file diff resolution for eod/handoff 2026-07-17 08:06:07 +05:30
akadeepesh f73902698f feat(config): add Claude session key storage alongside Gemini key 2026-07-17 08:05:58 +05:30
akadeepesh 4a4562b366 feat(markers): add per-branch checkpoint storage for eod/handoff 2026-07-17 08:03:28 +05:30
akadeepesh a533ad076f feat(git): add branch-aware primitives for eod/handoff diff resolution 2026-07-17 08:03:17 +05:30
akadeepesh 10247933b3 chore: bump version to 0.3.3 v0.3.3 2026-05-29 21:55:09 +05:30
akadeepesh 2de59c0b1c fix(packaging): include all subpackages in wheel by removing explicit allowlist 2026-05-29 21:53:59 +05:30
akadeepesh 859db2d24e feat: add Python API for contextzip with functions for git changes and file management 2026-05-25 16:27:09 +05:30
akadeepesh 55beeec917 chore: bump version to 0.3.2 and update changelog for new API features v0.3.2 2026-05-25 13:52:51 +05:30
akadeepesh 594257ec9b feat: add contextzip watch subcommand for automatic error detection and packaging 2026-05-25 13:52:29 +05:30
akadeepesh 79c22fc22b feat: add public API for contextzip with functions for git changes and file management
fix: revert version to 0.3.0 and update __all__ exports in __init__.py
feat: implement create_zip_silent for silent ZIP creation without console output
2026-05-25 13:50:05 +05:30
akadeepesh 4e15f2b9e6 chore: bump version to 0.3.1 v0.3.1 2026-05-25 13:46:48 +05:30
Deepesh KumarandGitHub 9aef7767f4 feat: terminal error watcher with automatic debug context generation (#9) 2026-05-25 13:45:05 +05:30
akadeepesh 06461ef644 fix(gemini): update default model identifier to gemini-2.5-flash-lite
refactor(filters): improve path handling in resolve_files function

cleanup(packager): remove legacy _safe_name helper function
2026-05-25 13:42:11 +05:30
akadeepesh 88ce0f9754 docs: update README with watch command documentation
Adds Terminal error watcher section covering the full flow, ZIP contents
table, Ctrl+C fallback, supported frameworks, and PTY/Windows note.
Updates features list and subcommands reference.
2026-05-25 13:41:59 +05:30
akadeepesh 1c05bd8997 feat(cli): add watch subcommand wired to watcher module
Adds `contextzip watch -- COMMAND [ARGS]` to the CLI group.
Runs ecosystem detection, prints the Windows PTY warning where relevant,
and delegates to watcher.run_watch().
2026-05-25 13:41:26 +05:30
akadeepesh 572edee026 refactor(cli): split cli.py into four focused modules
cli.py was 1,100+ lines. Extracted with no behaviour changes:
- cli_display.py  — all Rich rendering helpers
- cli_ai.py       — AI selection orchestration + normalize_pattern
- cli_onboard.py  — Gemini API key onboarding flow
cli.py retains only Click routing and _run().
2026-05-25 13:41:09 +05:30
akadeepesh 2d1aee7d7d feat: add watcher module for process spawning and debug packaging
Spawns child process via subprocess.Popen, buffers output across two
daemon reader threads, detects errors via polling, and renders the D/S
prompt using termios raw mode (Unix) / msvcrt (Windows).
Writes debug-context.zip flat: prompt.txt, terminal-error.txt, source-files.zip.
2026-05-25 13:40:54 +05:30
akadeepesh a9f5d0ac58 feat: add error_parser module for terminal output processing
Handles the full pipeline: ANSI stripping, error block detection,
stack trace path extraction, noise removal, and prompt.txt generation.
Searches backward through the buffer to always find the most recent error.
2026-05-25 13:40:46 +05:30
akadeepesh f3dd7ef1b9 feat(rules): add error detection pattern sets for Python and Node.js
Add contextzip/rules/errors/ with python.py and node.py.
Each file exports ERROR_START_PATTERNS, PATH_PATTERNS, and NOISE_PATTERNS
covering Python/Django/FastAPI and Node.js/Next.js/React respectively.
2026-05-25 13:40:36 +05:30
akadeepesh eacf85f0b8 (formatting) : format code with ruff formatter. 2026-05-24 02:23:12 +05:30
akadeepesh 15192e2048 chore: bump version to 0.2.4 v0.3.0 2026-05-24 01:58:31 +05:30
akadeepesh 4ac4b82d62 feat: add AI-powered file selection with --prompt flag and onboarding flow 2026-05-24 01:57:38 +05:30