claude-code-generator 0.2.0__tar.gz → 0.2.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.2.0/src/claude_code_generator.egg-info → claude_code_generator-0.2.1}/PKG-INFO +17 -3
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/README.md +16 -2
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/pyproject.toml +1 -1
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1/src/claude_code_generator.egg-info}/PKG-INFO +17 -3
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/__init__.py +1 -1
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/orchestrator/phase2_review.py +17 -2
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/LICENSE +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/setup.cfg +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/claude_code_generator.egg-info/SOURCES.txt +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/claude_code_generator.egg-info/dependency_links.txt +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/claude_code_generator.egg-info/entry_points.txt +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/claude_code_generator.egg-info/requires.txt +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/claude_code_generator.egg-info/top_level.txt +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/agents.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/cli.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/commands/__init__.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/commands/_detect.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/commands/_dispatch.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/commands/_resume.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/commands/generate.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/commands/init.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/commands/optimize.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/commands/review.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/commands/status.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/effort.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/env.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/gh/__init__.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/gh/core.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/gh/issues.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/gh/labels.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/gh/milestones.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/git_ops.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/logging_setup.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/orchestrator/__init__.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/orchestrator/_comments.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/orchestrator/cycle_loop.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/orchestrator/phase0_complexity.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/orchestrator/phase1_plan.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/orchestrator/phase3_4_implement.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/orchestrator/phase5_closure.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/orchestrator/phase6_test.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/orchestrator/phase7_commit.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/prompts/__init__.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/prompts/prompt-optimize-requirements.md +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/prompts/prompt-phase-0-complexity.md +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/prompts/prompt-phase-1-planning.md +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/prompts/prompt-phase-2-issue-review.md +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/prompts/prompt-phase-3-implementation.md +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/prompts/prompt-phase-5-final-review.md +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/prompts/prompt-phase-6-test.md +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/prompts/prompt-phase-7-commit.md +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/prompts/prompt-review.md +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/requirements_structure.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/runner/__init__.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/runner/message_parsing.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/runner/options.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/runner/protocol.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/runner/rate_limit.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/runner/retry.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/runner/sdk_runner.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/runner/subprocess_runner.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/runner/types.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/runner/utils.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/state.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/templates/__init__.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/templates/angular.md +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/templates/base.md +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/templates/fastapi.md +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/templates/finance.md +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/templates/fullstack.md +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/templates/nestjs.md +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/templates/python-cli.md +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_agents.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_comments.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_commit_message.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_cycle_loop.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_cycle_loop_multicycle.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_delta_planning.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_detect.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_effort.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_env.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_generate.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_generate_resume.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_gh.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_gh_labels.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_gh_milestones.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_gh_submodules.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_git_ops.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_init.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_logging_setup.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_message_parsing.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_optimize.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_options.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_phase0.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_phase1.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_phase2.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_phase3_4.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_phase5.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_phase6.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_phase7.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_phase_token_logging.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_prompts.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_rate_limit.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_requirements_structure.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_retry.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_review.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_runner_protocol.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_runner_protocol_annotations.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_runner_types.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_runner_utils.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_sdk_runner.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_state.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_status.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_subprocess_runner.py +0 -0
- {claude_code_generator-0.2.0 → claude_code_generator-0.2.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.2.
|
|
3
|
+
Version: 0.2.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
|
|
@@ -31,7 +31,7 @@ Dynamic: license-file
|
|
|
31
31
|
|
|
32
32
|
# code-generator
|
|
33
33
|
|
|
34
|
-
A Python CLI that orchestrates Claude Code end-to-end to generate a whole project from a `requirements.md` file.
|
|
34
|
+
A Python CLI that orchestrates Claude Code end-to-end to generate a whole project from a `requirements.md` file. Five commands — `init`, `optimize`, `generate`, `review`, `status`. Works for any project type: Python CLI, FastAPI, Angular, NestJS, full-stack, finance, BAML/LLM.
|
|
35
35
|
|
|
36
36
|
> **Max subscription only.** This tool uses **exclusively** the Claude Max subscription. It strips every environment variable that could route a call through the API and aborts on startup if any are still present. There is no path to API credit billing — see [Safety constraints](#safety-constraints) below.
|
|
37
37
|
|
|
@@ -68,6 +68,20 @@ code-generator init --template fastapi
|
|
|
68
68
|
$EDITOR .code-generator/requirements.md
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
+
### `code-generator optimize [--dry-run] [--force]`
|
|
72
|
+
|
|
73
|
+
Pre-flight rewrite of `.code-generator/requirements.md` into the canonical structure the orchestrator expects: `# Title` → `## Description` → `## Tech Stack` → `## Goals` → `## Scope` (numbered `### N.` subsections with per-section `Acceptance criteria` checklists) → `## Non-goals` → `## Constraints` → `## Global acceptance criteria`.
|
|
74
|
+
|
|
75
|
+
Runs a single Opus 4.6 session with a dedicated prompt, preserves the original intent verbatim when ambiguous (never invents new scope), and writes the rewrite back to disk atomically. The pre-optimize original is saved to `.code-generator/requirements.backup-<UTC-timestamp>.md` so you can always `diff` and recover. The command is stateless — it never reads or writes `state.json` and never calls `gh`.
|
|
76
|
+
|
|
77
|
+
Short-circuits and exits 0 if the file is already canonical. Use `--force` to re-optimize anyway. Use `--dry-run` to print the proposed rewrite to stdout without touching the file or creating a backup.
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
code-generator optimize --dry-run # preview
|
|
81
|
+
code-generator optimize # commit the rewrite
|
|
82
|
+
code-generator generate # then run the pipeline
|
|
83
|
+
```
|
|
84
|
+
|
|
71
85
|
### `code-generator generate [flags]`
|
|
72
86
|
|
|
73
87
|
Read `.code-generator/requirements.md` and orchestrate Claude Code through the 0→7 phase pipeline:
|
|
@@ -155,7 +169,7 @@ src/code_generator/
|
|
|
155
169
|
│ ├── phase6_test.py # test runner, max 3 retries
|
|
156
170
|
│ ├── phase7_commit.py # Opus commit message + push with rebase retry
|
|
157
171
|
│ └── cycle_loop.py # multi-cycle driver
|
|
158
|
-
└── commands/ # init, status, generate, review (Typer commands)
|
|
172
|
+
└── commands/ # init, optimize, status, generate, review (Typer commands)
|
|
159
173
|
```
|
|
160
174
|
|
|
161
175
|
## Development
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# code-generator
|
|
2
2
|
|
|
3
|
-
A Python CLI that orchestrates Claude Code end-to-end to generate a whole project from a `requirements.md` file.
|
|
3
|
+
A Python CLI that orchestrates Claude Code end-to-end to generate a whole project from a `requirements.md` file. Five commands — `init`, `optimize`, `generate`, `review`, `status`. Works for any project type: Python CLI, FastAPI, Angular, NestJS, full-stack, finance, BAML/LLM.
|
|
4
4
|
|
|
5
5
|
> **Max subscription only.** This tool uses **exclusively** the Claude Max subscription. It strips every environment variable that could route a call through the API and aborts on startup if any are still present. There is no path to API credit billing — see [Safety constraints](#safety-constraints) below.
|
|
6
6
|
|
|
@@ -37,6 +37,20 @@ code-generator init --template fastapi
|
|
|
37
37
|
$EDITOR .code-generator/requirements.md
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
+
### `code-generator optimize [--dry-run] [--force]`
|
|
41
|
+
|
|
42
|
+
Pre-flight rewrite of `.code-generator/requirements.md` into the canonical structure the orchestrator expects: `# Title` → `## Description` → `## Tech Stack` → `## Goals` → `## Scope` (numbered `### N.` subsections with per-section `Acceptance criteria` checklists) → `## Non-goals` → `## Constraints` → `## Global acceptance criteria`.
|
|
43
|
+
|
|
44
|
+
Runs a single Opus 4.6 session with a dedicated prompt, preserves the original intent verbatim when ambiguous (never invents new scope), and writes the rewrite back to disk atomically. The pre-optimize original is saved to `.code-generator/requirements.backup-<UTC-timestamp>.md` so you can always `diff` and recover. The command is stateless — it never reads or writes `state.json` and never calls `gh`.
|
|
45
|
+
|
|
46
|
+
Short-circuits and exits 0 if the file is already canonical. Use `--force` to re-optimize anyway. Use `--dry-run` to print the proposed rewrite to stdout without touching the file or creating a backup.
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
code-generator optimize --dry-run # preview
|
|
50
|
+
code-generator optimize # commit the rewrite
|
|
51
|
+
code-generator generate # then run the pipeline
|
|
52
|
+
```
|
|
53
|
+
|
|
40
54
|
### `code-generator generate [flags]`
|
|
41
55
|
|
|
42
56
|
Read `.code-generator/requirements.md` and orchestrate Claude Code through the 0→7 phase pipeline:
|
|
@@ -124,7 +138,7 @@ src/code_generator/
|
|
|
124
138
|
│ ├── phase6_test.py # test runner, max 3 retries
|
|
125
139
|
│ ├── phase7_commit.py # Opus commit message + push with rebase retry
|
|
126
140
|
│ └── cycle_loop.py # multi-cycle driver
|
|
127
|
-
└── commands/ # init, status, generate, review (Typer commands)
|
|
141
|
+
└── commands/ # init, optimize, status, generate, review (Typer commands)
|
|
128
142
|
```
|
|
129
143
|
|
|
130
144
|
## Development
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "claude-code-generator"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.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" }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-code-generator
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.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
|
|
@@ -31,7 +31,7 @@ Dynamic: license-file
|
|
|
31
31
|
|
|
32
32
|
# code-generator
|
|
33
33
|
|
|
34
|
-
A Python CLI that orchestrates Claude Code end-to-end to generate a whole project from a `requirements.md` file.
|
|
34
|
+
A Python CLI that orchestrates Claude Code end-to-end to generate a whole project from a `requirements.md` file. Five commands — `init`, `optimize`, `generate`, `review`, `status`. Works for any project type: Python CLI, FastAPI, Angular, NestJS, full-stack, finance, BAML/LLM.
|
|
35
35
|
|
|
36
36
|
> **Max subscription only.** This tool uses **exclusively** the Claude Max subscription. It strips every environment variable that could route a call through the API and aborts on startup if any are still present. There is no path to API credit billing — see [Safety constraints](#safety-constraints) below.
|
|
37
37
|
|
|
@@ -68,6 +68,20 @@ code-generator init --template fastapi
|
|
|
68
68
|
$EDITOR .code-generator/requirements.md
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
+
### `code-generator optimize [--dry-run] [--force]`
|
|
72
|
+
|
|
73
|
+
Pre-flight rewrite of `.code-generator/requirements.md` into the canonical structure the orchestrator expects: `# Title` → `## Description` → `## Tech Stack` → `## Goals` → `## Scope` (numbered `### N.` subsections with per-section `Acceptance criteria` checklists) → `## Non-goals` → `## Constraints` → `## Global acceptance criteria`.
|
|
74
|
+
|
|
75
|
+
Runs a single Opus 4.6 session with a dedicated prompt, preserves the original intent verbatim when ambiguous (never invents new scope), and writes the rewrite back to disk atomically. The pre-optimize original is saved to `.code-generator/requirements.backup-<UTC-timestamp>.md` so you can always `diff` and recover. The command is stateless — it never reads or writes `state.json` and never calls `gh`.
|
|
76
|
+
|
|
77
|
+
Short-circuits and exits 0 if the file is already canonical. Use `--force` to re-optimize anyway. Use `--dry-run` to print the proposed rewrite to stdout without touching the file or creating a backup.
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
code-generator optimize --dry-run # preview
|
|
81
|
+
code-generator optimize # commit the rewrite
|
|
82
|
+
code-generator generate # then run the pipeline
|
|
83
|
+
```
|
|
84
|
+
|
|
71
85
|
### `code-generator generate [flags]`
|
|
72
86
|
|
|
73
87
|
Read `.code-generator/requirements.md` and orchestrate Claude Code through the 0→7 phase pipeline:
|
|
@@ -155,7 +169,7 @@ src/code_generator/
|
|
|
155
169
|
│ ├── phase6_test.py # test runner, max 3 retries
|
|
156
170
|
│ ├── phase7_commit.py # Opus commit message + push with rebase retry
|
|
157
171
|
│ └── cycle_loop.py # multi-cycle driver
|
|
158
|
-
└── commands/ # init, status, generate, review (Typer commands)
|
|
172
|
+
└── commands/ # init, optimize, status, generate, review (Typer commands)
|
|
159
173
|
```
|
|
160
174
|
|
|
161
175
|
## Development
|
|
@@ -18,7 +18,7 @@ from code_generator.orchestrator._comments import fetch_formatted_comments
|
|
|
18
18
|
from code_generator.prompts import load_prompt
|
|
19
19
|
from code_generator.runner import rate_limit, retry
|
|
20
20
|
from code_generator.runner.options import make_agent_options
|
|
21
|
-
from code_generator.runner.types import TokenUsage
|
|
21
|
+
from code_generator.runner.types import MaxTurnsExceeded, TokenUsage
|
|
22
22
|
from code_generator.state import get_issues, save_state
|
|
23
23
|
|
|
24
24
|
if TYPE_CHECKING:
|
|
@@ -84,7 +84,7 @@ async def run(
|
|
|
84
84
|
effort=effort_level,
|
|
85
85
|
allowed_tools=["Read", "Bash", "Glob", "Grep"],
|
|
86
86
|
cwd=str(project_dir),
|
|
87
|
-
max_turns=
|
|
87
|
+
max_turns=40,
|
|
88
88
|
)
|
|
89
89
|
|
|
90
90
|
breaker = retry.CircuitBreaker(max_failures=3)
|
|
@@ -103,6 +103,21 @@ async def run(
|
|
|
103
103
|
breaker=breaker,
|
|
104
104
|
)
|
|
105
105
|
issue_usage = result.usage if result is not None else TokenUsage()
|
|
106
|
+
except MaxTurnsExceeded:
|
|
107
|
+
reviewed = False
|
|
108
|
+
logger.error(
|
|
109
|
+
"Phase 2: issue #%d hit max_turns ceiling"
|
|
110
|
+
" — no retry (deterministic failure), tagging for manual review.",
|
|
111
|
+
issue.number,
|
|
112
|
+
)
|
|
113
|
+
try:
|
|
114
|
+
gh.add_label(issue.number, "needs-manual-review")
|
|
115
|
+
except gh.GhError as exc:
|
|
116
|
+
logger.warning(
|
|
117
|
+
"Could not add needs-manual-review label to #%d: %s",
|
|
118
|
+
issue.number,
|
|
119
|
+
exc,
|
|
120
|
+
)
|
|
106
121
|
except retry.CircuitOpen:
|
|
107
122
|
reviewed = False
|
|
108
123
|
logger.error(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/commands/__init__.py
RENAMED
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/commands/_detect.py
RENAMED
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/commands/_dispatch.py
RENAMED
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/commands/_resume.py
RENAMED
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/commands/generate.py
RENAMED
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/commands/init.py
RENAMED
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/commands/optimize.py
RENAMED
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/commands/review.py
RENAMED
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/commands/status.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/gh/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/gh/milestones.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/logging_setup.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/prompts/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/runner/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/runner/options.py
RENAMED
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/runner/protocol.py
RENAMED
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/runner/rate_limit.py
RENAMED
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/runner/retry.py
RENAMED
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/runner/sdk_runner.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/runner/types.py
RENAMED
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/runner/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/templates/__init__.py
RENAMED
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/templates/angular.md
RENAMED
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/templates/base.md
RENAMED
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/templates/fastapi.md
RENAMED
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/templates/finance.md
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/src/code_generator/templates/nestjs.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_cycle_loop_multicycle.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_phase_token_logging.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.2.0 → claude_code_generator-0.2.1}/tests/test_requirements_structure.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|