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.
Files changed (274) hide show
  1. {claude_code_generator-0.5.8/src/claude_code_generator.egg-info → claude_code_generator-0.6.1}/PKG-INFO +40 -3
  2. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/README.md +37 -2
  3. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/pyproject.toml +11 -3
  4. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1/src/claude_code_generator.egg-info}/PKG-INFO +40 -3
  5. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/claude_code_generator.egg-info/SOURCES.txt +75 -1
  6. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/claude_code_generator.egg-info/requires.txt +2 -0
  7. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/__init__.py +1 -1
  8. claude_code_generator-0.6.1/src/code_generator/archive_run.py +255 -0
  9. claude_code_generator-0.6.1/src/code_generator/changelog.py +145 -0
  10. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/checklist.py +34 -6
  11. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/_detect.py +4 -1
  12. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/_dispatch.py +174 -25
  13. claude_code_generator-0.6.1/src/code_generator/commands/_resume.py +112 -0
  14. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/generate.py +357 -3
  15. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/status.py +112 -2
  16. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/effort.py +24 -0
  17. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/env.py +85 -2
  18. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/gh/__init__.py +17 -0
  19. claude_code_generator-0.6.1/src/code_generator/gh/actions.py +134 -0
  20. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/gh/issues.py +45 -0
  21. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/git_ops.py +114 -0
  22. claude_code_generator-0.6.1/src/code_generator/manifest.py +168 -0
  23. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/_client_lifecycle.py +4 -0
  24. claude_code_generator-0.6.1/src/code_generator/orchestrator/agent_spec.py +220 -0
  25. claude_code_generator-0.6.1/src/code_generator/orchestrator/criteria_oracle.py +172 -0
  26. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/cycle_loop.py +115 -10
  27. claude_code_generator-0.6.1/src/code_generator/orchestrator/deviation_detector.py +127 -0
  28. claude_code_generator-0.6.1/src/code_generator/orchestrator/failure_report.py +150 -0
  29. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/phase1_plan.py +12 -6
  30. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/phase2_review.py +4 -4
  31. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/phase3_4_implement.py +5 -4
  32. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/phase5_closure.py +24 -9
  33. claude_code_generator-0.6.1/src/code_generator/orchestrator/phase65_budget.py +69 -0
  34. claude_code_generator-0.6.1/src/code_generator/orchestrator/phase6_5_verify.py +1032 -0
  35. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/phase6_test.py +3 -2
  36. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/phase7_commit.py +3 -2
  37. claude_code_generator-0.6.1/src/code_generator/orchestrator/phase8_ci_classifier.py +96 -0
  38. claude_code_generator-0.6.1/src/code_generator/orchestrator/phase8_finalization.py +305 -0
  39. claude_code_generator-0.6.1/src/code_generator/orchestrator/phase8_local_verify.py +145 -0
  40. claude_code_generator-0.6.1/src/code_generator/orchestrator/phase8_repair_loop.py +437 -0
  41. claude_code_generator-0.6.1/src/code_generator/orchestrator/phase8_workflow_gen.py +279 -0
  42. claude_code_generator-0.6.1/src/code_generator/orchestrator/scenario_builder.py +120 -0
  43. claude_code_generator-0.6.1/src/code_generator/orchestrator/sica.py +130 -0
  44. claude_code_generator-0.6.1/src/code_generator/orchestrator/tier_selector.py +74 -0
  45. claude_code_generator-0.6.1/src/code_generator/orchestrator/tier_t3.py +242 -0
  46. claude_code_generator-0.6.1/src/code_generator/orchestrator/tier_t4.py +331 -0
  47. claude_code_generator-0.6.1/src/code_generator/orchestrator/vigil.py +95 -0
  48. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/preflight.py +193 -0
  49. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/__init__.py +19 -0
  50. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-cycle-specializer.md +6 -0
  51. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-phase-0-complexity.md +10 -1
  52. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-phase-1-planning.md +4 -0
  53. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-phase-2-batch-review.md +6 -0
  54. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-phase-3-implementation.md +10 -1
  55. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-phase-5-final-review.md +9 -1
  56. claude_code_generator-0.6.1/src/code_generator/prompts/prompt-phase-6-5-verify.md +130 -0
  57. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-phase-6-test.md +1 -1
  58. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-phase-7-commit.md +9 -3
  59. claude_code_generator-0.6.1/src/code_generator/prompts/prompt-phase-8-finalization.md +42 -0
  60. claude_code_generator-0.6.1/src/code_generator/prompts/prompt-phase-8-repair.md +52 -0
  61. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-review.md +10 -0
  62. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/__init__.py +17 -4
  63. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/cache_breakpoints.py +10 -5
  64. claude_code_generator-0.6.1/src/code_generator/runner/codex_runner.py +323 -0
  65. claude_code_generator-0.6.1/src/code_generator/runner/gemini_runner.py +230 -0
  66. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/mcp.py +17 -0
  67. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/rate_limit.py +82 -0
  68. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/sdk_runner.py +12 -9
  69. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/subprocess_runner.py +3 -1
  70. claude_code_generator-0.6.1/src/code_generator/semver.py +139 -0
  71. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/state.py +137 -0
  72. claude_code_generator-0.6.1/src/code_generator/surface_scanner.py +271 -0
  73. claude_code_generator-0.6.1/tests/test_agent_spec.py +286 -0
  74. claude_code_generator-0.6.1/tests/test_archive_run.py +219 -0
  75. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_bench_export.py +4 -4
  76. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_cache_warmup.py +6 -0
  77. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_changelog.py +7 -1
  78. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_checklist.py +220 -3
  79. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_client_lifecycle.py +1 -0
  80. claude_code_generator-0.6.1/tests/test_codex_preflight.py +70 -0
  81. claude_code_generator-0.6.1/tests/test_codex_runner.py +233 -0
  82. claude_code_generator-0.6.1/tests/test_criteria_oracle.py +174 -0
  83. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_cycle_loop.py +41 -6
  84. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_cycle_loop_multicycle.py +29 -14
  85. claude_code_generator-0.6.1/tests/test_cycle_loop_phase6_5.py +260 -0
  86. claude_code_generator-0.6.1/tests/test_cycle_loop_phase8.py +398 -0
  87. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_delta_planning.py +13 -7
  88. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_detect.py +1 -1
  89. claude_code_generator-0.6.1/tests/test_deviation_detector.py +160 -0
  90. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_dispatch_graph_report.py +305 -89
  91. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_effective_model_routing.py +4 -0
  92. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_effort.py +85 -2
  93. claude_code_generator-0.6.1/tests/test_failure_report.py +279 -0
  94. claude_code_generator-0.6.1/tests/test_gemini_preflight.py +86 -0
  95. claude_code_generator-0.6.1/tests/test_gemini_runner.py +196 -0
  96. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_generate.py +7 -4
  97. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_generate_resume.py +52 -9
  98. claude_code_generator-0.6.1/tests/test_gh_actions.py +173 -0
  99. claude_code_generator-0.6.1/tests/test_gh_issues_create.py +79 -0
  100. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_git_ops.py +110 -1
  101. claude_code_generator-0.6.1/tests/test_git_ops_phase8.py +276 -0
  102. claude_code_generator-0.6.1/tests/test_manifest.py +245 -0
  103. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_memory_writers.py +2 -0
  104. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_ollama_hardening.py +2 -0
  105. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase0.py +4 -0
  106. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase5_precommit.py +15 -5
  107. claude_code_generator-0.6.1/tests/test_phase65_budget.py +81 -0
  108. claude_code_generator-0.6.1/tests/test_phase6_5_integration.py +360 -0
  109. claude_code_generator-0.6.1/tests/test_phase6_5_integration_cycle2.py +469 -0
  110. claude_code_generator-0.6.1/tests/test_phase6_5_prompt.py +127 -0
  111. claude_code_generator-0.6.1/tests/test_phase6_5_prompt_snapshot.py +87 -0
  112. claude_code_generator-0.6.1/tests/test_phase6_5_run.py +329 -0
  113. claude_code_generator-0.6.1/tests/test_phase6_5_state.py +238 -0
  114. claude_code_generator-0.6.1/tests/test_phase6_5_tiers.py +562 -0
  115. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase7.py +5 -2
  116. claude_code_generator-0.6.1/tests/test_phase8_access_control.py +231 -0
  117. claude_code_generator-0.6.1/tests/test_phase8_changelog.py +268 -0
  118. claude_code_generator-0.6.1/tests/test_phase8_ci_classifier.py +146 -0
  119. claude_code_generator-0.6.1/tests/test_phase8_finalization.py +595 -0
  120. claude_code_generator-0.6.1/tests/test_phase8_local_verify.py +216 -0
  121. claude_code_generator-0.6.1/tests/test_phase8_prompt_snapshots.py +91 -0
  122. claude_code_generator-0.6.1/tests/test_phase8_prompts.py +159 -0
  123. claude_code_generator-0.6.1/tests/test_phase8_repair_loop.py +429 -0
  124. claude_code_generator-0.6.1/tests/test_phase8_repair_sota.py +277 -0
  125. claude_code_generator-0.6.1/tests/test_phase8_semver.py +267 -0
  126. claude_code_generator-0.6.1/tests/test_phase8_state.py +266 -0
  127. claude_code_generator-0.6.1/tests/test_phase8_status.py +209 -0
  128. claude_code_generator-0.6.1/tests/test_phase8_surface_scanner.py +450 -0
  129. claude_code_generator-0.6.1/tests/test_phase8_trigger.py +253 -0
  130. claude_code_generator-0.6.1/tests/test_phase8_workflow_gen.py +198 -0
  131. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_prompt_prefix_snapshots.py +30 -5
  132. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_prompt_prefix_stability.py +41 -0
  133. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_prompts.py +17 -0
  134. claude_code_generator-0.6.1/tests/test_resume.py +124 -0
  135. claude_code_generator-0.6.1/tests/test_scenario_builder.py +235 -0
  136. claude_code_generator-0.6.1/tests/test_sica.py +265 -0
  137. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_state.py +22 -22
  138. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_status.py +644 -0
  139. claude_code_generator-0.6.1/tests/test_tier_selector.py +156 -0
  140. claude_code_generator-0.6.1/tests/test_tier_t3.py +265 -0
  141. claude_code_generator-0.6.1/tests/test_tier_t3_pass_rate.py +142 -0
  142. claude_code_generator-0.6.1/tests/test_tier_t4.py +256 -0
  143. claude_code_generator-0.6.1/tests/test_vigil.py +326 -0
  144. claude_code_generator-0.5.8/src/code_generator/commands/_resume.py +0 -73
  145. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/LICENSE +0 -0
  146. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/setup.cfg +0 -0
  147. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/claude_code_generator.egg-info/dependency_links.txt +0 -0
  148. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/claude_code_generator.egg-info/entry_points.txt +0 -0
  149. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/claude_code_generator.egg-info/top_level.txt +0 -0
  150. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/agents.py +0 -0
  151. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/cli.py +0 -0
  152. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/__init__.py +0 -0
  153. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/_bench_io.py +0 -0
  154. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/_crash_recovery.py +0 -0
  155. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/_validators.py +0 -0
  156. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/bench.py +0 -0
  157. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/bench_compare.py +0 -0
  158. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/bench_export.py +0 -0
  159. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/init.py +0 -0
  160. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/optimize.py +0 -0
  161. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/commands/review.py +0 -0
  162. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/exceptions.py +0 -0
  163. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/gh/core.py +0 -0
  164. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/gh/labels.py +0 -0
  165. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/gh/milestones.py +0 -0
  166. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/logging_setup.py +0 -0
  167. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/memory.py +0 -0
  168. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/__init__.py +0 -0
  169. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/_cache_warmup.py +0 -0
  170. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/_comments.py +0 -0
  171. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/_memory_writers.py +0 -0
  172. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/_phase5_precommit.py +0 -0
  173. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/cycle_prompts.py +0 -0
  174. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/ollama_budget.py +0 -0
  175. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/orchestrator/phase0_complexity.py +0 -0
  176. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/hashes.py +0 -0
  177. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/prompts/prompt-optimize-requirements.md +0 -0
  178. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/repo_info.py +0 -0
  179. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/requirements_structure.py +0 -0
  180. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/_telemetry.py +0 -0
  181. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/batch.py +0 -0
  182. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/compaction_pause.py +0 -0
  183. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/fake_runner.py +0 -0
  184. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/memory_tool.py +0 -0
  185. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/message_parsing.py +0 -0
  186. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/options.py +0 -0
  187. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/phase_telemetry.py +0 -0
  188. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/protocol.py +0 -0
  189. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/retry.py +0 -0
  190. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/soft_reset.py +0 -0
  191. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/state_guard.py +0 -0
  192. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/types.py +0 -0
  193. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/runner/utils.py +0 -0
  194. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/state_retention.py +0 -0
  195. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/templates/__init__.py +0 -0
  196. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/templates/angular.md +0 -0
  197. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/templates/base.md +0 -0
  198. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/templates/fastapi.md +0 -0
  199. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/templates/finance.md +0 -0
  200. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/templates/fullstack.md +0 -0
  201. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/templates/nestjs.md +0 -0
  202. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/src/code_generator/templates/python-cli.md +0 -0
  203. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_agents.py +0 -0
  204. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_bench.py +0 -0
  205. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_bench_compare.py +0 -0
  206. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_bench_fixture.py +0 -0
  207. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_bench_regression.py +0 -0
  208. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_cache_breakpoints.py +0 -0
  209. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_cache_ttl_ordering.py +0 -0
  210. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_claude_md.py +0 -0
  211. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_cli_io_logging.py +0 -0
  212. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_comments.py +0 -0
  213. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_commit_message.py +0 -0
  214. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_compaction_pause_handler.py +0 -0
  215. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_crash_recovery.py +0 -0
  216. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_cycle_ollama_model.py +0 -0
  217. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_cycle_prompts.py +0 -0
  218. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_dependencies.py +0 -0
  219. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_docs_no_default_max_turns.py +0 -0
  220. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_docs_ollama_model_guide.py +0 -0
  221. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_docs_ollama_pro.py +0 -0
  222. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_effort_routing_consistency.py +0 -0
  223. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_env.py +0 -0
  224. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_generate_ollama.py +0 -0
  225. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_gh.py +0 -0
  226. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_gh_labels.py +0 -0
  227. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_gh_milestones.py +0 -0
  228. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_gh_repo_threading.py +0 -0
  229. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_gh_submodules.py +0 -0
  230. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_init.py +0 -0
  231. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_logging_setup.py +0 -0
  232. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_max_turns_cli_flag.py +0 -0
  233. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_mcp.py +0 -0
  234. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_memory.py +0 -0
  235. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_memory_tool.py +0 -0
  236. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_message_parsing.py +0 -0
  237. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_no_max_turns_in_call_sites.py +0 -0
  238. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_no_max_turns_literal.py +0 -0
  239. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_non_goals_grep_guard.py +0 -0
  240. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_ollama_budget.py +0 -0
  241. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_ollama_rate_limit.py +0 -0
  242. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_optimize.py +0 -0
  243. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_options.py +0 -0
  244. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase1.py +0 -0
  245. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase2.py +0 -0
  246. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase2_cache_regression.py +0 -0
  247. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase2_multicycle_token_reduction.py +0 -0
  248. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase2_token_reduction.py +0 -0
  249. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase3_4.py +0 -0
  250. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase5.py +0 -0
  251. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase6.py +0 -0
  252. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase_mcp_regression.py +0 -0
  253. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase_telemetry.py +0 -0
  254. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_phase_token_logging.py +0 -0
  255. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_preflight.py +0 -0
  256. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_preflight_ollama.py +0 -0
  257. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_prompt_drift.py +0 -0
  258. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_rate_limit.py +0 -0
  259. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_repo_info.py +0 -0
  260. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_requirements_structure.py +0 -0
  261. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_retry.py +0 -0
  262. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_review.py +0 -0
  263. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_runner_protocol.py +0 -0
  264. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_runner_protocol_annotations.py +0 -0
  265. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_runner_types.py +0 -0
  266. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_runner_utils.py +0 -0
  267. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_sdk_runner.py +0 -0
  268. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_sdk_runner_shared.py +0 -0
  269. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_session_mode.py +0 -0
  270. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_state_guard.py +0 -0
  271. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_state_retention.py +0 -0
  272. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_subprocess_runner.py +0 -0
  273. {claude_code_generator-0.5.8 → claude_code_generator-0.6.1}/tests/test_telemetry.py +0 -0
  274. {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.5.8
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
- pipx install graphifyy # CLI binary is `graphify`
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 .` (AST-only, no LLM cost). Doc / paper / image changes still need a manual `/graphify .` re-run inside your assistant.
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
- pipx install graphifyy # CLI binary is `graphify`
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 .` (AST-only, no LLM cost). Doc / paper / image changes still need a manual `/graphify .` re-run inside your assistant.
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.5.8"
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
- # pipx install graphifyy
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.5.8
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
- pipx install graphifyy # CLI binary is `graphify`
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 .` (AST-only, no LLM cost). Doc / paper / image changes still need a manual `/graphify .` re-run inside your assistant.
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/test_version.py
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
@@ -11,7 +11,9 @@ anthropic>=0.35
11
11
  [dev]
12
12
  pytest
13
13
  pytest-asyncio
14
+ pytest-timeout
14
15
  ruff
16
+ pyyaml
15
17
 
16
18
  [mcp]
17
19
  mcp<2.0,>=1.0
@@ -1,3 +1,3 @@
1
1
  """code-generator: orchestrator CLI for end-to-end project generation."""
2
2
 
3
- __version__ = "0.5.8"
3
+ __version__ = "0.6.1"