claude-code-generator 0.4.0__tar.gz → 0.4.2__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.4.0/src/claude_code_generator.egg-info → claude_code_generator-0.4.2}/PKG-INFO +1 -1
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/pyproject.toml +1 -1
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2/src/claude_code_generator.egg-info}/PKG-INFO +1 -1
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/__init__.py +1 -1
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/effort.py +23 -14
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/orchestrator/_client_lifecycle.py +6 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/orchestrator/phase2_review.py +3 -3
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/orchestrator/phase3_4_implement.py +2 -1
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/orchestrator/phase5_closure.py +1 -1
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_effort.py +18 -5
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/LICENSE +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/README.md +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/setup.cfg +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/claude_code_generator.egg-info/SOURCES.txt +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/claude_code_generator.egg-info/dependency_links.txt +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/claude_code_generator.egg-info/entry_points.txt +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/claude_code_generator.egg-info/requires.txt +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/claude_code_generator.egg-info/top_level.txt +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/agents.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/cli.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/__init__.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/_bench_io.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/_crash_recovery.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/_detect.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/_dispatch.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/_resume.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/_validators.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/bench.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/bench_compare.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/bench_export.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/generate.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/init.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/optimize.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/review.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/status.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/env.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/gh/__init__.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/gh/core.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/gh/issues.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/gh/labels.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/gh/milestones.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/git_ops.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/logging_setup.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/memory.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/orchestrator/__init__.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/orchestrator/_comments.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/orchestrator/_memory_writers.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/orchestrator/_phase5_precommit.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/orchestrator/cycle_loop.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/orchestrator/phase0_complexity.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/orchestrator/phase1_plan.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/orchestrator/phase6_test.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/orchestrator/phase7_commit.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/preflight.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/prompts/__init__.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/prompts/hashes.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/prompts/prompt-optimize-requirements.md +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/prompts/prompt-phase-0-complexity.md +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/prompts/prompt-phase-1-planning.md +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/prompts/prompt-phase-2-issue-review.md +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/prompts/prompt-phase-3-implementation.md +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/prompts/prompt-phase-5-final-review.md +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/prompts/prompt-phase-6-test.md +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/prompts/prompt-phase-7-commit.md +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/prompts/prompt-review.md +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/repo_info.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/repomap.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/requirements_structure.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/__init__.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/_telemetry.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/batch.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/fake_runner.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/mcp.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/message_parsing.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/options.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/protocol.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/rate_limit.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/retry.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/sdk_runner.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/soft_reset.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/state_guard.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/subprocess_runner.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/types.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/utils.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/state.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/state_retention.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/templates/__init__.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/templates/angular.md +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/templates/base.md +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/templates/fastapi.md +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/templates/finance.md +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/templates/fullstack.md +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/templates/nestjs.md +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/templates/python-cli.md +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_agents.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_bench.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_bench_compare.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_bench_export.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_bench_fixture.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_bench_regression.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_changelog.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_claude_md.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_client_lifecycle.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_comments.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_commit_message.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_crash_recovery.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_cycle_loop.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_cycle_loop_multicycle.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_delta_planning.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_dependencies.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_detect.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_docs_no_default_max_turns.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_env.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_generate.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_generate_resume.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_gh.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_gh_labels.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_gh_milestones.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_gh_repo_threading.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_gh_submodules.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_git_ops.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_init.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_logging_setup.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_max_turns_cli_flag.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_mcp.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_memory.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_memory_writers.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_message_parsing.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_no_max_turns_in_call_sites.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_no_max_turns_literal.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_non_goals_grep_guard.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_optimize.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_options.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_phase0.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_phase1.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_phase2.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_phase2_batch.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_phase3_4.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_phase5.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_phase5_precommit.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_phase6.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_phase7.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_phase_mcp_regression.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_phase_token_logging.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_preflight.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_prompt_drift.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_prompt_prefix_snapshots.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_prompt_prefix_stability.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_prompts.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_rate_limit.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_repo_info.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_repomap.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_requirements_structure.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_retry.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_review.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_runner_protocol.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_runner_protocol_annotations.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_runner_types.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_runner_utils.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_sdk_runner.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_sdk_runner_shared.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_session_mode.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_state.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_state_guard.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_state_retention.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_status.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_subprocess_runner.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_telemetry.py +0 -0
- {claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_version.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "claude-code-generator"
|
|
7
|
-
version = "0.4.
|
|
7
|
+
version = "0.4.2"
|
|
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" }
|
|
@@ -26,7 +26,7 @@ if TYPE_CHECKING:
|
|
|
26
26
|
# Public types
|
|
27
27
|
# ---------------------------------------------------------------------------
|
|
28
28
|
|
|
29
|
-
EffortLiteral = Literal["low", "medium", "high", "max"]
|
|
29
|
+
EffortLiteral = Literal["low", "medium", "high", "xhigh", "max"]
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
class InvalidEffortInput(ValueError):
|
|
@@ -45,6 +45,7 @@ class EffortLevel(StrEnum):
|
|
|
45
45
|
LOW = "low"
|
|
46
46
|
MEDIUM = "medium"
|
|
47
47
|
HIGH = "high"
|
|
48
|
+
XHIGH = "xhigh"
|
|
48
49
|
MAX = "max"
|
|
49
50
|
|
|
50
51
|
|
|
@@ -53,14 +54,14 @@ class EffortLevel(StrEnum):
|
|
|
53
54
|
# ---------------------------------------------------------------------------
|
|
54
55
|
|
|
55
56
|
_BASELINE: dict[int, EffortLevel] = {
|
|
56
|
-
0: EffortLevel.
|
|
57
|
-
1: EffortLevel.
|
|
58
|
-
2: EffortLevel.
|
|
59
|
-
3: EffortLevel.MEDIUM, # implement (lower bound of 3+4 combined)
|
|
60
|
-
4: EffortLevel.MEDIUM, # implement (upper bound of 3+4 combined)
|
|
61
|
-
5: EffortLevel.
|
|
62
|
-
6: EffortLevel.LOW, # tests (escalated by retry_count)
|
|
63
|
-
7: EffortLevel.LOW, # commit
|
|
57
|
+
0: EffortLevel.XHIGH, # complexity analysis + cycle decomposition (architectural)
|
|
58
|
+
1: EffortLevel.XHIGH, # plan
|
|
59
|
+
2: EffortLevel.XHIGH, # review
|
|
60
|
+
3: EffortLevel.MEDIUM, # implement (lower bound of 3+4 combined; Sonnet)
|
|
61
|
+
4: EffortLevel.MEDIUM, # implement (upper bound of 3+4 combined; Sonnet)
|
|
62
|
+
5: EffortLevel.XHIGH, # closure (cross-module review)
|
|
63
|
+
6: EffortLevel.LOW, # tests (Sonnet; escalated by retry_count)
|
|
64
|
+
7: EffortLevel.LOW, # commit (mechanical, Opus)
|
|
64
65
|
}
|
|
65
66
|
|
|
66
67
|
_COMPLEXITY_HIGH_LABEL = "complexity:high"
|
|
@@ -96,19 +97,27 @@ def _test_effort(retry_count: int) -> EffortLevel:
|
|
|
96
97
|
_OPUS_MODEL = "claude-opus-4-7"
|
|
97
98
|
|
|
98
99
|
|
|
100
|
+
_OPUS_ONLY_EFFORTS: frozenset[str] = frozenset({"xhigh", "max"})
|
|
101
|
+
|
|
102
|
+
|
|
99
103
|
def validate_effort(effort: str | None, model: str) -> None:
|
|
100
|
-
"""Raise ValueError when
|
|
104
|
+
"""Raise ValueError when an Opus-only effort is paired with a non-Opus model.
|
|
105
|
+
|
|
106
|
+
``xhigh`` and ``max`` are gated to Opus 4.7+ (introduced in 4.7); Sonnet
|
|
107
|
+
and Haiku do not expose them.
|
|
101
108
|
|
|
102
109
|
Parameters
|
|
103
110
|
----------
|
|
104
111
|
effort:
|
|
105
|
-
Effort level string (``"low"`` / ``"medium"`` / ``"high"`` / ``"
|
|
106
|
-
or ``None`` (no-op).
|
|
112
|
+
Effort level string (``"low"`` / ``"medium"`` / ``"high"`` / ``"xhigh"``
|
|
113
|
+
/ ``"max"``), or ``None`` (no-op).
|
|
107
114
|
model:
|
|
108
115
|
Anthropic model ID (e.g. ``"claude-opus-4-7"``).
|
|
109
116
|
"""
|
|
110
|
-
if effort
|
|
111
|
-
raise ValueError(
|
|
117
|
+
if effort in _OPUS_ONLY_EFFORTS and model != _OPUS_MODEL:
|
|
118
|
+
raise ValueError(
|
|
119
|
+
f"effort={effort!r} is only allowed with {_OPUS_MODEL!r}, got {model!r}."
|
|
120
|
+
)
|
|
112
121
|
|
|
113
122
|
|
|
114
123
|
def resolve_effort(
|
|
@@ -41,6 +41,12 @@ _SHARED_CLIENT_ALLOWED_TOOLS: tuple[str, ...] = (
|
|
|
41
41
|
"Bash",
|
|
42
42
|
"Glob",
|
|
43
43
|
"Grep",
|
|
44
|
+
# Web access — Phase 3/4 prompt instructs the model to consult upstream
|
|
45
|
+
# docs for unfamiliar libraries before guessing. WebFetch is sandboxed by
|
|
46
|
+
# the API: it can only retrieve URLs already in conversation context (no
|
|
47
|
+
# arbitrary model-generated URLs), which closes the exfiltration vector.
|
|
48
|
+
"WebSearch",
|
|
49
|
+
"WebFetch",
|
|
44
50
|
)
|
|
45
51
|
|
|
46
52
|
# Guard SDK import so this module can be loaded without the SDK installed
|
|
@@ -169,7 +169,7 @@ async def run_batch(
|
|
|
169
169
|
warmup_options = make_agent_options(
|
|
170
170
|
model="claude-opus-4-7",
|
|
171
171
|
effort=effort_level,
|
|
172
|
-
allowed_tools=["Read", "Bash", "Glob", "Grep"] + mcp_tools,
|
|
172
|
+
allowed_tools=["Read", "Bash", "Glob", "Grep", "WebSearch", "WebFetch"] + mcp_tools,
|
|
173
173
|
cwd=str(project_dir),
|
|
174
174
|
mcp_servers=mcp_servers,
|
|
175
175
|
context_management=None,
|
|
@@ -419,7 +419,7 @@ async def _run_fallback_review(
|
|
|
419
419
|
options = make_agent_options(
|
|
420
420
|
model="claude-opus-4-7",
|
|
421
421
|
effort=effort_level,
|
|
422
|
-
allowed_tools=["Read", "Bash", "Glob", "Grep"] + mcp_tools,
|
|
422
|
+
allowed_tools=["Read", "Bash", "Glob", "Grep", "WebSearch", "WebFetch"] + mcp_tools,
|
|
423
423
|
cwd=str(project_dir),
|
|
424
424
|
mcp_servers=mcp_servers,
|
|
425
425
|
context_management=None,
|
|
@@ -579,7 +579,7 @@ async def run(
|
|
|
579
579
|
options = make_agent_options(
|
|
580
580
|
model="claude-opus-4-7",
|
|
581
581
|
effort=effort_level,
|
|
582
|
-
allowed_tools=["Read", "Bash", "Glob", "Grep"] + mcp_tools,
|
|
582
|
+
allowed_tools=["Read", "Bash", "Glob", "Grep", "WebSearch", "WebFetch"] + mcp_tools,
|
|
583
583
|
cwd=str(project_dir),
|
|
584
584
|
mcp_servers=mcp_servers,
|
|
585
585
|
context_management=cm_block,
|
|
@@ -242,7 +242,8 @@ async def _implement_single_issue(
|
|
|
242
242
|
options = make_agent_options(
|
|
243
243
|
model="claude-sonnet-4-6",
|
|
244
244
|
effort=effort_level,
|
|
245
|
-
allowed_tools=["Read", "Edit", "Write", "Bash", "Glob", "Grep"
|
|
245
|
+
allowed_tools=["Read", "Edit", "Write", "Bash", "Glob", "Grep", "WebSearch", "WebFetch"]
|
|
246
|
+
+ mcp_tools,
|
|
246
247
|
cwd=str(project_dir),
|
|
247
248
|
mcp_servers=mcp_servers,
|
|
248
249
|
context_management_enabled=True,
|
|
@@ -338,7 +338,7 @@ async def run(
|
|
|
338
338
|
options = make_agent_options(
|
|
339
339
|
model="claude-opus-4-7",
|
|
340
340
|
effort=effort_level,
|
|
341
|
-
allowed_tools=["Read", "Bash", "Glob", "Grep"] + mcp_tools,
|
|
341
|
+
allowed_tools=["Read", "Bash", "Glob", "Grep", "WebSearch", "WebFetch"] + mcp_tools,
|
|
342
342
|
cwd=str(project_dir),
|
|
343
343
|
mcp_servers=mcp_servers,
|
|
344
344
|
**max_turns_kwargs(max_turns),
|
|
@@ -17,10 +17,10 @@ from code_generator.effort import EffortLevel, InvalidEffortInput, resolve_effor
|
|
|
17
17
|
@pytest.mark.parametrize(
|
|
18
18
|
("phase", "expected"),
|
|
19
19
|
[
|
|
20
|
-
(0, EffortLevel.
|
|
21
|
-
(1, EffortLevel.
|
|
22
|
-
(2, EffortLevel.
|
|
23
|
-
(5, EffortLevel.
|
|
20
|
+
(0, EffortLevel.XHIGH),
|
|
21
|
+
(1, EffortLevel.XHIGH),
|
|
22
|
+
(2, EffortLevel.XHIGH),
|
|
23
|
+
(5, EffortLevel.XHIGH),
|
|
24
24
|
(3, EffortLevel.MEDIUM),
|
|
25
25
|
(4, EffortLevel.MEDIUM),
|
|
26
26
|
(7, EffortLevel.LOW),
|
|
@@ -128,7 +128,7 @@ def test_effort_hint_none_does_not_override() -> None:
|
|
|
128
128
|
result = resolve_effort(
|
|
129
129
|
phase=0, complexity="low", issue_labels=[], retry_count=0, effort_hint=None
|
|
130
130
|
)
|
|
131
|
-
assert result == EffortLevel.
|
|
131
|
+
assert result == EffortLevel.XHIGH
|
|
132
132
|
|
|
133
133
|
|
|
134
134
|
# ---------------------------------------------------------------------------
|
|
@@ -141,6 +141,7 @@ def test_effort_level_string_values() -> None:
|
|
|
141
141
|
assert EffortLevel.LOW == "low"
|
|
142
142
|
assert EffortLevel.MEDIUM == "medium"
|
|
143
143
|
assert EffortLevel.HIGH == "high"
|
|
144
|
+
assert EffortLevel.XHIGH == "xhigh"
|
|
144
145
|
assert EffortLevel.MAX == "max"
|
|
145
146
|
|
|
146
147
|
|
|
@@ -165,6 +166,11 @@ def test_validate_effort_max_with_opus_passes() -> None:
|
|
|
165
166
|
validate_effort("max", "claude-opus-4-7") # must not raise
|
|
166
167
|
|
|
167
168
|
|
|
169
|
+
def test_validate_effort_xhigh_with_opus_passes() -> None:
|
|
170
|
+
"""xhigh effort is allowed for claude-opus-4-7 (introduced in 4.7)."""
|
|
171
|
+
validate_effort("xhigh", "claude-opus-4-7") # must not raise
|
|
172
|
+
|
|
173
|
+
|
|
168
174
|
@pytest.mark.parametrize("model", ["claude-sonnet-4-6", "claude-haiku-4-5"])
|
|
169
175
|
def test_validate_effort_max_with_non_opus_raises(model: str) -> None:
|
|
170
176
|
"""max effort raises ValueError for Sonnet and Haiku models."""
|
|
@@ -172,6 +178,13 @@ def test_validate_effort_max_with_non_opus_raises(model: str) -> None:
|
|
|
172
178
|
validate_effort("max", model)
|
|
173
179
|
|
|
174
180
|
|
|
181
|
+
@pytest.mark.parametrize("model", ["claude-sonnet-4-6", "claude-haiku-4-5"])
|
|
182
|
+
def test_validate_effort_xhigh_with_non_opus_raises(model: str) -> None:
|
|
183
|
+
"""xhigh effort raises ValueError for Sonnet and Haiku models."""
|
|
184
|
+
with pytest.raises(ValueError, match="xhigh"):
|
|
185
|
+
validate_effort("xhigh", model)
|
|
186
|
+
|
|
187
|
+
|
|
175
188
|
@pytest.mark.parametrize(
|
|
176
189
|
("effort", "model"),
|
|
177
190
|
[
|
|
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.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/__init__.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/_bench_io.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/_detect.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/_dispatch.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/_resume.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/bench.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/generate.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/init.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/optimize.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/review.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/commands/status.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/gh/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/gh/milestones.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/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
|
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/prompts/__init__.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/prompts/hashes.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
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/__init__.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/_telemetry.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/batch.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/fake_runner.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/mcp.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/options.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/protocol.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/rate_limit.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/retry.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/sdk_runner.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/soft_reset.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/state_guard.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/types.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/runner/utils.py
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/state_retention.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/templates/__init__.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/templates/angular.md
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/templates/base.md
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/templates/fastapi.md
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/src/code_generator/templates/finance.md
RENAMED
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/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
|
|
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.4.0 → claude_code_generator-0.4.2}/tests/test_cycle_loop_multicycle.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_docs_no_default_max_turns.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
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_max_turns_cli_flag.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_no_max_turns_in_call_sites.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_no_max_turns_literal.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_non_goals_grep_guard.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
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_phase_mcp_regression.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_phase_token_logging.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_prompt_prefix_snapshots.py
RENAMED
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/tests/test_prompt_prefix_stability.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{claude_code_generator-0.4.0 → claude_code_generator-0.4.2}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|