claude-code-generator 0.5.8__tar.gz → 0.6.1__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.
- {claude_code_generator-0.5.8/src/claude_code_generator.egg-info → claude_code_generator-0.6.1}/PKG-INFO +40 -3
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/README.md +37 -2
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/pyproject.toml +11 -3
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1/src/claude_code_generator.egg-info}/PKG-INFO +40 -3
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/claude_code_generator.egg-info/SOURCES.txt +75 -1
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/claude_code_generator.egg-info/requires.txt +2 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/__init__.py +1 -1
- claude_code_generator-0.6.1/src/code_generator/archive_run.py +255 -0
- claude_code_generator-0.6.1/src/code_generator/changelog.py +145 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/checklist.py +34 -6
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/_detect.py +4 -1
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/_dispatch.py +174 -25
- claude_code_generator-0.6.1/src/code_generator/commands/_resume.py +112 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/generate.py +357 -3
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/status.py +112 -2
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/effort.py +24 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/env.py +85 -2
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/gh/__init__.py +17 -0
- claude_code_generator-0.6.1/src/code_generator/gh/actions.py +134 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/gh/issues.py +45 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/git_ops.py +114 -0
- claude_code_generator-0.6.1/src/code_generator/manifest.py +168 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/_client_lifecycle.py +4 -0
- claude_code_generator-0.6.1/src/code_generator/orchestrator/agent_spec.py +220 -0
- claude_code_generator-0.6.1/src/code_generator/orchestrator/criteria_oracle.py +172 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/cycle_loop.py +115 -10
- claude_code_generator-0.6.1/src/code_generator/orchestrator/deviation_detector.py +127 -0
- claude_code_generator-0.6.1/src/code_generator/orchestrator/failure_report.py +150 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/phase1_plan.py +12 -6
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/phase2_review.py +4 -4
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/phase3_4_implement.py +5 -4
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/phase5_closure.py +24 -9
- claude_code_generator-0.6.1/src/code_generator/orchestrator/phase65_budget.py +69 -0
- claude_code_generator-0.6.1/src/code_generator/orchestrator/phase6_5_verify.py +1032 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/phase6_test.py +3 -2
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/phase7_commit.py +3 -2
- claude_code_generator-0.6.1/src/code_generator/orchestrator/phase8_ci_classifier.py +96 -0
- claude_code_generator-0.6.1/src/code_generator/orchestrator/phase8_finalization.py +305 -0
- claude_code_generator-0.6.1/src/code_generator/orchestrator/phase8_local_verify.py +145 -0
- claude_code_generator-0.6.1/src/code_generator/orchestrator/phase8_repair_loop.py +437 -0
- claude_code_generator-0.6.1/src/code_generator/orchestrator/phase8_workflow_gen.py +279 -0
- claude_code_generator-0.6.1/src/code_generator/orchestrator/scenario_builder.py +120 -0
- claude_code_generator-0.6.1/src/code_generator/orchestrator/sica.py +130 -0
- claude_code_generator-0.6.1/src/code_generator/orchestrator/tier_selector.py +74 -0
- claude_code_generator-0.6.1/src/code_generator/orchestrator/tier_t3.py +242 -0
- claude_code_generator-0.6.1/src/code_generator/orchestrator/tier_t4.py +331 -0
- claude_code_generator-0.6.1/src/code_generator/orchestrator/vigil.py +95 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/preflight.py +193 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/__init__.py +19 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-cycle-specializer.md +6 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-phase-0-complexity.md +10 -1
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-phase-1-planning.md +4 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-phase-2-batch-review.md +6 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-phase-3-implementation.md +10 -1
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-phase-5-final-review.md +9 -1
- claude_code_generator-0.6.1/src/code_generator/prompts/prompt-phase-6-5-verify.md +130 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-phase-6-test.md +1 -1
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-phase-7-commit.md +9 -3
- claude_code_generator-0.6.1/src/code_generator/prompts/prompt-phase-8-finalization.md +42 -0
- claude_code_generator-0.6.1/src/code_generator/prompts/prompt-phase-8-repair.md +52 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-review.md +10 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/__init__.py +17 -4
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/cache_breakpoints.py +10 -5
- claude_code_generator-0.6.1/src/code_generator/runner/codex_runner.py +323 -0
- claude_code_generator-0.6.1/src/code_generator/runner/gemini_runner.py +230 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/mcp.py +17 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/rate_limit.py +82 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/sdk_runner.py +12 -9
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/subprocess_runner.py +3 -1
- claude_code_generator-0.6.1/src/code_generator/semver.py +139 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/state.py +137 -0
- claude_code_generator-0.6.1/src/code_generator/surface_scanner.py +271 -0
- claude_code_generator-0.6.1/tests/test_agent_spec.py +286 -0
- claude_code_generator-0.6.1/tests/test_archive_run.py +219 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_bench_export.py +4 -4
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_cache_warmup.py +6 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_changelog.py +7 -1
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_checklist.py +220 -3
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_client_lifecycle.py +1 -0
- claude_code_generator-0.6.1/tests/test_codex_preflight.py +70 -0
- claude_code_generator-0.6.1/tests/test_codex_runner.py +233 -0
- claude_code_generator-0.6.1/tests/test_criteria_oracle.py +174 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_cycle_loop.py +41 -6
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_cycle_loop_multicycle.py +29 -14
- claude_code_generator-0.6.1/tests/test_cycle_loop_phase6_5.py +260 -0
- claude_code_generator-0.6.1/tests/test_cycle_loop_phase8.py +398 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_delta_planning.py +13 -7
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_detect.py +1 -1
- claude_code_generator-0.6.1/tests/test_deviation_detector.py +160 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_dispatch_graph_report.py +305 -89
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_effective_model_routing.py +4 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_effort.py +85 -2
- claude_code_generator-0.6.1/tests/test_failure_report.py +279 -0
- claude_code_generator-0.6.1/tests/test_gemini_preflight.py +86 -0
- claude_code_generator-0.6.1/tests/test_gemini_runner.py +196 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_generate.py +7 -4
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_generate_resume.py +52 -9
- claude_code_generator-0.6.1/tests/test_gh_actions.py +173 -0
- claude_code_generator-0.6.1/tests/test_gh_issues_create.py +79 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_git_ops.py +110 -1
- claude_code_generator-0.6.1/tests/test_git_ops_phase8.py +276 -0
- claude_code_generator-0.6.1/tests/test_manifest.py +245 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_memory_writers.py +2 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_ollama_hardening.py +2 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase0.py +4 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase5_precommit.py +15 -5
- claude_code_generator-0.6.1/tests/test_phase65_budget.py +81 -0
- claude_code_generator-0.6.1/tests/test_phase6_5_integration.py +360 -0
- claude_code_generator-0.6.1/tests/test_phase6_5_integration_cycle2.py +469 -0
- claude_code_generator-0.6.1/tests/test_phase6_5_prompt.py +127 -0
- claude_code_generator-0.6.1/tests/test_phase6_5_prompt_snapshot.py +87 -0
- claude_code_generator-0.6.1/tests/test_phase6_5_run.py +329 -0
- claude_code_generator-0.6.1/tests/test_phase6_5_state.py +238 -0
- claude_code_generator-0.6.1/tests/test_phase6_5_tiers.py +562 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase7.py +5 -2
- claude_code_generator-0.6.1/tests/test_phase8_access_control.py +231 -0
- claude_code_generator-0.6.1/tests/test_phase8_changelog.py +268 -0
- claude_code_generator-0.6.1/tests/test_phase8_ci_classifier.py +146 -0
- claude_code_generator-0.6.1/tests/test_phase8_finalization.py +595 -0
- claude_code_generator-0.6.1/tests/test_phase8_local_verify.py +216 -0
- claude_code_generator-0.6.1/tests/test_phase8_prompt_snapshots.py +91 -0
- claude_code_generator-0.6.1/tests/test_phase8_prompts.py +159 -0
- claude_code_generator-0.6.1/tests/test_phase8_repair_loop.py +429 -0
- claude_code_generator-0.6.1/tests/test_phase8_repair_sota.py +277 -0
- claude_code_generator-0.6.1/tests/test_phase8_semver.py +267 -0
- claude_code_generator-0.6.1/tests/test_phase8_state.py +266 -0
- claude_code_generator-0.6.1/tests/test_phase8_status.py +209 -0
- claude_code_generator-0.6.1/tests/test_phase8_surface_scanner.py +450 -0
- claude_code_generator-0.6.1/tests/test_phase8_trigger.py +253 -0
- claude_code_generator-0.6.1/tests/test_phase8_workflow_gen.py +198 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_prompt_prefix_snapshots.py +30 -5
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_prompt_prefix_stability.py +41 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_prompts.py +17 -0
- claude_code_generator-0.6.1/tests/test_resume.py +124 -0
- claude_code_generator-0.6.1/tests/test_scenario_builder.py +235 -0
- claude_code_generator-0.6.1/tests/test_sica.py +265 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_state.py +22 -22
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_status.py +644 -0
- claude_code_generator-0.6.1/tests/test_tier_selector.py +156 -0
- claude_code_generator-0.6.1/tests/test_tier_t3.py +265 -0
- claude_code_generator-0.6.1/tests/test_tier_t3_pass_rate.py +142 -0
- claude_code_generator-0.6.1/tests/test_tier_t4.py +256 -0
- claude_code_generator-0.6.1/tests/test_vigil.py +326 -0
- claude_code_generator-0.5.8/src/code_generator/commands/_resume.py +0 -73
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/LICENSE +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/setup.cfg +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/claude_code_generator.egg-info/dependency_links.txt +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/claude_code_generator.egg-info/entry_points.txt +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/claude_code_generator.egg-info/top_level.txt +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/agents.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/cli.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/__init__.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/_bench_io.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/_crash_recovery.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/_validators.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/bench.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/bench_compare.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/bench_export.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/init.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/optimize.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/review.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/exceptions.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/gh/core.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/gh/labels.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/gh/milestones.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/logging_setup.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/memory.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/__init__.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/_cache_warmup.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/_comments.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/_memory_writers.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/_phase5_precommit.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/cycle_prompts.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/ollama_budget.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/phase0_complexity.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/hashes.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-optimize-requirements.md +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/repo_info.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/requirements_structure.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/_telemetry.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/batch.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/compaction_pause.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/fake_runner.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/memory_tool.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/message_parsing.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/options.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/phase_telemetry.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/protocol.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/retry.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/soft_reset.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/state_guard.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/types.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/utils.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/state_retention.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/templates/__init__.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/templates/angular.md +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/templates/base.md +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/templates/fastapi.md +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/templates/finance.md +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/templates/fullstack.md +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/templates/nestjs.md +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/templates/python-cli.md +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_agents.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_bench.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_bench_compare.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_bench_fixture.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_bench_regression.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_cache_breakpoints.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_cache_ttl_ordering.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_claude_md.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_cli_io_logging.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_comments.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_commit_message.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_compaction_pause_handler.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_crash_recovery.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_cycle_ollama_model.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_cycle_prompts.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_dependencies.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_docs_no_default_max_turns.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_docs_ollama_model_guide.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_docs_ollama_pro.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_effort_routing_consistency.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_env.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_generate_ollama.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_gh.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_gh_labels.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_gh_milestones.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_gh_repo_threading.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_gh_submodules.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_init.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_logging_setup.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_max_turns_cli_flag.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_mcp.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_memory.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_memory_tool.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_message_parsing.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_no_max_turns_in_call_sites.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_no_max_turns_literal.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_non_goals_grep_guard.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_ollama_budget.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_ollama_rate_limit.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_optimize.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_options.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase1.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase2.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase2_cache_regression.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase2_multicycle_token_reduction.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase2_token_reduction.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase3_4.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase5.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase6.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase_mcp_regression.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase_telemetry.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase_token_logging.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_preflight.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_preflight_ollama.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_prompt_drift.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_rate_limit.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_repo_info.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_requirements_structure.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_retry.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_review.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_runner_protocol.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_runner_protocol_annotations.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_runner_types.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_runner_utils.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_sdk_runner.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_sdk_runner_shared.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_session_mode.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_state_guard.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_state_retention.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_subprocess_runner.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_telemetry.py +0 -0
- {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-code-generator
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.1
|
|
4
4
|
Summary: Orchestrator CLI that drives Claude Code end-to-end to generate whole projects from a requirements.md file.
|
|
5
5
|
Author: Silvio Baratto
|
|
6
6
|
License: MIT
|
|
@@ -26,7 +26,9 @@ Requires-Dist: rich
|
|
|
26
26
|
Provides-Extra: dev
|
|
27
27
|
Requires-Dist: pytest; extra == "dev"
|
|
28
28
|
Requires-Dist: pytest-asyncio; extra == "dev"
|
|
29
|
+
Requires-Dist: pytest-timeout; extra == "dev"
|
|
29
30
|
Requires-Dist: ruff; extra == "dev"
|
|
31
|
+
Requires-Dist: pyyaml; extra == "dev"
|
|
30
32
|
Provides-Extra: mcp
|
|
31
33
|
Requires-Dist: mcp<2.0,>=1.0; extra == "mcp"
|
|
32
34
|
Requires-Dist: serena-agent<2.0,>=1.1; extra == "mcp"
|
|
@@ -60,9 +62,12 @@ Phases 0, 1, and 2 inject a knowledge-graph report from [graphify](https://githu
|
|
|
60
62
|
**Install the CLI** (required to use graphify at all):
|
|
61
63
|
|
|
62
64
|
```bash
|
|
63
|
-
|
|
65
|
+
uv tool install --upgrade graphifyy # CLI binary is `graphify`
|
|
66
|
+
# or: pip install -U graphifyy
|
|
64
67
|
```
|
|
65
68
|
|
|
69
|
+
Requires graphify **>= 0.8.1** (idempotent `update`, stable node-id format).
|
|
70
|
+
|
|
66
71
|
**Seed the graph (one-time, per project)**: graphify's full LLM-driven build runs through the `/graphify` slash-command inside an AI assistant — *not* through the shell binary. From inside Claude Code (or any other graphify-supported assistant) run:
|
|
67
72
|
|
|
68
73
|
```
|
|
@@ -71,7 +76,7 @@ pipx install graphifyy # CLI binary is `graphify`
|
|
|
71
76
|
|
|
72
77
|
This produces `graphify-out/graph.json` and `graphify-out/GRAPH_REPORT.md`.
|
|
73
78
|
|
|
74
|
-
**Subsequent code-generator runs** will automatically refresh the graph with `graphify update .`
|
|
79
|
+
**Subsequent code-generator runs** will automatically refresh the graph with `graphify update .` — idempotent and AST-only (no LLM cost; `graph.json`/`GRAPH_REPORT.md` are only rewritten on real changes). A graph seeded by a pre-0.7.18 graphify is reseeded once automatically via `graphify update . --force` (still no LLM cost) and stamped. Doc / paper / image changes still need a manual `/graphify .` re-run inside your assistant.
|
|
75
80
|
|
|
76
81
|
Add to your project's `.gitignore`:
|
|
77
82
|
|
|
@@ -196,6 +201,38 @@ The `--model` tag you pass drives **every** phase (0 through 7). There is no per
|
|
|
196
201
|
- **Overridden under `provider == "ollama"`:** non-negotiable #1 (Max-only env strip is narrowed to `ANTHROPIC_AUTH_TOKEN` / `ANTHROPIC_BASE_URL` passthrough), #4 (no Anthropic overage telemetry — replaced by turn-count + wall-clock budgets), #8 (fixed-model-per-phase — replaced by single-model routing).
|
|
197
202
|
- **Preserved on every path:** #2 (never `--bare`), #3 (YOLO permissions), #5 (wait-and-resume on 429), #6 (fresh context per issue), #7 (atomic state writes), #9 (no default `max_turns`).
|
|
198
203
|
|
|
204
|
+
## Running against OpenAI Codex
|
|
205
|
+
|
|
206
|
+
An opt-in subcommand, `code-generator generate codex`, runs the full 0→7 pipeline against **one** OpenAI Codex CLI model instead of the Anthropic Max subscription — structurally identical to the Gemini/Ollama provider paths and gated by `provider == "codex"` inside `env.py`.
|
|
207
|
+
|
|
208
|
+
### One-time setup
|
|
209
|
+
|
|
210
|
+
1. Install the Codex CLI: `npm install -g @openai/codex`.
|
|
211
|
+
2. Authenticate with your ChatGPT subscription (zero API credits):
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
codex login # browser OAuth → ~/.codex/auth.json
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Preflight refuses to run if the `codex` binary is missing or no `~/.codex/auth.json` exists, and idempotently seeds the project dir as trusted in `~/.codex/config.toml` (so headless `codex exec` never hangs on the trust prompt — openai/codex #14547). `OPENAI_API_KEY` / `CODEX_API_KEY` are **stripped** before every spawn: a confirmed Codex bug (openai/codex #15151, #20099) silently bills API credits whenever `OPENAI_API_KEY` is set even with a valid OAuth session.
|
|
218
|
+
|
|
219
|
+
### Worked examples
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
# Plan + implement a whole repo on the default 2026 Codex model
|
|
223
|
+
code-generator generate codex --model gpt-5.5
|
|
224
|
+
|
|
225
|
+
# Resume without re-typing the model (resolved from state.json)
|
|
226
|
+
code-generator generate codex --continue
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
The `--model` tag drives **every** phase (0 through 7). It is persisted to `state.json` as `CycleState.codex_model` / `State.codex_model` so `--continue` resumes with the same model.
|
|
230
|
+
|
|
231
|
+
### What is overridden vs. preserved
|
|
232
|
+
|
|
233
|
+
- **Overridden under `provider == "codex"`:** #1 (strips the Anthropic list **and** `OPENAI_API_KEY` / `CODEX_API_KEY`; only `~/.codex/auth.json` authenticates), #4 (no Anthropic overage telemetry — turn/wall budgets + `usage_limit_reached`/`429` wait-and-resume), #8 (single-model routing).
|
|
234
|
+
- **Preserved on every path:** #2 (never `--bare`), #3 (YOLO via `--dangerously-bypass-approvals-and-sandbox`), #5 (wait-and-resume on usage-limit/429), #6 (fresh context per issue — headless Codex is stateless), #7 (atomic state writes), #9 (no default `max_turns`).
|
|
235
|
+
|
|
199
236
|
## Safety constraints
|
|
200
237
|
|
|
201
238
|
The tool enforces nine non-negotiables (see `CLAUDE.md` for the full list):
|
|
@@ -22,9 +22,12 @@ Phases 0, 1, and 2 inject a knowledge-graph report from [graphify](https://githu
|
|
|
22
22
|
**Install the CLI** (required to use graphify at all):
|
|
23
23
|
|
|
24
24
|
```bash
|
|
25
|
-
|
|
25
|
+
uv tool install --upgrade graphifyy # CLI binary is `graphify`
|
|
26
|
+
# or: pip install -U graphifyy
|
|
26
27
|
```
|
|
27
28
|
|
|
29
|
+
Requires graphify **>= 0.8.1** (idempotent `update`, stable node-id format).
|
|
30
|
+
|
|
28
31
|
**Seed the graph (one-time, per project)**: graphify's full LLM-driven build runs through the `/graphify` slash-command inside an AI assistant — *not* through the shell binary. From inside Claude Code (or any other graphify-supported assistant) run:
|
|
29
32
|
|
|
30
33
|
```
|
|
@@ -33,7 +36,7 @@ pipx install graphifyy # CLI binary is `graphify`
|
|
|
33
36
|
|
|
34
37
|
This produces `graphify-out/graph.json` and `graphify-out/GRAPH_REPORT.md`.
|
|
35
38
|
|
|
36
|
-
**Subsequent code-generator runs** will automatically refresh the graph with `graphify update .`
|
|
39
|
+
**Subsequent code-generator runs** will automatically refresh the graph with `graphify update .` — idempotent and AST-only (no LLM cost; `graph.json`/`GRAPH_REPORT.md` are only rewritten on real changes). A graph seeded by a pre-0.7.18 graphify is reseeded once automatically via `graphify update . --force` (still no LLM cost) and stamped. Doc / paper / image changes still need a manual `/graphify .` re-run inside your assistant.
|
|
37
40
|
|
|
38
41
|
Add to your project's `.gitignore`:
|
|
39
42
|
|
|
@@ -158,6 +161,38 @@ The `--model` tag you pass drives **every** phase (0 through 7). There is no per
|
|
|
158
161
|
- **Overridden under `provider == "ollama"`:** non-negotiable #1 (Max-only env strip is narrowed to `ANTHROPIC_AUTH_TOKEN` / `ANTHROPIC_BASE_URL` passthrough), #4 (no Anthropic overage telemetry — replaced by turn-count + wall-clock budgets), #8 (fixed-model-per-phase — replaced by single-model routing).
|
|
159
162
|
- **Preserved on every path:** #2 (never `--bare`), #3 (YOLO permissions), #5 (wait-and-resume on 429), #6 (fresh context per issue), #7 (atomic state writes), #9 (no default `max_turns`).
|
|
160
163
|
|
|
164
|
+
## Running against OpenAI Codex
|
|
165
|
+
|
|
166
|
+
An opt-in subcommand, `code-generator generate codex`, runs the full 0→7 pipeline against **one** OpenAI Codex CLI model instead of the Anthropic Max subscription — structurally identical to the Gemini/Ollama provider paths and gated by `provider == "codex"` inside `env.py`.
|
|
167
|
+
|
|
168
|
+
### One-time setup
|
|
169
|
+
|
|
170
|
+
1. Install the Codex CLI: `npm install -g @openai/codex`.
|
|
171
|
+
2. Authenticate with your ChatGPT subscription (zero API credits):
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
codex login # browser OAuth → ~/.codex/auth.json
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Preflight refuses to run if the `codex` binary is missing or no `~/.codex/auth.json` exists, and idempotently seeds the project dir as trusted in `~/.codex/config.toml` (so headless `codex exec` never hangs on the trust prompt — openai/codex #14547). `OPENAI_API_KEY` / `CODEX_API_KEY` are **stripped** before every spawn: a confirmed Codex bug (openai/codex #15151, #20099) silently bills API credits whenever `OPENAI_API_KEY` is set even with a valid OAuth session.
|
|
178
|
+
|
|
179
|
+
### Worked examples
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
# Plan + implement a whole repo on the default 2026 Codex model
|
|
183
|
+
code-generator generate codex --model gpt-5.5
|
|
184
|
+
|
|
185
|
+
# Resume without re-typing the model (resolved from state.json)
|
|
186
|
+
code-generator generate codex --continue
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
The `--model` tag drives **every** phase (0 through 7). It is persisted to `state.json` as `CycleState.codex_model` / `State.codex_model` so `--continue` resumes with the same model.
|
|
190
|
+
|
|
191
|
+
### What is overridden vs. preserved
|
|
192
|
+
|
|
193
|
+
- **Overridden under `provider == "codex"`:** #1 (strips the Anthropic list **and** `OPENAI_API_KEY` / `CODEX_API_KEY`; only `~/.codex/auth.json` authenticates), #4 (no Anthropic overage telemetry — turn/wall budgets + `usage_limit_reached`/`429` wait-and-resume), #8 (single-model routing).
|
|
194
|
+
- **Preserved on every path:** #2 (never `--bare`), #3 (YOLO via `--dangerously-bypass-approvals-and-sandbox`), #5 (wait-and-resume on usage-limit/429), #6 (fresh context per issue — headless Codex is stateless), #7 (atomic state writes), #9 (no default `max_turns`).
|
|
195
|
+
|
|
161
196
|
## Safety constraints
|
|
162
197
|
|
|
163
198
|
The tool enforces nine non-negotiables (see `CLAUDE.md` for the full list):
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "claude-code-generator"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.6.1"
|
|
8
8
|
description = "Orchestrator CLI that drives Claude Code end-to-end to generate whole projects from a requirements.md file."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "MIT" }
|
|
@@ -37,7 +37,9 @@ Issues = "https://github.com/SilvioBaratto/code-generator/issues"
|
|
|
37
37
|
dev = [
|
|
38
38
|
"pytest",
|
|
39
39
|
"pytest-asyncio",
|
|
40
|
+
"pytest-timeout",
|
|
40
41
|
"ruff",
|
|
42
|
+
"pyyaml",
|
|
41
43
|
]
|
|
42
44
|
mcp = [
|
|
43
45
|
# Python MCP client library.
|
|
@@ -59,8 +61,8 @@ all = [
|
|
|
59
61
|
# Rust crate and must be installed separately:
|
|
60
62
|
# cargo install codebase-memory-mcp
|
|
61
63
|
# The codebase graph injection (replaces the old [repomap] extra) requires
|
|
62
|
-
# graphify to be installed separately:
|
|
63
|
-
#
|
|
64
|
+
# graphify (>= 0.8.1) to be installed separately:
|
|
65
|
+
# uv tool install --upgrade graphifyy # or: pip install -U graphifyy
|
|
64
66
|
"claude-code-generator[mcp,batch]",
|
|
65
67
|
]
|
|
66
68
|
|
|
@@ -93,6 +95,12 @@ ignore = []
|
|
|
93
95
|
[tool.pytest.ini_options]
|
|
94
96
|
testpaths = ["tests"]
|
|
95
97
|
asyncio_mode = "auto"
|
|
98
|
+
timeout = 120
|
|
99
|
+
timeout_method = "thread"
|
|
100
|
+
markers = [
|
|
101
|
+
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
|
|
102
|
+
"integration: end-to-end tests needing a real local env (claude CLI / gh auth); excluded from CI via '-m \"not integration\"'",
|
|
103
|
+
]
|
|
96
104
|
|
|
97
105
|
[tool.pyright]
|
|
98
106
|
# Test mocks intentionally use unused parameters to match the production interface signature.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-code-generator
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.1
|
|
4
4
|
Summary: Orchestrator CLI that drives Claude Code end-to-end to generate whole projects from a requirements.md file.
|
|
5
5
|
Author: Silvio Baratto
|
|
6
6
|
License: MIT
|
|
@@ -26,7 +26,9 @@ Requires-Dist: rich
|
|
|
26
26
|
Provides-Extra: dev
|
|
27
27
|
Requires-Dist: pytest; extra == "dev"
|
|
28
28
|
Requires-Dist: pytest-asyncio; extra == "dev"
|
|
29
|
+
Requires-Dist: pytest-timeout; extra == "dev"
|
|
29
30
|
Requires-Dist: ruff; extra == "dev"
|
|
31
|
+
Requires-Dist: pyyaml; extra == "dev"
|
|
30
32
|
Provides-Extra: mcp
|
|
31
33
|
Requires-Dist: mcp<2.0,>=1.0; extra == "mcp"
|
|
32
34
|
Requires-Dist: serena-agent<2.0,>=1.1; extra == "mcp"
|
|
@@ -60,9 +62,12 @@ Phases 0, 1, and 2 inject a knowledge-graph report from [graphify](https://githu
|
|
|
60
62
|
**Install the CLI** (required to use graphify at all):
|
|
61
63
|
|
|
62
64
|
```bash
|
|
63
|
-
|
|
65
|
+
uv tool install --upgrade graphifyy # CLI binary is `graphify`
|
|
66
|
+
# or: pip install -U graphifyy
|
|
64
67
|
```
|
|
65
68
|
|
|
69
|
+
Requires graphify **>= 0.8.1** (idempotent `update`, stable node-id format).
|
|
70
|
+
|
|
66
71
|
**Seed the graph (one-time, per project)**: graphify's full LLM-driven build runs through the `/graphify` slash-command inside an AI assistant — *not* through the shell binary. From inside Claude Code (or any other graphify-supported assistant) run:
|
|
67
72
|
|
|
68
73
|
```
|
|
@@ -71,7 +76,7 @@ pipx install graphifyy # CLI binary is `graphify`
|
|
|
71
76
|
|
|
72
77
|
This produces `graphify-out/graph.json` and `graphify-out/GRAPH_REPORT.md`.
|
|
73
78
|
|
|
74
|
-
**Subsequent code-generator runs** will automatically refresh the graph with `graphify update .`
|
|
79
|
+
**Subsequent code-generator runs** will automatically refresh the graph with `graphify update .` — idempotent and AST-only (no LLM cost; `graph.json`/`GRAPH_REPORT.md` are only rewritten on real changes). A graph seeded by a pre-0.7.18 graphify is reseeded once automatically via `graphify update . --force` (still no LLM cost) and stamped. Doc / paper / image changes still need a manual `/graphify .` re-run inside your assistant.
|
|
75
80
|
|
|
76
81
|
Add to your project's `.gitignore`:
|
|
77
82
|
|
|
@@ -196,6 +201,38 @@ The `--model` tag you pass drives **every** phase (0 through 7). There is no per
|
|
|
196
201
|
- **Overridden under `provider == "ollama"`:** non-negotiable #1 (Max-only env strip is narrowed to `ANTHROPIC_AUTH_TOKEN` / `ANTHROPIC_BASE_URL` passthrough), #4 (no Anthropic overage telemetry — replaced by turn-count + wall-clock budgets), #8 (fixed-model-per-phase — replaced by single-model routing).
|
|
197
202
|
- **Preserved on every path:** #2 (never `--bare`), #3 (YOLO permissions), #5 (wait-and-resume on 429), #6 (fresh context per issue), #7 (atomic state writes), #9 (no default `max_turns`).
|
|
198
203
|
|
|
204
|
+
## Running against OpenAI Codex
|
|
205
|
+
|
|
206
|
+
An opt-in subcommand, `code-generator generate codex`, runs the full 0→7 pipeline against **one** OpenAI Codex CLI model instead of the Anthropic Max subscription — structurally identical to the Gemini/Ollama provider paths and gated by `provider == "codex"` inside `env.py`.
|
|
207
|
+
|
|
208
|
+
### One-time setup
|
|
209
|
+
|
|
210
|
+
1. Install the Codex CLI: `npm install -g @openai/codex`.
|
|
211
|
+
2. Authenticate with your ChatGPT subscription (zero API credits):
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
codex login # browser OAuth → ~/.codex/auth.json
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Preflight refuses to run if the `codex` binary is missing or no `~/.codex/auth.json` exists, and idempotently seeds the project dir as trusted in `~/.codex/config.toml` (so headless `codex exec` never hangs on the trust prompt — openai/codex #14547). `OPENAI_API_KEY` / `CODEX_API_KEY` are **stripped** before every spawn: a confirmed Codex bug (openai/codex #15151, #20099) silently bills API credits whenever `OPENAI_API_KEY` is set even with a valid OAuth session.
|
|
218
|
+
|
|
219
|
+
### Worked examples
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
# Plan + implement a whole repo on the default 2026 Codex model
|
|
223
|
+
code-generator generate codex --model gpt-5.5
|
|
224
|
+
|
|
225
|
+
# Resume without re-typing the model (resolved from state.json)
|
|
226
|
+
code-generator generate codex --continue
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
The `--model` tag drives **every** phase (0 through 7). It is persisted to `state.json` as `CycleState.codex_model` / `State.codex_model` so `--continue` resumes with the same model.
|
|
230
|
+
|
|
231
|
+
### What is overridden vs. preserved
|
|
232
|
+
|
|
233
|
+
- **Overridden under `provider == "codex"`:** #1 (strips the Anthropic list **and** `OPENAI_API_KEY` / `CODEX_API_KEY`; only `~/.codex/auth.json` authenticates), #4 (no Anthropic overage telemetry — turn/wall budgets + `usage_limit_reached`/`429` wait-and-resume), #8 (single-model routing).
|
|
234
|
+
- **Preserved on every path:** #2 (never `--bare`), #3 (YOLO via `--dangerously-bypass-approvals-and-sandbox`), #5 (wait-and-resume on usage-limit/429), #6 (fresh context per issue — headless Codex is stateless), #7 (atomic state writes), #9 (no default `max_turns`).
|
|
235
|
+
|
|
199
236
|
## Safety constraints
|
|
200
237
|
|
|
201
238
|
The tool enforces nine non-negotiables (see `CLAUDE.md` for the full list):
|
|
@@ -9,6 +9,8 @@ src/claude_code_generator.egg-info/requires.txt
|
|
|
9
9
|
src/claude_code_generator.egg-info/top_level.txt
|
|
10
10
|
src/code_generator/__init__.py
|
|
11
11
|
src/code_generator/agents.py
|
|
12
|
+
src/code_generator/archive_run.py
|
|
13
|
+
src/code_generator/changelog.py
|
|
12
14
|
src/code_generator/checklist.py
|
|
13
15
|
src/code_generator/cli.py
|
|
14
16
|
src/code_generator/effort.py
|
|
@@ -16,12 +18,15 @@ src/code_generator/env.py
|
|
|
16
18
|
src/code_generator/exceptions.py
|
|
17
19
|
src/code_generator/git_ops.py
|
|
18
20
|
src/code_generator/logging_setup.py
|
|
21
|
+
src/code_generator/manifest.py
|
|
19
22
|
src/code_generator/memory.py
|
|
20
23
|
src/code_generator/preflight.py
|
|
21
24
|
src/code_generator/repo_info.py
|
|
22
25
|
src/code_generator/requirements_structure.py
|
|
26
|
+
src/code_generator/semver.py
|
|
23
27
|
src/code_generator/state.py
|
|
24
28
|
src/code_generator/state_retention.py
|
|
29
|
+
src/code_generator/surface_scanner.py
|
|
25
30
|
src/code_generator/commands/__init__.py
|
|
26
31
|
src/code_generator/commands/_bench_io.py
|
|
27
32
|
src/code_generator/commands/_crash_recovery.py
|
|
@@ -38,6 +43,7 @@ src/code_generator/commands/optimize.py
|
|
|
38
43
|
src/code_generator/commands/review.py
|
|
39
44
|
src/code_generator/commands/status.py
|
|
40
45
|
src/code_generator/gh/__init__.py
|
|
46
|
+
src/code_generator/gh/actions.py
|
|
41
47
|
src/code_generator/gh/core.py
|
|
42
48
|
src/code_generator/gh/issues.py
|
|
43
49
|
src/code_generator/gh/labels.py
|
|
@@ -48,16 +54,33 @@ src/code_generator/orchestrator/_client_lifecycle.py
|
|
|
48
54
|
src/code_generator/orchestrator/_comments.py
|
|
49
55
|
src/code_generator/orchestrator/_memory_writers.py
|
|
50
56
|
src/code_generator/orchestrator/_phase5_precommit.py
|
|
57
|
+
src/code_generator/orchestrator/agent_spec.py
|
|
58
|
+
src/code_generator/orchestrator/criteria_oracle.py
|
|
51
59
|
src/code_generator/orchestrator/cycle_loop.py
|
|
52
60
|
src/code_generator/orchestrator/cycle_prompts.py
|
|
61
|
+
src/code_generator/orchestrator/deviation_detector.py
|
|
62
|
+
src/code_generator/orchestrator/failure_report.py
|
|
53
63
|
src/code_generator/orchestrator/ollama_budget.py
|
|
54
64
|
src/code_generator/orchestrator/phase0_complexity.py
|
|
55
65
|
src/code_generator/orchestrator/phase1_plan.py
|
|
56
66
|
src/code_generator/orchestrator/phase2_review.py
|
|
57
67
|
src/code_generator/orchestrator/phase3_4_implement.py
|
|
58
68
|
src/code_generator/orchestrator/phase5_closure.py
|
|
69
|
+
src/code_generator/orchestrator/phase65_budget.py
|
|
70
|
+
src/code_generator/orchestrator/phase6_5_verify.py
|
|
59
71
|
src/code_generator/orchestrator/phase6_test.py
|
|
60
72
|
src/code_generator/orchestrator/phase7_commit.py
|
|
73
|
+
src/code_generator/orchestrator/phase8_ci_classifier.py
|
|
74
|
+
src/code_generator/orchestrator/phase8_finalization.py
|
|
75
|
+
src/code_generator/orchestrator/phase8_local_verify.py
|
|
76
|
+
src/code_generator/orchestrator/phase8_repair_loop.py
|
|
77
|
+
src/code_generator/orchestrator/phase8_workflow_gen.py
|
|
78
|
+
src/code_generator/orchestrator/scenario_builder.py
|
|
79
|
+
src/code_generator/orchestrator/sica.py
|
|
80
|
+
src/code_generator/orchestrator/tier_selector.py
|
|
81
|
+
src/code_generator/orchestrator/tier_t3.py
|
|
82
|
+
src/code_generator/orchestrator/tier_t4.py
|
|
83
|
+
src/code_generator/orchestrator/vigil.py
|
|
61
84
|
src/code_generator/prompts/__init__.py
|
|
62
85
|
src/code_generator/prompts/hashes.py
|
|
63
86
|
src/code_generator/prompts/prompt-cycle-specializer.md
|
|
@@ -67,15 +90,20 @@ src/code_generator/prompts/prompt-phase-1-planning.md
|
|
|
67
90
|
src/code_generator/prompts/prompt-phase-2-batch-review.md
|
|
68
91
|
src/code_generator/prompts/prompt-phase-3-implementation.md
|
|
69
92
|
src/code_generator/prompts/prompt-phase-5-final-review.md
|
|
93
|
+
src/code_generator/prompts/prompt-phase-6-5-verify.md
|
|
70
94
|
src/code_generator/prompts/prompt-phase-6-test.md
|
|
71
95
|
src/code_generator/prompts/prompt-phase-7-commit.md
|
|
96
|
+
src/code_generator/prompts/prompt-phase-8-finalization.md
|
|
97
|
+
src/code_generator/prompts/prompt-phase-8-repair.md
|
|
72
98
|
src/code_generator/prompts/prompt-review.md
|
|
73
99
|
src/code_generator/runner/__init__.py
|
|
74
100
|
src/code_generator/runner/_telemetry.py
|
|
75
101
|
src/code_generator/runner/batch.py
|
|
76
102
|
src/code_generator/runner/cache_breakpoints.py
|
|
103
|
+
src/code_generator/runner/codex_runner.py
|
|
77
104
|
src/code_generator/runner/compaction_pause.py
|
|
78
105
|
src/code_generator/runner/fake_runner.py
|
|
106
|
+
src/code_generator/runner/gemini_runner.py
|
|
79
107
|
src/code_generator/runner/mcp.py
|
|
80
108
|
src/code_generator/runner/memory_tool.py
|
|
81
109
|
src/code_generator/runner/message_parsing.py
|
|
@@ -98,7 +126,9 @@ src/code_generator/templates/finance.md
|
|
|
98
126
|
src/code_generator/templates/fullstack.md
|
|
99
127
|
src/code_generator/templates/nestjs.md
|
|
100
128
|
src/code_generator/templates/python-cli.md
|
|
129
|
+
tests/test_agent_spec.py
|
|
101
130
|
tests/test_agents.py
|
|
131
|
+
tests/test_archive_run.py
|
|
102
132
|
tests/test_bench.py
|
|
103
133
|
tests/test_bench_compare.py
|
|
104
134
|
tests/test_bench_export.py
|
|
@@ -112,17 +142,23 @@ tests/test_checklist.py
|
|
|
112
142
|
tests/test_claude_md.py
|
|
113
143
|
tests/test_cli_io_logging.py
|
|
114
144
|
tests/test_client_lifecycle.py
|
|
145
|
+
tests/test_codex_preflight.py
|
|
146
|
+
tests/test_codex_runner.py
|
|
115
147
|
tests/test_comments.py
|
|
116
148
|
tests/test_commit_message.py
|
|
117
149
|
tests/test_compaction_pause_handler.py
|
|
118
150
|
tests/test_crash_recovery.py
|
|
151
|
+
tests/test_criteria_oracle.py
|
|
119
152
|
tests/test_cycle_loop.py
|
|
120
153
|
tests/test_cycle_loop_multicycle.py
|
|
154
|
+
tests/test_cycle_loop_phase6_5.py
|
|
155
|
+
tests/test_cycle_loop_phase8.py
|
|
121
156
|
tests/test_cycle_ollama_model.py
|
|
122
157
|
tests/test_cycle_prompts.py
|
|
123
158
|
tests/test_delta_planning.py
|
|
124
159
|
tests/test_dependencies.py
|
|
125
160
|
tests/test_detect.py
|
|
161
|
+
tests/test_deviation_detector.py
|
|
126
162
|
tests/test_dispatch_graph_report.py
|
|
127
163
|
tests/test_docs_no_default_max_turns.py
|
|
128
164
|
tests/test_docs_ollama_model_guide.py
|
|
@@ -131,17 +167,24 @@ tests/test_effective_model_routing.py
|
|
|
131
167
|
tests/test_effort.py
|
|
132
168
|
tests/test_effort_routing_consistency.py
|
|
133
169
|
tests/test_env.py
|
|
170
|
+
tests/test_failure_report.py
|
|
171
|
+
tests/test_gemini_preflight.py
|
|
172
|
+
tests/test_gemini_runner.py
|
|
134
173
|
tests/test_generate.py
|
|
135
174
|
tests/test_generate_ollama.py
|
|
136
175
|
tests/test_generate_resume.py
|
|
137
176
|
tests/test_gh.py
|
|
177
|
+
tests/test_gh_actions.py
|
|
178
|
+
tests/test_gh_issues_create.py
|
|
138
179
|
tests/test_gh_labels.py
|
|
139
180
|
tests/test_gh_milestones.py
|
|
140
181
|
tests/test_gh_repo_threading.py
|
|
141
182
|
tests/test_gh_submodules.py
|
|
142
183
|
tests/test_git_ops.py
|
|
184
|
+
tests/test_git_ops_phase8.py
|
|
143
185
|
tests/test_init.py
|
|
144
186
|
tests/test_logging_setup.py
|
|
187
|
+
tests/test_manifest.py
|
|
145
188
|
tests/test_max_turns_cli_flag.py
|
|
146
189
|
tests/test_mcp.py
|
|
147
190
|
tests/test_memory.py
|
|
@@ -166,7 +209,30 @@ tests/test_phase3_4.py
|
|
|
166
209
|
tests/test_phase5.py
|
|
167
210
|
tests/test_phase5_precommit.py
|
|
168
211
|
tests/test_phase6.py
|
|
212
|
+
tests/test_phase65_budget.py
|
|
213
|
+
tests/test_phase6_5_integration.py
|
|
214
|
+
tests/test_phase6_5_integration_cycle2.py
|
|
215
|
+
tests/test_phase6_5_prompt.py
|
|
216
|
+
tests/test_phase6_5_prompt_snapshot.py
|
|
217
|
+
tests/test_phase6_5_run.py
|
|
218
|
+
tests/test_phase6_5_state.py
|
|
219
|
+
tests/test_phase6_5_tiers.py
|
|
169
220
|
tests/test_phase7.py
|
|
221
|
+
tests/test_phase8_access_control.py
|
|
222
|
+
tests/test_phase8_changelog.py
|
|
223
|
+
tests/test_phase8_ci_classifier.py
|
|
224
|
+
tests/test_phase8_finalization.py
|
|
225
|
+
tests/test_phase8_local_verify.py
|
|
226
|
+
tests/test_phase8_prompt_snapshots.py
|
|
227
|
+
tests/test_phase8_prompts.py
|
|
228
|
+
tests/test_phase8_repair_loop.py
|
|
229
|
+
tests/test_phase8_repair_sota.py
|
|
230
|
+
tests/test_phase8_semver.py
|
|
231
|
+
tests/test_phase8_state.py
|
|
232
|
+
tests/test_phase8_status.py
|
|
233
|
+
tests/test_phase8_surface_scanner.py
|
|
234
|
+
tests/test_phase8_trigger.py
|
|
235
|
+
tests/test_phase8_workflow_gen.py
|
|
170
236
|
tests/test_phase_mcp_regression.py
|
|
171
237
|
tests/test_phase_telemetry.py
|
|
172
238
|
tests/test_phase_token_logging.py
|
|
@@ -179,19 +245,27 @@ tests/test_prompts.py
|
|
|
179
245
|
tests/test_rate_limit.py
|
|
180
246
|
tests/test_repo_info.py
|
|
181
247
|
tests/test_requirements_structure.py
|
|
248
|
+
tests/test_resume.py
|
|
182
249
|
tests/test_retry.py
|
|
183
250
|
tests/test_review.py
|
|
184
251
|
tests/test_runner_protocol.py
|
|
185
252
|
tests/test_runner_protocol_annotations.py
|
|
186
253
|
tests/test_runner_types.py
|
|
187
254
|
tests/test_runner_utils.py
|
|
255
|
+
tests/test_scenario_builder.py
|
|
188
256
|
tests/test_sdk_runner.py
|
|
189
257
|
tests/test_sdk_runner_shared.py
|
|
190
258
|
tests/test_session_mode.py
|
|
259
|
+
tests/test_sica.py
|
|
191
260
|
tests/test_state.py
|
|
192
261
|
tests/test_state_guard.py
|
|
193
262
|
tests/test_state_retention.py
|
|
194
263
|
tests/test_status.py
|
|
195
264
|
tests/test_subprocess_runner.py
|
|
196
265
|
tests/test_telemetry.py
|
|
197
|
-
tests/
|
|
266
|
+
tests/test_tier_selector.py
|
|
267
|
+
tests/test_tier_t3.py
|
|
268
|
+
tests/test_tier_t3_pass_rate.py
|
|
269
|
+
tests/test_tier_t4.py
|
|
270
|
+
tests/test_version.py
|
|
271
|
+
tests/test_vigil.py
|