crackerjack 0.26.0__tar.gz → 0.27.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of crackerjack might be problematic. Click here for more details.

Files changed (46) hide show
  1. {crackerjack-0.26.0/crackerjack → crackerjack-0.27.0}/.gitignore +11 -0
  2. {crackerjack-0.26.0 → crackerjack-0.27.0}/.pre-commit-config-ai.yaml +54 -34
  3. crackerjack-0.27.0/.pre-commit-config-fast.yaml +69 -0
  4. {crackerjack-0.26.0 → crackerjack-0.27.0}/.pre-commit-config.yaml +23 -4
  5. {crackerjack-0.26.0 → crackerjack-0.27.0}/CLAUDE.md +226 -0
  6. {crackerjack-0.26.0 → crackerjack-0.27.0}/PKG-INFO +2 -1
  7. {crackerjack-0.26.0 → crackerjack-0.27.0/crackerjack}/.gitignore +11 -0
  8. {crackerjack-0.26.0 → crackerjack-0.27.0}/crackerjack/.pre-commit-config-ai.yaml +54 -34
  9. {crackerjack-0.26.0 → crackerjack-0.27.0}/crackerjack/.pre-commit-config.yaml +23 -4
  10. {crackerjack-0.26.0 → crackerjack-0.27.0}/crackerjack/__main__.py +22 -1
  11. crackerjack-0.27.0/crackerjack/crackerjack.py +2597 -0
  12. {crackerjack-0.26.0 → crackerjack-0.27.0/crackerjack}/pyproject.toml +67 -29
  13. {crackerjack-0.26.0/crackerjack → crackerjack-0.27.0}/pyproject.toml +68 -30
  14. {crackerjack-0.26.0 → crackerjack-0.27.0}/tests/test_crackerjack.py +22 -12
  15. {crackerjack-0.26.0 → crackerjack-0.27.0}/tests/test_crackerjack_runner.py +1 -0
  16. {crackerjack-0.26.0 → crackerjack-0.27.0}/tests/test_structured_errors.py +2 -0
  17. {crackerjack-0.26.0 → crackerjack-0.27.0}/uv.lock +12 -1
  18. crackerjack-0.26.0/crackerjack/crackerjack.py +0 -1276
  19. {crackerjack-0.26.0 → crackerjack-0.27.0}/.envrc +0 -0
  20. {crackerjack-0.26.0 → crackerjack-0.27.0}/.github/FUNDING.yml +0 -0
  21. {crackerjack-0.26.0 → crackerjack-0.27.0}/.libcst.codemod.yaml +0 -0
  22. {crackerjack-0.26.0 → crackerjack-0.27.0}/LICENSE +0 -0
  23. {crackerjack-0.26.0 → crackerjack-0.27.0}/README-AI-AGENT.md +0 -0
  24. {crackerjack-0.26.0 → crackerjack-0.27.0}/README.md +0 -0
  25. {crackerjack-0.26.0 → crackerjack-0.27.0}/RULES.md +0 -0
  26. {crackerjack-0.26.0 → crackerjack-0.27.0}/crackerjack/.libcst.codemod.yaml +0 -0
  27. {crackerjack-0.26.0 → crackerjack-0.27.0}/crackerjack/.pdm.toml +0 -0
  28. {crackerjack-0.26.0 → crackerjack-0.27.0}/crackerjack/__init__.py +0 -0
  29. {crackerjack-0.26.0 → crackerjack-0.27.0}/crackerjack/errors.py +0 -0
  30. {crackerjack-0.26.0 → crackerjack-0.27.0}/crackerjack/interactive.py +0 -0
  31. {crackerjack-0.26.0 → crackerjack-0.27.0}/crackerjack/py313.py +0 -0
  32. {crackerjack-0.26.0 → crackerjack-0.27.0}/tests/TESTING.md +0 -0
  33. {crackerjack-0.26.0 → crackerjack-0.27.0}/tests/__init__.py +0 -0
  34. {crackerjack-0.26.0 → crackerjack-0.27.0}/tests/conftest.py +0 -0
  35. {crackerjack-0.26.0 → crackerjack-0.27.0}/tests/data/comments_sample.txt +0 -0
  36. {crackerjack-0.26.0 → crackerjack-0.27.0}/tests/data/docstrings_sample.txt +0 -0
  37. {crackerjack-0.26.0 → crackerjack-0.27.0}/tests/data/expected_comments_sample.txt +0 -0
  38. {crackerjack-0.26.0 → crackerjack-0.27.0}/tests/data/init.py +0 -0
  39. {crackerjack-0.26.0 → crackerjack-0.27.0}/tests/test_errors.py +0 -0
  40. {crackerjack-0.26.0 → crackerjack-0.27.0}/tests/test_interactive.py +0 -0
  41. {crackerjack-0.26.0 → crackerjack-0.27.0}/tests/test_interactive_run.py +0 -0
  42. {crackerjack-0.26.0 → crackerjack-0.27.0}/tests/test_main.py +0 -0
  43. {crackerjack-0.26.0 → crackerjack-0.27.0}/tests/test_multiline_functions.py +0 -0
  44. {crackerjack-0.26.0 → crackerjack-0.27.0}/tests/test_py313_advanced.py +0 -0
  45. {crackerjack-0.26.0 → crackerjack-0.27.0}/tests/test_py313_features.py +0 -0
  46. {crackerjack-0.26.0 → crackerjack-0.27.0}/tests/test_pytest_features.py +0 -0
@@ -18,3 +18,14 @@
18
18
  /coverage.json
19
19
  /test-results.xml
20
20
  /.coverage
21
+
22
+ # AI agent output files
23
+ /hooks-analysis.json
24
+ /quality-metrics.json
25
+ /project-structure.json
26
+ /error-context.json
27
+ /ai-agent-summary.json
28
+ /bandit-report.json
29
+
30
+ # Autotyping cache
31
+ .autotyping-cache/
@@ -1,105 +1,112 @@
1
+ # AI-optimized pre-commit hooks for comprehensive analysis and structured output
2
+ # Designed for AI agent workflows with enhanced reporting and metrics
3
+
1
4
  repos:
2
- # File structure and format validators - check structure first
5
+ # Group 1: File Structure & Format Validation (parallel-safe, fast)
3
6
  - repo: https://github.com/pre-commit/pre-commit-hooks
4
7
  rev: v5.0.0
5
8
  hooks:
6
9
  - id: trailing-whitespace
7
10
  name: trailing-whitespace
8
- verbose: true
11
+ stages: [pre-commit]
9
12
  - id: end-of-file-fixer
10
13
  name: end-of-file-fixer
11
- verbose: true
14
+ stages: [pre-commit]
12
15
  - id: check-yaml
13
16
  name: check-yaml
14
- verbose: true
17
+ stages: [pre-commit]
15
18
  - id: check-toml
16
19
  name: check-toml
17
- verbose: true
20
+ stages: [pre-commit]
18
21
  - id: check-added-large-files
19
22
  name: check-added-large-files
20
- verbose: true
23
+ stages: [pre-commit]
21
24
 
25
+ # Group 2: Project Configuration Management
22
26
  - repo: https://github.com/abravalheri/validate-pyproject
23
27
  rev: v0.24.1
24
28
  hooks:
25
29
  - id: validate-pyproject
26
- verbose: true
30
+ stages: [pre-commit]
27
31
 
28
32
  - repo: https://github.com/tox-dev/pyproject-fmt
29
33
  rev: "v2.6.0"
30
34
  hooks:
31
35
  - id: pyproject-fmt
32
36
  args: ["-n"]
33
- verbose: true
37
+ stages: [pre-commit]
34
38
 
35
- # Package management - once structure is valid
36
39
  - repo: https://github.com/astral-sh/uv-pre-commit
37
- rev: 0.7.15
40
+ rev: 0.7.21
38
41
  hooks:
39
42
  - id: uv-lock
40
43
  files: ^pyproject\.toml$
41
- verbose: true
44
+ stages: [pre-commit]
42
45
 
43
- # Security check - early to prevent credential leaks
46
+ # Group 3: Security (early detection, critical)
44
47
  - repo: https://github.com/Yelp/detect-secrets
45
48
  rev: v1.5.0
46
49
  hooks:
47
50
  - id: detect-secrets
48
51
  exclude: 'uv\.lock|pyproject\.toml|tests/.*|docs/.*|.*\.md'
49
- verbose: true
52
+ stages: [pre-commit]
50
53
 
51
- # Code quality tier 1 - quick fixes
54
+ # Group 4: Code Quality & Style (fast formatting)
52
55
  - repo: https://github.com/codespell-project/codespell
53
56
  rev: v2.4.1
54
57
  hooks:
55
58
  - id: codespell
56
- verbose: true
57
59
  additional_dependencies:
58
60
  - tomli
61
+ stages: [pre-commit]
59
62
 
60
63
  - repo: https://github.com/astral-sh/ruff-pre-commit
61
- rev: v0.12.1
64
+ rev: v0.12.3
62
65
  hooks:
63
66
  - id: ruff-check
64
- verbose: true
65
- args: [--output-format=json]
67
+ args: ["--output-format=json", "--fix"]
68
+ stages: [pre-commit]
66
69
  - id: ruff-format
67
- verbose: true
70
+ stages: [pre-commit]
68
71
 
69
72
  - repo: https://github.com/executablebooks/mdformat
70
- rev: 0.7.18
73
+ rev: 0.7.22
71
74
  hooks:
72
75
  - id: mdformat
73
76
  additional_dependencies:
74
77
  - mdformat-ruff
78
+ stages: [pre-commit]
75
79
 
76
- # Code quality tier 2 - analysis
80
+ # Group 5: Static Analysis (comprehensive, slower)
77
81
  - repo: https://github.com/jendrikseipp/vulture
78
82
  rev: 'v2.14'
79
83
  hooks:
80
84
  - id: vulture
81
- verbose: true
85
+ args: ["--verbose"]
86
+ stages: [pre-commit]
82
87
 
83
88
  - repo: https://github.com/fredrikaverpil/creosote
84
89
  rev: v4.0.3
85
90
  hooks:
86
91
  - id: creosote
87
- verbose: true
92
+ args: ["--verbose"]
93
+ stages: [pre-commit]
88
94
 
89
95
  - repo: https://github.com/rohaquinlop/complexipy-pre-commit
90
96
  rev: v3.0.0
91
97
  hooks:
92
98
  - id: complexipy
93
- args: ["-d", "low", "-j"]
94
- verbose: true
99
+ args: ["-d", "low", "--output", "complexipy.json"]
100
+ stages: [pre-commit]
95
101
 
96
102
  - repo: https://github.com/dosisod/refurb
97
103
  rev: v2.1.0
98
104
  hooks:
99
105
  - id: refurb
100
- verbose: true
106
+ args: ["--quiet"]
107
+ stages: [pre-commit]
101
108
 
102
- # Code quality tier 3 - thorough checks
109
+ # Group 6: Type Checking & Enhancement (most expensive)
103
110
  - repo: local
104
111
  hooks:
105
112
  - id: autotyping
@@ -109,25 +116,38 @@ repos:
109
116
  - --aggressive
110
117
  - --only-without-imports
111
118
  - --guess-common-names
119
+ - --cache-dir=.autotyping-cache
120
+ - --workers=4
121
+ - --max-line-length=88
122
+ - --exclude-name=test_*,conftest
112
123
  - crackerjack
113
124
  types_or: [ python, pyi ]
114
125
  language: python
115
- files: \.py$
116
- verbose: true
126
+ files: ^crackerjack/.*\.py$
127
+ stages: [pre-commit]
117
128
  additional_dependencies:
118
129
  - autotyping>=24.3.0
119
130
  - libcst>=1.1.0
120
131
 
121
132
  - repo: https://github.com/PyCQA/bandit
122
- rev: '1.8.5'
133
+ rev: '1.8.6'
123
134
  hooks:
124
135
  - id: bandit
125
- args: ["-c", "pyproject.toml", "--format", "json"]
126
- verbose: true
136
+ args: ["-c", "pyproject.toml", "-f", "json", "-o", "bandit-report.json", "-r", "-ll"]
137
+ stages: [pre-commit]
127
138
 
128
139
  - repo: https://github.com/RobertCraigie/pyright-python
129
- rev: v1.1.402
140
+ rev: v1.1.403
130
141
  hooks:
131
142
  - id: pyright
132
- verbose: true
133
143
  args: ["--outputjson"]
144
+ stages: [pre-commit]
145
+
146
+ # Group 7: Documentation & Security Enhancement (AI-specific)
147
+ # pydocstyle temporarily disabled - conflicts with code cleaning functionality
148
+ # - repo: https://github.com/PyCQA/pydocstyle
149
+ # rev: 6.3.0
150
+ # hooks:
151
+ # - id: pydocstyle
152
+ # args: ["--config=pyproject.toml"]
153
+ # stages: [pre-commit]
@@ -0,0 +1,69 @@
1
+ # Fast pre-commit hooks for development workflow (target: <5s total)
2
+ repos:
3
+ # Tier 1: Basic structure validation (1.5s)
4
+ - repo: https://github.com/pre-commit/pre-commit-hooks
5
+ rev: v5.0.0
6
+ hooks:
7
+ - id: trailing-whitespace
8
+ name: trailing-whitespace
9
+ stages: [pre-commit]
10
+ - id: end-of-file-fixer
11
+ name: end-of-file-fixer
12
+ stages: [pre-commit]
13
+ - id: check-yaml
14
+ name: check-yaml
15
+ stages: [pre-commit]
16
+ - id: check-toml
17
+ name: check-toml
18
+ stages: [pre-commit]
19
+ - id: check-added-large-files
20
+ name: check-added-large-files
21
+ stages: [pre-commit]
22
+
23
+ - repo: https://github.com/tox-dev/pyproject-fmt
24
+ rev: "v2.6.0"
25
+ hooks:
26
+ - id: pyproject-fmt
27
+ args: ["-n"]
28
+ stages: [pre-commit]
29
+
30
+ # Tier 2: Package management (0.5s)
31
+ - repo: https://github.com/astral-sh/uv-pre-commit
32
+ rev: 0.7.21
33
+ hooks:
34
+ - id: uv-lock
35
+ files: ^pyproject\.toml$
36
+ stages: [pre-commit]
37
+
38
+ # Tier 3: Security (early detection) (1s)
39
+ - repo: https://github.com/Yelp/detect-secrets
40
+ rev: v1.5.0
41
+ hooks:
42
+ - id: detect-secrets
43
+ exclude: 'uv\.lock|pyproject\.toml|tests/.*|docs/.*|.*\.md'
44
+ stages: [pre-commit]
45
+
46
+ # Tier 4: Quick formatting (1.5s)
47
+ - repo: https://github.com/codespell-project/codespell
48
+ rev: v2.4.1
49
+ hooks:
50
+ - id: codespell
51
+ additional_dependencies:
52
+ - tomli
53
+ stages: [pre-commit]
54
+
55
+ - repo: https://github.com/astral-sh/ruff-pre-commit
56
+ rev: v0.12.3
57
+ hooks:
58
+ - id: ruff-check
59
+ stages: [pre-commit]
60
+ - id: ruff-format
61
+ stages: [pre-commit]
62
+
63
+ - repo: https://github.com/executablebooks/mdformat
64
+ rev: 0.7.22
65
+ hooks:
66
+ - id: mdformat
67
+ additional_dependencies:
68
+ - mdformat-ruff
69
+ stages: [pre-commit]
@@ -55,29 +55,33 @@ repos:
55
55
  additional_dependencies:
56
56
  - mdformat-ruff
57
57
 
58
- # Code quality tier 2 - analysis
58
+ # Code quality tier 2 - analysis (moved to pre-push for performance)
59
59
  - repo: https://github.com/jendrikseipp/vulture
60
60
  rev: 'v2.14'
61
61
  hooks:
62
62
  - id: vulture
63
+ stages: [pre-push, manual]
63
64
 
64
65
  - repo: https://github.com/fredrikaverpil/creosote
65
66
  rev: v4.0.3
66
67
  hooks:
67
68
  - id: creosote
69
+ stages: [pre-push, manual]
68
70
 
69
71
  - repo: https://github.com/rohaquinlop/complexipy-pre-commit
70
72
  rev: v3.0.0
71
73
  hooks:
72
74
  - id: complexipy
73
75
  args: ["-d", "low"]
76
+ stages: [pre-push, manual]
74
77
 
75
78
  - repo: https://github.com/dosisod/refurb
76
79
  rev: v2.1.0
77
80
  hooks:
78
81
  - id: refurb
82
+ stages: [pre-push, manual]
79
83
 
80
- # Code quality tier 3 - thorough checks
84
+ # Code quality tier 3 - thorough checks (moved to pre-push for performance)
81
85
  - repo: local
82
86
  hooks:
83
87
  - id: autotyping
@@ -87,10 +91,15 @@ repos:
87
91
  - --aggressive
88
92
  - --only-without-imports
89
93
  - --guess-common-names
94
+ - --cache-dir=.autotyping-cache
95
+ - --workers=4
96
+ - --max-line-length=88
97
+ - --exclude-name=test_*,conftest
90
98
  - crackerjack
91
99
  types_or: [ python, pyi ]
92
100
  language: python
93
- files: \.py$
101
+ files: ^crackerjack/.*\.py$
102
+ stages: [pre-push, manual]
94
103
  additional_dependencies:
95
104
  - autotyping>=24.3.0
96
105
  - libcst>=1.1.0
@@ -99,9 +108,19 @@ repos:
99
108
  rev: '1.8.6'
100
109
  hooks:
101
110
  - id: bandit
102
- args: ["-c", "pyproject.toml"]
111
+ args: ["-c", "pyproject.toml", "-r", "-ll"]
112
+ stages: [pre-push, manual]
103
113
 
104
114
  - repo: https://github.com/RobertCraigie/pyright-python
105
115
  rev: v1.1.403
106
116
  hooks:
107
117
  - id: pyright
118
+ stages: [pre-push, manual]
119
+
120
+ # Additional quality and security checks
121
+ - repo: https://github.com/PyCQA/pydocstyle
122
+ rev: 6.3.0
123
+ hooks:
124
+ - id: pydocstyle
125
+ args: ["--config=pyproject.toml"]
126
+ stages: [pre-push, manual]
@@ -44,6 +44,12 @@ python -m crackerjack -r
44
44
 
45
45
  # Enable verbose output
46
46
  python -m crackerjack -v
47
+
48
+ # Run with fast pre-commit mode (default)
49
+ python -m crackerjack
50
+
51
+ # Run with comprehensive pre-commit checks
52
+ python -m crackerjack --comprehensive
47
53
  ```
48
54
 
49
55
  ### Testing
@@ -80,6 +86,69 @@ python -m crackerjack -t --benchmark-regression --benchmark-regression-threshold
80
86
  python -m crackerjack --ai-agent -t
81
87
  ```
82
88
 
89
+ ### Running a Single Test
90
+
91
+ ```bash
92
+ # Run a specific test file
93
+ uv run pytest tests/test_crackerjack.py
94
+
95
+ # Run a specific test function
96
+ uv run pytest tests/test_crackerjack.py::test_code_cleaner_remove_docstrings
97
+
98
+ # Run tests matching a pattern
99
+ uv run pytest -k "test_code_cleaner"
100
+
101
+ # Run with verbose output
102
+ uv run pytest -v tests/test_crackerjack.py
103
+
104
+ # Run with no parallel execution
105
+ uv run pytest -n 0 tests/test_crackerjack.py
106
+ ```
107
+
108
+ ### Benchmark Testing Strategy
109
+
110
+ Benchmarks should be run automatically at strategic intervals to catch performance regressions early:
111
+
112
+ #### **Recommended Frequency:**
113
+
114
+ **🚀 Critical Scenarios (Always Run Benchmarks):**
115
+
116
+ ```bash
117
+ # Before major releases
118
+ python -m crackerjack -t --benchmark-regression --benchmark-regression-threshold=5.0
119
+
120
+ # After significant algorithmic changes (manual trigger)
121
+ python -m crackerjack -t --benchmark --ai-agent
122
+ ```
123
+
124
+ **📊 Regular Monitoring (Weekly):**
125
+
126
+ ```bash
127
+ # Weekly automated benchmark monitoring
128
+ python -m crackerjack -t --benchmark-regression --benchmark-regression-threshold=10.0
129
+ ```
130
+
131
+ **🎲 Random Sampling (10% of commits):**
132
+
133
+ ```bash
134
+ # Stochastic performance monitoring (implement in CI/CD)
135
+ # Run on ~10% of commits to catch gradual performance drift
136
+ python -m crackerjack -t --benchmark
137
+ ```
138
+
139
+ #### **When to Run Benchmarks:**
140
+
141
+ 1. **Always:** Before releases, after performance-critical changes
142
+ 1. **Weekly:** Automated monitoring for performance drift detection
143
+ 1. **Randomly:** 10% of commits for stochastic performance sampling
144
+ 1. **On-demand:** When investigating performance issues
145
+
146
+ #### **Benchmark Thresholds:**
147
+
148
+ - **5% regression threshold:** For release candidates and critical changes
149
+ - **10% regression threshold:** For regular monitoring and development
150
+ - **Custom thresholds:** Adjust based on specific performance requirements
151
+
83
152
  ### Linting and Code Quality
84
153
 
85
154
  ```bash
@@ -238,6 +307,7 @@ Crackerjack follows a single-file architecture for simplicity and maintainabilit
238
307
  | `-v` | `--verbose` | Enable verbose output |
239
308
  | `-s` | `--skip-hooks` | Skip pre-commit hooks |
240
309
  | `-n` | `--no-config-updates` | Skip configuration updates |
310
+ | | `--comprehensive` | Use comprehensive pre-commit hooks (slower but thorough) |
241
311
 
242
312
  ### Version Management
243
313
 
@@ -743,7 +813,163 @@ This enhancement ensures that the code cleaner (`-x` flag) can handle edge cases
743
813
 
744
814
  **Never skip crackerjack verification** - it's the project's standard quality gate.
745
815
 
816
+ ## Pre-commit Hook Maintenance
817
+
818
+ ### Monthly Maintenance Tasks
819
+
820
+ 1. **Update hook versions**: Run `pre-commit autoupdate` to get latest versions
821
+ 1. **Review security advisories**: Check for vulnerabilities in hook dependencies
822
+ 1. **Monitor performance**: Watch for hooks taking longer than expected
823
+ 1. **Check deprecation warnings**: Address any warnings from tools like autotyping
824
+
825
+ ### Performance Optimization
826
+
827
+ - **Autotyping monitoring**: Currently 7.3s runtime (highest cost hook)
828
+ - **Grouping strategy**: Consider grouping related hooks for better failure reporting
829
+ - **CI/CD integration**: Move expensive operations to pre-push hooks for CI/CD
830
+
831
+ ### Security Maintenance
832
+
833
+ - **Regular vulnerability scanning**: Use `pre-commit autoupdate` with caution on untrusted hooks
834
+ - **Source verification**: Ensure all hooks come from trusted, actively maintained repositories
835
+ - **Dependency monitoring**: Watch for security issues in hook dependencies via Snyk or similar tools
836
+
837
+ ### Quality Metrics to Monitor
838
+
839
+ - Test coverage should remain ≥90%
840
+ - Zero security vulnerabilities (Bandit)
841
+ - Zero type errors (Pyright)
842
+ - Zero dead code (Vulture)
843
+ - Zero unused dependencies (Creosote)
844
+ - Low complexity maintained (Complexipy)
845
+
846
+ ### Hook Performance Optimization (Enhanced July 2025)
847
+
848
+ **🚀 Fast Development Mode (Default):**
849
+
850
+ - Uses `.pre-commit-config-fast.yaml` for regular commits
851
+ - Target execution time: \<5 seconds
852
+ - Includes: structure validation, formatting, basic security checks
853
+ - Command: `python -m crackerjack` (default behavior)
854
+
855
+ **🔍 Comprehensive Analysis Mode:**
856
+
857
+ - Uses `.pre-commit-config.yaml` for thorough analysis
858
+ - Target execution time: \<30 seconds
859
+ - Includes: all checks + type analysis, complexity, dead code detection
860
+ - Command: `python -m crackerjack --comprehensive`
861
+
862
+ **📦 Pre-push Hooks:**
863
+
864
+ - Expensive operations automatically moved to pre-push stage
865
+ - Runs comprehensive analysis before pushing changes
866
+ - Prevents performance bottlenecks during development
867
+ - Install: `pre-commit install --hook-type pre-push`
868
+
869
+ ### Hook Configuration Status (Last Audit: July 2025)
870
+
871
+ ✅ All hooks current and secure
872
+ ✅ Performance optimized with dual-mode configuration
873
+ ✅ Fast mode: \<5s execution time
874
+ ✅ Comprehensive mode: \<30s execution time
875
+ ✅ 90% test coverage achieved
876
+ ✅ 0 security vulnerabilities found
877
+
746
878
  ## Development Memories
747
879
 
748
880
  - Non-critical type errors are still errors that need to be fixed to pass crackerjack validation
749
881
  - test directory files need to pass pyright tests as well in order for crackerjack to successfully complete
882
+
883
+ ## AI Agent Integration
884
+
885
+ When running with `--ai-agent` flag, Crackerjack produces structured output optimized for AI assistants:
886
+
887
+ ### Generated Files
888
+
889
+ - **`test-results.xml`**: JUnit XML format test results with detailed test outcomes
890
+ - **`coverage.json`**: JSON coverage report with line-by-line coverage data
891
+ - **`benchmark.json`**: Benchmark results in JSON format (when benchmarks are run)
892
+ - **`ai-agent-summary.json`**: Summary of the entire run with status and actions performed
893
+
894
+ ### Example AI-Optimized Commands
895
+
896
+ ```bash
897
+ # Run tests with structured output for AI analysis
898
+ python -m crackerjack --ai-agent -t
899
+
900
+ # Run full workflow with AI output
901
+ python -m crackerjack --ai-agent -a patch
902
+
903
+ # Run benchmarks with AI output
904
+ python -m crackerjack --ai-agent -t --benchmark
905
+ ```
906
+
907
+ See README-AI-AGENT.md for detailed information about AI agent integration.
908
+
909
+ ## Test Execution Details
910
+
911
+ ### Test Configuration (pytest.ini_options)
912
+
913
+ - **asyncio_mode**: "auto" - Automatic asyncio test detection and handling
914
+ - **testpaths**: ["tests", "crackerjack"] - Directories to search for tests
915
+ - **timeout**: 300 seconds default per test
916
+ - **timeout_method**: "thread" - Uses thread-based timeout mechanism
917
+ - **coverage**: Configured with --cov=crackerjack --cov-fail-under=42
918
+
919
+ ### Special Test Markers
920
+
921
+ - **unit**: Unit tests
922
+ - **benchmark**: Benchmark tests (disables parallel execution)
923
+ - **integration**: Integration tests
924
+ - **no_leaks**: Detect asyncio task leaks, thread leaks, and event loop blocking
925
+
926
+ ### Test Parallelization
927
+
928
+ Tests run in parallel by default using pytest-xdist. The number of workers is automatically determined based on:
929
+
930
+ - Project size (small/medium/large)
931
+ - Available CPU cores
932
+ - Benchmark mode (disables parallelization)
933
+ - User-specified `--test-workers` option
934
+
935
+ ### Benchmark Testing
936
+
937
+ When running benchmarks:
938
+
939
+ - Parallel execution is automatically disabled
940
+ - pytest-benchmark plugin is configured with optimized settings
941
+ - Results can be compared against previous runs for regression detection
942
+ - Benchmark results are saved in JSON format when using `--ai-agent`
943
+
944
+ ## Pre-commit Hook Configurations
945
+
946
+ ### Fast Mode (.pre-commit-config-fast.yaml)
947
+
948
+ Optimized for development speed (\<5s):
949
+
950
+ - Basic structure validation
951
+ - UV lock file updates
952
+ - Security checks (detect-secrets)
953
+ - Quick formatting (codespell, ruff)
954
+ - Markdown formatting (mdformat with ruff integration)
955
+
956
+ ### Comprehensive Mode (.pre-commit-config.yaml)
957
+
958
+ Full analysis suite (\<30s):
959
+
960
+ - All fast mode checks
961
+ - Type checking (pyright)
962
+ - Code modernization (refurb)
963
+ - Security scanning (bandit)
964
+ - Dead code detection (vulture)
965
+ - Unused dependency detection (creosote)
966
+ - Code complexity analysis (complexipy)
967
+ - Automatic type annotation (autotyping)
968
+
969
+ ### Pre-push Hooks
970
+
971
+ For expensive operations that should run before pushing:
972
+
973
+ - Install with: `pre-commit install --hook-type pre-push`
974
+ - Runs comprehensive analysis automatically
975
+ - Prevents pushing code that doesn't meet quality standards
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: crackerjack
3
- Version: 0.26.0
3
+ Version: 0.27.0
4
4
  Summary: Crackerjack: code quality toolkit
5
5
  Project-URL: documentation, https://github.com/lesleslie/crackerjack
6
6
  Project-URL: homepage, https://github.com/lesleslie/crackerjack
@@ -23,6 +23,7 @@ Classifier: Topic :: Software Development :: Testing
23
23
  Classifier: Topic :: Utilities
24
24
  Classifier: Typing :: Typed
25
25
  Requires-Python: >=3.13
26
+ Requires-Dist: aiofiles>=24.1
26
27
  Requires-Dist: autotyping>=24.9
27
28
  Requires-Dist: hatchling>=1.25
28
29
  Requires-Dist: keyring>=25.6
@@ -18,3 +18,14 @@
18
18
  /coverage.json
19
19
  /test-results.xml
20
20
  /.coverage
21
+
22
+ # AI agent output files
23
+ /hooks-analysis.json
24
+ /quality-metrics.json
25
+ /project-structure.json
26
+ /error-context.json
27
+ /ai-agent-summary.json
28
+ /bandit-report.json
29
+
30
+ # Autotyping cache
31
+ .autotyping-cache/